Description
dynamic_object_create() in kernel/userspace/userspace.c computed the backing allocation for a dynamically allocated kernel object as obj_size_get(otype) + size, and for thread stack elements as STACK_ELEMENT_DATA_SIZE(size) (a round-up plus fixed overhead), without checking either expression for unsigned wrap-around. A size close to SIZE_MAX makes the computed total wrap to a very small value, so the heap chunk handed out is a few bytes while the object descriptor is still tagged with the full requested type and registered in the kernel object table.

The size argument reaches that arithmetic directly from user mode. k_object_alloc_size() is declared __syscall in include/zephyr/sys/kobject.h, its verifier z_vrfy_k_object_alloc_size() in kernel/userspace/userspace_handler.c is a bare pass-through, and z_object_alloc() only range-checks otype — nothing bounds size. The stack-element branch is additionally reachable through the k_thread_stack_alloc() syscall via kernel/dynamic.c. Because subsequent kernel-object validation checks only the object's type and initialization state, the undersized handle passes K_SYSCALL_OBJ_INIT()/K_SYSCALL_OBJ_NEVER_INIT(), and the matching init syscall (for example k_mutex_init(), k_sem_init(), or k_thread_create()) then writes a complete object over the truncated allocation.

An unprivileged user-mode thread can therefore trigger a supervisor-mode out-of-bounds write into the kernel resource-pool heap, of a size and content it substantially controls, corrupting sys_heap chunk metadata and adjacent kernel objects. Under CONFIG_GEN_PRIV_STACKS the thread-stack branch additionally stores an attacker-influenced wild pointer as a user thread's privileged stack base. The practical result is escape from the CONFIG_USERSPACE sandbox — kernel-level code execution or at minimum kernel memory corruption and system compromise.

Exploitation requires CONFIG_USERSPACE together with CONFIG_DYNAMIC_OBJECTS (also selected by CONFIG_DYNAMIC_THREAD under userspace), and a calling thread with an assigned resource pool. The fix rejects both overflowing computations and frees the partially built descriptor.
Published: 2026-10-09
Score: 8.8 High
EPSS: < 1% Very Low
KEV: No
Impact: Kernel memory corruption and privilege escalation
Action: Immediate patch
AI Analysis

Impact

An integer overflow occurs during dynamic kernel object allocation when the kernel combines a base size with a user‑supplied size without checking for unsigned wrap‑around. If the user supplies a value close to SIZE_MAX, the result wraps to a very small allocation while the object descriptor still claims the full requested size. The unprivileged user‑mode thread can then write beyond the truncated heap region, corrupting sys_heap metadata and adjacent kernel objects, and may also write a user‑controlled pointer as a privileged stack base. The consequence is a loss of the CONFIG_USERSPACE sandbox, enabling kernel‑level code execution or, at minimum, kernel memory corruption and system compromise.

Affected Systems

The vulnerability resides in the Zephyr RTOS kernel, specifically in the userspace support for dynamic object allocation. While no particular release is listed, any Zephyr build that enables CONFIG_USERSPACE together with CONFIG_DYNAMIC_OBJECTS or the derived CONFIG_DYNAMIC_THREAD may be affected. The flaw is present in the dynamic_object_create routine and can also be triggered via the k_thread_stack_alloc syscall. Vendors using Zephyr in IoT and embedded devices should verify whether these configuration options are active.

Risk and Exploitability

The CVSS score of 8.8 classifies this issue as high severity. EPSS is not available, and the vulnerability is not listed in CISA KEV. Exploitation requires a local user‑mode thread on a system that has userspace enabled and a configured resource pool. The likely attack vector is local, with no network exposure required. Once the overflow is triggered, the attacker can corrupt kernel memory or gain privilege escalation, making the risk substantial. Although no publicly available exploit is documented, the combination of high severity and the conditions that must be present in a typical Zephyr deployment warrants immediate remediation.

Generated by OpenCVE AI on October 9, 2026 at 08:50 UTC.

Remediation

No solution or workaround provided in the CVE record.

OpenCVE Recommended Actions

  • Apply the Zephyr patch that adds bounds checking to dynamic_object_create and k_object_alloc_size to prevent unsigned wrap‑around.
  • Rebuild the Zephyr kernel with the updated source and redeploy the firmware to all affected devices.
  • If dynamic kernel objects are not required, disable CONFIG_DYNAMIC_OBJECTS or CONFIG_DYNAMIC_THREAD; otherwise confirm that the patched bounds checks are active during runtime.

Generated by OpenCVE AI on October 9, 2026 at 08:50 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Fri, 09 Oct 2026 18:30:00 +0000

Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'no', 'Exploitation': 'none', 'Technical Impact': 'total'}, 'version': '2.0.3'}


Fri, 09 Oct 2026 09:15:00 +0000

Type Values Removed Values Added
First Time appeared Zephyrproject
Zephyrproject zephyr
Vendors & Products Zephyrproject
Zephyrproject zephyr

Fri, 09 Oct 2026 07:45:00 +0000

Type Values Removed Values Added
Description dynamic_object_create() in kernel/userspace/userspace.c computed the backing allocation for a dynamically allocated kernel object as obj_size_get(otype) + size, and for thread stack elements as STACK_ELEMENT_DATA_SIZE(size) (a round-up plus fixed overhead), without checking either expression for unsigned wrap-around. A size close to SIZE_MAX makes the computed total wrap to a very small value, so the heap chunk handed out is a few bytes while the object descriptor is still tagged with the full requested type and registered in the kernel object table. The size argument reaches that arithmetic directly from user mode. k_object_alloc_size() is declared __syscall in include/zephyr/sys/kobject.h, its verifier z_vrfy_k_object_alloc_size() in kernel/userspace/userspace_handler.c is a bare pass-through, and z_object_alloc() only range-checks otype — nothing bounds size. The stack-element branch is additionally reachable through the k_thread_stack_alloc() syscall via kernel/dynamic.c. Because subsequent kernel-object validation checks only the object's type and initialization state, the undersized handle passes K_SYSCALL_OBJ_INIT()/K_SYSCALL_OBJ_NEVER_INIT(), and the matching init syscall (for example k_mutex_init(), k_sem_init(), or k_thread_create()) then writes a complete object over the truncated allocation. An unprivileged user-mode thread can therefore trigger a supervisor-mode out-of-bounds write into the kernel resource-pool heap, of a size and content it substantially controls, corrupting sys_heap chunk metadata and adjacent kernel objects. Under CONFIG_GEN_PRIV_STACKS the thread-stack branch additionally stores an attacker-influenced wild pointer as a user thread's privileged stack base. The practical result is escape from the CONFIG_USERSPACE sandbox — kernel-level code execution or at minimum kernel memory corruption and system compromise. Exploitation requires CONFIG_USERSPACE together with CONFIG_DYNAMIC_OBJECTS (also selected by CONFIG_DYNAMIC_THREAD under userspace), and a calling thread with an assigned resource pool. The fix rejects both overflowing computations and frees the partially built descriptor.
Title Integer overflow in dynamic kernel object allocation allows user-mode threads to corrupt the kernel heap
Weaknesses CWE-190
References
Metrics cvssV3_1

{'score': 8.8, 'vector': 'CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H'}


Subscriptions

Zephyrproject Zephyr
cve-icon MITRE

Status: PUBLISHED

Assigner: zephyr

Published:

Updated: 2026-10-09T17:55:18.376Z

Reserved: 2026-08-11T19:13:49.614Z

Link: CVE-2026-19569

cve-icon Vulnrichment

Updated: 2026-10-09T17:55:09.831Z

cve-icon NVD

Status : Awaiting Analysis

Published: 2026-10-09T08:16:54.563

Modified: 2026-10-09T18:17:07.760

Link: CVE-2026-19569

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-10-09T09:00:03Z

Weaknesses
  • CWE-190

    Integer Overflow or Wraparound