---
id: CVE-2026-98601
title: 'Bluetooth: btintel_pcie: validate device-supplied DMA indices'
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 P…
severity: none
vendor: Linux
product: Linux
affected:
  - >-
    Linux >= c2b636b3f788d10486a6691ad6dd3ec4c93bd78e <
    f42cd95e679d5b78611cd2208cd1c41ad0045ffa
  - >-
    Linux >= c2b636b3f788d10486a6691ad6dd3ec4c93bd78e <
    8ec5838a35b03ac0cf3602452a369898051ffaf9
  - >-
    Linux >= c2b636b3f788d10486a6691ad6dd3ec4c93bd78e <
    b29b70bfa12133423924fcd0327c19a802f7e368
  - >-
    Linux >= c2b636b3f788d10486a6691ad6dd3ec4c93bd78e <
    37a11129345337efd6eef8e62b03b6348cd0dd8b
  - Linux 6.10
published: '2026-10-18'
updated: '2026-10-18'
sourceUpdated: '2026-10-18T15:19:13.760Z'
source: CVEORG
sourceUrl: 'https://www.cve.org/CVERecord?id=CVE-2026-98601'
references:
  - url: 'https://git.kernel.org/stable/c/f42cd95e679d5b78611cd2208cd1c41ad0045ffa'
  - url: 'https://git.kernel.org/stable/c/8ec5838a35b03ac0cf3602452a369898051ffaf9'
  - url: 'https://git.kernel.org/stable/c/b29b70bfa12133423924fcd0327c19a802f7e368'
  - url: 'https://git.kernel.org/stable/c/37a11129345337efd6eef8e62b03b6348cd0dd8b'
tags:
  - cve.org
ingestedAt: '2026-10-18T15:45:12.249Z'
---

## Overview

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.

## Affected

- `Linux >= c2b636b3f788d10486a6691ad6dd3ec4c93bd78e < f42cd95e679d5b78611cd2208cd1c41ad0045ffa`
- `Linux >= c2b636b3f788d10486a6691ad6dd3ec4c93bd78e < 8ec5838a35b03ac0cf3602452a369898051ffaf9`
- `Linux >= c2b636b3f788d10486a6691ad6dd3ec4c93bd78e < b29b70bfa12133423924fcd0327c19a802f7e368`
- `Linux >= c2b636b3f788d10486a6691ad6dd3ec4c93bd78e < 37a11129345337efd6eef8e62b03b6348cd0dd8b`
- `Linux 6.10`

## Remediation

Refer to the linked advisories for vendor-supplied fixes and affected version ranges.
