1
0
Fork 0
mirror of synced 2025-03-06 20:59:54 +01:00

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: 00fb982393 ("dev: Hold per-netns RTNL in (un)?register_netdev().")
Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Link: https://patch.msgid.link/20250217191129.19967-4-kuniyu@amazon.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
Kuniyuki Iwashima 2025-02-17 11:11:29 -08:00 committed by Jakub Kicinski
parent 65161fb544
commit d4c6bfc839

View file

@ -11920,11 +11920,9 @@ EXPORT_SYMBOL(unregister_netdevice_many);
*/
void unregister_netdev(struct net_device *dev)
{
struct net *net = dev_net(dev);
rtnl_net_lock(net);
rtnl_net_dev_lock(dev);
unregister_netdevice(dev);
rtnl_net_unlock(net);
rtnl_net_dev_unlock(dev);
}
EXPORT_SYMBOL(unregister_netdev);