forked from mirrors/linux
		
	net: Lock netdevices during dev_shutdown
__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: a0527ee2df ("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>
Link: https://patch.msgid.link/20250505194713.1723399-1-cratiu@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
			
			
This commit is contained in:
		
							parent
							
								
									0093cb194a
								
							
						
					
					
						commit
						08e9f2d584
					
				
					 1 changed files with 3 additions and 1 deletions
				
			
		|  | @ -11966,9 +11966,9 @@ void unregister_netdevice_many_notify(struct list_head *head, | ||||||
| 		struct sk_buff *skb = NULL; | 		struct sk_buff *skb = NULL; | ||||||
| 
 | 
 | ||||||
| 		/* Shutdown queueing discipline. */ | 		/* Shutdown queueing discipline. */ | ||||||
|  | 		netdev_lock_ops(dev); | ||||||
| 		dev_shutdown(dev); | 		dev_shutdown(dev); | ||||||
| 		dev_tcx_uninstall(dev); | 		dev_tcx_uninstall(dev); | ||||||
| 		netdev_lock_ops(dev); |  | ||||||
| 		dev_xdp_uninstall(dev); | 		dev_xdp_uninstall(dev); | ||||||
| 		dev_memory_provider_uninstall(dev); | 		dev_memory_provider_uninstall(dev); | ||||||
| 		netdev_unlock_ops(dev); | 		netdev_unlock_ops(dev); | ||||||
|  | @ -12161,7 +12161,9 @@ int __dev_change_net_namespace(struct net_device *dev, struct net *net, | ||||||
| 	synchronize_net(); | 	synchronize_net(); | ||||||
| 
 | 
 | ||||||
| 	/* Shutdown queueing discipline. */ | 	/* Shutdown queueing discipline. */ | ||||||
|  | 	netdev_lock_ops(dev); | ||||||
| 	dev_shutdown(dev); | 	dev_shutdown(dev); | ||||||
|  | 	netdev_unlock_ops(dev); | ||||||
| 
 | 
 | ||||||
| 	/* Notify protocols, that we are about to destroy
 | 	/* Notify protocols, that we are about to destroy
 | ||||||
| 	 * this device. They should clean all the things. | 	 * this device. They should clean all the things. | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Cosmin Ratiu
						Cosmin Ratiu