Skip to content

Commit cdc5c11

Browse files
q2venkuba-moo
authored andcommitted
ipv6: Hold rtnl_net_lock() in addrconf_init() and addrconf_cleanup().
addrconf_init() holds RTNL for blackhole_netdev, which is the global device in init_net. addrconf_cleanup() holds RTNL to clean up devices in init_net too. Let's use rtnl_net_lock(&init_net) there. Signed-off-by: Kuniyuki Iwashima <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Jakub Kicinski <[email protected]>
1 parent 02cdd78 commit cdc5c11

File tree

1 file changed

+5
-5
lines changed

1 file changed

+5
-5
lines changed

net/ipv6/addrconf.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7460,9 +7460,9 @@ int __init addrconf_init(void)
74607460
goto out_nowq;
74617461
}
74627462

7463-
rtnl_lock();
7463+
rtnl_net_lock(&init_net);
74647464
idev = ipv6_add_dev(blackhole_netdev);
7465-
rtnl_unlock();
7465+
rtnl_net_unlock(&init_net);
74667466
if (IS_ERR(idev)) {
74677467
err = PTR_ERR(idev);
74687468
goto errlo;
@@ -7512,17 +7512,17 @@ void addrconf_cleanup(void)
75127512

75137513
rtnl_af_unregister(&inet6_ops);
75147514

7515-
rtnl_lock();
7515+
rtnl_net_lock(&init_net);
75167516

75177517
/* clean dev list */
75187518
for_each_netdev(&init_net, dev) {
7519-
if (__in6_dev_get(dev) == NULL)
7519+
if (!__in6_dev_get_rtnl_net(dev))
75207520
continue;
75217521
addrconf_ifdown(dev, true);
75227522
}
75237523
addrconf_ifdown(init_net.loopback_dev, true);
75247524

7525-
rtnl_unlock();
7525+
rtnl_net_unlock(&init_net);
75267526

75277527
destroy_workqueue(addrconf_wq);
75287528
}

0 commit comments

Comments
 (0)