i3c: mipi-i3c-hci: Fix race in i3c_hci_addr_to_dev()
- Published
- Last modified
- Where the record stands: published, rejected by its publisher, or superseded by another id.What do these mean? →
- published
- Whether CISA lists it in its Known Exploited Vulnerabilities catalog: proof that attackers are using it.What do these mean? →
- Not listed in CISA KEV
- Fix
- Fixed in 6.18.57, 7.1.5
- Whether working attack code is public (Exploit-DB, Metasploit, Nuclei or GitHub). Public code makes attacks easier.What do these mean? →
- None on Exploit-DB, Metasploit or GitHub
Summary
In the Linux kernel, the following vulnerability has been resolved: i3c: mipi-i3c-hci: Fix race in i3c_hci_addr_to_dev() i3c_hci_addr_to_dev() walks bus->devs.i3c, which is protected by bus.lock (rwsem). However, it is invoked from the MIPI I3C HCI IRQ handler, which cannot take bus.lock. This allows concurrent device addition/removal in the I3C core to modify the list while it is being traversed, potentially leading to use-after-free or crashes. Remove the dependency on the bus device list and introduce a dedicated lookup table. Add an ibi_devs[] array indexed by DAT entry, maintained under hci->lock. Update the array when IBIs are enabled or disabled, so that it always reflects the set of devices allowed to generate IBIs. Also update when IBIs are freed, to cover the corner case when an IBI is freed without first being disabled (e.g. oldedev in i3c_master_add_i3c_dev_locked()). Move i3c_hci_addr_to_dev() into core.c, reimplement it using the new array, and add a lockdep assertion to enforce that hci->lock is held by callers. Demote a message in PIO and DMA IBI handling, from an error to a debug message, because there is a race window when the condition can arise normally.
Timeline
- CVE published
- Record last updated
Affected versions
- Linux Linux
From 9ad9a52cce2828d932ae9495181e3d6414f72c07 · fixed in 308d7951ca221e8c8896b563c4e98d28a4400f2e; From 9ad9a52cce2828d932ae9495181e3d6414f72c07 · fixed in 8f851cab401c28287d536b1347d76f6e219c0db6; From 9ad9a52cce2828d932ae9495181e3d6414f72c07 · fixed in 650716f23eac488c6696babdc7805f6a6b7427ad
- Linux Linux
5.11
- KernelLinux
From 5.11.0 · fixed in 6.18.57; From 6.19.0 · fixed in 7.1.5