CVE-2026-80819

Source
https://cve.org/CVERecord?id=CVE-2026-80819
Import Source
https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-80819.json
JSON Data
https://api.osv.dev/v1/vulns/CVE-2026-80819
Downstream
Published
2026-09-04T15:13:40.309Z
Modified
2026-09-06T03:46:51.458853102Z
Summary
Bluetooth: RFCOMM: take rfcomm_mutex for the deferred setup accept
Details

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

Bluetooth: RFCOMM: take rfcomm_mutex for the deferred setup accept

rfcommsockrecvmsg() completes a deferred setup by calling rfcommdlcaccept() without holding any RFCOMM lock:

if (test_and_clear_bit(RFCOMM_DEFER_SETUP, &d->flags)) {
    rfcomm_dlc_accept(d);
    return 0;
}

and rfcommdlcaccept() dereferences the session on its first line:

struct sock *sk = d->session->sock->sk;

Every other path that touches d->session runs under rfcommmutex: rfcommdlcopen(), rfcommdlcclose(), rfcommdlcexists(), rfcommdlcsendrpn(), and the RFCOMM thread through rfcommprocesssessions(). rfcommconnectind() is even documented as "called under rfcomm_lock()". This call site is the only one that skips it.

The RFCOMMDEFERSETUP bit looks like it serialises the accept against teardown, since __rfcommdlcclose() returns early when it wins the testandclear. But rfcommrecvdisc() forces the state first:

d->state = BT_CLOSED;
__rfcomm_dlc_close(d, err);

and the early return only covers BTCONNECT, BTCONFIG, BTOPEN and BTCONNECT2. With the state already BT_CLOSED that switch does not match, the bit is never consulted, and __rfcommdlcclose() falls through to rfcommdlcunlink(), which sets d->session = NULL.

So a remote DISC on a deferred dlc clears the session while leaving RFCOMMDEFERSETUP set. The next recvmsg() then passes the testandclear and dereferences a NULL session. No timing window is needed: once the DISC has been processed, the dereference is unconditional.

Give rfcommdlcaccept() the same shape as rfcommdlcopen() and rfcommdlcclose(): an exported wrapper that takes rfcomm_mutex and re-checks the session, around a __rfcommdlcaccept() that the two in-core callers, which already hold the mutex, keep using.

Reproduced on a KASAN + PROVELOCKING kernel 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, opens a dlc on a channel bound with BTDEFER_SETUP, and sends DISC after the socket is accepted. recv() on the accepted socket then hits:

Oops: general protection fault KASAN: null-ptr-deref in range [0x0000000000000010-0x0000000000000017] RIP: 0010:rfcommdlcaccept+0x54/0x350 Call Trace: rfcommsockrecvmsg+0x1cd/0x230 sock_recvmsg+0x166/0x1c0 _sysrecvfrom+0x20d/0x300

0x10 is the offset of sock in struct rfcommsession. With this patch the same run completes with recv() returning 0 and no report, and lockdep stays quiet, confirming rfcommmutex is still taken before lock_sock on this path as it is on the thread side.

Database specific
{
    "cna_assigner": "Linux",
    "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/80xxx/CVE-2026-80819.json"
}
References

Affected packages

Git / git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git

Affected ranges

Type
GIT
Repo
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
Events
Introduced
bb23c0ab824653be4aa7dfca15b07b3059717004
Fixed
d8d686dd5662a7c4745e4515f1237a9f3b7df181
Fixed
eb71d5a1ea8ff2683e394b48ae3cd676037ab4c2
Fixed
56f0aa75c7640e46397ef73bea251fcbef9150c0
Fixed
362726c9c6e56eea4262109183e49868c39ccd3a
Fixed
825b95561d7b7c393df9e7bc295451aaeadc3d18
Fixed
d4b1a13b1eff2e80925c7368ffdeaaa50cba93df
Fixed
355bfd57ca4ca881c6eb03ca813b440a094b1f44
Fixed
b405c2f96ae2e37375105881890f7738833b1d62
Fixed
43a556b2fd43f2df6dded59c2e26560a27874c24

Database specific

source
"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-80819.json"

Linux / Kernel

Package

Name
Kernel

Affected ranges

Type
ECOSYSTEM
Events
Introduced
2.6.30
Fixed
5.10.267
Type
ECOSYSTEM
Events
Introduced
5.11.0
Fixed
5.15.218
Type
ECOSYSTEM
Events
Introduced
5.16.0
Fixed
6.1.185
Type
ECOSYSTEM
Events
Introduced
6.2.0
Fixed
6.6.154
Type
ECOSYSTEM
Events
Introduced
6.7.0
Fixed
6.12.106
Type
ECOSYSTEM
Events
Introduced
6.13.0
Fixed
6.18.47
Type
ECOSYSTEM
Events
Introduced
6.19.0
Fixed
7.1.11
Type
ECOSYSTEM
Events
Introduced
7.2.0
Fixed
7.2.1

Database specific

source
"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-80819.json"