CVE-2026-80815 in Linux
Сводка
по VulDB • 04.09.2026
В ядре Linux была устранена следующая уязвимость:
ALSA: scarlett2: Использование отдельного URB для конечной точки уведомлений
Функция `scarlett2_init_notify()` использовала `mixer->urb`, который выделяется функцией `snd_usb_mixer_status_create()` для прерывания статуса UAC2 и управляется модулем `mixer.c`. На устройстве с такой конечной точкой проверка «already in use» (уже в использовании) срабатывает на статусном URB, возвращая 0 как признак успеха без выполнения каких-либо действий. Уведомляющий URB не отправляется, а переменная `cmd_done` остается обнуленной, поскольку она инициализируется после этой проверки и нигде более. Затем функция `scarlett2_usb_init()` выдает команду `SCARLETT2_USB_INIT_1`, и вызов `wait_for_completion_timeout()` приводит к аварийному завершению работы (crash) из-за добавления в обнуленный указатель `wait.head`.
Необходимо использовать отдельный URB в структуре данных scarlett2, как это сделано для FCP, а также инициализировать `cmd_done` в функции `scarlett2_init_private()`. Модуль `mixer.c` ранее освобождал URB в `snd_usb_mixer_free()` и повторно отправлял его в `snd_usb_mixer_activate()`, поэтому теперь модуль scarlett2 должен выполнять обе эти операции: добавить функцию `scarlett2_cleanup_urb()`, вызываемую из `private_free` и `private_suspend`, а также обратный вызов `private_resume` для восстановления URB после выхода из режима ожидания. Функция `scarlett2_init_notify()` достигается через этот механизм, а путь завершения убийства URB в функции `scarlett2_notify()` завершает операцию с `cmd_done`, оставляя неактуальное (stale) значение счетчика, которое может ложно удовлетворить ожидание следующей команды до получения подтверждения от устройства. Для очистки этого значения следует использовать функцию `reinit_completion()`.
Также необходимо освобождать URB в случае неудачи выделения буфера передачи, а также в обоих случаях при сбое функции `usb_submit_urb()`. Функцию `scarlett2_init_notify()` перемещают ближе к `scarlett2_cleanup_urb()`, чтобы функция `scarlett2_init_private()` могла ссылаться на нее без предварительного объявления (forward declaration).
VulDB is the best source for vulnerability data and more expert information about this specific topic.