diff mbox series

[NET-PREV,48/51] default_device: Call dev_change_net_namespace() under nd_lock

Message ID 174265463028.356712.15016385543007330124.stgit@pro.pro (mailing list archive)
State RFC
Delegated to: Netdev Maintainers
Headers show
Series Kill rtnl_lock using fine-grained nd_lock | expand

Checks

Context Check Description
netdev/tree_selection success Guessing tree name failed - patch did not apply, async

Commit Message

Kirill Tkhai March 22, 2025, 2:43 p.m. UTC
We want to provide "nd_lock is locked" context during
NETDEV_REGISTER (and later for NETDEV_UNREGISTER)
events. When calling from __register_netdevice(),
notifiers are already in that context, and we do the
same for dev_change_net_namespace() here.

Signed-off-by: Kirill Tkhai <tkhai@ya.ru>
---
 net/core/dev.c |    3 +++
 1 file changed, 3 insertions(+)
diff mbox series

Patch

diff --git a/net/core/dev.c b/net/core/dev.c
index f0f93b5a2819..c477b39d08b9 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -12357,6 +12357,7 @@  static void __net_exit default_device_exit_net(struct net *net)
 {
 	struct netdev_name_node *name_node, *tmp;
 	struct net_device *dev, *aux;
+	struct nd_lock *nd_lock;
 	/*
 	 * Push all migratable network devices back to the
 	 * initial network namespace
@@ -12383,7 +12384,9 @@  static void __net_exit default_device_exit_net(struct net *net)
 			if (netdev_name_in_use(&init_net, name_node->name))
 				__netdev_name_node_alt_destroy(name_node);
 
+		lock_netdev(dev, &nd_lock);
 		err = dev_change_net_namespace(dev, &init_net, fb_name);
+		unlock_netdev(nd_lock);
 		if (err) {
 			pr_emerg("%s: failed to move %s to init_net: %d\n",
 				 __func__, dev->name, err);