linux-yocto/drivers/net
Haiyang Zhang 4293f6c5cc hv_netvsc: Fix panic during namespace deletion with VF
commit 33caa208dba6fa639e8a92fd0c8320b652e5550c upstream.

The existing code move the VF NIC to new namespace when NETDEV_REGISTER is
received on netvsc NIC. During deletion of the namespace,
default_device_exit_batch() >> default_device_exit_net() is called. When
netvsc NIC is moved back and registered to the default namespace, it
automatically brings VF NIC back to the default namespace. This will cause
the default_device_exit_net() >> for_each_netdev_safe loop unable to detect
the list end, and hit NULL ptr:

[  231.449420] mana 7870:00:00.0 enP30832s1: Moved VF to namespace with: eth0
[  231.449656] BUG: kernel NULL pointer dereference, address: 0000000000000010
[  231.450246] #PF: supervisor read access in kernel mode
[  231.450579] #PF: error_code(0x0000) - not-present page
[  231.450916] PGD 17b8a8067 P4D 0
[  231.451163] Oops: Oops: 0000 [#1] SMP NOPTI
[  231.451450] CPU: 82 UID: 0 PID: 1394 Comm: kworker/u768:1 Not tainted 6.16.0-rc4+ #3 VOLUNTARY
[  231.452042] Hardware name: Microsoft Corporation Virtual Machine/Virtual Machine, BIOS Hyper-V UEFI Release v4.1 11/21/2024
[  231.452692] Workqueue: netns cleanup_net
[  231.452947] RIP: 0010:default_device_exit_batch+0x16c/0x3f0
[  231.453326] Code: c0 0c f5 b3 e8 d5 db fe ff 48 85 c0 74 15 48 c7 c2 f8 fd ca b2 be 10 00 00 00 48 8d 7d c0 e8 7b 77 25 00 49 8b 86 28 01 00 00 <48> 8b 50 10 4c 8b 2a 4c 8d 62 f0 49 83 ed 10 4c 39 e0 0f 84 d6 00
[  231.454294] RSP: 0018:ff75fc7c9bf9fd00 EFLAGS: 00010246
[  231.454610] RAX: 0000000000000000 RBX: 0000000000000002 RCX: 61c8864680b583eb
[  231.455094] RDX: ff1fa9f71462d800 RSI: ff75fc7c9bf9fd38 RDI: 0000000030766564
[  231.455686] RBP: ff75fc7c9bf9fd78 R08: 0000000000000000 R09: 0000000000000000
[  231.456126] R10: 0000000000000001 R11: 0000000000000004 R12: ff1fa9f70088e340
[  231.456621] R13: ff1fa9f70088e340 R14: ffffffffb3f50c20 R15: ff1fa9f7103e6340
[  231.457161] FS:  0000000000000000(0000) GS:ff1faa6783a08000(0000) knlGS:0000000000000000
[  231.457707] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[  231.458031] CR2: 0000000000000010 CR3: 0000000179ab2006 CR4: 0000000000b73ef0
[  231.458434] Call Trace:
[  231.458600]  <TASK>
[  231.458777]  ops_undo_list+0x100/0x220
[  231.459015]  cleanup_net+0x1b8/0x300
[  231.459285]  process_one_work+0x184/0x340

To fix it, move the ns change to a workqueue, and take rtnl_lock to avoid
changing the netdev list when default_device_exit_net() is using it.

Cc: stable@vger.kernel.org
Fixes: 4c262801ea ("hv_netvsc: Fix VF namespace also in synthetic NIC NETDEV_REGISTER event")
Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
Link: https://patch.msgid.link/1754511711-11188-1-git-send-email-haiyangz@linux.microsoft.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2025-08-20 18:41:40 +02:00
..
arcnet treewide, timers: Rename from_timer() to timer_container_of() 2025-06-08 09:07:37 +02:00
bonding net: core: Convert dev_set_mac_address() to struct sockaddr_storage 2025-05-27 08:25:43 +02:00
caif
can can: ti_hecc: fix -Woverflow compiler warning 2025-08-20 18:41:08 +02:00
dsa net: dsa: b53: fix IP_MULTICAST_CTRL on BCM5325 2025-08-20 18:41:20 +02:00
ethernet ionic: clean dbpage in de-init 2025-08-20 18:41:19 +02:00
fddi treewide, timers: Rename from_timer() to timer_container_of() 2025-06-08 09:07:37 +02:00
fjes
hamradio hamradio: ignore ops-locked netdevs 2025-08-20 18:40:51 +02:00
hippi treewide, timers: Rename from_timer() to timer_container_of() 2025-06-08 09:07:37 +02:00
hyperv hv_netvsc: Fix panic during namespace deletion with VF 2025-08-20 18:41:40 +02:00
ieee802154
ipa ipa: fix compile-testing with qcom-mdt=m 2025-08-15 16:39:26 +02:00
ipvlan
mctp net: mctp: start tx queue on netdev open 2025-05-27 17:23:19 -07:00
mdio net: mdio: mdio-bcm-unimac: Correct rate fallback logic 2025-08-15 16:39:25 +02:00
netdevsim net: drv: netdevsim: don't napi_complete() from netpoll 2025-06-12 08:11:52 -07:00
ovpn ovpn: reset GSO metadata after decapsulation 2025-07-16 11:53:19 +02:00
pcs net: pcs: xpcs: mask readl() return value to 16 bits 2025-08-20 18:41:07 +02:00
phy net: phy: smsc: add proper reset flags for LAN8710A 2025-08-20 18:41:32 +02:00
plip
ppp pptp: fix pptp_xmit() error path 2025-08-15 16:39:29 +02:00
pse-pd
slip treewide, timers: Rename from_timer() to timer_container_of() 2025-06-08 09:07:37 +02:00
team team: replace team lock with rtnl lock 2025-08-15 16:38:41 +02:00
thunderbolt net: thunderbolt: Fix the parameter passing of tb_xdomain_enable_paths()/tb_xdomain_disable_paths() 2025-08-20 18:41:13 +02:00
usb net: usb: cdc-ncm: check for filtering capability 2025-08-20 18:41:06 +02:00
vmxnet3 vmxnet3: correctly report gso type for UDP tunnels 2025-06-03 11:54:26 +02:00
vxlan treewide, timers: Rename from_timer() to timer_container_of() 2025-06-08 09:07:37 +02:00
wan net: lapbether: ignore ops-locked netdevs 2025-08-20 18:40:51 +02:00
wireguard treewide, timers: Rename from_timer() to timer_container_of() 2025-06-08 09:07:37 +02:00
wireless wifi: rtw89: 8852c: increase beacon loss to 6 seconds 2025-08-20 18:41:20 +02:00
wwan net: wwan: mhi_wwan_mbim: use correct mux_id for multiplexing 2025-06-05 12:27:20 +02:00
xen-netback treewide, timers: Rename from_timer() to timer_container_of() 2025-06-08 09:07:37 +02:00
amt.c
bareudp.c
dummy.c
eql.c treewide, timers: Rename from_timer() to timer_container_of() 2025-06-08 09:07:37 +02:00
geneve.c
gtp.c
ifb.c
Kconfig
LICENSE.SRC
loopback.c
macsec.c macsec: set IFF_UNICAST_FLT priv flag 2025-08-15 16:38:54 +02:00
macvlan.c net: core: Convert dev_set_mac_address() to struct sockaddr_storage 2025-05-27 08:25:43 +02:00
macvtap.c
Makefile
mdio.c
mhi_net.c
mii.c
net_failover.c
netconsole.c netconsole: Only register console drivers when targets are configured 2025-08-15 16:38:37 +02:00
netkit.c
nlmon.c
ntb_netdev.c treewide, timers: Rename from_timer() to timer_container_of() 2025-06-08 09:07:37 +02:00
pfcp.c
rionet.c
Space.c
sungem_phy.c
tap.c net: core: Convert dev_set_mac_address_user() to use struct sockaddr_storage 2025-05-27 08:25:43 +02:00
tun_vnet.h
tun.c treewide, timers: Rename from_timer() to timer_container_of() 2025-06-08 09:07:37 +02:00
veth.c veth: prevent NULL pointer dereference in veth_xdp_rcv 2025-06-12 08:08:32 -07:00
virtio_net.c virtio-net: fix recursived rtnl_lock() during probe() 2025-07-17 07:37:59 -07:00
vrf.c vrf: Drop existing dst reference in vrf_ip6_input_dst 2025-08-15 16:38:55 +02:00
vsockmon.c
xen-netfront.c xen/netfront: Fix TX response spurious interrupts 2025-08-20 18:41:05 +02:00