Description
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.
Published: 2026-09-25
Score: 7.0 High
EPSS: < 1% Very Low
KEV: No
Impact: Kernel crash via NULL pointer dereference
Action: Apply patch
AI Analysis

Impact

A race condition in the Linux kernel’s Bluetooth subsystem causes a NULL pointer dereference during device deletion. When a child device is concurrently unregistered while the parent is being reparented, the code attempts to remove a node from a list that has already been cleared, leading to a kernel crash. This denial‑of‑service flaw breaks the integrity of the system’s core device hierarchy, potentially allowing an attacker to disrupt services or cause a complete system reboot. The underlying weakness is a classic NULL pointer dereference and associated use‑after‑free race.

Affected Systems

The flaw is present in all Linux kernel releases that contain the affected Bluetooth stack before the commit that introduced the fix. The patch is included in newer kernel versions; any system running an unpatched kernel, regardless of distribution, is potentially vulnerable.

Risk and Exploitability

The likely attack vector is local code execution or privilege escalation, inferred from the kernel‑level nature of the defect, but this is not explicitly stated in the CVE payload. No publicly available exploitation tool is documented, and the EPSS score is low (<1%, specifically 0.00166). The vulnerability is not listed as a known exploited vulnerability by CISA. The CVSS score of 7.0 indicates a medium severity flaw and, together with the low EPSS score, suggests that exploitation is unlikely but could still result in a denial‑of‑service outcome. Prompt remediation is important, especially on systems with exposed Bluetooth interfaces.

Generated by OpenCVE AI on October 1, 2026 at 04:27 UTC.

Remediation

No solution or workaround provided in the CVE record.

OpenCVE Recommended Actions

  • Upgrade to a Linux kernel that includes the commit adding the parent reference guard for Bluetooth device cleanup.
  • If an upgrade is not immediately possible, apply the specific patch that adds the get_device/put_device calls to ensure the parent remains valid during child deletion.
  • Reboot or reload affected kernel modules to make sure the updated code is active and the race condition is eliminated.

Generated by OpenCVE AI on October 1, 2026 at 04:27 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Wed, 30 Sep 2026 12:15:00 +0000

Type Values Removed Values Added
References
Metrics threat_severity

None

cvssV3_1

{'score': 7.0, 'vector': 'CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H'}

threat_severity

Moderate


Fri, 25 Sep 2026 18:00:00 +0000

Type Values Removed Values Added
Weaknesses CWE-476
CWE-617

Fri, 25 Sep 2026 10:30:00 +0000

Type Values Removed Values Added
Description 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.
Title Bluetooth: hci_sysfs: Fix NULL pointer dereference in device_del()
First Time appeared Linux
Linux linux Kernel
CPEs cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
Vendors & Products Linux
Linux linux Kernel
References

Subscriptions

Linux Linux Kernel
cve-icon MITRE

Status: PUBLISHED

Assigner: Linux

Published:

Updated: 2026-09-25T10:23:13.971Z

Reserved: 2026-09-25T10:18:58.207Z

Link: CVE-2026-97975

cve-icon Vulnrichment

No data.

cve-icon NVD

Status : Received

Published: 2026-09-25T11:17:25.427

Modified: 2026-09-25T11:17:25.427

Link: CVE-2026-97975

cve-icon Redhat

Severity : Moderate

Publid Date: 2026-09-25T00:00:00Z

Links: CVE-2026-97975 - Bugzilla

cve-icon OpenCVE Enrichment

Updated: 2026-10-01T04:30:18Z

Weaknesses