{ "dataType": "CVE_RECORD", "dataVersion": "5.2", "cveMetadata": { "cveId": "CVE-2025-37918", "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "state": "PUBLISHED", "assignerShortName": "Linux", "dateReserved": "2025-04-16T04:51:23.968Z", "datePublished": "2025-05-20T15:21:48.473Z", "dateUpdated": "2026-08-05T11:58:20.778Z" }, "containers": { "cna": { "providerMetadata": { "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "shortName": "Linux", "dateUpdated": "2026-08-05T11:58:20.778Z" }, "descriptions": [ { "lang": "en", "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nBluetooth: btusb: avoid NULL pointer dereference in skb_dequeue()\n\nA NULL pointer dereference can occur in skb_dequeue() when processing a\nQCA firmware crash dump on WCN7851 (0489:e0f3).\n\n[ 93.672166] Bluetooth: hci0: ACL memdump size(589824)\n\n[ 93.672475] BUG: kernel NULL pointer dereference, address: 0000000000000008\n[ 93.672517] Workqueue: hci0 hci_devcd_rx [bluetooth]\n[ 93.672598] RIP: 0010:skb_dequeue+0x50/0x80\n\nThe issue stems from handle_dump_pkt_qca() returning 0 even when a dump\npacket is successfully processed. This is because it incorrectly\nforwards the return value of hci_devcd_init() (which returns 0 on\nsuccess). As a result, the caller (btusb_recv_acl_qca() or\nbtusb_recv_evt_qca()) assumes the packet was not handled and passes it\nto hci_recv_frame(), leading to premature kfree() of the skb.\n\nLater, hci_devcd_rx() attempts to dequeue the same skb from the dump\nqueue, resulting in a NULL pointer dereference.\n\nFix this by:\n1. Making handle_dump_pkt_qca() return 0 on success and negative errno\n on failure, consistent with kernel conventions.\n2. Splitting dump packet detection into separate functions for ACL\n and event packets for better structure and readability.\n\nThis ensures dump packets are properly identified and consumed, avoiding\ndouble handling and preventing NULL pointer access." } ], "metrics": [ { "cvssV3_1": { "version": "3.1", "vectorString": "CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H", "baseScore": 8.8, "baseSeverity": "HIGH" }, "scenarios": [ { "lang": "en", "value": "AV:A - The vulnerable code processes data emitted by the QCA Bluetooth controller, and the crash-dump sequence that triggers it is produced when the controller firmware crashes — something an attacker within Bluetooth radio range can induce with malformed link-layer/LMP frames without pairing. Per kernel guidance, Bluetooth-reachable bugs are Adjacent.\nAC:L - Once the controller enters crash-dump mode, the defect fires deterministically on the very first (seqno==0) dump packet — there is no race to win and no memory layout the attacker cannot influence. The reporter hit it in ordinary operation on a WCN7851.\nPR:N - The path from URB completion (btusb_recv_bulk → btusb_recv_acl → btusb_recv_acl_qca) contains no capability check, no HCI authentication, and no pairing requirement. A radio-range attacker needs no account or credentials on the victim system.\nUI:N - Dump-packet handling is entirely automatic in the driver's receive path and the workqueue; no victim action is required.\nS:U - The corruption is confined to kernel heap objects and queues managed by the same kernel security authority; no VM, IOMMU, or sandbox boundary is crossed.\nC:H - The same skb sits on two queues and is freed while still referenced, so hci_devcd_handle_pkt_skb() copies freed (potentially reallocated) heap memory into the dump buffer that dev_coredumpv() exports to userspace, and the UAF generally yields a read primitive over reallocated kernel objects.\nI:H - Double-linked-list corruption of dump_q/rx_q plus a double-free of the skb; heap-spraying the freed skb gives attacker-controlled next/prev pointers that skb_dequeue() unlinks, a classic arbitrary-write primitive.\nA:H - The documented result is an immediate kernel NULL pointer dereference oops in skb_dequeue() from the hci0 workqueue, plus double-free of the skb — a reliable kernel crash." } ] } ], "affected": [ { "product": "Linux", "vendor": "Linux", "defaultStatus": "unaffected", "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git", "programFiles": [ "drivers/bluetooth/btusb.c" ], "versions": [ { "version": "20981ce2d5a5f79d17da1ace3a93df7b3c6ba3d6", "lessThan": "2e8d44ebaa7babdd5c5ab50ca275826e241920d6", "status": "affected", "versionType": "git" }, { "version": "20981ce2d5a5f79d17da1ace3a93df7b3c6ba3d6", "lessThan": "b70b41591ec48c78ec6a885e1f57bfc4029e5e13", "status": "affected", "versionType": "git" }, { "version": "20981ce2d5a5f79d17da1ace3a93df7b3c6ba3d6", "lessThan": "8563d9fabd8a4b726ba7acab4737c438bf11a059", "status": "affected", "versionType": "git" }, { "version": "20981ce2d5a5f79d17da1ace3a93df7b3c6ba3d6", "lessThan": "0317b033abcd1d8dd2798f0e2de5e84543d0bd22", "status": "affected", "versionType": "git" } ] }, { "product": "Linux", "vendor": "Linux", "defaultStatus": "affected", "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git", "programFiles": [ "drivers/bluetooth/btusb.c" ], "versions": [ { "version": "6.4", "status": "affected" }, { "version": "0", "lessThan": "6.4", "status": "unaffected", "versionType": "semver" }, { "version": "6.6.90", "lessThanOrEqual": "6.6.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.12.28", "lessThanOrEqual": "6.12.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.14.6", "lessThanOrEqual": "6.14.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.15", "lessThanOrEqual": "*", "status": "unaffected", "versionType": "original_commit_for_fix" } ] } ], "cpeApplicability": [ { "nodes": [ { "operator": "OR", "negate": false, "cpeMatch": [ { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "6.4", "versionEndExcluding": "6.6.90" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "6.4", "versionEndExcluding": "6.12.28" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "6.4", "versionEndExcluding": "6.14.6" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "6.4", "versionEndExcluding": "6.15" } ] } ] } ], "references": [ { "url": "https://git.kernel.org/stable/c/2e8d44ebaa7babdd5c5ab50ca275826e241920d6" }, { "url": "https://git.kernel.org/stable/c/b70b41591ec48c78ec6a885e1f57bfc4029e5e13" }, { "url": "https://git.kernel.org/stable/c/8563d9fabd8a4b726ba7acab4737c438bf11a059" }, { "url": "https://git.kernel.org/stable/c/0317b033abcd1d8dd2798f0e2de5e84543d0bd22" } ], "title": "Bluetooth: btusb: avoid NULL pointer dereference in skb_dequeue()", "x_generator": { "engine": "bippy-1.2.0" } } } }