CVE-2026-98455
Received Received - Intake

NULL dereference in RFCOMM_CONNINFO getsockopt in Linux kernel

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

Publication date: 2026-10-18

Last updated on: 2026-10-18

Assigner: kernel.org

Description

In the Linux kernel, the following vulnerability has been resolved: Bluetooth: RFCOMM: fix NULL dereference of dlc->session in RFCOMM_CONNINFO The RFCOMM_CONNINFO getsockopt handler accepts a socket that is not connected as long as deferred setup is enabled: if (sk->sk_state != BT_CONNECTED && !rfcomm_pi(sk)->dlc->defer_setup) { err = -ENOTCONN; break; } l2cap_sk = rfcomm_pi(sk)->dlc->session->sock->sk; dlc->defer_setup is set in rfcomm_sock_init() when rfcomm_connect_ind() creates a child socket for an incoming connection on a listening socket that has BT_DEFER_SETUP enabled. It is never cleared afterwards. The session, however, can go away underneath it. rfcomm_recv_disc() forces the dlc state before tearing it down: d->state = BT_CLOSED; __rfcomm_dlc_close(d, err); The RFCOMM_DEFER_SETUP early return in __rfcomm_dlc_close() only covers BT_CONNECT, BT_CONFIG, BT_OPEN and BT_CONNECT2, so with the state already BT_CLOSED that switch does not match and the function falls through to rfcomm_dlc_unlink(), which sets d->session = NULL, while d->defer_setup stays 1. A getsockopt(SOL_RFCOMM, RFCOMM_CONNINFO) on the accepted socket after that point therefore skips the -ENOTCONN path -- sk->sk_state is BT_CLOSED, but dlc->defer_setup is still set -- and dereferences the NULL session. No race is needed: once the DISC has been processed, the dereference is unconditional. Reproduced on a KASAN kernel under QEMU with a BR/EDR peer emulated over /dev/vhci: the peer brings up an ACL link, opens L2CAP on the RFCOMM PSM, starts a session and sends SABM for a channel bound with BT_DEFER_SETUP, and sends DISC for that dlci after the socket has been accepted. getsockopt(SOL_RFCOMM, RFCOMM_CONNINFO) on the accepted socket then hits: Oops: general protection fault, probably for non-canonical address 0xdffffc0000000002: 0000 [#1] SMP KASAN PTI KASAN: null-ptr-deref in range [0x0000000000000010-0x0000000000000017] CPU: 1 UID: 0 PID: 150 Comm: init Tainted: G B 7.3.0-rc3-g5dd1818b15d9 Hardware name: QEMU Standard PC (i440FX + PIIX, 1996) RIP: 0010:rfcomm_sock_getsockopt+0x529/0x780 Call Trace: <TASK> do_sock_getsockopt+0x3ad/0x7d0 __sys_getsockopt+0x10e/0x1b0 __x64_sys_getsockopt+0xc2/0x160 do_syscall_64+0xda/0x4b0 entry_SYSCALL_64_after_hwframe+0x77/0x7f </TASK> 0x10 is the offset of sock in struct rfcomm_session; rfcomm_sock_getsockopt_old() is inlined into rfcomm_sock_getsockopt(). Commit 43a556b2fd43 ("Bluetooth: RFCOMM: take rfcomm_mutex for the deferred setup accept") fixed the same "a remote DISC clears the session while deferred setup is still flagged" problem in rfcomm_dlc_accept(); this is the remaining instance of it, in the getsockopt path. Deferred setup only leaves a socket usable here once it has reached BT_CONNECT2, so restrict the exception to that state and check that a session is actually present before following it.

CVSS Scores

EPSS Scores

Probability:
Percentile:

Meta Information

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

Affected Vendors & Products

Showing 9 associated CPEs
Vendor Product Version / Range
Linux Linux bb23c0ab824653be4aa7dfca15b07b3059717004
Linux Linux bb23c0ab824653be4aa7dfca15b07b3059717004
Linux Linux bb23c0ab824653be4aa7dfca15b07b3059717004
Linux Linux bb23c0ab824653be4aa7dfca15b07b3059717004
Linux Linux bb23c0ab824653be4aa7dfca15b07b3059717004
Linux Linux bb23c0ab824653be4aa7dfca15b07b3059717004
Linux Linux bb23c0ab824653be4aa7dfca15b07b3059717004
Linux Linux bb23c0ab824653be4aa7dfca15b07b3059717004
Linux Linux 2.6.30

Helpful Resources

Exploitability

CWE
CWE Icon
KEV
KEV Icon
CWE ID Description
CWE-UNKNOWN

Attack-Flow Graph

AI Quick Actions

Instant insights powered by AI
Executive Summary

This is a NULL pointer dereference vulnerability in the Linux kernel's Bluetooth RFCOMM subsystem. It occurs when a socket with deferred setup enabled receives a disconnect (DISC) command, causing the session pointer to be set to NULL while the defer_setup flag remains set. Subsequent calls to getsockopt with RFCOMM_CONNINFO dereference this NULL session pointer, leading to a kernel crash.

Detection Guidance

This vulnerability is specific to the Linux kernel's Bluetooth RFCOMM implementation and requires kernel debugging tools like KASAN to detect. No standard network or system commands can directly identify this issue. Monitor kernel logs for NULL pointer dereference errors in RFCOMM-related functions after Bluetooth operations.

Impact Analysis

An attacker within Bluetooth range could exploit this to crash the kernel on affected systems, causing denial of service. Systems using Bluetooth with RFCOMM and deferred setup enabled are vulnerable. The exploit requires sending a DISC command after connection setup but before the socket fully connects.

Mitigation Strategies

Apply the Linux kernel patch that fixes this issue. Update to a kernel version containing the fix (commit 43a556b2fd43 or later). If immediate patching is not possible, disable Bluetooth RFCOMM deferred setup by setting BT_DEFER_SETUP to 0 in your Bluetooth stack configuration.

Chat Assistant

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

EPSS Chart