CVE-2026-64557
Description
In the Linux kernel, the following vulnerability has been resolved:
Bluetooth: L2CAP: Fix use-after-free in l2cap_sock_new_connection_cb()
l2cap_sock_new_connection_cb() returned l2cap_pi(sk)->chan after
release_sock(parent). Once the parent lock is dropped the newly
enqueued child socket sk is reachable via the accept queue, so another
task can accept and free it before the callback dereferences sk,
resulting in a use-after-free.
Rework the ->new_connection() op so the core, rather than the callback,
owns the child channel's lifetime. The op now receives a pre-allocated
new_chan and returns an errno instead of allocating and returning a
channel. l2cap_new_connection() allocates the child channel and links
it into the conn list via __l2cap_chan_add() before invoking the
callback, so the conn-list reference keeps the channel alive once
release_sock(parent) exposes the socket to other tasks.
Channel configuration that was duplicated in l2cap_sock_init() and the
various new_connection callbacks is consolidated into
l2cap_chan_set_defaults(), which now inherits from the parent channel
when one is supplied.
Summary dbcve.org
A use-after-free vulnerability exists in the Linux kernel's Bluetooth L2CAP subsystem where l2cap_sock_new_connection_cb() returns a channel reference after release_sock(parent) drops the lock. This allows a race condition where another task can accept and free the child socket before the callback completes dereferencing, leading to use-after-free.
Mitigation
Apply the kernel patch that reworks the ->new_connection() op to have the core own the child channel lifetime, with l2cap_new_connection() allocating and linking the channel before invoking the callback. This ensures the conn-list reference keeps the channel alive.