CVE-2025-39744CWE-125

CVE-2025-39744

High · published September 11, 2025

CVSS v3.1
7.1
EPSS
0%
Percentile
5.2
In the wild
Unconfirmed
What it is

In the Linux kernel, the following vulnerability has been resolved:

rcu: Fix rcu_read_unlock() deadloop due to IRQ work

During rcu_read_unlock_special(), if this happens during irq_exit(), we

can lockup if an IPI is issued. This is because the IPI itself triggers

the irq_exit() path causing a recursive lock up.

This is precisely what Xiongfeng found when invoking a BPF program on

the trace_tick_stop() tracepoint As shown in the trace below. Fix by

managing the irq_work state correctly.

irq_exit()

__irq_exit_rcu()

/* in_hardirq() returns false after this */

preempt_count_sub(HARDIRQ_OFFSET)

tick_irq_exit()

tick_nohz_irq_exit()

tick_nohz_stop_sched_tick()

trace_tick_stop() /* a bpf prog is hooked on this trace point */

__bpf_trace_tick_stop()

bpf_trace_run2()

rcu_read_unlock_special()

/* will send a IPI to itself */

irq_work_queue_on(&rdp->defer_qs_iw, rdp->cpu);

A simple reproducer can also be obtained by doing the following in

tick_irq_exit(). It will hang on boot without the patch:

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: Apply Frederic's suggested fix for PREEMPT_RT]

The record
Technical detail
CVSS v3.1
7.1 · HIGH
Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:H
CVSS v4.0
Not supplied
EPSS
0.00163 · 5.2th percentile
Weakness
CWE-125 · Out-of-bounds Read
Published
2025-09-11T21:15Z
Affected products (4)
ProductVersionsFixed in
linux/linux_kernel< 6.6.1036.6.103
linux/linux_kernel≥ 6.7, < 6.12.436.12.43
linux/linux_kernel≥ 6.13, < 6.15.116.15.11
linux/linux_kernel≥ 6.16, < 6.16.26.16.2
References (5)
EPSS history
Timeline
  • 11 SEP 16:52Z
    rcu: Fix rcu_read_unlock() deadloop due to IRQ work
    cvelistv5