CVE-2026-14367: I3C IBI work-node free-list data race between ISR and workqueue thread

Published Aug 31, 2026
·
Updated

The I3C IBI subsystem in drivers/i3c/i3cibiworkq.c hands out statically-allocated work nodes through a free-list i3cibiworknodesfree implemented as a plain sysslistt, which provides no synchronization. The allocation helpers (i3cibiworkenqueue, i3cibiworkenqueuetargetirq, i3cibiworkenqueuehotjoin, i3cibiworkenqueuecontrollerrequest, i3cibiworkenqueuecb) called sysslistget() directly from ISR context, while the workqueue handler i3cibiworkhandler() returned nodes with sysslistappend() from the workqueue thread, with no lock on either side.

Because sysslistget() and sysslistappend() are neither atomic nor interrupt-safe, an IBI interrupt that fires while the workqueue thread is mid-append (or a truly parallel access under CONFIGSMP) races on the shared list. This corrupts the list linkage: a node may be handed to two consumers, a node may be lost, or the head/tail pointers may be left inconsistent so sysslistget() returns a stale or garbage pointer. In the double-hand-out case the subsequent memcpy(ibinode, ibiwork, sizeof(ibinode)) overwrites a node still in flight; a garbage pointer turns the same memcpy into an out-of-bounds write.

The race is driven by I3C bus traffic — IBIs, hot-joins, and controller-role requests originate from target devices on the bus, and I3C supports hot-joining devices. An attacker controlling an I3C peripheral on the board's chip-to-chip bus can generate high-frequency interrupts timed to collide with the free operation. Exploitation requires physical access to the bus and winning a narrow timing window; the most realistic impact is a crash or hang (denial of service), with memory corruption possible but hard to control.

The fix wraps all free-list sysslistget()/sysslistappend() operations in the new ibiworkalloc()/ibiworkfree() helpers, each guarded by a kspinlock (ibiworklock), closing the race across ISR and thread contexts.

Affected Software

1 affected component
Linux i3c_ibi_workq.c (I3C IBI workqueue subsystem)

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Configuration

    Ensure the i3c IBI free-list operations (sys_slist_get() and sys_slist_append()) are performed only through ibi_work_alloc()/ibi_work_free() protected by the k_spinlock (ibi_work_lock), so ISR and workqueue contexts cannot race.

    i3c IBI workqueue free-list synchronization = spinlock-guarded via ibi_work_lock

Event History

Aug 31, 2026
CVE Published
via MITRE·06:13 PM
Data Sourced
via MITRE·06:13 PM
DescriptionSeverityWeakness

Frequently Asked Questions

1

Is an SMP configuration required for this issue to occur?

No. The race can occur when an IBI interrupt fires while the workqueue thread is appending a node, even without truly parallel execution. CONFIG_SMP provides an additional parallel-access scenario.

2

What access does an attacker need to exploit this issue?

The supplied severity vector indicates physical attack access, no privileges, and no user interaction. Exploitation is rated as having high attack complexity.

3

What are the practical consequences of triggering the race?

The free-list can become corrupted, causing work nodes to be reused while still in flight, lost, or returned as stale or garbage pointers. A reused node can be overwritten, while a garbage pointer can cause an out-of-bounds write through a subsequent memcpy.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203