Goal Reached Thanks to every supporter — we hit 100%!

Goal: 1000 CNY · Raised: 1359 CNY

100%

CVE-2026-90589— Memory-mapped thread stack is never unmapped when a thread is aborted by another thread, exhausting kernel virtual address space

Quick assessment

Affected
zephyrproject zephyr
Exploitation
No confirmed in-the-wild exploitation; assess based on exposure
Recommended action
Check the vendor advisory and references for a fixed version. If immediate upgrade is impossible, restrict exposure and increase monitoring.

当启用 配置时,每个线程的栈都会被映射到内核虚拟地址空间中,并在其两侧各设置一个保护页;该映射会在中止清理过程中被释放。 中的 函数包含两条执行路径:一条是用于“自我中止”的延迟路径,它将映射信息暂存于 和 变量中;另一条是用于“被其他线程中止”的立即路径。该立即路径调用了 ,但此函数忽略了传入的线程参数,仅对暂存的地址执行取消映射操作——而该暂存值仅在自我中止路径中被填充。因此,被其他线程中止的线程,其已映射的栈区域从未被正确取消映射。 任何对非当前线程调用的 都会导致该线程的栈区域及其两侧的两个保护页从内核虚拟

CVSS 5.5 · Medium
Get alerts for future matching vulnerabilities Log in to subscribe

I. Basic Information for CVE-2026-90589

Vulnerability Information

Have questions about the vulnerability? See if Shenlong's analysis helps!
View Shenlong Deep Dive ↗

Although we use advanced large model technology, its output may still contain inaccurate or outdated information.Shenlong tries to ensure data accuracy, but please verify and judge based on the actual situation.

Vulnerability Title
Memory-mapped thread stack is never unmapped when a thread is aborted by another thread, exhausting kernel virtual address space
Source: CVE Program / CVE List V5
Vulnerability Description
When CONFIG_THREAD_STACK_MEM_MAPPED is enabled, each thread stack is mapped into the kernel virtual address space with a guard page on either side, and the mapping is released during abort cleanup. k_thread_abort_cleanup() in kernel/thread.c has two paths: a deferred one for self-abort, which stashes the mapping in thread_cleanup_stack_addr/thread_cleanup_stack_sz, and an immediate one for a thread aborted by some other thread. The immediate path called do_thread_cleanup(), which ignored its thread argument and only ever unmapped the stashed address — a value populated exclusively by the self-abort path. The mapped stack of a thread aborted by another thread was therefore never unmapped. Every k_thread_abort() of a non-current thread leaks the thread's stack region plus its two guard pages from the kernel virtual address space. Threads that end by returning from their entry function take the working self-abort path, so the leak is specific to explicit cancellation — k_thread_abort(), pthread_cancel(), osThreadTerminate(), or the kernel thread kill shell command. Both k_thread_create() and k_thread_abort() are system calls, so with CONFIG_USERSPACE an unprivileged user-mode thread that has been granted a thread object and a user-capable stack object can drive the leak from user mode, consuming a kernel-side resource it cannot otherwise touch. With CONFIG_KERNEL_VM_SIZE defaulting to 8 MB, a few hundred create/abort cycles exhaust the runtime mapping region. k_mem_map_phys_guard() then returns NULL, and map_thread_stack() guards that only with __ASSERT_NO_MSG(), which is compiled out of production builds; thread creation proceeds to write through a NULL-derived stack base and faults in kernel mode. The impact is a persistent denial of service — a kernel fatal error requiring a reboot — with no memory disclosure or corruption, and it is limited to configurations where memory-mapped thread stacks are enabled (x86 targets with X86_MMU and demand paging disabled, where the option is implied by default).
Source: CVE Program / CVE List V5
CVSS Information
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
Source: CVE Program / CVE List V5
Vulnerability Type
在移除最后引用时对内存的释放不恰当(内存泄露)
Source: CVE Program / CVE List V5

Affected Products

Vendor Product Affected Versions CPE Subscribe
zephyrproject zephyr 3.7.0 ~ 4.3.2 -

II. Public POCs for CVE-2026-90589

# POC Description Source Link Shenlong Link
AI-Generated POC Premium

No public POC found.

Login to generate AI POC

III. Intelligence Information for CVE-2026-90589

请登录查看更多情报信息。

Other References for CVE-2026-90589 (2)

Same Patch Batch · zephyrproject · 2026-11-09 · 7 CVEs total

CVE-2026-90586 7.8 HIGH Xtensa MMU userspace: uninitialized thread page-table pointer leads to out-of-bounds super
CVE-2026-90591 7.5 HIGH NXP ENET-QOS Ethernet driver re-arms RX descriptors with a clobbered DMA buffer address on
CVE-2026-90590 6.5 MEDIUM Permanent loss of transmit capability in the NXP ENET QoS Ethernet driver after an Etherne
CVE-2026-90587 4.6 MEDIUM NULL pointer dereference in the Zephyr USB host stack when a device reports zero configura
CVE-2026-90585 4.6 MEDIUM Renesas RA SCI UART driver: unacknowledged receive-error interrupt causes a permanent inte
CVE-2026-90588 3.7 LOW Out-of-bounds read in Zephyr HTTP client debug logging of response header fields

IV. Related Vulnerabilities