summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKuniyuki Iwashima <kuniyu@google.com>2026-07-03 00:09:16 +0000
committerPaolo Abeni <pabeni@redhat.com>2026-07-11 12:57:49 +0200
commit0fa296dd520eb388e18b97dc553926f82a09cc1d (patch)
treef4f3b38b2b1112cb6b08ef68890d2c1aa4d719d3
parent2b12ec25784954134df6cf0972a28f14dffdad50 (diff)
net: Hold __rtnl_net_lock() in netdev_wait_allrefs_any().
Currently, netdev_run_todo() processes pending devices from multiple namespaces in a batch. To expand the per-netns RTNL coverage for NETDEV_UNREGISTER, let's acquire __rtnl_net_lock() in netdev_wait_allrefs_any(). Note that netdev_run_todo() itself will need to be namespacified before RTNL is removed. Signed-off-by: Kuniyuki Iwashima <kuniyu@google.com> Link: https://patch.msgid.link/20260703001009.1572444-6-kuniyu@google.com Signed-off-by: Paolo Abeni <pabeni@redhat.com>
-rw-r--r--net/core/dev.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/net/core/dev.c b/net/core/dev.c
index 9db053b355ef..cc77f41452ec 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -11613,8 +11613,13 @@ static struct net_device *netdev_wait_allrefs_any(struct list_head *list)
rtnl_lock();
/* Rebroadcast unregister notification */
- list_for_each_entry(dev, list, todo_list)
+ list_for_each_entry(dev, list, todo_list) {
+ struct net *net = dev_net(dev);
+
+ __rtnl_net_lock(net);
call_netdevice_notifiers(NETDEV_UNREGISTER, dev);
+ __rtnl_net_unlock(net);
+ }
__rtnl_unlock();
rcu_barrier();