CVE-2026-87039
I2S configure syscall handler passes an unvalidated user-supplied kernel object pointer to drivers
No exploitation reported by the sources we read.
- Published2026-11-04
- WeaknessCWE-787
Am I affected?
Debian, Ubuntu or Red Hat sometimes backport a fix without changing the upstream version number: such a version reads « to verify », never « affected ».With a domain, we read the version its public headers and pages expose. A distribution build can carry the fix under an older number.
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.
Timeline
dates in UTC- 2026-11-0406:09CVE publishedCNA
Observed activity
isMalicious corpus · updated 2026-11-04 03:37 UTCBlock these indicators
- Firewall list (EDL, text): https://api.ismalicious.com/edl/cve/CVE-2026-87039?format=txt
- CSV export: https://api.ismalicious.com/edl/cve/CVE-2026-87039?format=csv
- TAXII collection of exploited CVEs
- The EDL and CSV take an API key on the Pro plan.
Versions per branch
Products declared by the CNA
As zephyr, the CNA that assigned this CVE, declared them in the CVE record; versions as written. NVD lists no product for this CVE yet: this is the only product data so far.
- zephyrproject zephyrother versions: not affected
package zephyrhttps://github.com/zephyrproject-rtos/zephyr
Affected- ≥ 4.4.0, < 4.5.0fixed in 4.5.0semver
Source: the CNA record (CVE Program), © The MITRE Corporation,CVE Terms of UseCVE recordupdated 2026-11-04
Neither OSV.dev nor the vendor advisories we read list affected versions for CVE-2026-87039 yet.
Fix
No fix published by the sources we read yet. NVD record
Detection
- Nuclei template
- none so far ProjectDiscovery
- Exploit-DB
- no entry Exploit-DB
- Proof-of-concept repositories
- none listed PoC-in-GitHub
- Metasploit modules
- none listed Metasploit Framework
Sources
Technical details
- CVSS v3 Vector
- CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:C/C:H/I:H/A:H
- Published
- 2026-11-04
Frequently asked questions
What is CVE-2026-87039?
Is CVE-2026-87039 actively exploited?
What is the CVSS score for CVE-2026-87039?
Hear about the next vulnerability in your software
Surveillance reads the versions in your stack — a domain, a lockfile or a list — checks each CVE against the ranges its sources publish, and alerts you when one you run is exploited or enters CISA KEV. A version it cannot read stays « version not verified ».
No credit card required · No monthly cap on website lookups · 250 API requests/month
Go further
- Following what attackers exploit right now? The CISA KEV additions of the month, with their patch deadlines.
- Running this software? Vulnerability monitoring alerts you to new vulnerabilities in your products.
Related vulnerabilities
Same product first, then the same vendor advisory and the same publication week.
- CVE-2026-118527KEVsame week
- CVE-2026-120276same weekWAVLINK WN536AX6-A Web Management ioos sub_416760 os command injection
- CVE-2026-18199same weekRemote Code Execution Vulnerability
- CVE-2026-120277same weekWAVLINK WN536AX6-A WireGuard CLI Group ioos sub_41a1d8 os command injection
- CVE-2026-77691same weekCommand injection vulnerability
- CVE-2026-8923same weekRemote Code Execution
- CVE-2026-94349same weekOS Command Injection in Dell OpenManage Enterprise Enables Remote Command Execution
- CVE-2026-77876same weekControl Web Panel (CWP) < 1.16 OS Command Injection via protected_directory