CVE-2026-10667: SMP use-after-free in Zephyr `CONFIG_USERSPACE` dynamic kernel-object tracking, reachable from unprivileged user threads
Zephyr's dynamic kernel-object tracking (kernel/userspace/userspace.c, formerly kernel/userspace.c) maintains a doubly-linked list (objlist) of dynamically allocated kernel objects. Iteration over this list in kobjectwordlistforeach() was performed under listslock using the SAFE iterator (which caches the next node), but list removal and freeing of nodes was performed under different, disjoint spinlocks: objfreelock in kobjectfree() and objlock in unrefcheck(). On an SMP system, while one CPU iterated objlist under listslock, another CPU could unlink and kfree() the dynobj node that the iterator had cached as its next pointer, causing the iterator to dereference freed kernel memory (use-after-free / dangling list traversal). All of the racing operations are reachable from unprivileged user-mode threads via system calls: kobjectalloc/kobjectallocsize and kobjectrelease drive removals through unrefcheck() (under objlock), while kthreadabort and thread creation drive the iteration through kthreadpermsallclear()/kthreadpermsinherit() (under listslock). A deprivileged user thread on a CONFIGSMP + CONFIGUSERSPACE build can therefore corrupt the kernel's object-tracking structures across the userspace security boundary, yielding kernel memory corruption (potential privilege escalation) or a kernel crash (denial of service). The fix removes objfreelock and serializes every objlist modification under listslock, including holding it across find+remove in kobjectfree() and around unrefcheck() in kthreadpermsclear(). Affects CONFIGSMP+CONFIGUSERSPACE+CONFIGDYNAMICOBJECTS configurations; the defect dates to the 2019 spinlockification (commit 8a3d57b6cc6, first released in v1.14.0) and shipped through v4.4.0.
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade to a fixed release to a version that resolves this vulnerability.
Patch commit 8a3d57b6cc6 - Upgrade
Upgrade to a fixed release to a version that resolves this vulnerability.
Fixed in v1.14.0 - Upgrade
Upgrade to a fixed release to a version that resolves this vulnerability.
Fixed in v4.4.0 - Configuration
Apply the code fix that removes objfree_lock and ensures all obj_list modifications are performed while holding lists_lock—specifically hold lists_lock across find+remove in k_object_free() and hold lists_lock around unref_check() / k_thread_perms_clear() operations that iterate or clear thread permission state.
Zephyr dynamic kernel-object tracking (kernel/userspace/userspace.c) obj_list synchronization strategy = Serialize every obj_list modification under lists_lock; remove objfree_lock usage
Event History
Frequently Asked Questions
What is the severity of CVE-2026-10667?
CVE-2026-10667 has a high severity rating of 7.8.
How do I fix CVE-2026-10667?
To mitigate CVE-2026-10667, update Zephyr to the latest version that includes the patch for this vulnerability.
What types of attacks are possible due to CVE-2026-10667?
CVE-2026-10667 could allow an unprivileged user thread to exploit use-after-free vulnerabilities within Zephyr's kernel-object tracking.
Which software is affected by CVE-2026-10667?
CVE-2026-10667 affects the Zephyr Project's operating system.
What is the impact of CVE-2026-10667 on system security?
The impact of CVE-2026-10667 could lead to system crashes and unauthorized access to sensitive memory areas, compromising system integrity and availability.