CVE-2024-26698

Severity CVSS v4.0:
Pending analysis
Type:
CWE-362 Concurrent Execution using Shared Resource with Improper Synchronization ('Race Condition')
Publication date:
03/04/2024
Last modified:
17/03/2025

Description

In the Linux kernel, the following vulnerability has been resolved:<br /> <br /> hv_netvsc: Fix race condition between netvsc_probe and netvsc_remove<br /> <br /> In commit ac5047671758 ("hv_netvsc: Disable NAPI before closing the<br /> VMBus channel"), napi_disable was getting called for all channels,<br /> including all subchannels without confirming if they are enabled or not.<br /> <br /> This caused hv_netvsc getting hung at napi_disable, when netvsc_probe()<br /> has finished running but nvdev-&gt;subchan_work has not started yet.<br /> netvsc_subchan_work() -&gt; rndis_set_subchannel() has not created the<br /> sub-channels and because of that netvsc_sc_open() is not running.<br /> netvsc_remove() calls cancel_work_sync(&amp;nvdev-&gt;subchan_work), for which<br /> netvsc_subchan_work did not run.<br /> <br /> netif_napi_add() sets the bit NAPI_STATE_SCHED because it ensures NAPI<br /> cannot be scheduled. Then netvsc_sc_open() -&gt; napi_enable will clear the<br /> NAPIF_STATE_SCHED bit, so it can be scheduled. napi_disable() does the<br /> opposite.<br /> <br /> Now during netvsc_device_remove(), when napi_disable is called for those<br /> subchannels, napi_disable gets stuck on infinite msleep.<br /> <br /> This fix addresses this problem by ensuring that napi_disable() is not<br /> getting called for non-enabled NAPI struct.<br /> But netif_napi_del() is still necessary for these non-enabled NAPI struct<br /> for cleanup purpose.<br /> <br /> Call trace:<br /> [ 654.559417] task:modprobe state:D stack: 0 pid: 2321 ppid: 1091 flags:0x00004002<br /> [ 654.568030] Call Trace:<br /> [ 654.571221] <br /> [ 654.573790] __schedule+0x2d6/0x960<br /> [ 654.577733] schedule+0x69/0xf0<br /> [ 654.581214] schedule_timeout+0x87/0x140<br /> [ 654.585463] ? __bpf_trace_tick_stop+0x20/0x20<br /> [ 654.590291] msleep+0x2d/0x40<br /> [ 654.593625] napi_disable+0x2b/0x80<br /> [ 654.597437] netvsc_device_remove+0x8a/0x1f0 [hv_netvsc]<br /> [ 654.603935] rndis_filter_device_remove+0x194/0x1c0 [hv_netvsc]<br /> [ 654.611101] ? do_wait_intr+0xb0/0xb0<br /> [ 654.615753] netvsc_remove+0x7c/0x120 [hv_netvsc]<br /> [ 654.621675] vmbus_remove+0x27/0x40 [hv_vmbus]

Vulnerable products and versions

CPE From Up to
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 5.8 (including) 5.10.210 (excluding)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 5.11 (including) 5.15.149 (excluding)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 5.16 (including) 6.1.79 (excluding)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 6.2 (including) 6.6.18 (excluding)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 6.7 (including) 6.7.6 (excluding)
cpe:2.3:o:linux:linux_kernel:6.8:rc1:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.8:rc2:*:*:*:*:*:*
cpe:2.3:o:debian:debian_linux:10.0:*:*:*:*:*:*:*