CVE-2026-97975

CVE-2026-97975

published September 25, 2026

CVSS
—
EPSS
0%
Percentile
5.7
In the wild
Unconfirmed
What it is

In the Linux kernel, the following vulnerability has been resolved:

Bluetooth: hci_sysfs: Fix NULL pointer dereference in device_del()

A NULL pointer dereference in klist_put() occurs when a child device (such

as a BNEP network device in bnep_session) is concurrently being

unregistered while hci_conn_del_sysfs() reparents child devices.

This is caused by a race condition between hci_conn_del_sysfs() and

concurrent child device unregistration (e.g. bnep_session calling

unregister_netdev()). During device unregistration, device_del() snapshots

a non-NULL parent pointer. Concurrently, hci_conn_del_sysfs() finds the

child device using device_find_any_child() and calls device_move() to

reparent it to NULL, which removes the node from its parent's klist and

clears knode_parent. Subsequently, device_del() calls

klist_del(&dev->p->knode_parent) using the stale parent snapshot, causing

klist_put() to dereference knode_klist(n)->put on an already removed node,

resulting in a NULL pointer dereference.

This race was introduced by commit 27aabf27fd01 ("Bluetooth: fix

use-after-free in device_for_each_child()"), which replaced

device_find_child(..., __match_tty) with device_find_any_child() in

hci_conn_del_sysfs(). That change was intended to avoid a use-after-free

where conn->dev outlived its parent hdev->dev when child devices held

references to conn->dev, because conn->dev only held a reference to

hdev->dev while registered in sysfs.

Fix the issue properly by taking an explicit reference to the parent device

with get_device(&hdev->dev) in hci_conn_init_sysfs() and dropping it with

put_device(parent) in bt_link_release() when the conn device is freed. This

ensures that hdev->dev remains valid for the entire lifecycle of conn->dev,

resolving the underlying use-after-free. With the parent reference held

properly, restore the __match_tty filter in hci_conn_del_sysfs() so that

device_move() is only invoked on persistent RFCOMM TTY devices as

originally intended, eliminating the race condition with unregistering

network devices.

The record
Technical detail
CVSS
Not scored
CVSS v4.0
Not supplied
EPSS
0.00168 · 5.7th percentile
Published
2026-09-25T15:17Z
References (5)
EPSS history
Timeline
  • 27 SEP 03:28Z
    EPSS moved — → 0%
    epss
  • 25 SEP 10:23Z
    Bluetooth: hci_sysfs: Fix NULL pointer dereference in device_del()
    cvelistv5