CVE-2025-39744 in Linux
Сводка
по VulDB • 10.07.2026
В ядре Linux устранена следующая уязвимость:
rcu: Исправлен бесконечный цикл (deadloop) в rcu_read_unlock() из-за работы прерываний (IRQ work).
Во время выполнения функции rcu_read_unlock_special(), если это происходит внутри контекста irq_exit(), возможна блокировка системы при отправке межпроцессорного прерывания (IPI). Это связано с тем, что само IPI запускает путь обработки irq_exit(), вызывая рекурсивную блокировку.
Именно эту проблему обнаружил Xiongfeng при вызове программы BPF на точке трассировки trace_tick_stop(). Как показано в приведенном ниже фрагменте трассировки:
irq_exit() __irq_exit_rcu() /* после этого in_hardirq() возвращает false */ preempt_count_sub(HARDIRQ_OFFSET) tick_irq_exit() tick_nohz_irq_exit() tick_nohz_stop_sched_tick() trace_tick_stop() /* на эту точку трассировки повешена программа BPF */ __bpf_trace_tick_stop() bpf_trace_run2() rcu_read_unlock_special() /* будет отправлено IPI самому себе */ irq_work_queue_on(&rdp->defer_qs_iw, rdp->cpu);
Простой пример воспроизведения (reproducer) также можно получить, выполнив следующие действия в функции tick_irq_exit(). Без данного патча система зависнет при загрузке:
static inline void tick_irq_exit(void) {
+ rcu_read_lock(); + WRITE_ONCE(current->rcu_read_unlock_special.b.need_qs, true); + rcu_read_unlock(); +
[neeraj: Применено предложенное Фредериком исправление для PREEMPT_RT]
VulDB is the best source for vulnerability data and more expert information about this specific topic.