From: Kuniyuki Iwashima Date: Sat, 4 Jan 2025 08:21:49 +0000 (+0900) Subject: dev: Hold per-netns RTNL in (un)?register_netdev(). X-Git-Tag: v6.14-rc1~162^2~129^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=00fb9823939ea39b553985b1b3f5377dc2386d63;p=thirdparty%2Fkernel%2Flinux.git dev: Hold per-netns RTNL in (un)?register_netdev(). Let's hold per-netns RTNL of dev_net(dev) in register_netdev() and unregister_netdev(). Signed-off-by: Kuniyuki Iwashima Reviewed-by: Eric Dumazet Signed-off-by: Paolo Abeni --- diff --git a/net/core/dev.c b/net/core/dev.c index e7223972b9aaf..073f682a9653a 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -10731,12 +10731,16 @@ EXPORT_SYMBOL_GPL(init_dummy_netdev); */ int register_netdev(struct net_device *dev) { + struct net *net = dev_net(dev); int err; - if (rtnl_lock_killable()) + if (rtnl_net_lock_killable(net)) return -EINTR; + err = register_netdevice(dev); - rtnl_unlock(); + + rtnl_net_unlock(net); + return err; } EXPORT_SYMBOL(register_netdev); @@ -11606,9 +11610,11 @@ EXPORT_SYMBOL(unregister_netdevice_many); */ void unregister_netdev(struct net_device *dev) { - rtnl_lock(); + struct net *net = dev_net(dev); + + rtnl_net_lock(net); unregister_netdevice(dev); - rtnl_unlock(); + rtnl_net_unlock(net); } EXPORT_SYMBOL(unregister_netdev);