CVE-2026-10681

In Zephyr's userspace dynamic-objects subsystem, thread_idx_alloc() in kernel/userspace/userspace.c allocated a new thread permission index from the global _thread_idx_map[] bitmap without holding lists_lock. On SMP systems, two user-mode threads invoking the k_object_alloc(K_OBJ_THREAD) syscall concurrently can both observe the same low free bit, perform the same non-atomic RMW to clear it, and return the identical tidx. The two newly created K_OBJ_THREAD objects are then assigned the same thread_id, so the two user threads alias a single bit position in every kernel object's perms[] bitfield: any subsequent grant of access on a kernel object to one thread is implicitly a grant to the other, defeating userspace ACL isolation. A secondary lost-update window between the unlocked &=~BIT() in alloc and the locked |= BIT() in thread_idx_free() can also leak entries from the thread-index pool. The defect is reachable from any user-mode thread via the unrestricted __syscall k_object_alloc and is gated on CONFIG_USERSPACE, CONFIG_DYNAMIC_OBJECTS, and CONFIG_SMP. The flaw was introduced when the per-thread permission index was added in 2018 and is present in every release up to and including v4.4.0. Fixed by holding lists_lock across the bitmap RMW and the permissions clear (and inlining the obj_list traversal that previously took the lock itself).
Configurations

Configuration 1 (hide)

cpe:2.3:o:zephyrproject:zephyr:*:*:*:*:*:*:*:*

History

24 Oct 2026, 13:10

Type Values Removed Values Added
Summary
  • (es) En el subsistema de objetos dinámicos del espacio de usuario de Zephyr, thread_idx_alloc() en kernel/userspace/userspace.c asignó un nuevo índice de permiso de hilo del mapa de bits global _thread_idx_map[] sin mantener lists_lock. En sistemas SMP, dos hilos en modo usuario que invocan la llamada al sistema k_object_alloc(K_OBJ_THREAD) concurrentemente pueden observar el mismo bit libre más bajo, realizar la misma operación RMW no atómica para borrarlo y devolver el tidx idéntico. A los dos objetos K_OBJ_THREAD recién creados se les asigna entonces el mismo thread_id, por lo que los dos hilos de usuario hacen alias a una única posición de bit en el campo de bits perms[] de cada objeto del kernel: cualquier concesión posterior de acceso en un objeto del kernel a un hilo es implícitamente una concesión al otro, lo que anula el aislamiento de ACL del espacio de usuario. Una ventana secundaria de actualización perdida entre el &=~BIT() desbloqueado en alloc y el |= BIT() bloqueado en thread_idx_free() también puede filtrar entradas del grupo de índices de hilos. El defecto es alcanzable desde cualquier hilo en modo usuario a través de la llamada al sistema __syscall k_object_alloc sin restricciones y está condicionado por CONFIG_USERSPACE, CONFIG_DYNAMIC_OBJECTS y CONFIG_SMP. La falla fue introducida cuando se añadió el índice de permiso por hilo en 2018 y está presente en cada versión hasta la v4.4.0 inclusive. Solucionado manteniendo lists_lock durante la operación RMW del mapa de bits y la limpieza de permisos (e inlining la traversión de obj_list que previamente tomaba el bloqueo por sí misma).

Information

Published : 2026-07-25 14:16

Updated : 2026-10-24 13:10


NVD link : CVE-2026-10681

Mitre link : CVE-2026-10681

CVE.ORG link : CVE-2026-10681


JSON object : View

Products Affected

zephyrproject

  • zephyr
CWE
CWE-362

Concurrent Execution using Shared Resource with Improper Synchronization ('Race Condition')