mirror of
https://github.com/torvalds/linux.git
synced 2026-05-22 22:22:08 +02:00
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 <kuniyu@amazon.com> Link: https://patch.msgid.link/20250115080608.28127-6-kuniyu@amazon.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
02cdd78b4e
commit
cdc5c1196e
|
|
@ -7460,9 +7460,9 @@ int __init addrconf_init(void)
|
|||
goto out_nowq;
|
||||
}
|
||||
|
||||
rtnl_lock();
|
||||
rtnl_net_lock(&init_net);
|
||||
idev = ipv6_add_dev(blackhole_netdev);
|
||||
rtnl_unlock();
|
||||
rtnl_net_unlock(&init_net);
|
||||
if (IS_ERR(idev)) {
|
||||
err = PTR_ERR(idev);
|
||||
goto errlo;
|
||||
|
|
@ -7512,17 +7512,17 @@ void addrconf_cleanup(void)
|
|||
|
||||
rtnl_af_unregister(&inet6_ops);
|
||||
|
||||
rtnl_lock();
|
||||
rtnl_net_lock(&init_net);
|
||||
|
||||
/* clean dev list */
|
||||
for_each_netdev(&init_net, dev) {
|
||||
if (__in6_dev_get(dev) == NULL)
|
||||
if (!__in6_dev_get_rtnl_net(dev))
|
||||
continue;
|
||||
addrconf_ifdown(dev, true);
|
||||
}
|
||||
addrconf_ifdown(init_net.loopback_dev, true);
|
||||
|
||||
rtnl_unlock();
|
||||
rtnl_net_unlock(&init_net);
|
||||
|
||||
destroy_workqueue(addrconf_wq);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user