HIGH Introduced in 2.6.12
bluetooth L2CAP PSM OOB
CVE-2026-97408
CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:H
01Description
In the Linux kernel, the following vulnerability has been resolved: Bluetooth: L2CAP: validate connectionless PSM length Connectionless L2CAP frames carry a two-byte PSM at the start of the payload. l2cap_recv_frame() currently reads that PSM unconditionally after validating only the outer L2CAP length. A malformed connectionless frame with a zero- or one-byte payload can therefore make the parser read beyond the advertised skb payload and use tailroom bytes as part of the PSM. A VHCI-backed QEMU reproducer injected a one-byte connectionless payload and reached the unchecked read. Reject connectionless frames that cannot contain the PSM before reading or pulling it. This preserves all valid connectionless frames while dropping only structurally incomplete packets.
02KernelScan AI Analysis
Risk summary
An attacker within Bluetooth range can send a malformed connectionless L2CAP frame with a one-byte or empty payload. Because the parser does not check the payload size before reading the two-byte channel identifier, it reads past the valid data and corrupts the packet's length record. Subsequent processing can then read far beyond the original buffer, leaking kernel memory and potentially crashing the system when the read hits unmapped pages.
Vulnerability analysis
The Bluetooth L2CAP parser assumes every connectionless frame contains at least a two-byte channel identifier at the start of its payload, but it never verifies this. When a malformed frame arrives with a payload smaller than two bytes, the parser reads past the end of the valid data, picking up whatever bytes happen to be next in memory as the identifier. It also advances its position in the buffer beyond what actually exists, which corrupts the packet's recorded size. As a result, any further handling of the frame can operate on a far larger buffer than is real, reading well outside the original packet boundaries. This can leak kernel memory and, because the read is unbounded, eventually touch unmapped pages and crash the system. The fix rejects any connectionless frame that is too short to hold the identifier before attempting to read or move past it, dropping only structurally incomplete packets while preserving all valid ones. The vulnerable path is reached whenever the kernel receives a Bluetooth L2CAP connectionless frame, which any device within Bluetooth radio range can send without authentication; it can also be triggered locally through a virtual HCI interface.
Lifecycle
03Fix Versions
| Branch | Introduced | Fixed in | Patch commit |
|---|---|---|---|
| 5.10 | 2.6.12 | 5.10.271 | 8104cd9859b6 |
| 5.15 | 2.6.12 | 5.15.222 | 9448e6f693fc |
| 6.1 | 2.6.12 | 6.1.189 | 22fc1ce4e37c |
| 6.12 | 2.6.12 | 6.12.111 | 3502ede8aed3 |
| 6.18 | 2.6.12 | 6.18.53 | ae69dca122f6 |
| 6.6 | 2.6.12 | 6.6.158 | 72e26293a231 |
| mainline | 2.6.12 | 7.2 | a40a5f922546 |
| cip/5.10 | 2.6.12 | 5.10.271-cip78 | 8104cd9859b6 |
| cip/6.1 | 2.6.12 | 6.1.189-cip61 | 22fc1ce4e37c |
| cip/6.1-rt | 2.6.12 | 6.1.189-cip61-rt32 | 22fc1ce4e37c |
| cip/6.12 | 2.6.12 | 6.12.111-cip32 | 3502ede8aed3 |
04CIP Kernels
State of the newest release of each Civil Infrastructure Platform SLTS tree, from CIP's own fix records.
| CIP tree | State |
|---|---|
| cip/6.12 | Fixed in 6.12.111-cip32 |
| cip/6.1 | Fixed in 6.1.189-cip61 |
| cip/6.1-rt | Fixed in 6.1.189-cip61-rt32 |
| cip/5.10 | Fixed in 5.10.271-cip78 |
| cip/5.10-rt | Affected — no CIP fix yet (latest 5.10.268-cip77-rt34) |
| cip/4.19 | Affected — no CIP fix yet (latest 4.19.325-cip136) |
| cip/4.19-rt | Affected — no CIP fix yet (latest 4.19.325-cip136-rt50) |
| cip/4.4 | Affected — no CIP fix yet (latest 4.4.302-cip115) |
| cip/4.4-rt | Affected — no CIP fix yet (latest 4.4.302-cip115-rt63) |