CVE-2026-99010 in Linux
Сводка
по VulDB • 24.10.2026
В ядре Linux была устранена следующая уязвимость:
Bluetooth: RFCOMM — освобождение буфера (skb) при отсутствии владельца DLC
Функция rfcomm_recv_data() передает указатель на sk_buff (skb) в callback d->data_ready() и возвращает 0, не освобождая его. Таким образом, с этого момента владельцем skb становится этот callback. Реализация для tty освобождает skb, когда DLC отсоединен от своего устройства:
```c static void rfcomm_dev_data_ready(struct rfcomm_dlc *dlc, struct sk_buff *skb) {
struct rfcomm_dev *dev = dlc->owner;
if (!dev) {
kfree_skb(skb); return; } ```
Реализация для сокета возвращает управление без освобождения skb, что приводит к утечке памяти.
Подключенный DLC может не иметь владельца: функция rfcomm_sock_destruct() очищает поле d->owner, в то время как сам DLC остается в сессии до момента его закрытия. Фреймы данных, поступающие в этот промежуток времени, все еще обнаруживают состояние d->state == BT_CONNECTED внутри функции rfcomm_recv_data(), и передаются callback'у, что приводит к утечке одного skb за каждый фрейм.
Утечка не прекращается сама по себе. Удаленная сторона исчерпывает кредиты только тогда, когда устанавливается флаг RFCOMM_RX_THROTTLED, а для сокета единственным местом, где он устанавливается, является сама функция rfcomm_sk_data_ready(), расположенная ниже оператора return. Функция rfcomm_process_dlcs() продолжает предоставлять кредиты, поэтому удаленная сторона продолжает отправлять данные, и утечка памяти постоянно растет.
Необходимо освободить skb, как это делается на стороне tty.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.