Bluetooth: btintel_pcie: validate device-supplied DMA indices
- 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.12.112, 6.18.55, 7.2.9
- 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: Bluetooth: btintel_pcie: validate device-supplied DMA indices In btintel_pcie_msix_rx_handle(), the driver processes RX completion descriptors (urbd1) written by the PCIe device into DMA-coherent memory. urbd1->frbd_tag (a 16-bit field fully controlled by the device firmware via DMA) is used directly as an array index into rxq->bufs[] without any bounds check. rxq->bufs[] has only BTINTEL_PCIE_RX_DESCS_COUNT (64) entries, while frbd_tag can be any value 0-65535. A malicious or malfunctioning device can write an out-of-range frbd_tag, causing the driver to dereference an out-of-bounds data_buf pointer. Additionally, cr_hia is read from a DMA-shared index array also writable by the device; if the device sets cr_hia >= rxq->count, the while-loop never terminates because cr_tia is wrapped via modulo rxq->count and can never equal an out-of-range cr_hia. Add bounds validation for cr_hia and frbd_tag in the RX path, and cr_hia in the TX path. Log invalid values with bt_dev_err before returning.
Timeline
- CVE published
- Record last updated
Affected versions
- Linux Linux
From c2b636b3f788d10486a6691ad6dd3ec4c93bd78e · fixed in f42cd95e679d5b78611cd2208cd1c41ad0045ffa; From c2b636b3f788d10486a6691ad6dd3ec4c93bd78e · fixed in 8ec5838a35b03ac0cf3602452a369898051ffaf9; From c2b636b3f788d10486a6691ad6dd3ec4c93bd78e · fixed in b29b70bfa12133423924fcd0327c19a802f7e368; From c2b636b3f788d10486a6691ad6dd3ec4c93bd78e · fixed in 37a11129345337efd6eef8e62b03b6348cd0dd8b
- Linux Linux
6.10
- KernelLinux
From 6.10.0 · fixed in 6.12.112; From 6.13.0 · fixed in 6.18.55; From 6.19.0 · fixed in 7.2.9