Description
In the Linux kernel, the following vulnerability has been resolved:

Bluetooth: qca: fix NVM tag length underflow in TLV parser

In the TLV_TYPE_NVM branch of qca_tlv_check_data() the tag loop bound is
"while (idx < length - sizeof(struct tlv_type_nvm))". "length" is a signed
int from the firmware TLV header and sizeof(struct tlv_type_nvm) is a
size_t (12), so "length" is converted to size_t and any firmware-supplied
"length" < 12 makes the subtraction wrap to a huge value. The loop body
then reads a 12-byte struct tlv_type_nvm past the end of the short
vmalloc'd firmware buffer (and the EDL_TAG_ID_* handlers can write past it).

Rewrite the bound as "idx + sizeof(struct tlv_type_nvm) <= length"; both
operands are non-negative, so it no longer underflows and a "length" too
small for one record correctly skips the loop.

BUG: KASAN: vmalloc-out-of-bounds in qca_download_firmware.isra.0 (drivers/bluetooth/btqca.c:421)
Read of size 2 at addr ffffc900000e5004 by task kworker/u9:0/52
Workqueue: hci0 hci_power_on
Call Trace:
...
kasan_report (mm/kasan/report.c:595)
qca_download_firmware.isra.0 (drivers/bluetooth/btqca.c:421 drivers/bluetooth/btqca.c:617)
qca_uart_setup (drivers/bluetooth/btqca.c:948)
qca_setup (drivers/bluetooth/hci_qca.c:2029)
hci_uart_setup (drivers/bluetooth/hci_ldisc.c:438)
hci_dev_open_sync (net/bluetooth/hci_sync.c:5227)
hci_power_on (net/bluetooth/hci_core.c:920)
process_one_work (kernel/workqueue.c:3322)
worker_thread (kernel/workqueue.c:3486)
kthread (kernel/kthread.c:436)
ret_from_fork (arch/x86/kernel/process.c:158)
ret_from_fork_asm (arch/x86/entry/entry_64.S:245)
Published: 2026-08-05
Score: 7.0 High
EPSS: < 1% Very Low
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

The flaw is in the Bluetooth qca driver’s TLV parser. A signed firmware length value is converted to an unsigned size_t when checking the loop bound; if the length is less than 12, the subtraction wraps to a very large unsigned value and the loop reads past the end of the allocated firmware buffer. The out‑of‑bounds read can later be followed by writes that disturb kernel memory. An attack that supplies a firmware image with a small length can thus corrupt, crash the kernel or potentially allow execution of code in kernel mode. The weakness is a classic buffer mis‑calculation (CWE-125).

Affected Systems

All Linux kernel releases that include the qca Bluetooth driver before the committed patch are affected. Devices such as routers, embedded boards, laptops or any hosts that load qca firmware during Bluetooth initialization are at risk. The corrective commit has merged into recent stable kernel branches and is available through the official kernel source or downstream distributions.

Risk and Exploitability

The flaw is triggered when the qca driver parses a firmware TLV. If a firmware image supplies a signed length less than 12, the loop bound underflows, leading to an out‑of‑bounds read that can corrupt kernel memory during parsing. The CVSS score of 7.0 indicates a high impact. The EPSS score of < 1% suggests an extremely low likelihood of exploitation. The vulnerability is not listed in the CISA KEV catalog. The data does not indicate any publicly documented exploitation technique; the attack would require influencing the firmware that is loaded during Bluetooth initialization.

Generated by OpenCVE AI on August 7, 2026 at 03:53 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Apply the latest Linux kernel release that contains the qca TLV parsing patch, or cherry‑pick the relevant commit into the current kernel build.
  • If an immediate kernel upgrade is not feasible, disable or unload the qca driver or disable Bluetooth on the affected host to prevent firmware loading.
  • Reboot the system after applying the patch or disabling the driver so that the updated kernel image is used and the Bluetooth subsystem starts normally.

Generated by OpenCVE AI on August 7, 2026 at 03:53 UTC.

Tracking

Sign in to view the affected projects.

Advisories
Source ID Title
Debian DLA Debian DLA DLA-4745-1 linux-6.12 security update
Debian DSA Debian DSA DSA-6415-1 linux security update
History

Wed, 19 Aug 2026 16:45:00 +0000


Fri, 07 Aug 2026 02:45:00 +0000

Type Values Removed Values Added
Weaknesses CWE-119
CWE-193

Fri, 07 Aug 2026 00:15:00 +0000

Type Values Removed Values Added
Weaknesses CWE-125
References
Metrics threat_severity

None

cvssV3_1

{'score': 7.0, 'vector': 'CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H'}

threat_severity

Moderate


Wed, 05 Aug 2026 11:15:00 +0000

Type Values Removed Values Added
Weaknesses CWE-119
CWE-193

Wed, 05 Aug 2026 08:15:00 +0000

Type Values Removed Values Added
Description In the Linux kernel, the following vulnerability has been resolved: Bluetooth: qca: fix NVM tag length underflow in TLV parser In the TLV_TYPE_NVM branch of qca_tlv_check_data() the tag loop bound is "while (idx < length - sizeof(struct tlv_type_nvm))". "length" is a signed int from the firmware TLV header and sizeof(struct tlv_type_nvm) is a size_t (12), so "length" is converted to size_t and any firmware-supplied "length" < 12 makes the subtraction wrap to a huge value. The loop body then reads a 12-byte struct tlv_type_nvm past the end of the short vmalloc'd firmware buffer (and the EDL_TAG_ID_* handlers can write past it). Rewrite the bound as "idx + sizeof(struct tlv_type_nvm) <= length"; both operands are non-negative, so it no longer underflows and a "length" too small for one record correctly skips the loop. BUG: KASAN: vmalloc-out-of-bounds in qca_download_firmware.isra.0 (drivers/bluetooth/btqca.c:421) Read of size 2 at addr ffffc900000e5004 by task kworker/u9:0/52 Workqueue: hci0 hci_power_on Call Trace: ... kasan_report (mm/kasan/report.c:595) qca_download_firmware.isra.0 (drivers/bluetooth/btqca.c:421 drivers/bluetooth/btqca.c:617) qca_uart_setup (drivers/bluetooth/btqca.c:948) qca_setup (drivers/bluetooth/hci_qca.c:2029) hci_uart_setup (drivers/bluetooth/hci_ldisc.c:438) hci_dev_open_sync (net/bluetooth/hci_sync.c:5227) hci_power_on (net/bluetooth/hci_core.c:920) process_one_work (kernel/workqueue.c:3322) worker_thread (kernel/workqueue.c:3486) kthread (kernel/kthread.c:436) ret_from_fork (arch/x86/kernel/process.c:158) ret_from_fork_asm (arch/x86/entry/entry_64.S:245)
Title Bluetooth: qca: fix NVM tag length underflow in TLV parser
First Time appeared Linux
Linux linux Kernel
CPEs cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
Vendors & Products Linux
Linux linux Kernel
References

Subscriptions

Linux Linux Kernel
cve-icon MITRE

Status: PUBLISHED

Assigner: Linux

Published:

Updated: 2026-08-19T16:28:52.002Z

Reserved: 2026-07-19T15:36:31.797Z

Link: CVE-2026-64573

cve-icon Vulnrichment

No data.

cve-icon NVD

Status : Received

Published: 2026-08-05T08:16:37.057

Modified: 2026-08-19T17:20:17.243

Link: CVE-2026-64573

cve-icon Redhat

Severity : Moderate

Publid Date: 2026-08-05T00:00:00Z

Links: CVE-2026-64573 - Bugzilla

cve-icon OpenCVE Enrichment

Updated: 2026-08-07T04:00:04Z

Weaknesses