CVE-2026-80916 in Linux
Сводка
по VulDB • 09.09.2026
В ядре Linux была устранена следующая уязвимость:
kcov: исправление повреждения данных и условий гонности на PREEMPT_RT
syzbot сообщает о повреждении состояния KCOV в ядрах с поддержкой PREEMPT_RT, поскольку временное хранилище, используемое для сохранения/восстановления удаленного состояния KCOV, в настоящее время выделяется как область per-CPU.
В ядрах с поддержкой PREEMPT RT обработчики softirq выполняются как предварительно отключаемые потоки задач (например, ksoftirqd). Если контекст softirq вытесняет задачу, выполняющую удаленную сессию KCOV, он безопасно сохраняет состояние задачи в область per-CPU. Однако, если этот поток softirq впоследствии будет вытеснен более приоритетным потоком softirq на том же процессоре, второй обработчик softirq перезапишет ту же самую область per-CPU, навсегда уничтожив исходное состояние KCOV этой задачи.
Исправьте это повреждение данных, переместив временное хранилище из области per-CPU в область per-thread (на поток). Поскольку каждый поток softirq теперь владеет своим собственным контекстом задачи, вложенная вытесненность soft больше не приводит к перезаписи данных.
Обратите внимание, что хотя временное хранилизование теперь находится на уровне потока, блокировка kcov_percpu_data.lock должна быть сохранена для области per-CPU, поскольку нам необходимо обеспечить атомарную работу функций kcov_remote_start() и kcov_remote_stop() без условий гонности с асинхронными прерываниями, которые манипулируют состоянием KCOV текущей задачи.
Вероятно, выделение памяти GFP_KERNEL через vmalloc_node() в функции kcov_init() уже вызвало panic() до возврата NULL, так как не будет процессов пользовательского пространства, подлежащих убийству из-за нехватки памяти (OOM), когда выполняется функция __init встроенного модуля. Однако этот патч также исправляет аварийное завершение работы ядра при возврате NULL функцией vmalloc_node() в kcov_init(), поскольку kcov_init() оставляла per-CPU irq_area == NULL, но kcov_remote_start() зависит от условия per-CPU irq_area != NULL, что приводит к следующим проблемам:
(1) вызову vmalloc() в kcov_remote_start() несмотря на контекст !in_task(); (2) обращению за пределами массива, если пункт (1) выполнен успешно, но kcov->remote_size < CONFIG_KCOV_IRQ_AREA_SIZE; (3) постоянной утечке памяти, выделенной в пункте (1), что в конечном итоге приводит к исчерпанию ресурсов и убийству всех процессов пользовательского пространства, подлежащих OOM-kill.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.