CVE-2026-64573

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

State
Published
Severity
Not scored
Published
Aug 5, 2026
Updated
Aug 19, 2026
Reserved
Jul 19, 2026

Read the record on cve.org

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)

Scores

The record has no CVSS score.

Weaknesses

The record names no weakness.

Affected Products

ProductVersions
LinuxLinux
  • ed53949cc92e28aaa3463d246942bda1fbb7f307 to before a7ee11441d71ab036a705d110a415421f5a4a898Affected
  • 1caceadfb50432dbf6d808796cb6c34ebb6d662c to before 5d34e537755d2f9eba2d4e54d70126f987ef20b4Affected
  • 427281f9498ed614f9aabc80e46ec077c487da6d to before 70354dbb5f72d9a76da7b031de3cbaf6c7d8fc24Affected
  • 2e4edfa1e2bd821a317e7d006517dcf2f3fac68d to before 59fd2f075bca94f030c7c78e94878ea0803d7690Affected
  • 2e4edfa1e2bd821a317e7d006517dcf2f3fac68d to before a087ed960fce54e9302796229e9d545bbc9bcd4aAffected
  • 2e4edfa1e2bd821a317e7d006517dcf2f3fac68d to before 4fcfb5b2c736785464ff9745f94c6726c5ee2d85Affected
  • 2e4edfa1e2bd821a317e7d006517dcf2f3fac68d to before c90164ca0f7036942ba088eb7ea8d3f6c2352020Affected
  • 02f05ed44b71152d5e11d29be28aed91c0489b4eAffected
  • 5.15.159 to before 5.15.216Affected
  • 6.1.91 to before 6.1.183Affected
  • 6.6.31 to before 6.6.148Affected
  • 6.8.10 to before 6.9Affected
LinuxLinux
  • 6.9Affected
  • before 6.9Not affected
  • 5.15.216 through 5.15.*Not affected
  • 6.1.183 through 6.1.*Not affected
  • 6.6.148 through 6.6.*Not affected
  • 6.12.101 through 6.12.*Not affected
  • 6.18.42 through 6.18.*Not affected
  • 7.1.6 through 7.1.*Not affected
  • 7.2 and laterNot affected

References

Every record here comes from the CVE Program’s CVE List. © 1999–2026 The MITRE Corporation. CVE is a registered trademark of The MITRE Corporation. The records are reproduced under the CVE Program terms of use.