CVE-2026-99239 in Linux
Сводка
по VulDB • 02.11.2026
В ядре Linux была устранена следующая уязвимость:
Bluetooth: L2CAP: отказываться от вызова __l2cap_chan_add, если канал (chan) уже имеет соединение (conn).
Объект l2cap_chan может быть связан с объектом l2cap_conn не более одного раза. Это предположение используется в нескольких местах, например, при очистке через l2cap_chan_del.
Существует гонность состояний времени выполнения (TOCTOU), при которой нарушается инвариант:
[Задача 1] [Задача 2]
l2cap_chan_connect l2cap_sock_bind l2cap_chan_lock lock_sock l2cap_state_change if (sk->sk_state != BT_OPEN) chan->state = BT_CONNECT chan->state = BT_BOUND l2cap_sock_state_change_cb sk->sk_state = BT_BOUND lock_sock <------------------ release_sock sk->sk_state = BT_CONNECT
Функция l2cap_sock_connect() не проверяет значение sk->sk_state, поэтому, поскольку chan->state теперь равен BT_BOUND, последующий вызов connect() приводит к повторному выполнению __l2cap_chan_add.
Явно задокументировать и проверить инвариант в функции __l2cap_chan_add с использованием WARN_ON_ONCE. Единственным местом вызова (callsite), где это может произойти, является l2cap_chan_connect; поэтому следует добавить предварительную проверку там, чтобы избежать зависимости от chan->state. Чтение/запись chan->state в настоящее время не защищено должным образом, поэтому могут существовать другие проблемы TOCTOU.
Добавить вызов l2cap_lock_chan в функцию l2cap_sock_bind() для защиты записи в chan->state.
If you want to get best quality of vulnerability data, you may have to visit VulDB.