Security Vulnerability Report
中文
CVE-2026-43385 CVSS 7.5 HIGH

CVE-2026-43385

Published: 2026-05-08 15:16:50
Last Modified: 2026-05-11 08:16:13
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67

Description

In the Linux kernel, the following vulnerability has been resolved: net: Fix rcu_tasks stall in threaded busypoll I was debugging a NIC driver when I noticed that when I enable threaded busypoll, bpftrace hangs when starting up. dmesg showed: rcu_tasks_wait_gp: rcu_tasks grace period number 85 (since boot) is 10658 jiffies old. rcu_tasks_wait_gp: rcu_tasks grace period number 85 (since boot) is 40793 jiffies old. rcu_tasks_wait_gp: rcu_tasks grace period number 85 (since boot) is 131273 jiffies old. rcu_tasks_wait_gp: rcu_tasks grace period number 85 (since boot) is 402058 jiffies old. INFO: rcu_tasks detected stalls on tasks: 00000000769f52cd: .N nvcsw: 2/2 holdout: 1 idle_cpu: -1/64 task:napi/eth2-8265 state:R running task stack:0 pid:48300 tgid:48300 ppid:2 task_flags:0x208040 flags:0x00004000 Call Trace: <TASK> ? napi_threaded_poll_loop+0x27c/0x2c0 ? __pfx_napi_threaded_poll+0x10/0x10 ? napi_threaded_poll+0x26/0x80 ? kthread+0xfa/0x240 ? __pfx_kthread+0x10/0x10 ? ret_from_fork+0x31/0x50 ? __pfx_kthread+0x10/0x10 ? ret_from_fork_asm+0x1a/0x30 </TASK> The cause is that in threaded busypoll, the main loop is in napi_threaded_poll rather than napi_threaded_poll_loop, where the latter rarely iterates more than once within its loop. For rcu_softirq_qs_periodic inside napi_threaded_poll_loop to report its qs state, the last_qs must be 100ms behind, and this can't happen because napi_threaded_poll_loop rarely iterates in threaded busypoll, and each time napi_threaded_poll_loop is called last_qs is reset to latest jiffies. This patch changes so that in threaded busypoll, last_qs is saved in the outer napi_threaded_poll, and whether busy_poll_last_qs is NULL indicates whether napi_threaded_poll_loop is called for busypoll. This way last_qs would not reset to latest jiffies on each invocation of napi_threaded_poll_loop.

CVSS Details

CVSS Score
7.5
Severity
HIGH
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H

Configurations (Affected Products)

No configuration data available.

Linux Kernel < 6.6 (具体版本需参考Git Commit 1a86a1f7d88996085934139fa4c063b6299a2dd3)

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
/* * PoC Concept for CVE-2026-43385 * Triggering the RCU stall requires enabling threaded busy poll. * This is a kernel module snippet to demonstrate the enabling logic. */ #include <linux/module.h> #include <linux/kernel.h> #include <net/busy_poll.h> static int __init init_poc(void) { printk(KERN_INFO "CVE-2026-43385: Attempting to trigger RCU stall conditions.\n"); // Real-world trigger: // 1. Enable threaded NAPI on the NIC. // 2. Enable busy_poll via sysctl: sysctl -w net.core.busy_poll=50 // 3. Generate sufficient network traffic to keep NAPI active. // 4. Observe dmesg for rcu_tasks_wait_gp stall warnings. return 0; } static void __exit exit_poc(void) { printk(KERN_INFO "CVE-2026-43385: Exiting.\n"); } module_init(init_poc); module_exit(exit_poc); MODULE_LICENSE("GPL");

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-43385", "sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "published": "2026-05-08T15:16:49.830", "lastModified": "2026-05-11T08:16:12.690", "vulnStatus": "Received", "cveTags": [], "descriptions": [{"lang": "en", "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nnet: Fix rcu_tasks stall in threaded busypoll\n\nI was debugging a NIC driver when I noticed that when I enable\nthreaded busypoll, bpftrace hangs when starting up. dmesg showed:\n\n rcu_tasks_wait_gp: rcu_tasks grace period number 85 (since boot) is 10658 jiffies old.\n rcu_tasks_wait_gp: rcu_tasks grace period number 85 (since boot) is 40793 jiffies old.\n rcu_tasks_wait_gp: rcu_tasks grace period number 85 (since boot) is 131273 jiffies old.\n rcu_tasks_wait_gp: rcu_tasks grace period number 85 (since boot) is 402058 jiffies old.\n INFO: rcu_tasks detected stalls on tasks:\n 00000000769f52cd: .N nvcsw: 2/2 holdout: 1 idle_cpu: -1/64\n task:napi/eth2-8265 state:R running task stack:0 pid:48300 tgid:48300 ppid:2 task_flags:0x208040 flags:0x00004000\n Call Trace:\n <TASK>\n ? napi_threaded_poll_loop+0x27c/0x2c0\n ? __pfx_napi_threaded_poll+0x10/0x10\n ? napi_threaded_poll+0x26/0x80\n ? kthread+0xfa/0x240\n ? __pfx_kthread+0x10/0x10\n ? ret_from_fork+0x31/0x50\n ? __pfx_kthread+0x10/0x10\n ? ret_from_fork_asm+0x1a/0x30\n </TASK>\n\nThe cause is that in threaded busypoll, the main loop is in\nnapi_threaded_poll rather than napi_threaded_poll_loop, where the\nlatter rarely iterates more than once within its loop. For\nrcu_softirq_qs_periodic inside napi_threaded_poll_loop to report its\nqs state, the last_qs must be 100ms behind, and this can't happen\nbecause napi_threaded_poll_loop rarely iterates in threaded busypoll,\nand each time napi_threaded_poll_loop is called last_qs is reset to\nlatest jiffies.\n\nThis patch changes so that in threaded busypoll, last_qs is saved\nin the outer napi_threaded_poll, and whether busy_poll_last_qs\nis NULL indicates whether napi_threaded_poll_loop is called for\nbusypoll. This way last_qs would not reset to latest jiffies on\neach invocation of napi_threaded_poll_loop."}], "metrics": {"cvssMetricV31": [{"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H", "baseScore": 7.5, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "NONE", "integrityImpact": "NONE", "availabilityImpact": "HIGH"}, "exploitabilityScore": 3.9, "impactScore": 3.6}]}, "references": [{"url": "https://git.kernel.org/stable/c/1a86a1f7d88996085934139fa4c063b6299a2dd3", "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"}, {"url": "https://git.kernel.org/stable/c/52459201d0df3fdbb1d281738b7b772e2cacb49c", "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"}]}}