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

Goal: 1000 CNY · Raised: 1359 CNY

100%

CVE-2026-87039— I2S configure syscall handler passes an unvalidated user-supplied kernel object pointer to drivers

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.

在 中,用户态系统调用验证器 会从用户内存复制调用者提供的 结构体。然而,当 为 0(即 API 的“取消配置流”请求)时,该函数会直接跳转到 ,而未执行针对 的 所有权/类型检查,也未执行 的合理性检查。 由于 字段是一个 指针,这意味着在该路径下,一个完全未经验证、由用户任意指定的指针会直接传入驱动程序代码。而驱动程序代码通常默认该指针指向一个合法的内核对象,从而信任它。 任何在启用 配置下运行、且能访问 I2S 设备对象的线程,都可以通过单次调用 来触发此漏洞。虽然大多数内核自带(in-tree)的驱动程序会

CVSS 7.8 · High
Get alerts for future matching vulnerabilities Log in to subscribe

I. Basic Information for CVE-2026-87039

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
I2S configure syscall handler passes an unvalidated user-supplied kernel object pointer to drivers
Source: CVE Program / CVE List V5
Vulnerability Description
The user-mode syscall verifier z_vrfy_i2s_configure() in drivers/i2s/i2s_handlers.c copies the caller's struct i2s_config in from user memory and then, when cfg->frame_clk_freq is 0 (the API's "unconfigure the stream" request), jumps straight to z_impl_i2s_configure() without performing the K_SYSCALL_OBJ(config.mem_slab, K_OBJ_MEM_SLAB) ownership/type check or the block_size sanity check. The mem_slab field is a struct k_mem_slab *, so on that path a completely unvalidated, user-chosen pointer reaches driver code that is entitled to trust it as a real kernel object. Any thread running under CONFIG_USERSPACE that has access to an I2S device object can trigger this with a single i2s_configure() call. Most in-tree drivers special-case frame_clk_freq == 0 and never store the caller's structure, but drivers/i2s/i2s_litex.c does not: i2s_litex_configure() only logs a warning for a mismatched frame clock, then memcpy()s the caller's config into stream->cfg and marks the stream I2S_STATE_READY. A subsequent i2s_trigger() with I2S_TRIGGER_START enables the FIFO interrupt, and the interrupt handlers i2s_litex_isr_rx() / i2s_litex_isr_tx() then call k_mem_slab_alloc() and k_mem_slab_free() on the attacker-supplied pointer in supervisor context. The result is an arbitrary-pointer read/write primitive executed by the kernel on behalf of an unprivileged thread — k_mem_slab_alloc() takes a spinlock at slab->lock and reads and writes slab->free_list and the link word inside the returned "block" — which defeats the CONFIG_USERSPACE isolation boundary entirely. The same missing validation is a hazard for out-of-tree I2S drivers that retain the configuration on the unconfigure path. Builds without CONFIG_USERSPACE are unaffected, since the verifier is not used. The fix zeroes config.mem_slab and config.block_size on the unconfigure path so the driver can never receive an unvalidated pointer, while still allowing a stream to be unconfigured by a caller that does not own a memory slab, as the API documents.
Source: CVE Program / CVE List V5
CVSS Information
CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:C/C:H/I:H/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 4.4.0 ~ 4.5.0 -

II. Public POCs for CVE-2026-87039

# 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-87039

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

Other References for CVE-2026-87039 (2)

Same Patch Batch · zephyrproject · 2026-11-04 · 8 CVEs total

CVE-2026-16511 8.8 HIGH Unvalidated user pointers in RTIO syscall verifiers allow a user-mode thread to write kern
CVE-2026-87040 8.3 HIGH Bluetooth LE Controller accepts received PDUs whose length field exceeds the configured ma
CVE-2026-87041 7.8 HIGH Inverted memory-permission check in the RTIO syscall verifier allows a user-mode thread to
CVE-2026-87038 7.0 HIGH Time-of-check/time-of-use double fetch in the Zephyr i3c_transfer() syscall handler allows
CVE-2026-87044 6.5 MEDIUM Memory leak in the Mbed TLS crypto shim on failed cipher/AEAD operations leads to remotely
CVE-2026-85036 5.7 MEDIUM Bluetooth Classic AVDTP session reuse re-initializes a queued work item, corrupting the sy
CVE-2026-87043 4.8 MEDIUM sys_rand_get() silently returns an unwritten buffer when the entropy device is not ready

IV. Related Vulnerabilities