Skip to content

Commit d4c6bfc

Browse files
q2venkuba-moo
authored andcommitted
dev: Use rtnl_net_dev_lock() in unregister_netdev().
The following sequence is basically illegal when dev was fetched without lookup because dev_net(dev) might be different after holding rtnl_net_lock(): net = dev_net(dev); rtnl_net_lock(net); Let's use rtnl_net_dev_lock() in unregister_netdev(). Note that there is no real bug in unregister_netdev() for now because RTNL protects the scope even if dev_net(dev) is changed before/after RTNL. Fixes: 00fb982 ("dev: Hold per-netns RTNL in (un)?register_netdev().") Signed-off-by: Kuniyuki Iwashima <[email protected]> Reviewed-by: Eric Dumazet <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Jakub Kicinski <[email protected]>
1 parent 65161fb commit d4c6bfc

File tree

1 file changed

+2
-4
lines changed

1 file changed

+2
-4
lines changed

net/core/dev.c

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11920,11 +11920,9 @@ EXPORT_SYMBOL(unregister_netdevice_many);
1192011920
*/
1192111921
void unregister_netdev(struct net_device *dev)
1192211922
{
11923-
struct net *net = dev_net(dev);
11924-
11925-
rtnl_net_lock(net);
11923+
rtnl_net_dev_lock(dev);
1192611924
unregister_netdevice(dev);
11927-
rtnl_net_unlock(net);
11925+
rtnl_net_dev_unlock(dev);
1192811926
}
1192911927
EXPORT_SYMBOL(unregister_netdev);
1193011928

0 commit comments

Comments
 (0)