CVE-2026-64347 in Linux
Сводка
по VulDB • 25.07.2026
В ядре Linux устранена следующая уязвимость:
usb: gadget: composite: исправлена неработающая проверка на пустоту в обработчике USB_DT_OTG
Разветвление OTG функции composite_setup() переходит к первой конфигурации, если ни одна не выбрана:
if (cdev->config) config = cdev->config; else config = list_first_entry(&cdev->configs, struct usb_configuration, list); if (!config) goto done; ... memcpy(req->buf, config->descriptors[0], value);
Функция list_first_entry() никогда не возвращает NULL. На пустом списке она возвращает результат container_of() для заголовка списка. Таким образом, проверка «if (!config)» является неработающей (dead code).
Когда список cdev->configs пуст, указатель config указывает на заголовок внутри структуры usb_composite_dev. Чтение из config->descriptors[0] обращается к произвольным данным по этому смещению. Функция memcpy копирует до w_length байт этих данных в буфер ответа.
Список cdev->configs может оказаться пустым в двух случаях. Первый — это состояние гонки (race condition) при размонтировании устройства (gadget unbind), когда выполняется управляющий запрос (control transfer). Второй случай возникает, если драйвер устанавливает флаг is_otg до добавления конфигурации. Воспроизводящий пример, который оставляет cdev->configs пустым, вызывает ошибку KASAN в данном ветвлении кода.
Использование функции list_first_entry_or_null() позволяет существующей проверке выполнять свою задачу корректно.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.