Skip to content

Commit f760b87

Browse files
committed
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Pull networking fixes from David Miller: 1) Missing list head init in bluetooth hidp session creation, from Tedd Ho-Jeong An. 2) Don't leak SKB in bridge netfilter error paths, from Florian Westphal. 3) ipv6 netdevice private leak in netfilter bridging, fixed by Julien Grall. 4) Fix regression in IP over hamradio bpq encapsulation, from Ralf Baechle. 5) Fix race between rhashtable resize events and table walks, from Phil Sutter. 6) Missing validation of IFLA_VF_INFO netlink attributes, fix from Daniel Borkmann. 7) Missing security layer socket state initialization in tipc code, from Stephen Smalley. 8) Fix shared IRQ handling in boomerang 3c59x interrupt handler, from Denys Vlasenko. 9) Missing minor_idr destroy on module unload on macvtap driver, from Johannes Thumshirn. 10) Various pktgen kernel thread races, from Oleg Nesterov. 11) Fix races that can cause packets to be processed in the backlog even after a device attached to that SKB has been fully unregistered. From Julian Anastasov. 12) bcmgenet driver doesn't account packet drops vs. errors properly, fix from Petri Gynther. 13) Array index validation and off by one fix in DSA layer from Florian Fainelli * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net: (66 commits) can: replace timestamp as unique skb attribute ARM: dts: dra7x-evm: Prevent glitch on DCAN1 pinmux can: c_can: Fix default pinmux glitch at init can: rcar_can: unify error messages can: rcar_can: print request_irq() error code can: rcar_can: fix typo in error message can: rcar_can: print signed IRQ # can: rcar_can: fix IRQ check net: dsa: Fix off-by-one in switch address parsing net: dsa: Test array index before use net: switchdev: don't abort unsupported operations net: bcmgenet: fix accounting of packet drops vs errors cdc_ncm: update specs URL Doc: z8530book: Fix typo in API-z8530-sync-txdma-open.html net: inet_diag: always export IPV6_V6ONLY sockopt for listening sockets bridge: mdb: allow the user to delete mdb entry if there's a querier net: call rcu_read_lock early in process_backlog net: do not process device backlog during unregistration bridge: fix potential crash in __netdev_pick_tx() net: axienet: Fix devm_ioremap_resource return value check ...
2 parents 34bef46 + cee9f6d commit f760b87

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

66 files changed

+702
-394
lines changed

MAINTAINERS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7019,6 +7019,7 @@ F: include/uapi/linux/netfilter/
70197019
F: net/*/netfilter.c
70207020
F: net/*/netfilter/
70217021
F: net/netfilter/
7022+
F: net/bridge/br_netfilter*.c
70227023

70237024
NETLABEL
70247025
M: Paul Moore <paul@paul-moore.com>

arch/arm/boot/dts/dra7-evm.dts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -686,7 +686,8 @@
686686

687687
&dcan1 {
688688
status = "ok";
689-
pinctrl-names = "default", "sleep";
690-
pinctrl-0 = <&dcan1_pins_default>;
689+
pinctrl-names = "default", "sleep", "active";
690+
pinctrl-0 = <&dcan1_pins_sleep>;
691691
pinctrl-1 = <&dcan1_pins_sleep>;
692+
pinctrl-2 = <&dcan1_pins_default>;
692693
};

arch/arm/boot/dts/dra72-evm.dts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -587,9 +587,10 @@
587587

588588
&dcan1 {
589589
status = "ok";
590-
pinctrl-names = "default", "sleep";
591-
pinctrl-0 = <&dcan1_pins_default>;
590+
pinctrl-names = "default", "sleep", "active";
591+
pinctrl-0 = <&dcan1_pins_sleep>;
592592
pinctrl-1 = <&dcan1_pins_sleep>;
593+
pinctrl-2 = <&dcan1_pins_default>;
593594
};
594595

595596
&qspi {

drivers/net/bonding/bond_main.c

Lines changed: 34 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -689,40 +689,57 @@ static void bond_do_fail_over_mac(struct bonding *bond,
689689

690690
}
691691

692-
static bool bond_should_change_active(struct bonding *bond)
692+
static struct slave *bond_choose_primary_or_current(struct bonding *bond)
693693
{
694694
struct slave *prim = rtnl_dereference(bond->primary_slave);
695695
struct slave *curr = rtnl_dereference(bond->curr_active_slave);
696696

697-
if (!prim || !curr || curr->link != BOND_LINK_UP)
698-
return true;
697+
if (!prim || prim->link != BOND_LINK_UP) {
698+
if (!curr || curr->link != BOND_LINK_UP)
699+
return NULL;
700+
return curr;
701+
}
702+
699703
if (bond->force_primary) {
700704
bond->force_primary = false;
701-
return true;
705+
return prim;
706+
}
707+
708+
if (!curr || curr->link != BOND_LINK_UP)
709+
return prim;
710+
711+
/* At this point, prim and curr are both up */
712+
switch (bond->params.primary_reselect) {
713+
case BOND_PRI_RESELECT_ALWAYS:
714+
return prim;
715+
case BOND_PRI_RESELECT_BETTER:
716+
if (prim->speed < curr->speed)
717+
return curr;
718+
if (prim->speed == curr->speed && prim->duplex <= curr->duplex)
719+
return curr;
720+
return prim;
721+
case BOND_PRI_RESELECT_FAILURE:
722+
return curr;
723+
default:
724+
netdev_err(bond->dev, "impossible primary_reselect %d\n",
725+
bond->params.primary_reselect);
726+
return curr;
702727
}
703-
if (bond->params.primary_reselect == BOND_PRI_RESELECT_BETTER &&
704-
(prim->speed < curr->speed ||
705-
(prim->speed == curr->speed && prim->duplex <= curr->duplex)))
706-
return false;
707-
if (bond->params.primary_reselect == BOND_PRI_RESELECT_FAILURE)
708-
return false;
709-
return true;
710728
}
711729

712730
/**
713-
* find_best_interface - select the best available slave to be the active one
731+
* bond_find_best_slave - select the best available slave to be the active one
714732
* @bond: our bonding struct
715733
*/
716734
static struct slave *bond_find_best_slave(struct bonding *bond)
717735
{
718-
struct slave *slave, *bestslave = NULL, *primary;
736+
struct slave *slave, *bestslave = NULL;
719737
struct list_head *iter;
720738
int mintime = bond->params.updelay;
721739

722-
primary = rtnl_dereference(bond->primary_slave);
723-
if (primary && primary->link == BOND_LINK_UP &&
724-
bond_should_change_active(bond))
725-
return primary;
740+
slave = bond_choose_primary_or_current(bond);
741+
if (slave)
742+
return slave;
726743

727744
bond_for_each_slave(bond, slave, iter) {
728745
if (slave->link == BOND_LINK_UP)

drivers/net/can/c_can/c_can.c

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -592,6 +592,7 @@ static int c_can_start(struct net_device *dev)
592592
{
593593
struct c_can_priv *priv = netdev_priv(dev);
594594
int err;
595+
struct pinctrl *p;
595596

596597
/* basic c_can configuration */
597598
err = c_can_chip_config(dev);
@@ -604,8 +605,13 @@ static int c_can_start(struct net_device *dev)
604605

605606
priv->can.state = CAN_STATE_ERROR_ACTIVE;
606607

607-
/* activate pins */
608-
pinctrl_pm_select_default_state(dev->dev.parent);
608+
/* Attempt to use "active" if available else use "default" */
609+
p = pinctrl_get_select(priv->device, "active");
610+
if (!IS_ERR(p))
611+
pinctrl_put(p);
612+
else
613+
pinctrl_pm_select_default_state(priv->device);
614+
609615
return 0;
610616
}
611617

drivers/net/can/dev.c

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -440,9 +440,6 @@ unsigned int can_get_echo_skb(struct net_device *dev, unsigned int idx)
440440
struct can_frame *cf = (struct can_frame *)skb->data;
441441
u8 dlc = cf->can_dlc;
442442

443-
if (!(skb->tstamp.tv64))
444-
__net_timestamp(skb);
445-
446443
netif_rx(priv->echo_skb[idx]);
447444
priv->echo_skb[idx] = NULL;
448445

@@ -578,7 +575,6 @@ struct sk_buff *alloc_can_skb(struct net_device *dev, struct can_frame **cf)
578575
if (unlikely(!skb))
579576
return NULL;
580577

581-
__net_timestamp(skb);
582578
skb->protocol = htons(ETH_P_CAN);
583579
skb->pkt_type = PACKET_BROADCAST;
584580
skb->ip_summed = CHECKSUM_UNNECESSARY;
@@ -589,6 +585,7 @@ struct sk_buff *alloc_can_skb(struct net_device *dev, struct can_frame **cf)
589585

590586
can_skb_reserve(skb);
591587
can_skb_prv(skb)->ifindex = dev->ifindex;
588+
can_skb_prv(skb)->skbcnt = 0;
592589

593590
*cf = (struct can_frame *)skb_put(skb, sizeof(struct can_frame));
594591
memset(*cf, 0, sizeof(struct can_frame));
@@ -607,7 +604,6 @@ struct sk_buff *alloc_canfd_skb(struct net_device *dev,
607604
if (unlikely(!skb))
608605
return NULL;
609606

610-
__net_timestamp(skb);
611607
skb->protocol = htons(ETH_P_CANFD);
612608
skb->pkt_type = PACKET_BROADCAST;
613609
skb->ip_summed = CHECKSUM_UNNECESSARY;
@@ -618,6 +614,7 @@ struct sk_buff *alloc_canfd_skb(struct net_device *dev,
618614

619615
can_skb_reserve(skb);
620616
can_skb_prv(skb)->ifindex = dev->ifindex;
617+
can_skb_prv(skb)->skbcnt = 0;
621618

622619
*cfd = (struct canfd_frame *)skb_put(skb, sizeof(struct canfd_frame));
623620
memset(*cfd, 0, sizeof(struct canfd_frame));

drivers/net/can/rcar_can.c

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -508,7 +508,8 @@ static int rcar_can_open(struct net_device *ndev)
508508

509509
err = clk_prepare_enable(priv->clk);
510510
if (err) {
511-
netdev_err(ndev, "failed to enable periperal clock, error %d\n",
511+
netdev_err(ndev,
512+
"failed to enable peripheral clock, error %d\n",
512513
err);
513514
goto out;
514515
}
@@ -526,7 +527,8 @@ static int rcar_can_open(struct net_device *ndev)
526527
napi_enable(&priv->napi);
527528
err = request_irq(ndev->irq, rcar_can_interrupt, 0, ndev->name, ndev);
528529
if (err) {
529-
netdev_err(ndev, "error requesting interrupt %x\n", ndev->irq);
530+
netdev_err(ndev, "request_irq(%d) failed, error %d\n",
531+
ndev->irq, err);
530532
goto out_close;
531533
}
532534
can_led_event(ndev, CAN_LED_EVENT_OPEN);
@@ -758,8 +760,9 @@ static int rcar_can_probe(struct platform_device *pdev)
758760
}
759761

760762
irq = platform_get_irq(pdev, 0);
761-
if (!irq) {
763+
if (irq < 0) {
762764
dev_err(&pdev->dev, "No IRQ resource\n");
765+
err = irq;
763766
goto fail;
764767
}
765768

@@ -782,7 +785,8 @@ static int rcar_can_probe(struct platform_device *pdev)
782785
priv->clk = devm_clk_get(&pdev->dev, "clkp1");
783786
if (IS_ERR(priv->clk)) {
784787
err = PTR_ERR(priv->clk);
785-
dev_err(&pdev->dev, "cannot get peripheral clock: %d\n", err);
788+
dev_err(&pdev->dev, "cannot get peripheral clock, error %d\n",
789+
err);
786790
goto fail_clk;
787791
}
788792

@@ -794,7 +798,7 @@ static int rcar_can_probe(struct platform_device *pdev)
794798
priv->can_clk = devm_clk_get(&pdev->dev, clock_names[clock_select]);
795799
if (IS_ERR(priv->can_clk)) {
796800
err = PTR_ERR(priv->can_clk);
797-
dev_err(&pdev->dev, "cannot get CAN clock: %d\n", err);
801+
dev_err(&pdev->dev, "cannot get CAN clock, error %d\n", err);
798802
goto fail_clk;
799803
}
800804

@@ -823,7 +827,7 @@ static int rcar_can_probe(struct platform_device *pdev)
823827

824828
devm_can_led_init(ndev);
825829

826-
dev_info(&pdev->dev, "device registered (reg_base=%p, irq=%u)\n",
830+
dev_info(&pdev->dev, "device registered (regs @ %p, IRQ%d)\n",
827831
priv->regs, ndev->irq);
828832

829833
return 0;

drivers/net/can/slcan.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,14 +207,14 @@ static void slc_bump(struct slcan *sl)
207207
if (!skb)
208208
return;
209209

210-
__net_timestamp(skb);
211210
skb->dev = sl->dev;
212211
skb->protocol = htons(ETH_P_CAN);
213212
skb->pkt_type = PACKET_BROADCAST;
214213
skb->ip_summed = CHECKSUM_UNNECESSARY;
215214

216215
can_skb_reserve(skb);
217216
can_skb_prv(skb)->ifindex = sl->dev->ifindex;
217+
can_skb_prv(skb)->skbcnt = 0;
218218

219219
memcpy(skb_put(skb, sizeof(struct can_frame)),
220220
&cf, sizeof(struct can_frame));

drivers/net/can/vcan.c

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,9 +78,6 @@ static void vcan_rx(struct sk_buff *skb, struct net_device *dev)
7878
skb->dev = dev;
7979
skb->ip_summed = CHECKSUM_UNNECESSARY;
8080

81-
if (!(skb->tstamp.tv64))
82-
__net_timestamp(skb);
83-
8481
netif_rx_ni(skb);
8582
}
8683

drivers/net/ethernet/3com/3c59x.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2382,6 +2382,7 @@ boomerang_interrupt(int irq, void *dev_id)
23822382
void __iomem *ioaddr;
23832383
int status;
23842384
int work_done = max_interrupt_work;
2385+
int handled = 0;
23852386

23862387
ioaddr = vp->ioaddr;
23872388

@@ -2400,6 +2401,7 @@ boomerang_interrupt(int irq, void *dev_id)
24002401

24012402
if ((status & IntLatch) == 0)
24022403
goto handler_exit; /* No interrupt: shared IRQs can cause this */
2404+
handled = 1;
24032405

24042406
if (status == 0xffff) { /* h/w no longer present (hotplug)? */
24052407
if (vortex_debug > 1)
@@ -2501,7 +2503,7 @@ boomerang_interrupt(int irq, void *dev_id)
25012503
handler_exit:
25022504
vp->handling_irq = 0;
25032505
spin_unlock(&vp->lock);
2504-
return IRQ_HANDLED;
2506+
return IRQ_RETVAL(handled);
25052507
}
25062508

25072509
static int vortex_rx(struct net_device *dev)

drivers/net/ethernet/amd/xgbe/xgbe-desc.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,8 @@ static void xgbe_set_buffer_data(struct xgbe_buffer_data *bd,
303303
get_page(pa->pages);
304304
bd->pa = *pa;
305305

306-
bd->dma = pa->pages_dma + pa->pages_offset;
306+
bd->dma_base = pa->pages_dma;
307+
bd->dma_off = pa->pages_offset;
307308
bd->dma_len = len;
308309

309310
pa->pages_offset += len;

drivers/net/ethernet/amd/xgbe/xgbe-dev.c

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1110,6 +1110,7 @@ static void xgbe_rx_desc_reset(struct xgbe_prv_data *pdata,
11101110
unsigned int rx_usecs = pdata->rx_usecs;
11111111
unsigned int rx_frames = pdata->rx_frames;
11121112
unsigned int inte;
1113+
dma_addr_t hdr_dma, buf_dma;
11131114

11141115
if (!rx_usecs && !rx_frames) {
11151116
/* No coalescing, interrupt for every descriptor */
@@ -1129,10 +1130,12 @@ static void xgbe_rx_desc_reset(struct xgbe_prv_data *pdata,
11291130
* Set buffer 2 (hi) address to buffer dma address (hi) and
11301131
* set control bits OWN and INTE
11311132
*/
1132-
rdesc->desc0 = cpu_to_le32(lower_32_bits(rdata->rx.hdr.dma));
1133-
rdesc->desc1 = cpu_to_le32(upper_32_bits(rdata->rx.hdr.dma));
1134-
rdesc->desc2 = cpu_to_le32(lower_32_bits(rdata->rx.buf.dma));
1135-
rdesc->desc3 = cpu_to_le32(upper_32_bits(rdata->rx.buf.dma));
1133+
hdr_dma = rdata->rx.hdr.dma_base + rdata->rx.hdr.dma_off;
1134+
buf_dma = rdata->rx.buf.dma_base + rdata->rx.buf.dma_off;
1135+
rdesc->desc0 = cpu_to_le32(lower_32_bits(hdr_dma));
1136+
rdesc->desc1 = cpu_to_le32(upper_32_bits(hdr_dma));
1137+
rdesc->desc2 = cpu_to_le32(lower_32_bits(buf_dma));
1138+
rdesc->desc3 = cpu_to_le32(upper_32_bits(buf_dma));
11361139

11371140
XGMAC_SET_BITS_LE(rdesc->desc3, RX_NORMAL_DESC3, INTE, inte);
11381141

drivers/net/ethernet/amd/xgbe/xgbe-drv.c

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1765,8 +1765,9 @@ static struct sk_buff *xgbe_create_skb(struct xgbe_prv_data *pdata,
17651765
/* Start with the header buffer which may contain just the header
17661766
* or the header plus data
17671767
*/
1768-
dma_sync_single_for_cpu(pdata->dev, rdata->rx.hdr.dma,
1769-
rdata->rx.hdr.dma_len, DMA_FROM_DEVICE);
1768+
dma_sync_single_range_for_cpu(pdata->dev, rdata->rx.hdr.dma_base,
1769+
rdata->rx.hdr.dma_off,
1770+
rdata->rx.hdr.dma_len, DMA_FROM_DEVICE);
17701771

17711772
packet = page_address(rdata->rx.hdr.pa.pages) +
17721773
rdata->rx.hdr.pa.pages_offset;
@@ -1778,8 +1779,11 @@ static struct sk_buff *xgbe_create_skb(struct xgbe_prv_data *pdata,
17781779
len -= copy_len;
17791780
if (len) {
17801781
/* Add the remaining data as a frag */
1781-
dma_sync_single_for_cpu(pdata->dev, rdata->rx.buf.dma,
1782-
rdata->rx.buf.dma_len, DMA_FROM_DEVICE);
1782+
dma_sync_single_range_for_cpu(pdata->dev,
1783+
rdata->rx.buf.dma_base,
1784+
rdata->rx.buf.dma_off,
1785+
rdata->rx.buf.dma_len,
1786+
DMA_FROM_DEVICE);
17831787

17841788
skb_add_rx_frag(skb, skb_shinfo(skb)->nr_frags,
17851789
rdata->rx.buf.pa.pages,
@@ -1945,8 +1949,9 @@ static int xgbe_rx_poll(struct xgbe_channel *channel, int budget)
19451949
if (!skb)
19461950
error = 1;
19471951
} else if (rdesc_len) {
1948-
dma_sync_single_for_cpu(pdata->dev,
1949-
rdata->rx.buf.dma,
1952+
dma_sync_single_range_for_cpu(pdata->dev,
1953+
rdata->rx.buf.dma_base,
1954+
rdata->rx.buf.dma_off,
19501955
rdata->rx.buf.dma_len,
19511956
DMA_FROM_DEVICE);
19521957

drivers/net/ethernet/amd/xgbe/xgbe.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -337,7 +337,8 @@ struct xgbe_buffer_data {
337337
struct xgbe_page_alloc pa;
338338
struct xgbe_page_alloc pa_unmap;
339339

340-
dma_addr_t dma;
340+
dma_addr_t dma_base;
341+
unsigned long dma_off;
341342
unsigned int dma_len;
342343
};
343344

drivers/net/ethernet/broadcom/bcmsysport.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1793,7 +1793,7 @@ static int bcm_sysport_probe(struct platform_device *pdev)
17931793
macaddr = of_get_mac_address(dn);
17941794
if (!macaddr || !is_valid_ether_addr(macaddr)) {
17951795
dev_warn(&pdev->dev, "using random Ethernet MAC\n");
1796-
random_ether_addr(dev->dev_addr);
1796+
eth_hw_addr_random(dev);
17971797
} else {
17981798
ether_addr_copy(dev->dev_addr, macaddr);
17991799
}

0 commit comments

Comments
 (0)