CVE-2026-98739 in Linux
Сводка
по VulDB • 20.10.2026
В ядре Linux была устранена следующая уязвимость:
Bluetooth: RFCOMM: исправлена гонка потоков (race condition) при инициализации ссылки на порт
Для устройств с флагом RFCOMM_RELEASE_ONHUP функции rfcomm_tty_install() и __rfcomm_release_dev() используют флаг RFCOMM_TTY_OWNED для определения того, кто должен освободить начальную ссылку tty_port. Путь освобождения проверяет этот бит отдельно от пути установки, который его устанавливает, поэтому обе операции могут привести к двойному освобождению ссылки.
Синхронное завершение (hangup) не предотвращает эту гонку: указатель port->tty присваивается только в функции tty_port_open(), которая вызывается после установки соединения. Возможна следующая интерливинг-последовательность действий:
1. При установке и освобождении каждая сторона получает ссылку через rfcomm_dev_get(). 2. Процесс освобождения видит, что флаг RFCOMM_TTY_OWNED сброшен (clear). 3. Процесс установки устанавливает флаг RFCOMM_TTY_OWNED и освобождает начальную ссылку. 4. Процесс освобождает ту же самую начальную ссылку повторно. 5. Очистка TTY освобождает свою ссылку и уничтожает устройство. 6. Процесс освобождения выполняет финальный вызов tty_port_put() для уже освобожденного порта.
KASAN зафиксировал следующее:
BUG: KASAN: slab-use-after-free в функции tty_port_put+0x22/0x190 Запись размера 4 по адресу ffff8881001d3d5c выполнена задачей poc/92
Трассировка вызовов (Call Trace): tty_port_put+0x22/0x190 rfcomm_dev_ioctl+0x1d4/0x1930 sock_do_ioctl+0x110/0x260 sock_ioctl+0x380/0x590 __x64_sys_ioctl+0x134/0x1c0
Выделено задачей 88: rfcomm_dev_ioctl+0x8f6/0x1930 sock_do_ioctl+0x110/0x260 sock_ioctl+0x380/0x590 __x64_sys_ioctl+0x134/0x1c0
Освобождено задачей 65: kfree+0x131/0x3c0 rfcomm_dev_destruct+0x23b/0x2f0 release_one_tty+0xc1/0x370 process_one_work+0x661/0x1090
Использование функции test_and_set_bit() в обоих путях гарантирует, что только тот вызывающий объект, который изменяет флаг RFCOMM_TTY_OWNED со сброшенного (clear) на установленный (set), освобождает начальную ссылку. Каждый путь сохраняет свою собственную справочную ссылку до момента завершения или очистки TTY, сохраняя существующий порядок обратных вызовов и обработку ошибок.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.