CVE-2025-39744

rcu: Fix rcu_read_unlock() deadloop due to IRQ work

State
Published
Severity
Not scored
Published
Sep 11, 2025
Updated
Oct 30, 2026
Reserved
Apr 16, 2025

Read the record on cve.org

Description

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]

Scores

The record has no CVSS score.

Weaknesses

The record names no weakness.

Affected Products

ProductVersions
LinuxLinux
  • 0864f057b050bc6dd68106b3185e02db5140012d to before 6b552ffd21f9be57806ade167a757f32dd66a98dAffected
  • 0864f057b050bc6dd68106b3185e02db5140012d to before e7a375453cca2b8a0d2fa1b82b913f3fed7c0507Affected
  • 0864f057b050bc6dd68106b3185e02db5140012d to before 1cfa244f7198d325594e627574930b7b91df5bfeAffected
  • 0864f057b050bc6dd68106b3185e02db5140012d to before ddebb2a7677673cf4438a04e1a48b8ed6b0c8e9aAffected
  • 0864f057b050bc6dd68106b3185e02db5140012d to before 56c5ef194f4509df63fc0f7a91ea5973ce479b1eAffected
  • 0864f057b050bc6dd68106b3185e02db5140012d to before b41642c87716bbd09797b1e4ea7d904f06c39b7bAffected
LinuxLinux
  • 5.3Affected
  • before 5.3Not affected
  • 6.1.191 through 6.1.*Not affected
  • 6.6.103 through 6.6.*Not affected
  • 6.12.43 through 6.12.*Not affected
  • 6.15.11 through 6.15.*Not affected
  • 6.16.2 through 6.16.*Not affected
  • 6.17 and laterNot affected

References

Every record here comes from the CVE Program’s CVE List. © 1999–2026 The MITRE Corporation. CVE is a registered trademark of The MITRE Corporation. The records are reproduced under the CVE Program terms of use.