{"api_version":"1","generated_at":"2026-05-30T00:11:06+00:00","cve":"CVE-2026-46186","urls":{"html":"https://cve.report/CVE-2026-46186","api":"https://cve.report/api/cve/CVE-2026-46186.json","docs":"https://cve.report/api","cve_org":"https://www.cve.org/CVERecord?id=CVE-2026-46186","nvd":"https://nvd.nist.gov/vuln/detail/CVE-2026-46186"},"summary":{"title":"Bluetooth: virtio_bt: validate rx pkt_type header length","description":"In the Linux kernel, the following vulnerability has been resolved:\n\nBluetooth: virtio_bt: validate rx pkt_type header length\n\nvirtbt_rx_handle() reads the leading pkt_type byte from the RX skb\nand forwards the remainder to hci_recv_frame() for every\nevent/ACL/SCO/ISO type, without checking that the remaining payload\nis at least the fixed HCI header for that type.\n\nAfter the preceding patch bounds the backend-supplied used.len to\n[1, VIRTBT_RX_BUF_SIZE], a one-byte completion still reaches\nhci_recv_frame() with skb->len already pulled to 0. If the byte\nhappened to be HCI_ACLDATA_PKT, the ACL-vs-ISO classification\nfast-path in hci_dev_classify_pkt_type() dereferences\nhci_acl_hdr(skb)->handle whenever the HCI device has an active\nCIS_LINK, BIS_LINK, or PA_LINK connection, reading two bytes of\nuninitialized RX-buffer data. The same hazard exists for every\npacket type the driver accepts because none of the switch cases in\nvirtbt_rx_handle() check skb->len against the per-type minimum HCI\nheader size before handing the frame to the core.\n\nAfter stripping pkt_type, require skb->len to cover the fixed\nheader size for the selected type (event 2, ACL 4, SCO 3, ISO 4)\nbefore calling hci_recv_frame(); drop ratelimited otherwise.\nUnknown pkt_type values still take the original kfree_skb() default\npath.\n\nUse bt_dev_err_ratelimited() because both the length and pkt_type\nvalues come from an untrusted backend that can otherwise flood the\nkernel log.","state":"PUBLISHED","assigner":"Linux","published_at":"2026-05-28 10:16:34","updated_at":"2026-05-28 13:44:01"},"problem_types":[],"metrics":[],"references":[{"url":"https://git.kernel.org/stable/c/3485c7236c59c8c34a41af1c4b52982437554e79","name":"https://git.kernel.org/stable/c/3485c7236c59c8c34a41af1c4b52982437554e79","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://git.kernel.org/stable/c/daf23014e5d975e72ea9c02b5160d3fcf070ea47","name":"https://git.kernel.org/stable/c/daf23014e5d975e72ea9c02b5160d3fcf070ea47","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://git.kernel.org/stable/c/2c1143564c71e7497b42d8360a8379ccbb011d3c","name":"https://git.kernel.org/stable/c/2c1143564c71e7497b42d8360a8379ccbb011d3c","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://git.kernel.org/stable/c/f743eab6486965f276c7e3f1700895f014fdc6db","name":"https://git.kernel.org/stable/c/f743eab6486965f276c7e3f1700895f014fdc6db","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://git.kernel.org/stable/c/1e1e509b6fd2a42421745bbcd98bd16daad20904","name":"https://git.kernel.org/stable/c/1e1e509b6fd2a42421745bbcd98bd16daad20904","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-46186","name":"CVE Program record","refsource":"CVE.ORG","tags":["canonical"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-46186","name":"NVD vulnerability detail","refsource":"NVD","tags":["canonical","analysis"]}],"affected":[{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 160fbcf3bfb93c3c086427f9f4c8bc70f217e9be 1e1e509b6fd2a42421745bbcd98bd16daad20904 git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 160fbcf3bfb93c3c086427f9f4c8bc70f217e9be 2c1143564c71e7497b42d8360a8379ccbb011d3c git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 160fbcf3bfb93c3c086427f9f4c8bc70f217e9be 3485c7236c59c8c34a41af1c4b52982437554e79 git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 160fbcf3bfb93c3c086427f9f4c8bc70f217e9be f743eab6486965f276c7e3f1700895f014fdc6db git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 160fbcf3bfb93c3c086427f9f4c8bc70f217e9be daf23014e5d975e72ea9c02b5160d3fcf070ea47 git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected cf2719a21fdb9d4c8e9c834d279163609bef575d git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 9b67438e315b925a699f0178f4a48baf3d2d6ef4 git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 5.15.78 5.16 semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 6.0.8 6.1 semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 6.1","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 6.1 semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 6.6.140 6.6.* semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 6.12.88 6.12.* semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 6.18.30 6.18.* semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 7.0.7 7.0.* semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 7.1-rc3 * original_commit_for_fix","platforms":[]}],"timeline":[],"solutions":[],"workarounds":[],"exploits":[],"credits":[],"nvd_cpes":[],"vendor_comments":[],"enrichments":{"kev":null,"epss":{"cve_year":"2026","cve_id":"46186","cve":"CVE-2026-46186","epss":"0.000180000","percentile":"0.051520000","score_date":"2026-05-28","updated_at":"2026-05-29 00:13:15"},"legacy_qids":[]},"source_records":{"cve_program":{"containers":{"cna":{"affected":[{"defaultStatus":"unaffected","product":"Linux","programFiles":["drivers/bluetooth/virtio_bt.c"],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","vendor":"Linux","versions":[{"lessThan":"1e1e509b6fd2a42421745bbcd98bd16daad20904","status":"affected","version":"160fbcf3bfb93c3c086427f9f4c8bc70f217e9be","versionType":"git"},{"lessThan":"2c1143564c71e7497b42d8360a8379ccbb011d3c","status":"affected","version":"160fbcf3bfb93c3c086427f9f4c8bc70f217e9be","versionType":"git"},{"lessThan":"3485c7236c59c8c34a41af1c4b52982437554e79","status":"affected","version":"160fbcf3bfb93c3c086427f9f4c8bc70f217e9be","versionType":"git"},{"lessThan":"f743eab6486965f276c7e3f1700895f014fdc6db","status":"affected","version":"160fbcf3bfb93c3c086427f9f4c8bc70f217e9be","versionType":"git"},{"lessThan":"daf23014e5d975e72ea9c02b5160d3fcf070ea47","status":"affected","version":"160fbcf3bfb93c3c086427f9f4c8bc70f217e9be","versionType":"git"},{"status":"affected","version":"cf2719a21fdb9d4c8e9c834d279163609bef575d","versionType":"git"},{"status":"affected","version":"9b67438e315b925a699f0178f4a48baf3d2d6ef4","versionType":"git"},{"lessThan":"5.16","status":"affected","version":"5.15.78","versionType":"semver"},{"lessThan":"6.1","status":"affected","version":"6.0.8","versionType":"semver"}]},{"defaultStatus":"affected","product":"Linux","programFiles":["drivers/bluetooth/virtio_bt.c"],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","vendor":"Linux","versions":[{"status":"affected","version":"6.1"},{"lessThan":"6.1","status":"unaffected","version":"0","versionType":"semver"},{"lessThanOrEqual":"6.6.*","status":"unaffected","version":"6.6.140","versionType":"semver"},{"lessThanOrEqual":"6.12.*","status":"unaffected","version":"6.12.88","versionType":"semver"},{"lessThanOrEqual":"6.18.*","status":"unaffected","version":"6.18.30","versionType":"semver"},{"lessThanOrEqual":"7.0.*","status":"unaffected","version":"7.0.7","versionType":"semver"},{"lessThanOrEqual":"*","status":"unaffected","version":"7.1-rc3","versionType":"original_commit_for_fix"}]}],"cpeApplicability":[{"nodes":[{"cpeMatch":[{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionEndExcluding":"6.6.140","versionStartIncluding":"6.1","vulnerable":true},{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionEndExcluding":"6.12.88","versionStartIncluding":"6.1","vulnerable":true},{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionEndExcluding":"6.18.30","versionStartIncluding":"6.1","vulnerable":true},{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionEndExcluding":"7.0.7","versionStartIncluding":"6.1","vulnerable":true},{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionEndExcluding":"7.1-rc3","versionStartIncluding":"6.1","vulnerable":true},{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.15.78","vulnerable":true},{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"6.0.8","vulnerable":true}],"negate":false,"operator":"OR"}]}],"descriptions":[{"lang":"en","value":"In the Linux kernel, the following vulnerability has been resolved:\n\nBluetooth: virtio_bt: validate rx pkt_type header length\n\nvirtbt_rx_handle() reads the leading pkt_type byte from the RX skb\nand forwards the remainder to hci_recv_frame() for every\nevent/ACL/SCO/ISO type, without checking that the remaining payload\nis at least the fixed HCI header for that type.\n\nAfter the preceding patch bounds the backend-supplied used.len to\n[1, VIRTBT_RX_BUF_SIZE], a one-byte completion still reaches\nhci_recv_frame() with skb->len already pulled to 0. If the byte\nhappened to be HCI_ACLDATA_PKT, the ACL-vs-ISO classification\nfast-path in hci_dev_classify_pkt_type() dereferences\nhci_acl_hdr(skb)->handle whenever the HCI device has an active\nCIS_LINK, BIS_LINK, or PA_LINK connection, reading two bytes of\nuninitialized RX-buffer data. The same hazard exists for every\npacket type the driver accepts because none of the switch cases in\nvirtbt_rx_handle() check skb->len against the per-type minimum HCI\nheader size before handing the frame to the core.\n\nAfter stripping pkt_type, require skb->len to cover the fixed\nheader size for the selected type (event 2, ACL 4, SCO 3, ISO 4)\nbefore calling hci_recv_frame(); drop ratelimited otherwise.\nUnknown pkt_type values still take the original kfree_skb() default\npath.\n\nUse bt_dev_err_ratelimited() because both the length and pkt_type\nvalues come from an untrusted backend that can otherwise flood the\nkernel log."}],"providerMetadata":{"dateUpdated":"2026-05-28T09:36:40.349Z","orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","shortName":"Linux"},"references":[{"url":"https://git.kernel.org/stable/c/1e1e509b6fd2a42421745bbcd98bd16daad20904"},{"url":"https://git.kernel.org/stable/c/2c1143564c71e7497b42d8360a8379ccbb011d3c"},{"url":"https://git.kernel.org/stable/c/3485c7236c59c8c34a41af1c4b52982437554e79"},{"url":"https://git.kernel.org/stable/c/f743eab6486965f276c7e3f1700895f014fdc6db"},{"url":"https://git.kernel.org/stable/c/daf23014e5d975e72ea9c02b5160d3fcf070ea47"}],"title":"Bluetooth: virtio_bt: validate rx pkt_type header length","x_generator":{"engine":"bippy-1.2.0"}}},"cveMetadata":{"assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","assignerShortName":"Linux","cveId":"CVE-2026-46186","datePublished":"2026-05-28T09:36:40.349Z","dateReserved":"2026-05-13T15:03:33.103Z","dateUpdated":"2026-05-28T09:36:40.349Z","state":"PUBLISHED"},"dataType":"CVE_RECORD","dataVersion":"5.2"},"nvd":{"publishedDate":"2026-05-28 10:16:34","lastModifiedDate":"2026-05-28 13:44:01","problem_types":[],"metrics":[],"configurations":[]},"legacy_mitre":{"record":{"CveYear":"2026","CveId":"46186","Ordinal":"1","Title":"Bluetooth: virtio_bt: validate rx pkt_type header length","CVE":"CVE-2026-46186","Year":"2026"},"notes":[{"CveYear":"2026","CveId":"46186","Ordinal":"1","NoteData":"In the Linux kernel, the following vulnerability has been resolved:\n\nBluetooth: virtio_bt: validate rx pkt_type header length\n\nvirtbt_rx_handle() reads the leading pkt_type byte from the RX skb\nand forwards the remainder to hci_recv_frame() for every\nevent/ACL/SCO/ISO type, without checking that the remaining payload\nis at least the fixed HCI header for that type.\n\nAfter the preceding patch bounds the backend-supplied used.len to\n[1, VIRTBT_RX_BUF_SIZE], a one-byte completion still reaches\nhci_recv_frame() with skb->len already pulled to 0. If the byte\nhappened to be HCI_ACLDATA_PKT, the ACL-vs-ISO classification\nfast-path in hci_dev_classify_pkt_type() dereferences\nhci_acl_hdr(skb)->handle whenever the HCI device has an active\nCIS_LINK, BIS_LINK, or PA_LINK connection, reading two bytes of\nuninitialized RX-buffer data. The same hazard exists for every\npacket type the driver accepts because none of the switch cases in\nvirtbt_rx_handle() check skb->len against the per-type minimum HCI\nheader size before handing the frame to the core.\n\nAfter stripping pkt_type, require skb->len to cover the fixed\nheader size for the selected type (event 2, ACL 4, SCO 3, ISO 4)\nbefore calling hci_recv_frame(); drop ratelimited otherwise.\nUnknown pkt_type values still take the original kfree_skb() default\npath.\n\nUse bt_dev_err_ratelimited() because both the length and pkt_type\nvalues come from an untrusted backend that can otherwise flood the\nkernel log.","Type":"Description","Title":"Bluetooth: virtio_bt: validate rx pkt_type header length"}]}}}