CVE-2026-93202: i3c: master: Fix recursive locking during device registration
In the Linux kernel, the following vulnerability has been resolved:
i3c: master: Fix recursive locking during device registration
i3cmasterregisternewi3cdevs() registers newly discovered devices while holding i3cbusnormaluselock(), a downread(). deviceregister() can immediately probe the device, and probe callbacks typically invoke I3C helpers that take i3cbusnormaluselock() again, leading to a recursive acquisition of the same rwsem. rwsems do not support recursive read locking and can deadlock when a writer is waiting. See the "Recursive read locks" section of Documentation/locking/lockdep-design.rst.
For example, with Intel LPSS I3C, LOCKDEP generates a WARNING like: # echo intel-lpss-i3c.0 > /sys/bus/platform/drivers/mipi-i3c-hci/unbind # echo intel-lpss-i3c.0 > /sys/bus/platform/drivers/mipi-i3c-hci/bind WARNING: possible recursive locking detected kworker/5:1/94 is trying to acquire lock: ffff88811c810d78 (&i3cbus->lock){++++}-{4:4}, at: i3cdevicematchid+0x45/0x370 but task is already holding lock: ffff88811c810d78 (&i3cbus->lock){++++}-{4:4}, at: i3cmasterregworkfn+0x21/0x5f0
Fix this by separating device creation from device registration. Populate desc->dev under the maintenance lock, collect the devices that still need registration into a local list, then release the lock before calling deviceregister(). Finally retake the lock and clean up any devices that failed to register.
Use the maintenance lock rather than the normal-use lock while adding device objects. A write-side maintenance lock prevents readers from observing a partially initialized desc->dev during initial device population, or desc->dev disappearing if registration fails.
The local list requires a list node, so add a list node member to struct i3cdevice.
Affected Software
Event History
Frequently Asked Questions
Which systems are realistically exposed to this issue?
Systems using the Linux kernel I3C subsystem and registering newly discovered I3C devices are affected by the described locking path. The report demonstrates the condition with Intel LPSS I3C.
What event triggers the deadlock condition?
The condition occurs when device registration immediately invokes a probe callback that calls I3C helpers while i3c_bus_normaluse_lock() is already held for reading. A recursive read-lock acquisition can deadlock when a writer is waiting.
How can an administrator identify this condition?
Kernel lockdep may report a "possible recursive locking detected" warning involving the I3C bus lock. The example reproduces this by unbinding and rebinding an Intel LPSS I3C device through its platform-driver sysfs entries.