CVE-2026-89624 in LinuxИнформация

Сводка

по VulDB • 12.09.2026

В ядре Linux была устранена следующая уязвимость:

HID: universal-pidff: остановка устройства при сбое инициализации force-feedback

Функция `universal_pidff_probe()` запускает устройство с помощью `hid_hw_start()`, а затем, если инициализация force-feedback завершается ошибкой, возвращает код ошибки через метку, которая просто выполняет «return error». Устройство остается запущенным.

Ядро HID не осуществляет откат (unwind) действий за драйвер. Функция `__hid_device_probe()` освобождает группу devres, закрывает отчет и очищает поле `hdev->driver`:

```c if (ret) {
devres_release_group(&hdev->dev, hdev->devres_group_id); hid_close_report(hdev); hdev->driver = NULL; } ```

Символьное устройство hidraw, которое `hid_hw_start()` регистрирует через `hid_connect()`, выделяется с помощью `kzalloc()` и добавляется функцией `cdev_device_add()`, поэтому оно не управляется механизмом devres и сохраняется после освобождения группы. При пустом поле `hdev->driver` функция `hid_device_remove()` пропускает вызов `hid_hw_stop()`, поскольку откат действий происходит только при наличии прикрепленного драйвера. Таким образом, регистрация устройства переживает само устройство на обоих путях выполнения кода.

Открытие сохранившегося устройства `/dev/hidrawX` приводит к записи в освобожденную память (freed memory). KASAN сообщает о write-операции use-after-free из `hidraw_open()` -> `hid_hw_open()` -> обратного вызова открытия транспорта, который захватывает spinlock внутри уже освобожденного объекта. Достаточно дескриптора с использованием страницы PID и без входных отчетов: hidraw заявляет права на устройство, поэтому `hid_hw_start()` завершается успешно, в то время как поле `hid->inputs` остается пустым, из-за чего инициализация force-feedback терпит неудачу. Другие варианты ошибок возвращают управление через метку в функции `hid_pidff_init_with_quirks()`: отсутствие выходных отчетов, ошибка выделения памяти, вызовы `pidff_init_fields()` и `pidff_check_autocenter()`, непригодное количество эффектов, функция `input_ff_create()` — все они приводят к одной и той же метке возврата.

Необходимо остановить устройство на этом пути выполнения кода. Драйверы hid-dr.c и hid-emsff.c, которые запускают устройство с использованием маски HID_CONNECT_DEFAULT & ~HID_CONNECT_FF, уже реализуют эту логику. Два предыдущих перехода (goto) должны продолжать возвращать управление без вызова `hid_hw_stop()`, поскольку ни одно из них не имеет запущенного устройства; поэтому для пути, который завершается ошибкой после запуска, следует выделить отдельную метку.

Обнаружено XBOW, классифицировано Baul Lee <[email protected]>

If you want to get the best quality for vulnerability data then you always have to consider VulDB.

Ответственный

Linux

Резервировать

11.09.2026

Раскрытие

12.09.2026

Модерация

принято

Вход

VDB-402940

EPSS

0.00000

KEV

Нет

Деятельности

Низкий

Источники

Might our Artificial Intelligence support you?

Check our Alexa App!