CVE-2026-89583
nicheOut-of-bounds read in Linux kernel Bluetooth EIR parsing leaks kernel memory via LE Audio
The Linux kernel's Bluetooth Extended Inquiry Response (EIR) parser contains an out-of-bounds read in eir_get_service_data(), which mis-accounts the remaining buffer length by subtracting only each field's data length instead of its full dlen + 2 footprint, so the length drifts and eventually the parser reads past the end of the buffer. A remote attacker within Bluetooth radio range can trigger this by broadcasting periodic advertising (PA) payloads packed with mismatching Service Data fields to a device acting as an ISO broadcast sink; the parser walks off the le_per_adv_data[] array into the rest of struct hci_conn. If a drifted field matches the BAA UUID, the leaked kernel bytes are copied into the socket's ISO base structure, where user space can read them back via getsockopt(BT_ISO_BASE), yielding disclosure of adjacent kernel heap memory (CVSS 3.1: 8.1, high confidentiality and availability impact, adjacent-network vector). Affected systems are Linux machines whose Bluetooth stack is configured as an LE Audio ISO broadcast sink — a relatively new and specialized role, not the common phone/headset case. No public proof of concept is known, the flaw is not on the CISA KEV list, and no in-the-wild exploitation has been reported.
What to do: Apply kernel updates from your distribution once the fix (recomputing eir_len from the end of the buffer each iteration) is included, and verify with your vendor's advisory that the backported patch covers eir_get_service_data(). If patching is delayed, avoid operating affected systems as ISO broadcast sinks (disable LE Audio broadcast sink / periodic advertising sync where feasible) or turn off Bluetooth entirely on devices that don't need it. Watch kernel logs for slab/KASAN out-of-bounds reports on Bluetooth RX paths as an indicator of probing.
| Linux kernel (Bluetooth EIR parsing, eir_get_service_data(), reached via the ISO broadcast sink / periodic advertising p | — |
Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.
In the Linux kernel, the following vulnerability has been resolved: Bluetooth: eir: Fix OOB read in eir_get_service_data() eir_get_service_data() walks the advertising data for a Service Data field with a matching UUID. On a mismatch it advances: eir += dlen; eir_len -= dlen; eir_get_data() reports dlen as the field's data length, but the field spans dlen + 2 bytes once its length and type bytes count, and more when non-Service-Data fields were skipped to reach it. The pointer lands correctly on the next field. eir_len does not, and the shortfall compounds across fields until eir_get_data() reads the length and type bytes of a "field" past the end of the buffer. For an ISO broadcast sink that buffer is hcon->le_per_adv_data[], filled from the periodic advertising reports of a remote broadcaster. A PA payload packed with mismatching Service Data fields walks off the array into the rest of struct hci_conn. A drifted field that matches the BAA UUID puts those bytes in iso_pi(sk)->base, where user space reads them back with getsockopt(BT_ISO_BASE). Recompute eir_len from the end of the buffer each iteration.
- Vector
- CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:H
In the news0 stories
No ingested article mentions this CVE yet.