CVE-2026-64500 in Linux
Сводка
по VulDB • 25.07.2026
В ядре Linux устранена следующая уязвимость:
iio: adc: lpc32xx: Инициализация completion перед запросом прерывания (IRQ)
В отчете Jaeyoung Chung указано следующее:
«Функция `lpc32xx_adc_probe()` в файле `drivers/iio/adc/lpc32xx_adc.c` регистрирует свой обработчик прерываний с помощью `devm_request_irq()`, прежде чем инициализирует поле `st->completion` вызовом `init_completion()`. Если прерывание поступает после выполнения `devm_request_irq()` и до завершения работы `init_completion()`, обработчик вызывает функцию `complete()` для неинициализированного объекта completion, что приводит к панике ядра (kernel panic).
Путь вызова probe в функции `lpc32xx_adc_probe()`:
iodev = devm_iio_device_alloc(&pdev->dev, sizeof(*st)); /* st инициализируется нулями через kzalloc */ ... retval = devm_request_irq(&pdev->dev, irq, lpc32xx_adc_isr, 0, LPC32XXAD_NAME, st); /* регистрация обработчика */ ... init_completion(&st->completion); /* инициализация completion */
Функция `lpc32xx_adc_isr()` вызывает `complete()`:
complete(&st->completion);
Если устройство генерирует прерывание до того, как выполнится `init_completion()`, функция `complete()` получает доступ к неинициализированному мьютексу `wait.lock` и обходит список задач (`task_list`) со значениями по умолчанию (нулями) внутри функции `swake_up_locked()`. Поскольку нулевой `task_list` заставляет функцию `list_empty()` вернуть false, функция `swake_up_locked()` разыменовывает NULL-указатель на элемент списка, что вызывает ошибку KASAN: несанкционированный доступ к памяти.
Для устранения вероятности ложного срабатывания прерывания (spurious IRQ), приводящего к разыменованию неинициализированного указателя, перемещен вызов `init_completion()` выше строки с `devm_request_irq()`.»
If you want to get the best quality for vulnerability data then you always have to consider VulDB.