CVE-2026-64573 (GCVE-0-2026-64573)

Vulnerability from cvelistv5 – Published: 2026-08-05 08:08 – Updated: 2026-08-05 08:08
VLAI
Title
Bluetooth: qca: fix NVM tag length underflow in TLV parser
Summary
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)
Severity
No CVSS data available.
Assigner
Impacted products
Vendor Product Version
Linux Linux Affected: 427281f9498ed614f9aabc80e46ec077c487da6d , < 70354dbb5f72d9a76da7b031de3cbaf6c7d8fc24 (git)
Affected: 2e4edfa1e2bd821a317e7d006517dcf2f3fac68d , < 59fd2f075bca94f030c7c78e94878ea0803d7690 (git)
Affected: 2e4edfa1e2bd821a317e7d006517dcf2f3fac68d , < a087ed960fce54e9302796229e9d545bbc9bcd4a (git)
Affected: 2e4edfa1e2bd821a317e7d006517dcf2f3fac68d , < 4fcfb5b2c736785464ff9745f94c6726c5ee2d85 (git)
Affected: 2e4edfa1e2bd821a317e7d006517dcf2f3fac68d , < c90164ca0f7036942ba088eb7ea8d3f6c2352020 (git)
Affected: ed53949cc92e28aaa3463d246942bda1fbb7f307 (git)
Affected: 1caceadfb50432dbf6d808796cb6c34ebb6d662c (git)
Affected: 02f05ed44b71152d5e11d29be28aed91c0489b4e (git)
Affected: 6.6.31 , < 6.6.148 (semver)
Affected: 5.15.159 , < 5.16 (semver)
Affected: 6.1.91 , < 6.2 (semver)
Affected: 6.8.10 , < 6.9 (semver)
Create a notification for this product.
Linux Linux Affected: 6.9
Unaffected: 0 , < 6.9 (semver)
Unaffected: 6.6.148 , ≤ 6.6.* (semver)
Unaffected: 6.12.101 , ≤ 6.12.* (semver)
Unaffected: 6.18.42 , ≤ 6.18.* (semver)
Unaffected: 7.1.6 , ≤ 7.1.* (semver)
Unaffected: 7.2-rc4 , ≤ * (original_commit_for_fix)
Create a notification for this product.
Show details on NVD website

{
  "containers": {
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "drivers/bluetooth/btqca.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "70354dbb5f72d9a76da7b031de3cbaf6c7d8fc24",
              "status": "affected",
              "version": "427281f9498ed614f9aabc80e46ec077c487da6d",
              "versionType": "git"
            },
            {
              "lessThan": "59fd2f075bca94f030c7c78e94878ea0803d7690",
              "status": "affected",
              "version": "2e4edfa1e2bd821a317e7d006517dcf2f3fac68d",
              "versionType": "git"
            },
            {
              "lessThan": "a087ed960fce54e9302796229e9d545bbc9bcd4a",
              "status": "affected",
              "version": "2e4edfa1e2bd821a317e7d006517dcf2f3fac68d",
              "versionType": "git"
            },
            {
              "lessThan": "4fcfb5b2c736785464ff9745f94c6726c5ee2d85",
              "status": "affected",
              "version": "2e4edfa1e2bd821a317e7d006517dcf2f3fac68d",
              "versionType": "git"
            },
            {
              "lessThan": "c90164ca0f7036942ba088eb7ea8d3f6c2352020",
              "status": "affected",
              "version": "2e4edfa1e2bd821a317e7d006517dcf2f3fac68d",
              "versionType": "git"
            },
            {
              "status": "affected",
              "version": "ed53949cc92e28aaa3463d246942bda1fbb7f307",
              "versionType": "git"
            },
            {
              "status": "affected",
              "version": "1caceadfb50432dbf6d808796cb6c34ebb6d662c",
              "versionType": "git"
            },
            {
              "status": "affected",
              "version": "02f05ed44b71152d5e11d29be28aed91c0489b4e",
              "versionType": "git"
            },
            {
              "lessThan": "6.6.148",
              "status": "affected",
              "version": "6.6.31",
              "versionType": "semver"
            },
            {
              "lessThan": "5.16",
              "status": "affected",
              "version": "5.15.159",
              "versionType": "semver"
            },
            {
              "lessThan": "6.2",
              "status": "affected",
              "version": "6.1.91",
              "versionType": "semver"
            },
            {
              "lessThan": "6.9",
              "status": "affected",
              "version": "6.8.10",
              "versionType": "semver"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "drivers/bluetooth/btqca.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "6.9"
            },
            {
              "lessThan": "6.9",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.6.*",
              "status": "unaffected",
              "version": "6.6.148",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.12.*",
              "status": "unaffected",
              "version": "6.12.101",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.18.*",
              "status": "unaffected",
              "version": "6.18.42",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "7.1.*",
              "status": "unaffected",
              "version": "7.1.6",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "7.2-rc4",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.6.148",
                  "versionStartIncluding": "6.6.31",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.12.101",
                  "versionStartIncluding": "6.9",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.18.42",
                  "versionStartIncluding": "6.9",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.1.6",
                  "versionStartIncluding": "6.9",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.2-rc4",
                  "versionStartIncluding": "6.9",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionStartIncluding": "5.15.159",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionStartIncluding": "6.1.91",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionStartIncluding": "6.8.10",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nBluetooth: qca: fix NVM tag length underflow in TLV parser\n\nIn the TLV_TYPE_NVM branch of qca_tlv_check_data() the tag loop bound is\n\"while (idx \u003c length - sizeof(struct tlv_type_nvm))\". \"length\" is a signed\nint from the firmware TLV header and sizeof(struct tlv_type_nvm) is a\nsize_t (12), so \"length\" is converted to size_t and any firmware-supplied\n\"length\" \u003c 12 makes the subtraction wrap to a huge value. The loop body\nthen reads a 12-byte struct tlv_type_nvm past the end of the short\nvmalloc\u0027d firmware buffer (and the EDL_TAG_ID_* handlers can write past it).\n\nRewrite the bound as \"idx + sizeof(struct tlv_type_nvm) \u003c= length\"; both\noperands are non-negative, so it no longer underflows and a \"length\" too\nsmall for one record correctly skips the loop.\n\n  BUG: KASAN: vmalloc-out-of-bounds in qca_download_firmware.isra.0 (drivers/bluetooth/btqca.c:421)\n  Read of size 2 at addr ffffc900000e5004 by task kworker/u9:0/52\n  Workqueue: hci0 hci_power_on\n  Call Trace:\n   ...\n   kasan_report (mm/kasan/report.c:595)\n   qca_download_firmware.isra.0 (drivers/bluetooth/btqca.c:421 drivers/bluetooth/btqca.c:617)\n   qca_uart_setup (drivers/bluetooth/btqca.c:948)\n   qca_setup (drivers/bluetooth/hci_qca.c:2029)\n   hci_uart_setup (drivers/bluetooth/hci_ldisc.c:438)\n   hci_dev_open_sync (net/bluetooth/hci_sync.c:5227)\n   hci_power_on (net/bluetooth/hci_core.c:920)\n   process_one_work (kernel/workqueue.c:3322)\n   worker_thread (kernel/workqueue.c:3486)\n   kthread (kernel/kthread.c:436)\n   ret_from_fork (arch/x86/kernel/process.c:158)\n   ret_from_fork_asm (arch/x86/entry/entry_64.S:245)"
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-08-05T08:08:09.669Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/70354dbb5f72d9a76da7b031de3cbaf6c7d8fc24"
        },
        {
          "url": "https://git.kernel.org/stable/c/59fd2f075bca94f030c7c78e94878ea0803d7690"
        },
        {
          "url": "https://git.kernel.org/stable/c/a087ed960fce54e9302796229e9d545bbc9bcd4a"
        },
        {
          "url": "https://git.kernel.org/stable/c/4fcfb5b2c736785464ff9745f94c6726c5ee2d85"
        },
        {
          "url": "https://git.kernel.org/stable/c/c90164ca0f7036942ba088eb7ea8d3f6c2352020"
        }
      ],
      "title": "Bluetooth: qca: fix NVM tag length underflow in TLV parser",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2026-64573",
    "datePublished": "2026-08-05T08:08:09.669Z",
    "dateReserved": "2026-07-19T15:36:31.797Z",
    "dateUpdated": "2026-08-05T08:08:09.669Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "epss": {
      "cve": "CVE-2026-64573",
      "date": "2026-08-07",
      "epss": "0.00156",
      "percentile": "0.05262"
    },
    "nvd": "{\"cve\":{\"id\":\"CVE-2026-64573\",\"sourceIdentifier\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"published\":\"2026-08-05T08:16:37.057\",\"lastModified\":\"2026-08-05T08:16:37.057\",\"vulnStatus\":\"Received\",\"cveTags\":[],\"descriptions\":[{\"lang\":\"en\",\"value\":\"In the Linux kernel, the following vulnerability has been resolved:\\n\\nBluetooth: qca: fix NVM tag length underflow in TLV parser\\n\\nIn the TLV_TYPE_NVM branch of qca_tlv_check_data() the tag loop bound is\\n\\\"while (idx \u003c length - sizeof(struct tlv_type_nvm))\\\". \\\"length\\\" is a signed\\nint from the firmware TLV header and sizeof(struct tlv_type_nvm) is a\\nsize_t (12), so \\\"length\\\" is converted to size_t and any firmware-supplied\\n\\\"length\\\" \u003c 12 makes the subtraction wrap to a huge value. The loop body\\nthen reads a 12-byte struct tlv_type_nvm past the end of the short\\nvmalloc\u0027d firmware buffer (and the EDL_TAG_ID_* handlers can write past it).\\n\\nRewrite the bound as \\\"idx + sizeof(struct tlv_type_nvm) \u003c= length\\\"; both\\noperands are non-negative, so it no longer underflows and a \\\"length\\\" too\\nsmall for one record correctly skips the loop.\\n\\n  BUG: KASAN: vmalloc-out-of-bounds in qca_download_firmware.isra.0 (drivers/bluetooth/btqca.c:421)\\n  Read of size 2 at addr ffffc900000e5004 by task kworker/u9:0/52\\n  Workqueue: hci0 hci_power_on\\n  Call Trace:\\n   ...\\n   kasan_report (mm/kasan/report.c:595)\\n   qca_download_firmware.isra.0 (drivers/bluetooth/btqca.c:421 drivers/bluetooth/btqca.c:617)\\n   qca_uart_setup (drivers/bluetooth/btqca.c:948)\\n   qca_setup (drivers/bluetooth/hci_qca.c:2029)\\n   hci_uart_setup (drivers/bluetooth/hci_ldisc.c:438)\\n   hci_dev_open_sync (net/bluetooth/hci_sync.c:5227)\\n   hci_power_on (net/bluetooth/hci_core.c:920)\\n   process_one_work (kernel/workqueue.c:3322)\\n   worker_thread (kernel/workqueue.c:3486)\\n   kthread (kernel/kthread.c:436)\\n   ret_from_fork (arch/x86/kernel/process.c:158)\\n   ret_from_fork_asm (arch/x86/entry/entry_64.S:245)\"}],\"affected\":[{\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"affectedData\":[{\"vendor\":\"Linux\",\"product\":\"Linux\",\"defaultStatus\":\"unaffected\",\"programFiles\":[\"drivers/bluetooth/btqca.c\"],\"repo\":\"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\",\"versions\":[{\"version\":\"427281f9498ed614f9aabc80e46ec077c487da6d\",\"lessThan\":\"70354dbb5f72d9a76da7b031de3cbaf6c7d8fc24\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"2e4edfa1e2bd821a317e7d006517dcf2f3fac68d\",\"lessThan\":\"59fd2f075bca94f030c7c78e94878ea0803d7690\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"2e4edfa1e2bd821a317e7d006517dcf2f3fac68d\",\"lessThan\":\"a087ed960fce54e9302796229e9d545bbc9bcd4a\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"2e4edfa1e2bd821a317e7d006517dcf2f3fac68d\",\"lessThan\":\"4fcfb5b2c736785464ff9745f94c6726c5ee2d85\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"2e4edfa1e2bd821a317e7d006517dcf2f3fac68d\",\"lessThan\":\"c90164ca0f7036942ba088eb7ea8d3f6c2352020\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"ed53949cc92e28aaa3463d246942bda1fbb7f307\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"1caceadfb50432dbf6d808796cb6c34ebb6d662c\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"02f05ed44b71152d5e11d29be28aed91c0489b4e\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"6.6.31\",\"lessThan\":\"6.6.148\",\"versionType\":\"semver\",\"status\":\"affected\"},{\"version\":\"5.15.159\",\"lessThan\":\"5.16\",\"versionType\":\"semver\",\"status\":\"affected\"},{\"version\":\"6.1.91\",\"lessThan\":\"6.2\",\"versionType\":\"semver\",\"status\":\"affected\"},{\"version\":\"6.8.10\",\"lessThan\":\"6.9\",\"versionType\":\"semver\",\"status\":\"affected\"}]},{\"vendor\":\"Linux\",\"product\":\"Linux\",\"defaultStatus\":\"affected\",\"programFiles\":[\"drivers/bluetooth/btqca.c\"],\"repo\":\"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\",\"versions\":[{\"version\":\"6.9\",\"status\":\"affected\"},{\"version\":\"0\",\"lessThan\":\"6.9\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"6.6.148\",\"lessThanOrEqual\":\"6.6.*\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"6.12.101\",\"lessThanOrEqual\":\"6.12.*\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"6.18.42\",\"lessThanOrEqual\":\"6.18.*\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"7.1.6\",\"lessThanOrEqual\":\"7.1.*\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"7.2-rc4\",\"lessThanOrEqual\":\"*\",\"versionType\":\"original_commit_for_fix\",\"status\":\"unaffected\"}]}]}],\"metrics\":{},\"references\":[{\"url\":\"https://git.kernel.org/stable/c/4fcfb5b2c736785464ff9745f94c6726c5ee2d85\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/59fd2f075bca94f030c7c78e94878ea0803d7690\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/70354dbb5f72d9a76da7b031de3cbaf6c7d8fc24\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/a087ed960fce54e9302796229e9d545bbc9bcd4a\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/c90164ca0f7036942ba088eb7ea8d3f6c2352020\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"}]}}",
    "redhat_vex": {
      "aggregate_severity": "Moderate",
      "current_release_date": "2026-08-06T12:41:26+00:00",
      "cve": "CVE-2026-64573",
      "id": "CVE-2026-64573",
      "initial_release_date": "2026-08-05T00:00:00+00:00",
      "product_status:known_not_affected": "274",
      "source": "Red Hat CSAF VEX",
      "status": "final",
      "title": "kernel: Bluetooth: qca: fix NVM tag length underflow in TLV parser",
      "url": "https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-64573.json",
      "version": "3"
    },
    "suse_vex": {
      "aggregate_severity": "moderate",
      "current_release_date": "2026-08-06T23:56:20Z",
      "cve": "CVE-2026-64573",
      "id": "CVE-2026-64573",
      "initial_release_date": "2026-08-06T01:06:23Z",
      "product_status:known_affected": "127",
      "product_status:known_not_affected": "169",
      "source": "SUSE CSAF VEX",
      "status": "interim",
      "title": "SUSE CVE CVE-2026-64573",
      "url": "https://ftp.suse.com/pub/projects/security/csaf-vex/cve-2026-64573.json",
      "version": "3"
    }
  }
}



Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

Forecast uses a logistic model when the trend is rising, or an exponential decay model when the trend is falling. Fitted via linearized least squares.

Sightings

Author Source Type Date Other

Nomenclature

  • Seen: The vulnerability was mentioned, discussed, or observed by the user.
  • Confirmed: The vulnerability has been validated from an analyst's perspective.
  • Published Proof of Concept: A public proof of concept is available for this vulnerability.
  • Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
  • Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
  • Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
  • Not confirmed: The user expressed doubt about the validity of the vulnerability.
  • Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.

Loading…

Detection rules are retrieved from Rulezet.

Loading…

Loading…

Loading…