CVE-2026-98738: Bluetooth: Serialize SMP remote OOB data access
In the Linux kernel, the following vulnerability has been resolved:
Bluetooth: Serialize SMP remote OOB data access
buildpairingcmd() looks up remote OOB data and copies its contents without holding hdev->lock, which serializes the list's writers. After SMP finds an entry, a concurrent management Remove Remote OOB Data command can unlink and free it before SMP reads its present flag or copies its random and confirmation values. Removal can also invalidate an entry while the lookup is still traversing the list.
KASAN reported:
BUG: KASAN: slab-use-after-free in buildpairingcmd+0x948/0x9b0 Call Trace: buildpairingcmd+0x948/0x9b0 smprecvcb+0x459f/0x8110 l2caprecvframe+0xf14/0x9190 l2caprecvacldata+0xa64/0xd40 hcirxwork+0x4ca/0x730
Allocated by task 87: hciaddremoteoobdata+0x11d/0x530 addremoteoobdata+0x282/0x400 hcisocksendmsg+0x1033/0x1ea0
Freed by task 93: hciremoteoobdataclear+0x108/0x1c0 removeremoteoobdata+0x198/0x220 hcisocksendmsg+0x1033/0x1ea0
Taking hdev->lock in buildpairingcmd() would recurse for callers that already hold it and invert the device-to-L2CAP lock order on the receive path. Add a per-device remoteooblock instead, held across the SMP lookup and copies and by the add, remove and clear helpers. Cover initialization and in-place updates as well, so SMP cannot read partially initialized or updated OOB values. Release the mutex on allocation failure, preserving the existing error return.
The new critical sections acquire no device, connection or channel locks. Writers retain their existing hdev->lock protection, which continues to serialize the other readers without changing their locking or behavior.
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Compensating control
Add a per-device remote_oob_lock and hold it across SMP remote OOB lookup and copying, as well as remote OOB add, remove, and clear operations, to serialize access and prevent concurrent removal or in-place updates during reads.