]> www.infradead.org Git - users/hch/misc.git/commitdiff
net: Hold rtnl_net_lock() in (un)?register_netdevice_notifier_net().
authorKuniyuki Iwashima <kuniyu@amazon.com>
Mon, 6 Jan 2025 07:07:50 +0000 (16:07 +0900)
committerJakub Kicinski <kuba@kernel.org>
Wed, 8 Jan 2025 01:49:20 +0000 (17:49 -0800)
(un)?register_netdevice_notifier_net() hold RTNL before triggering the
notifier for all netdev in the netns.

Let's convert the RTNL to rtnl_net_lock().

Note that the per-netns netdev notifier is protected by per-netns RTNL.

Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
Link: https://patch.msgid.link/20250106070751.63146-3-kuniyu@amazon.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/core/dev.c

index 34ded79746755cdfa876b53cd110b42d213989be..06a5c11688c1e21e16e99949c4d035aa6e31b32b 100644 (file)
@@ -1897,9 +1897,10 @@ int register_netdevice_notifier_net(struct net *net, struct notifier_block *nb)
 {
        int err;
 
-       rtnl_lock();
+       rtnl_net_lock(net);
        err = __register_netdevice_notifier_net(net, nb, false);
-       rtnl_unlock();
+       rtnl_net_unlock(net);
+
        return err;
 }
 EXPORT_SYMBOL(register_netdevice_notifier_net);
@@ -1925,9 +1926,10 @@ int unregister_netdevice_notifier_net(struct net *net,
 {
        int err;
 
-       rtnl_lock();
+       rtnl_net_lock(net);
        err = __unregister_netdevice_notifier_net(net, nb);
-       rtnl_unlock();
+       rtnl_net_unlock(net);
+
        return err;
 }
 EXPORT_SYMBOL(unregister_netdevice_notifier_net);