CVE-2026-19940
Received Received - Intake

Use-After-Free in Zephyr RTOS Bluetooth HFP Audio Gateway

Vulnerability report for CVE-2026-19940, including description, CVSS score, EPSS score, affected products, exploitability, helpful resources, and attack-flow context.

Publication date: 2026-10-13

Last updated on: 2026-10-13

Assigner: Zephyr Project

Description

The Bluetooth Classic Hands-Free Profile Audio Gateway implementation in subsys/bluetooth/host/classic/hfp_ag.c keeps its struct bt_hfp_ag objects in a static pool indexed by ACL connection index. On link teardown, hfp_ag_disconnected() cancels ag->tx_work and the per-call work items and then clears ag->acl_conn, which marks the pool slot as free β€” but it leaves ag->ongoing_call_work (and ag->slc_work) untouched. The next connection that lands on the same slot enters hfp_ag_create(), whose only occupancy test is ag->acl_conn, and immediately executes memset(ag, 0, sizeof(struct bt_hfp_ag)) followed by k_work_init_delayable(). Zeroing and re-initialising a k_work_delayable whose struct _timeout node is still linked into the kernel timeout list leaves the kernel holding a reference to a node with NULL prev/next links. ag->ongoing_call_work is armed by the remote peer: when a Hands-Free unit sends AT+CIND? during Service Level Connection establishment and the application provides the asynchronous get_ongoing_call callback, the AG schedules the work for CONFIG_BT_HFP_AG_GET_ONGOING_CALL_TIMEOUT milliseconds (default 10000). The timer is cancelled only if the application answers in time via bt_hfp_ag_ongoing_calls(). A peer that sends AT+CIND?, then disconnects the HFP RFCOMM DLC, then immediately re-opens it on the same ACL link, reuses the same pool slot deterministically while the timeout is still pending β€” the AG's RFCOMM server accept path (hfp_ag_accept()) calls hfp_ag_create() directly, so the remote side drives both teardown and re-creation. The result is corruption of the kernel's timeout list: sys_dlist_remove() on the zeroed node performs writes through NULL pointers from the clock-announce path, and rescheduling the re-initialised work re-inserts a node the list already references, creating a cycle that the announce loop walks with interrupts locked. The observable impact is a fault or hang of the whole system, i.e. a denial of service reachable from Bluetooth radio range; no attacker-controlled data is written, so this does not by itself yield code execution. Exposure is limited to builds with CONFIG_BT_HFP_AG (marked experimental and disabled by default) whose application implements the asynchronous get_ongoing_call callback.

CVSS Scores

EPSS Scores

Probability:
Percentile:

Meta Information

Published
2026-10-13
Last Modified
2026-10-13
Generated
2026-10-13
AI Q&A
2026-10-13
EPSS Evaluated
N/A
NVD
EUVD

Affected Vendors & Products

Showing 1 associated CPE
Vendor Product Version / Range
zephyrproject zephyr 4.2.0

Helpful Resources

Exploitability

CWE
CWE Icon
KEV
KEV Icon
CWE ID Description
CWE-416 The product reuses or references memory after it has been freed. At some point afterward, the memory may be allocated again and saved in another pointer, while the original pointer references a location somewhere within the new allocation. Any operations using the original pointer are no longer valid because the memory "belongs" to the code that operates on the new pointer.

Attack-Flow Graph

AI Quick Actions

Instant insights powered by AI
Executive Summary

This vulnerability is a Bluetooth Classic Hands-Free Profile (HFP) Audio Gateway issue in Zephyr RTOS. It involves improper handling of Bluetooth connection cleanup, where certain work items are not properly reset during link teardown. This leads to kernel timeout list corruption, causing system faults or hangs when the same connection slot is reused while a pending timeout exists.

Detection Guidance

This vulnerability is specific to systems running Zephyr RTOS with Bluetooth Classic Hands-Free Profile Audio Gateway enabled and configured with the experimental CONFIG_BT_HFP_AG option. Detection requires checking for kernel faults or hangs during Bluetooth operations, particularly when the get_ongoing_call callback is used. No direct network commands detect this issue; system logs or kernel oops messages may indicate a timeout list corruption.

Impact Analysis

The vulnerability can cause a denial of service (DoS) by crashing or hanging the system. It is exploitable within Bluetooth radio range by a remote attacker who can force repeated disconnections and reconnections of an HFP connection. The system becomes unresponsive, requiring a reboot to recover.

Mitigation Strategies

Disable CONFIG_BT_HFP_AG if enabled, as it is experimental and disabled by default. Avoid implementing the asynchronous get_ongoing_call callback. Update to a patched version of Zephyr RTOS once available. Monitor system logs for Bluetooth-related crashes or hangs.

Chat Assistant

Ask questions about this CVE
Hi! I’m here to help you understand CVE-2026-19940. Ask me anything about the vulnerability, its impact, or mitigation strategies.
0/70

EPSS Chart