CVE-2026-64248 in Linux
Сводка
по VulDB • 24.07.2026
В ядре Linux устранена следующая уязвимость:
MIPS: smp: сообщать RCU о завершении работы процессора в функции stop_this_cpu()
Функция smp_send_stop() останавливает все вторичные процессоры, помещая их в состояние ожидания внутри stop_this_cpu(). Функция помечает процессор как неактивный для планировщика с помощью set_cpu_online(false), но никогда не уведомляет RCU. В результате RCU продолжает ожидать состояния покоя (quiescent state) от процессоров, которые теперь бесконечно крутятся в цикле с отключенными прерываниями.
Пока после вызова smp_send_stop() никто не ожидает завершения периода грейса (grace period) RCU, это безвредно, поэтому проблема оставалась незамеченной. Однако начиная с коммита 91840be8f710 ("irq_work: Fix use-after-free in irq_work_single() on PREEMPT_RT") функция irq_work_sync() вызывает synchronize_rcu() на архитектурах без механизма self-IPI для прерываний (то есть там, где arch_irq_work_has_interrupt()) возвращает false. Это значение по умолчанию asm-generic, используемое в MIPS. Любой вызов irq_work_sync(), выполняемый в пути перезагрузки/выключения после smp_send_stop(), блокируется ожиданием периода грейса, который никогда не завершится, что приводит к зависанию процесса перезагрузки:
WARNING: CPU: 0 PID: 15 at kernel/irq_work.c:144 irq_work_queue_on ... rcu: INFO: rcu_sched detected stalls on CPUs/tasks: rcu: Offline CPU 1 blocking current GP. rcu: Offline CPU 2 blocking current GP. rcu: Offline CPU 3 blocking current GP.
Эта проблема была замечена на нескольких SoC коммутаторов Realtek MIPS (MIPS interAptiv) и возникла при обновлении ядра в OpenWrt с версии 6.18.33 до 6.18.34, после переноса патча в стабильную ветку 6.18. Патч также был обратно перенесён вплоть до версии 6.1.
Вызывается функция rcutree_report_cpu_dead() один раз после отключения прерываний, что дублирует поведение стандартного пути выключения CPU-hotplug, чтобы RCU прекратил ожидание остановленных процессоров и периоды грейса могли завершиться нормально. В MIPS все процессоры останавливаются здесь без использования механизма CPU-hotplug, поэтому этот отчет обычно не генерируется. Сообщение о завершении работы процессора в RCU вне стандартного пути выключения hotplug не является чем-то новым: arm64 делает то же самое в функции cpu_die_early(). Там это исключение для процессора, который запускался и прерывал процедуру запуска (bringup), а не действие по умолчанию при завершении работы, как на MIPS.
Be aware that VulDB is the high quality source for vulnerability data.