CVE-2025-38250 (GCVE-0-2025-38250)
Vulnerability from cvelistv5
Published
2025-07-09 10:42
Modified
2026-10-15 21:52
Summary
In the Linux kernel, the following vulnerability has been resolved: Bluetooth: hci_core: Fix use-after-free in vhci_flush() syzbot reported use-after-free in vhci_flush() without repro. [0] From the splat, a thread close()d a vhci file descriptor while its device was being used by iotcl() on another thread. Once the last fd refcnt is released, vhci_release() calls hci_unregister_dev(), hci_free_dev(), and kfree() for struct vhci_data, which is set to hci_dev->dev->driver_data. The problem is that there is no synchronisation after unlinking hdev from hci_dev_list in hci_unregister_dev(). There might be another thread still accessing the hdev which was fetched before the unlink operation. We can use SRCU for such synchronisation. Let's run hci_dev_reset() under SRCU and wait for its completion in hci_unregister_dev(). Another option would be to restore hci_dev->destruct(), which was removed in commit 587ae086f6e4 ("Bluetooth: Remove unused hci-destruct cb"). However, this would not be a good solution, as we should not run hci_unregister_dev() while there are in-flight ioctl() requests, which could lead to another data-race KCSAN splat. Note that other drivers seem to have the same problem, for exmaple, virtbt_remove(). [0]: BUG: KASAN: slab-use-after-free in skb_queue_empty_lockless include/linux/skbuff.h:1891 [inline] BUG: KASAN: slab-use-after-free in skb_queue_purge_reason+0x99/0x360 net/core/skbuff.c:3937 Read of size 8 at addr ffff88807cb8d858 by task syz.1.219/6718 CPU: 1 UID: 0 PID: 6718 Comm: syz.1.219 Not tainted 6.16.0-rc1-syzkaller-00196-g08207f42d3ff #0 PREEMPT(full) Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 05/07/2025 Call Trace: <TASK> dump_stack_lvl+0x189/0x250 lib/dump_stack.c:120 print_address_description mm/kasan/report.c:408 [inline] print_report+0xd2/0x2b0 mm/kasan/report.c:521 kasan_report+0x118/0x150 mm/kasan/report.c:634 skb_queue_empty_lockless include/linux/skbuff.h:1891 [inline] skb_queue_purge_reason+0x99/0x360 net/core/skbuff.c:3937 skb_queue_purge include/linux/skbuff.h:3368 [inline] vhci_flush+0x44/0x50 drivers/bluetooth/hci_vhci.c:69 hci_dev_do_reset net/bluetooth/hci_core.c:552 [inline] hci_dev_reset+0x420/0x5c0 net/bluetooth/hci_core.c:592 sock_do_ioctl+0xd9/0x300 net/socket.c:1190 sock_ioctl+0x576/0x790 net/socket.c:1311 vfs_ioctl fs/ioctl.c:51 [inline] __do_sys_ioctl fs/ioctl.c:907 [inline] __se_sys_ioctl+0xf9/0x170 fs/ioctl.c:893 do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline] do_syscall_64+0xfa/0x3b0 arch/x86/entry/syscall_64.c:94 entry_SYSCALL_64_after_hwframe+0x77/0x7f RIP: 0033:0x7fcf5b98e929 Code: ff ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 40 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 a8 ff ff ff f7 d8 64 89 01 48 RSP: 002b:00007fcf5c7b9038 EFLAGS: 00000246 ORIG_RAX: 0000000000000010 RAX: ffffffffffffffda RBX: 00007fcf5bbb6160 RCX: 00007fcf5b98e929 RDX: 0000000000000000 RSI: 00000000400448cb RDI: 0000000000000009 RBP: 00007fcf5ba10b39 R08: 0000000000000000 R09: 0000000000000000 R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000 R13: 0000000000000000 R14: 00007fcf5bbb6160 R15: 00007ffd6353d528 </TASK> Allocated by task 6535: kasan_save_stack mm/kasan/common.c:47 [inline] kasan_save_track+0x3e/0x80 mm/kasan/common.c:68 poison_kmalloc_redzone mm/kasan/common.c:377 [inline] __kasan_kmalloc+0x93/0xb0 mm/kasan/common.c:394 kasan_kmalloc include/linux/kasan.h:260 [inline] __kmalloc_cache_noprof+0x230/0x3d0 mm/slub.c:4359 kmalloc_noprof include/linux/slab.h:905 [inline] kzalloc_noprof include/linux/slab.h:1039 [inline] vhci_open+0x57/0x360 drivers/bluetooth/hci_vhci.c:635 misc_open+0x2bc/0x330 drivers/char/misc.c:161 chrdev_open+0x4c9/0x5e0 fs/char_dev.c:414 do_dentry_open+0xdf0/0x1970 fs/open.c:964 vfs_open+0x3b/0x340 fs/open.c:1094 do_open fs/namei.c:3887 [inline] path_openat+0x2ee5/0x3830 fs/name ---truncated---
Impacted products
Vendor Product Version
Linux Linux Version: bf18c7118cf83ad4b9aa476354b4a06bcb9d0c4f
Version: bf18c7118cf83ad4b9aa476354b4a06bcb9d0c4f
Version: bf18c7118cf83ad4b9aa476354b4a06bcb9d0c4f
Version: bf18c7118cf83ad4b9aa476354b4a06bcb9d0c4f
Version: bf18c7118cf83ad4b9aa476354b4a06bcb9d0c4f
Version: bf18c7118cf83ad4b9aa476354b4a06bcb9d0c4f
Version: bf18c7118cf83ad4b9aa476354b4a06bcb9d0c4f
Create a notification for this product.
Show details on NVD website


{
  "containers": {
    "adp": [
      {
        "affected": [
          {
            "defaultStatus": "unknown",
            "product": "SIMATIC S7-1500 TM MFP - GNU/Linux subsystem",
            "vendor": "Siemens",
            "versions": [
              {
                "lessThan": "*",
                "status": "affected",
                "version": "0",
                "versionType": "custom"
              }
            ]
          }
        ],
        "providerMetadata": {
          "dateUpdated": "2026-10-15T01:06:59.431Z",
          "orgId": "0b142b55-0307-4c5a-b3c9-f314f3fb7c5e",
          "shortName": "siemens-SADP"
        },
        "references": [
          {
            "url": "https://cert-portal.siemens.com/productcert/html/ssa-784472.html"
          }
        ],
        "x_adpType": "supplier"
      },
      {
        "metrics": [
          {
            "other": {
              "content": {
                "id": "CVE-2025-38250",
                "options": [
                  {
                    "Exploitation": "none"
                  },
                  {
                    "Automatable": "no"
                  },
                  {
                    "Technical Impact": "total"
                  }
                ],
                "role": "CISA Coordinator",
                "timestamp": "2026-10-15T21:48:58.439628Z",
                "version": "2.0.3"
              },
              "type": "ssvc"
            }
          }
        ],
        "providerMetadata": {
          "dateUpdated": "2026-10-15T21:52:12.635Z",
          "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
          "shortName": "CISA-ADP"
        },
        "title": "CISA ADP Vulnrichment"
      }
    ],
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "include/net/bluetooth/hci_core.h",
            "net/bluetooth/hci_core.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "dd4becd3fd4102696e1c15e6d260a1712a2d8685",
              "status": "affected",
              "version": "bf18c7118cf83ad4b9aa476354b4a06bcb9d0c4f",
              "versionType": "git"
            },
            {
              "lessThan": "90dee0a0ff84fac8accd5be98412b3819f667149",
              "status": "affected",
              "version": "bf18c7118cf83ad4b9aa476354b4a06bcb9d0c4f",
              "versionType": "git"
            },
            {
              "lessThan": "c56b177efce8b62798e4d96bdb9867106cb7c4a0",
              "status": "affected",
              "version": "bf18c7118cf83ad4b9aa476354b4a06bcb9d0c4f",
              "versionType": "git"
            },
            {
              "lessThan": "bc0819a25e04cd68ef3568cfa51b63118fea39a7",
              "status": "affected",
              "version": "bf18c7118cf83ad4b9aa476354b4a06bcb9d0c4f",
              "versionType": "git"
            },
            {
              "lessThan": "ce23b73f0f27e2dbeb81734a79db710f05aa33c6",
              "status": "affected",
              "version": "bf18c7118cf83ad4b9aa476354b4a06bcb9d0c4f",
              "versionType": "git"
            },
            {
              "lessThan": "0e5c144c557df910ab64d9c25d06399a9a735e65",
              "status": "affected",
              "version": "bf18c7118cf83ad4b9aa476354b4a06bcb9d0c4f",
              "versionType": "git"
            },
            {
              "lessThan": "1d6123102e9fbedc8d25bf4731da6d513173e49e",
              "status": "affected",
              "version": "bf18c7118cf83ad4b9aa476354b4a06bcb9d0c4f",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "include/net/bluetooth/hci_core.h",
            "net/bluetooth/hci_core.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "3.4"
            },
            {
              "lessThan": "3.4",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "5.10.*",
              "status": "unaffected",
              "version": "5.10.259",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "5.15.*",
              "status": "unaffected",
              "version": "5.15.209",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.1.*",
              "status": "unaffected",
              "version": "6.1.167",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.6.*",
              "status": "unaffected",
              "version": "6.6.97",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.12.*",
              "status": "unaffected",
              "version": "6.12.36",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.15.*",
              "status": "unaffected",
              "version": "6.15.5",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "6.16",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "5.10.259",
                  "versionStartIncluding": "3.4",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "5.15.209",
                  "versionStartIncluding": "3.4",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.1.167",
                  "versionStartIncluding": "3.4",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.6.97",
                  "versionStartIncluding": "3.4",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.12.36",
                  "versionStartIncluding": "3.4",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.15.5",
                  "versionStartIncluding": "3.4",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.16",
                  "versionStartIncluding": "3.4",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nBluetooth: hci_core: Fix use-after-free in vhci_flush()\n\nsyzbot reported use-after-free in vhci_flush() without repro. [0]\n\nFrom the splat, a thread close()d a vhci file descriptor while\nits device was being used by iotcl() on another thread.\n\nOnce the last fd refcnt is released, vhci_release() calls\nhci_unregister_dev(), hci_free_dev(), and kfree() for struct\nvhci_data, which is set to hci_dev-\u003edev-\u003edriver_data.\n\nThe problem is that there is no synchronisation after unlinking\nhdev from hci_dev_list in hci_unregister_dev().  There might be\nanother thread still accessing the hdev which was fetched before\nthe unlink operation.\n\nWe can use SRCU for such synchronisation.\n\nLet\u0027s run hci_dev_reset() under SRCU and wait for its completion\nin hci_unregister_dev().\n\nAnother option would be to restore hci_dev-\u003edestruct(), which was\nremoved in commit 587ae086f6e4 (\"Bluetooth: Remove unused\nhci-destruct cb\").  However, this would not be a good solution, as\nwe should not run hci_unregister_dev() while there are in-flight\nioctl() requests, which could lead to another data-race KCSAN splat.\n\nNote that other drivers seem to have the same problem, for exmaple,\nvirtbt_remove().\n\n[0]:\nBUG: KASAN: slab-use-after-free in skb_queue_empty_lockless include/linux/skbuff.h:1891 [inline]\nBUG: KASAN: slab-use-after-free in skb_queue_purge_reason+0x99/0x360 net/core/skbuff.c:3937\nRead of size 8 at addr ffff88807cb8d858 by task syz.1.219/6718\n\nCPU: 1 UID: 0 PID: 6718 Comm: syz.1.219 Not tainted 6.16.0-rc1-syzkaller-00196-g08207f42d3ff #0 PREEMPT(full)\nHardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 05/07/2025\nCall Trace:\n \u003cTASK\u003e\n dump_stack_lvl+0x189/0x250 lib/dump_stack.c:120\n print_address_description mm/kasan/report.c:408 [inline]\n print_report+0xd2/0x2b0 mm/kasan/report.c:521\n kasan_report+0x118/0x150 mm/kasan/report.c:634\n skb_queue_empty_lockless include/linux/skbuff.h:1891 [inline]\n skb_queue_purge_reason+0x99/0x360 net/core/skbuff.c:3937\n skb_queue_purge include/linux/skbuff.h:3368 [inline]\n vhci_flush+0x44/0x50 drivers/bluetooth/hci_vhci.c:69\n hci_dev_do_reset net/bluetooth/hci_core.c:552 [inline]\n hci_dev_reset+0x420/0x5c0 net/bluetooth/hci_core.c:592\n sock_do_ioctl+0xd9/0x300 net/socket.c:1190\n sock_ioctl+0x576/0x790 net/socket.c:1311\n vfs_ioctl fs/ioctl.c:51 [inline]\n __do_sys_ioctl fs/ioctl.c:907 [inline]\n __se_sys_ioctl+0xf9/0x170 fs/ioctl.c:893\n do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]\n do_syscall_64+0xfa/0x3b0 arch/x86/entry/syscall_64.c:94\n entry_SYSCALL_64_after_hwframe+0x77/0x7f\nRIP: 0033:0x7fcf5b98e929\nCode: ff ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 40 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 \u003c48\u003e 3d 01 f0 ff ff 73 01 c3 48 c7 c1 a8 ff ff ff f7 d8 64 89 01 48\nRSP: 002b:00007fcf5c7b9038 EFLAGS: 00000246 ORIG_RAX: 0000000000000010\nRAX: ffffffffffffffda RBX: 00007fcf5bbb6160 RCX: 00007fcf5b98e929\nRDX: 0000000000000000 RSI: 00000000400448cb RDI: 0000000000000009\nRBP: 00007fcf5ba10b39 R08: 0000000000000000 R09: 0000000000000000\nR10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000\nR13: 0000000000000000 R14: 00007fcf5bbb6160 R15: 00007ffd6353d528\n \u003c/TASK\u003e\n\nAllocated by task 6535:\n kasan_save_stack mm/kasan/common.c:47 [inline]\n kasan_save_track+0x3e/0x80 mm/kasan/common.c:68\n poison_kmalloc_redzone mm/kasan/common.c:377 [inline]\n __kasan_kmalloc+0x93/0xb0 mm/kasan/common.c:394\n kasan_kmalloc include/linux/kasan.h:260 [inline]\n __kmalloc_cache_noprof+0x230/0x3d0 mm/slub.c:4359\n kmalloc_noprof include/linux/slab.h:905 [inline]\n kzalloc_noprof include/linux/slab.h:1039 [inline]\n vhci_open+0x57/0x360 drivers/bluetooth/hci_vhci.c:635\n misc_open+0x2bc/0x330 drivers/char/misc.c:161\n chrdev_open+0x4c9/0x5e0 fs/char_dev.c:414\n do_dentry_open+0xdf0/0x1970 fs/open.c:964\n vfs_open+0x3b/0x340 fs/open.c:1094\n do_open fs/namei.c:3887 [inline]\n path_openat+0x2ee5/0x3830 fs/name\n---truncated---"
        }
      ],
      "metrics": [
        {
          "cvssV3_1": {
            "baseScore": 7.8,
            "baseSeverity": "HIGH",
            "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H",
            "version": "3.1"
          },
          "scenarios": [
            {
              "lang": "en",
              "value": "AV:L - Although this is the Bluetooth subsystem, the vulnerable path is not reachable from over-the-air traffic \u2014 it requires a local `ioctl(HCIDEVRESET)` on an AF_BLUETOOTH HCI socket raced against a local `close()` of the transport fd (or driver removal). Both sides of the race are local syscalls.\nAC:L - The attacker controls both racing threads (close of the vhci fd vs. the HCIDEVRESET ioctl) and the window is large, spanning the full `hci_dev_close_sync()`/`hci_dev_open_sync()` command-sync sequence inside `hci_dev_do_reset()`. Failed attempts are harmless and can be repeated indefinitely until the race is won.\nPR:L - `HCIDEVRESET` is gated on `capable(CAP_NET_ADMIN)`, a capability held by non-root service accounts such as bluetoothd and Android\u0027s Bluetooth process rather than requiring full init-namespace root, and this repo consistently scores CAP_NET_ADMIN-gated Bluetooth mgmt/ioctl bugs as PR:L. The free side additionally needs no privilege at all when supplied by ordinary transport-driver teardown (btusb/hci_ldisc/virtio_bt unregister).\nUI:N - The attacker drives both the reset ioctl and the device teardown from its own threads with no victim participation. No user action of any kind is needed.\nS:U - The use-after-free corrupts kernel heap memory and yields kernel-privilege compromise within the same security authority. No VM, IOMMU, or sandbox boundary is crossed.\nC:H - This is a slab use-after-free on a `kmalloc-1k` object; `skb_queue_purge_reason()` reads the freed `sk_buff_head` and dereferences pointers taken from it, so an attacker who reclaims the slot obtains an arbitrary kernel-memory read primitive and full disclosure of kernel memory.\nI:H - The UAF is read *and* write: `skb_queue_splice_init()` writes back into the freed object and `kfree_skb()` is invoked on attacker-reclaimable pointers, while `vhci_send_frame()` performs `skb_queue_tail()` into freed memory. That combination gives a controlled-free and linked-list-write primitive suitable for control-flow hijacking and privilege escalation.\nA:H - Even without successful heap grooming, purging a freed skb queue and freeing garbage pointers reliably corrupts the slab allocator and panics the kernel. The attacker can trigger it repeatedly for a persistent denial of service."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-08-05T12:00:43.317Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/dd4becd3fd4102696e1c15e6d260a1712a2d8685"
        },
        {
          "url": "https://git.kernel.org/stable/c/90dee0a0ff84fac8accd5be98412b3819f667149"
        },
        {
          "url": "https://git.kernel.org/stable/c/c56b177efce8b62798e4d96bdb9867106cb7c4a0"
        },
        {
          "url": "https://git.kernel.org/stable/c/bc0819a25e04cd68ef3568cfa51b63118fea39a7"
        },
        {
          "url": "https://git.kernel.org/stable/c/ce23b73f0f27e2dbeb81734a79db710f05aa33c6"
        },
        {
          "url": "https://git.kernel.org/stable/c/0e5c144c557df910ab64d9c25d06399a9a735e65"
        },
        {
          "url": "https://git.kernel.org/stable/c/1d6123102e9fbedc8d25bf4731da6d513173e49e"
        }
      ],
      "title": "Bluetooth: hci_core: Fix use-after-free in vhci_flush()",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2025-38250",
    "datePublished": "2025-07-09T10:42:30.294Z",
    "dateReserved": "2025-04-16T04:51:23.997Z",
    "dateUpdated": "2026-10-15T21:52:12.635Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "vulnrichment": {
      "containers": "{\"adp\": [{\"affected\": [{\"vendor\": \"Siemens\", \"product\": \"SIMATIC S7-1500 TM MFP - GNU/Linux subsystem\", \"versions\": [{\"status\": \"affected\", \"version\": \"0\", \"lessThan\": \"*\", \"versionType\": \"custom\"}], \"defaultStatus\": \"unknown\"}], \"x_adpType\": \"supplier\", \"references\": [{\"url\": \"https://cert-portal.siemens.com/productcert/html/ssa-784472.html\"}], \"providerMetadata\": {\"orgId\": \"0b142b55-0307-4c5a-b3c9-f314f3fb7c5e\", \"shortName\": \"siemens-SADP\", \"dateUpdated\": \"2026-10-15T01:06:59.431Z\"}}, {\"title\": \"CISA ADP Vulnrichment\", \"metrics\": [{\"other\": {\"type\": \"ssvc\", \"content\": {\"id\": \"CVE-2025-38250\", \"role\": \"CISA Coordinator\", \"options\": [{\"Exploitation\": \"none\"}, {\"Automatable\": \"no\"}, {\"Technical Impact\": \"total\"}], \"version\": \"2.0.3\", \"timestamp\": \"2026-10-15T21:48:58.439628Z\"}}}], \"providerMetadata\": {\"orgId\": \"134c704f-9b21-4f2e-91b3-4a467353bcc0\", \"shortName\": \"CISA-ADP\", \"dateUpdated\": \"2026-10-15T21:48:59.265Z\"}}], \"cna\": {\"title\": \"Bluetooth: hci_core: Fix use-after-free in vhci_flush()\", \"metrics\": [{\"cvssV3_1\": {\"version\": \"3.1\", \"baseScore\": 7.8, \"baseSeverity\": \"HIGH\", \"vectorString\": \"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H\"}, \"scenarios\": [{\"lang\": \"en\", \"value\": \"AV:L - Although this is the Bluetooth subsystem, the vulnerable path is not reachable from over-the-air traffic \\u2014 it requires a local `ioctl(HCIDEVRESET)` on an AF_BLUETOOTH HCI socket raced against a local `close()` of the transport fd (or driver removal). Both sides of the race are local syscalls.\\nAC:L - The attacker controls both racing threads (close of the vhci fd vs. the HCIDEVRESET ioctl) and the window is large, spanning the full `hci_dev_close_sync()`/`hci_dev_open_sync()` command-sync sequence inside `hci_dev_do_reset()`. Failed attempts are harmless and can be repeated indefinitely until the race is won.\\nPR:L - `HCIDEVRESET` is gated on `capable(CAP_NET_ADMIN)`, a capability held by non-root service accounts such as bluetoothd and Android\u0027s Bluetooth process rather than requiring full init-namespace root, and this repo consistently scores CAP_NET_ADMIN-gated Bluetooth mgmt/ioctl bugs as PR:L. The free side additionally needs no privilege at all when supplied by ordinary transport-driver teardown (btusb/hci_ldisc/virtio_bt unregister).\\nUI:N - The attacker drives both the reset ioctl and the device teardown from its own threads with no victim participation. No user action of any kind is needed.\\nS:U - The use-after-free corrupts kernel heap memory and yields kernel-privilege compromise within the same security authority. No VM, IOMMU, or sandbox boundary is crossed.\\nC:H - This is a slab use-after-free on a `kmalloc-1k` object; `skb_queue_purge_reason()` reads the freed `sk_buff_head` and dereferences pointers taken from it, so an attacker who reclaims the slot obtains an arbitrary kernel-memory read primitive and full disclosure of kernel memory.\\nI:H - The UAF is read *and* write: `skb_queue_splice_init()` writes back into the freed object and `kfree_skb()` is invoked on attacker-reclaimable pointers, while `vhci_send_frame()` performs `skb_queue_tail()` into freed memory. That combination gives a controlled-free and linked-list-write primitive suitable for control-flow hijacking and privilege escalation.\\nA:H - Even without successful heap grooming, purging a freed skb queue and freeing garbage pointers reliably corrupts the slab allocator and panics the kernel. The attacker can trigger it repeatedly for a persistent denial of service.\"}]}], \"affected\": [{\"repo\": \"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\", \"vendor\": \"Linux\", \"product\": \"Linux\", \"versions\": [{\"status\": \"affected\", \"version\": \"bf18c7118cf83ad4b9aa476354b4a06bcb9d0c4f\", \"lessThan\": \"dd4becd3fd4102696e1c15e6d260a1712a2d8685\", \"versionType\": \"git\"}, {\"status\": \"affected\", \"version\": \"bf18c7118cf83ad4b9aa476354b4a06bcb9d0c4f\", \"lessThan\": \"90dee0a0ff84fac8accd5be98412b3819f667149\", \"versionType\": \"git\"}, {\"status\": \"affected\", \"version\": \"bf18c7118cf83ad4b9aa476354b4a06bcb9d0c4f\", \"lessThan\": \"c56b177efce8b62798e4d96bdb9867106cb7c4a0\", \"versionType\": \"git\"}, {\"status\": \"affected\", \"version\": \"bf18c7118cf83ad4b9aa476354b4a06bcb9d0c4f\", \"lessThan\": \"bc0819a25e04cd68ef3568cfa51b63118fea39a7\", \"versionType\": \"git\"}, {\"status\": \"affected\", \"version\": \"bf18c7118cf83ad4b9aa476354b4a06bcb9d0c4f\", \"lessThan\": \"ce23b73f0f27e2dbeb81734a79db710f05aa33c6\", \"versionType\": \"git\"}, {\"status\": \"affected\", \"version\": \"bf18c7118cf83ad4b9aa476354b4a06bcb9d0c4f\", \"lessThan\": \"0e5c144c557df910ab64d9c25d06399a9a735e65\", \"versionType\": \"git\"}, {\"status\": \"affected\", \"version\": \"bf18c7118cf83ad4b9aa476354b4a06bcb9d0c4f\", \"lessThan\": \"1d6123102e9fbedc8d25bf4731da6d513173e49e\", \"versionType\": \"git\"}], \"programFiles\": [\"include/net/bluetooth/hci_core.h\", \"net/bluetooth/hci_core.c\"], \"defaultStatus\": \"unaffected\"}, {\"repo\": \"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\", \"vendor\": \"Linux\", \"product\": \"Linux\", \"versions\": [{\"status\": \"affected\", \"version\": \"3.4\"}, {\"status\": \"unaffected\", \"version\": \"0\", \"lessThan\": \"3.4\", \"versionType\": \"semver\"}, {\"status\": \"unaffected\", \"version\": \"5.10.259\", \"versionType\": \"semver\", \"lessThanOrEqual\": \"5.10.*\"}, {\"status\": \"unaffected\", \"version\": \"5.15.209\", \"versionType\": \"semver\", \"lessThanOrEqual\": \"5.15.*\"}, {\"status\": \"unaffected\", \"version\": \"6.1.167\", \"versionType\": \"semver\", \"lessThanOrEqual\": \"6.1.*\"}, {\"status\": \"unaffected\", \"version\": \"6.6.97\", \"versionType\": \"semver\", \"lessThanOrEqual\": \"6.6.*\"}, {\"status\": \"unaffected\", \"version\": \"6.12.36\", \"versionType\": \"semver\", \"lessThanOrEqual\": \"6.12.*\"}, {\"status\": \"unaffected\", \"version\": \"6.15.5\", \"versionType\": \"semver\", \"lessThanOrEqual\": \"6.15.*\"}, {\"status\": \"unaffected\", \"version\": \"6.16\", \"versionType\": \"original_commit_for_fix\", \"lessThanOrEqual\": \"*\"}], \"programFiles\": [\"include/net/bluetooth/hci_core.h\", \"net/bluetooth/hci_core.c\"], \"defaultStatus\": \"affected\"}], \"references\": [{\"url\": \"https://git.kernel.org/stable/c/dd4becd3fd4102696e1c15e6d260a1712a2d8685\"}, {\"url\": \"https://git.kernel.org/stable/c/90dee0a0ff84fac8accd5be98412b3819f667149\"}, {\"url\": \"https://git.kernel.org/stable/c/c56b177efce8b62798e4d96bdb9867106cb7c4a0\"}, {\"url\": \"https://git.kernel.org/stable/c/bc0819a25e04cd68ef3568cfa51b63118fea39a7\"}, {\"url\": \"https://git.kernel.org/stable/c/ce23b73f0f27e2dbeb81734a79db710f05aa33c6\"}, {\"url\": \"https://git.kernel.org/stable/c/0e5c144c557df910ab64d9c25d06399a9a735e65\"}, {\"url\": \"https://git.kernel.org/stable/c/1d6123102e9fbedc8d25bf4731da6d513173e49e\"}], \"x_generator\": {\"engine\": \"bippy-1.2.0\"}, \"descriptions\": [{\"lang\": \"en\", \"value\": \"In the Linux kernel, the following vulnerability has been resolved:\\n\\nBluetooth: hci_core: Fix use-after-free in vhci_flush()\\n\\nsyzbot reported use-after-free in vhci_flush() without repro. [0]\\n\\nFrom the splat, a thread close()d a vhci file descriptor while\\nits device was being used by iotcl() on another thread.\\n\\nOnce the last fd refcnt is released, vhci_release() calls\\nhci_unregister_dev(), hci_free_dev(), and kfree() for struct\\nvhci_data, which is set to hci_dev-\u003edev-\u003edriver_data.\\n\\nThe problem is that there is no synchronisation after unlinking\\nhdev from hci_dev_list in hci_unregister_dev().  There might be\\nanother thread still accessing the hdev which was fetched before\\nthe unlink operation.\\n\\nWe can use SRCU for such synchronisation.\\n\\nLet\u0027s run hci_dev_reset() under SRCU and wait for its completion\\nin hci_unregister_dev().\\n\\nAnother option would be to restore hci_dev-\u003edestruct(), which was\\nremoved in commit 587ae086f6e4 (\\\"Bluetooth: Remove unused\\nhci-destruct cb\\\").  However, this would not be a good solution, as\\nwe should not run hci_unregister_dev() while there are in-flight\\nioctl() requests, which could lead to another data-race KCSAN splat.\\n\\nNote that other drivers seem to have the same problem, for exmaple,\\nvirtbt_remove().\\n\\n[0]:\\nBUG: KASAN: slab-use-after-free in skb_queue_empty_lockless include/linux/skbuff.h:1891 [inline]\\nBUG: KASAN: slab-use-after-free in skb_queue_purge_reason+0x99/0x360 net/core/skbuff.c:3937\\nRead of size 8 at addr ffff88807cb8d858 by task syz.1.219/6718\\n\\nCPU: 1 UID: 0 PID: 6718 Comm: syz.1.219 Not tainted 6.16.0-rc1-syzkaller-00196-g08207f42d3ff #0 PREEMPT(full)\\nHardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 05/07/2025\\nCall Trace:\\n \u003cTASK\u003e\\n dump_stack_lvl+0x189/0x250 lib/dump_stack.c:120\\n print_address_description mm/kasan/report.c:408 [inline]\\n print_report+0xd2/0x2b0 mm/kasan/report.c:521\\n kasan_report+0x118/0x150 mm/kasan/report.c:634\\n skb_queue_empty_lockless include/linux/skbuff.h:1891 [inline]\\n skb_queue_purge_reason+0x99/0x360 net/core/skbuff.c:3937\\n skb_queue_purge include/linux/skbuff.h:3368 [inline]\\n vhci_flush+0x44/0x50 drivers/bluetooth/hci_vhci.c:69\\n hci_dev_do_reset net/bluetooth/hci_core.c:552 [inline]\\n hci_dev_reset+0x420/0x5c0 net/bluetooth/hci_core.c:592\\n sock_do_ioctl+0xd9/0x300 net/socket.c:1190\\n sock_ioctl+0x576/0x790 net/socket.c:1311\\n vfs_ioctl fs/ioctl.c:51 [inline]\\n __do_sys_ioctl fs/ioctl.c:907 [inline]\\n __se_sys_ioctl+0xf9/0x170 fs/ioctl.c:893\\n do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]\\n do_syscall_64+0xfa/0x3b0 arch/x86/entry/syscall_64.c:94\\n entry_SYSCALL_64_after_hwframe+0x77/0x7f\\nRIP: 0033:0x7fcf5b98e929\\nCode: ff ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 40 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 \u003c48\u003e 3d 01 f0 ff ff 73 01 c3 48 c7 c1 a8 ff ff ff f7 d8 64 89 01 48\\nRSP: 002b:00007fcf5c7b9038 EFLAGS: 00000246 ORIG_RAX: 0000000000000010\\nRAX: ffffffffffffffda RBX: 00007fcf5bbb6160 RCX: 00007fcf5b98e929\\nRDX: 0000000000000000 RSI: 00000000400448cb RDI: 0000000000000009\\nRBP: 00007fcf5ba10b39 R08: 0000000000000000 R09: 0000000000000000\\nR10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000\\nR13: 0000000000000000 R14: 00007fcf5bbb6160 R15: 00007ffd6353d528\\n \u003c/TASK\u003e\\n\\nAllocated by task 6535:\\n kasan_save_stack mm/kasan/common.c:47 [inline]\\n kasan_save_track+0x3e/0x80 mm/kasan/common.c:68\\n poison_kmalloc_redzone mm/kasan/common.c:377 [inline]\\n __kasan_kmalloc+0x93/0xb0 mm/kasan/common.c:394\\n kasan_kmalloc include/linux/kasan.h:260 [inline]\\n __kmalloc_cache_noprof+0x230/0x3d0 mm/slub.c:4359\\n kmalloc_noprof include/linux/slab.h:905 [inline]\\n kzalloc_noprof include/linux/slab.h:1039 [inline]\\n vhci_open+0x57/0x360 drivers/bluetooth/hci_vhci.c:635\\n misc_open+0x2bc/0x330 drivers/char/misc.c:161\\n chrdev_open+0x4c9/0x5e0 fs/char_dev.c:414\\n do_dentry_open+0xdf0/0x1970 fs/open.c:964\\n vfs_open+0x3b/0x340 fs/open.c:1094\\n do_open fs/namei.c:3887 [inline]\\n path_openat+0x2ee5/0x3830 fs/name\\n---truncated---\"}], \"cpeApplicability\": [{\"nodes\": [{\"negate\": false, \"cpeMatch\": [{\"criteria\": \"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\", \"vulnerable\": true, \"versionEndExcluding\": \"5.10.259\", \"versionStartIncluding\": \"3.4\"}, {\"criteria\": \"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\", \"vulnerable\": true, \"versionEndExcluding\": \"5.15.209\", \"versionStartIncluding\": \"3.4\"}, {\"criteria\": \"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\", \"vulnerable\": true, \"versionEndExcluding\": \"6.1.167\", \"versionStartIncluding\": \"3.4\"}, {\"criteria\": \"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\", \"vulnerable\": true, \"versionEndExcluding\": \"6.6.97\", \"versionStartIncluding\": \"3.4\"}, {\"criteria\": \"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\", \"vulnerable\": true, \"versionEndExcluding\": \"6.12.36\", \"versionStartIncluding\": \"3.4\"}, {\"criteria\": \"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\", \"vulnerable\": true, \"versionEndExcluding\": \"6.15.5\", \"versionStartIncluding\": \"3.4\"}, {\"criteria\": \"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\", \"vulnerable\": true, \"versionEndExcluding\": \"6.16\", \"versionStartIncluding\": \"3.4\"}], \"operator\": \"OR\"}]}], \"providerMetadata\": {\"orgId\": \"416baaa9-dc9f-4396-8d5f-8c081fb06d67\", \"shortName\": \"Linux\", \"dateUpdated\": \"2026-08-05T12:00:43.317Z\"}}}",
      "cveMetadata": "{\"cveId\": \"CVE-2025-38250\", \"state\": \"PUBLISHED\", \"dateUpdated\": \"2026-10-15T21:52:12.635Z\", \"dateReserved\": \"2025-04-16T04:51:23.997Z\", \"assignerOrgId\": \"416baaa9-dc9f-4396-8d5f-8c081fb06d67\", \"datePublished\": \"2025-07-09T10:42:30.294Z\", \"assignerShortName\": \"Linux\"}",
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }
  }
}


Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

Sightings

Author Source Type Date

Nomenclature

  • Seen: The vulnerability was mentioned, discussed, or seen somewhere by the user.
  • Confirmed: The vulnerability is confirmed from an analyst perspective.
  • Published Proof of Concept: A public proof of concept is available for this vulnerability.
  • Exploited: This vulnerability was exploited and seen by the user reporting the sighting.
  • Patched: This vulnerability was successfully patched by the user reporting the sighting.
  • Not exploited: This vulnerability was not exploited or seen by the user reporting the sighting.
  • Not confirmed: The user expresses doubt about the veracity of the vulnerability.
  • Not patched: This vulnerability was not successfully patched by the user reporting the sighting.


Loading…

Loading…