Skip to content

Commit dd263a8

Browse files
idoschdavem330
authored andcommitted
ipv6: blackhole_netdev needs snmp6 counters
Whenever rt6_uncached_list_flush_dev() swaps rt->rt6_idev to the blackhole device, parts of IPv6 stack might still need to increment one SNMP counter. Root cause, patch from Ido, changelog from Eric :) This bug suggests that we need to audit rt->rt6_idev usages and make sure they are properly using RCU protection. Fixes: e5f80fc ("ipv6: give an IPv6 dev to blackhole_netdev") Signed-off-by: Ido Schimmel <[email protected]> Signed-off-by: Eric Dumazet <[email protected]> Reported-by: syzbot <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 7db45f8 commit dd263a8

File tree

1 file changed

+9
-9
lines changed

1 file changed

+9
-9
lines changed

net/ipv6/addrconf.c

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -400,16 +400,16 @@ static struct inet6_dev *ipv6_add_dev(struct net_device *dev)
400400
/* We refer to the device */
401401
dev_hold_track(dev, &ndev->dev_tracker, GFP_KERNEL);
402402

403-
if (dev != blackhole_netdev) {
404-
if (snmp6_alloc_dev(ndev) < 0) {
405-
netdev_dbg(dev, "%s: cannot allocate memory for statistics\n",
406-
__func__);
407-
neigh_parms_release(&nd_tbl, ndev->nd_parms);
408-
dev_put_track(dev, &ndev->dev_tracker);
409-
kfree(ndev);
410-
return ERR_PTR(err);
411-
}
403+
if (snmp6_alloc_dev(ndev) < 0) {
404+
netdev_dbg(dev, "%s: cannot allocate memory for statistics\n",
405+
__func__);
406+
neigh_parms_release(&nd_tbl, ndev->nd_parms);
407+
dev_put_track(dev, &ndev->dev_tracker);
408+
kfree(ndev);
409+
return ERR_PTR(err);
410+
}
412411

412+
if (dev != blackhole_netdev) {
413413
if (snmp6_register_dev(ndev) < 0) {
414414
netdev_dbg(dev, "%s: cannot create /proc/net/dev_snmp6/%s\n",
415415
__func__, dev->name);

0 commit comments

Comments
 (0)