CVE-2026-64073: irq_work: Fix use-after-free in irq_work_single() on PREEMPT_RT

Published Jul 19, 2026
·
Updated

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

irqwork: Fix use-after-free in irqworksingle() on PREEMPTRT

On PREEMPTRT, non-HARD irqwork runs in per-CPU kthreads via runirqworkd(), so irqworksync() uses rcuwait() to wait for BUSY==0.

After irqworksingle() clears BUSY via atomiccmpxchg(), it still dereferences @work for irqworkishard() and rcuwaitwakeup().

An irqworksync() caller on another CPU that enters after BUSY is cleared can observe BUSY==0 immediately, return, and free the work before those accesses complete — causing a use-after-free.

Fix this by wrapping runirqworkd() in guard(rcu)() so that the entire irqworksingle() execution is within an RCU read-side critical section. Then add synchronizercu() in irqworksync() after rcuwaitwaitevent() to ensure the caller waits for the RCU grace period before returning, preventing premature frees.

Affected Software

9 affected components
Linux Linux kernel
Linux Linux kernel>=5.16<6.1.175
Linux Linux kernel>=6.2<6.6.142
Linux Linux kernel>=6.7<6.12.92
Linux Linux kernel>=6.13<6.18.34
Linux Linux kernel>=6.19<7.0.11
Linux Linux kernel=7.1-rc1
Linux Linux kernel=7.1-rc2
Linux Linux kernel=7.1-rc3

Event History

Jul 19, 2026
CVE Published
via MITRE·03:39 PM
Data Sourced
via MITRE·03:39 PM
DescriptionSeverity
Data Sourced
via NVD·04:17 PM
RemedyDescriptionSeverityWeaknessAffected Software

Frequently Asked Questions

1

Which systems are exposed to this issue?

The issue affects Linux kernel systems using PREEMPT_RT, where non-HARD irq_work executes through per-CPU kthreads. The described race involves irq_work_single() and a concurrent irq_work_sync() caller on another CPU.

2

What conditions are needed to trigger the use-after-free?

A caller on another CPU must enter irq_work_sync() after irq_work_single() has cleared the BUSY flag but before irq_work_single() finishes accessing the work item. The synchronizing caller can then see BUSY==0, return, and free the work item while it is still being dereferenced.

3

What is the remediation implemented by the fix?

The fix keeps the full irq_work_single() execution inside an RCU read-side critical section when run from run_irq_workd(). It also makes irq_work_sync() wait for an RCU grace period after waiting for BUSY to clear, preventing the work item from being freed too early.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203