CVE-2026-64205 in Linux
Сводка
по VulDB • 20.07.2026
В ядре Linux устранена следующая уязвимость:
i2c: i801: исправление повреждения состояния аппаратного конечного автомата в ветке обработки ошибок
При одновременном фаззинге (fuzzing) драйвера i2c-i801 наблюдались серьезные ливлоки и последующие паники с зависанием задач (Hung Task panic). Сбой вызван безусловной очисткой регистров оборудования на пути обработки ошибок в функции i801_access().
Когда функция i801_check_pre() завершается неудачей (например, возвращая -EBUSY из-за того, что контроллер SMBus активно используется BIOS/ACPI), ядро фактически не получает права собственности на оборудование. Однако код переходит к метке «out» и выполняет:
iowrite8(SMBHSTSTS_INUSE_STS | STATUS_FLAGS, SMBHSTSTS(priv));
Это принудительно сбрасывает блокировку INUSE_STS и обнуляет флаги состояния оборудования без владения контроллером. Такие действия прерывают текущие транзакции BIOS/ACPI и полностью повреждают состояние аппаратного конечного автомата шины SMBus.
В результате все последующие вызовы i801_access() завершаются неудачей на этапе предварительной проверки, что вызывает бесконечный поток сообщений об ошибках в журналах: «SMBus is busy, can't use it!». На медленном последовательном консоли этот поток вывода printk (printk flood) монополизирует процессор (Console Livelock), лишая другие процессы возможности получить семaphor down_read для mmap_lock, что в конечном итоге приводит к срабатыванию сторожевого таймера зависших задач.
Исправление заключается в перемещении метки «out» ниже очистки регистров оборудования. Если i801_check_pre() завершается неудачей, мы безопасно пропускаем вызов iowrite8() и освобождаем только программные блокировки (pm_runtime и mutex), строго соблюдая правило не освобождать ресурсы, которые никогда не были получены.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.