linux-kselftest.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net] net: Lock netdevices during dev_shutdown
@ 2025-05-05 19:47 Cosmin Ratiu
  2025-05-06  1:10 ` Stanislav Fomichev
  2025-05-07  2:10 ` patchwork-bot+netdevbpf
  0 siblings, 2 replies; 3+ messages in thread
From: Cosmin Ratiu @ 2025-05-05 19:47 UTC (permalink / raw)
  To: netdev, cratiu
  Cc: Stanislav Fomichev, David S . Miller, Eric Dumazet,
	Jakub Kicinski, Paolo Abeni, jiri @ resnulli . us, Saeed Mahameed,
	Dragos Tatulea, linux-kselftest

__qdisc_destroy() calls into various qdiscs .destroy() op, which in turn
can call .ndo_setup_tc(), which requires the netdev instance lock.

This commit extends the critical section in
unregister_netdevice_many_notify() to cover dev_shutdown() (and
dev_tcx_uninstall() as a side-effect) and acquires the netdev instance
lock in __dev_change_net_namespace() for the other dev_shutdown() call.

This should now guarantee that for all qdisc ops, the netdev instance
lock is held during .ndo_setup_tc().

Fixes: a0527ee2df3f ("net: hold netdev instance lock during qdisc ndo_setup_tc")
Signed-off-by: Cosmin Ratiu <cratiu@nvidia.com>
---
 net/core/dev.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/net/core/dev.c b/net/core/dev.c
index 1be7cb73a602..92e004c354ea 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -11966,9 +11966,9 @@ void unregister_netdevice_many_notify(struct list_head *head,
 		struct sk_buff *skb = NULL;
 
 		/* Shutdown queueing discipline. */
+		netdev_lock_ops(dev);
 		dev_shutdown(dev);
 		dev_tcx_uninstall(dev);
-		netdev_lock_ops(dev);
 		dev_xdp_uninstall(dev);
 		dev_memory_provider_uninstall(dev);
 		netdev_unlock_ops(dev);
@@ -12161,7 +12161,9 @@ int __dev_change_net_namespace(struct net_device *dev, struct net *net,
 	synchronize_net();
 
 	/* Shutdown queueing discipline. */
+	netdev_lock_ops(dev);
 	dev_shutdown(dev);
+	netdev_unlock_ops(dev);
 
 	/* Notify protocols, that we are about to destroy
 	 * this device. They should clean all the things.
-- 
2.45.0


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH net] net: Lock netdevices during dev_shutdown
  2025-05-05 19:47 [PATCH net] net: Lock netdevices during dev_shutdown Cosmin Ratiu
@ 2025-05-06  1:10 ` Stanislav Fomichev
  2025-05-07  2:10 ` patchwork-bot+netdevbpf
  1 sibling, 0 replies; 3+ messages in thread
From: Stanislav Fomichev @ 2025-05-06  1:10 UTC (permalink / raw)
  To: Cosmin Ratiu
  Cc: netdev, Stanislav Fomichev, David S . Miller, Eric Dumazet,
	Jakub Kicinski, Paolo Abeni, jiri @ resnulli . us, Saeed Mahameed,
	Dragos Tatulea, linux-kselftest

On 05/05, Cosmin Ratiu wrote:
> __qdisc_destroy() calls into various qdiscs .destroy() op, which in turn
> can call .ndo_setup_tc(), which requires the netdev instance lock.
> 
> This commit extends the critical section in
> unregister_netdevice_many_notify() to cover dev_shutdown() (and
> dev_tcx_uninstall() as a side-effect) and acquires the netdev instance
> lock in __dev_change_net_namespace() for the other dev_shutdown() call.
> 
> This should now guarantee that for all qdisc ops, the netdev instance
> lock is held during .ndo_setup_tc().
> 
> Fixes: a0527ee2df3f ("net: hold netdev instance lock during qdisc ndo_setup_tc")
> Signed-off-by: Cosmin Ratiu <cratiu@nvidia.com>

Acked-by: Stanislav Fomichev <sdf@fomichev.me>

Thanks!

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH net] net: Lock netdevices during dev_shutdown
  2025-05-05 19:47 [PATCH net] net: Lock netdevices during dev_shutdown Cosmin Ratiu
  2025-05-06  1:10 ` Stanislav Fomichev
@ 2025-05-07  2:10 ` patchwork-bot+netdevbpf
  1 sibling, 0 replies; 3+ messages in thread
From: patchwork-bot+netdevbpf @ 2025-05-07  2:10 UTC (permalink / raw)
  To: Cosmin Ratiu
  Cc: netdev, sdf, davem, edumazet, kuba, pabeni, jiri, saeedm,
	dtatulea, linux-kselftest

Hello:

This patch was applied to netdev/net.git (main)
by Jakub Kicinski <kuba@kernel.org>:

On Mon, 5 May 2025 22:47:13 +0300 you wrote:
> __qdisc_destroy() calls into various qdiscs .destroy() op, which in turn
> can call .ndo_setup_tc(), which requires the netdev instance lock.
> 
> This commit extends the critical section in
> unregister_netdevice_many_notify() to cover dev_shutdown() (and
> dev_tcx_uninstall() as a side-effect) and acquires the netdev instance
> lock in __dev_change_net_namespace() for the other dev_shutdown() call.
> 
> [...]

Here is the summary with links:
  - [net] net: Lock netdevices during dev_shutdown
    https://git.kernel.org/netdev/net/c/08e9f2d584c4

You are awesome, thank you!
-- 
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html



^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2025-05-07  2:10 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-05-05 19:47 [PATCH net] net: Lock netdevices during dev_shutdown Cosmin Ratiu
2025-05-06  1:10 ` Stanislav Fomichev
2025-05-07  2:10 ` patchwork-bot+netdevbpf

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).