Commit d4c6bfc8 authored by Kuniyuki Iwashima's avatar Kuniyuki Iwashima Committed by Jakub Kicinski
Browse files

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: 00fb9823 ("dev: Hold per-netns RTNL in (un)?register_netdev().")
Signed-off-by: default avatarKuniyuki Iwashima <kuniyu@amazon.com>
Reviewed-by: default avatarEric Dumazet <edumazet@google.com>
Link: https://patch.msgid.link/20250217191129.19967-4-kuniyu@amazon.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 65161fb5
Loading
Loading
Loading
Loading
+2 −4
Original line number Diff line number Diff line
@@ -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);