CVE-2026-78118
Last modified
CVE-2026-78118 is a high-severity vulnerability rated 7/10 on the CVSS scale. The kernel helper z_waitq_head() (kernel/include/wait_q.h) reads the head of a thread wait queue, but on SMP systems it was called from several places without holding the scheduler spinlock _sched_spinlock that serializes wait-queue mutation. The consequential call site is z_timer_expiration_handler() in kernel/timer.c, which held only the timer subsystem lock timer_lock while reading timer->wait_q and then unpending, setting the return value of, and readying the thread it obtained. EPSS estimates a 0.08% chance of exploitation in the next 30 days.
Description
The kernel helper z_waitq_head() (kernel/include/wait_q.h) reads the head of a thread wait queue, but on SMP systems it was called from several places without holding the scheduler spinlock _sched_spinlock that serializes wait-queue mutation. The consequential call site is z_timer_expiration_handler() in kernel/timer.c, which held only the timer subsystem lock timer_lock while reading timer->wait_q and then unpending, setting the return value of, and readying the thread it obtained. halt_thread() in kernel/sched.c removes an aborted thread from its wait queue while holding only _sched_spinlock, so the two paths are not mutually exclusive. When the last waiter is removed on another CPU inside that window, sys_dlist_peek_head() can return the list sentinel — a pointer into the k_timer object itself — typed as a struct k_thread * (with CONFIG_WAITQ_SCALABLE, rb_get_min() can return an arbitrary node of a tree being restructured), or it can return a pointer to a thread that has already been unpended and, for dynamically allocated threads, freed. The handler then calls unpend_thread_no_timeout(), which performs a sys_dlist_remove() through pointers read from that object, and arch_thread_return_value_set(), which writes unconditionally through the pointer. The result is out-of-bounds and use-after-free writes in supervisor context, plus scheduler state corruption; a milder outcome is a thread that has re-pended elsewhere being woken with a success return value from an unrelated blocking call. All of the primitives needed to drive the interleaving — k_timer_start(), k_timer_status_sync(), k_thread_create() and k_thread_abort() — are system calls, so with CONFIG_USERSPACE enabled an unprivileged user-mode thread can attempt the race against kernel-owned data. Exploitation requires a multi-CPU build (CONFIG_MP_MAX_NUM_CPUS greater than one; the affected region is a no-op on uniprocessor targets), local code execution, and winning a narrow timing window, so the practical outcome is most often a kernel crash rather than controlled corruption. The fix splits the helper into z_waitq_head_locked() for callers that already hold the scheduler spinlock and a z_waitq_head() that acquires it, and brings the timer expiration handler's head read, unpend and ready under a single LOCK_SCHED_SPINLOCK region.
Metrics
Weakness Enumeration
Affected Software
Source: CNA advisory (CVE.org). NVD analysis pending.
| Vendor | Product | Versions |
|---|---|---|
| zephyrproject | zephyr | >= 2.2.0, < 4.5.0 |
References
Timeline
- Published
- Last Modified
- Status
- Awaiting Analysis
Frequently Asked Questions
What is CVE-2026-78118?
How severe is CVE-2026-78118?
How do I fix CVE-2026-78118?
How Strix Helps
- How Strix found a critical auth bypass in etcdStrix autonomously discovered a critical authentication bypass in etcd, later designated CVE-2026-33413.
- Autonomous PentestingAI agents that find and validate exploitable vulnerabilities like this one across your applications.
- PR ReviewsPentest every pull request so vulnerable code is caught before it ships to production.
- AI Penetration TestingHow AI-driven penetration testing continuously covers your attack surface.
Related CVEs from 2026
- CVE-2026-78103WatchGuard Dimension provides a client-side lock/unlock UI c…5.1
- CVE-2026-7811A vulnerability has been found in 54yyyu code-mcp up to 4cfc…7.3
- CVE-2026-78112A flaw has been found in itsourcecode Hospital Management Sy…6.3
- CVE-2026-78115A vulnerability has been found in SourceCodester Class and E…5.4
- CVE-2026-78116The Broadcom AFBR-S50 time-of-flight sensor driver double-co…5.2
- CVE-2026-78117The Infineon PSOC 6 BLESS HCI driver in drivers/bluetooth/hc…4.2
- CVE-2026-78119The Nuvoton NPCX eSPI driver parses Target-Attached-Flash (T…6.3
- CVE-2026-7812A vulnerability was found in 54yyyu code-mcp up to 4cfc46435…7.3
- CVE-2026-78122docker-socket-proxy fails to properly gate read endpoints in…7.4
- CVE-2026-78123strongSwan 5.0.2 through 6.0.7 has an Expired Pointer Derefe…5.9
- CVE-2026-78124strongSwan 5.0.2 through 6.0.7 allows PKCS#7 certificate enu…3.7
- CVE-2026-78125The LearnPress WordPress plugin before 4.0.3 does not perfo…5.3
Are you affected by CVE-2026-78118?
Run a free Strix scan to check your systems for this vulnerability.
Scan your code nowSource: NVD / NIST
