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>
This commit is contained in:
Kuniyuki Iwashima
2026-07-03 00:09:16 +00:00
committed by Paolo Abeni
parent 2b12ec2578
commit 0fa296dd52

View File

@@ -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();