CVE-2026-64374
Severity CVSS v4.0:
Pending analysis
Type:
Unavailable / Other
Publication date:
25/07/2026
Last modified:
27/07/2026
Description
In the Linux kernel, the following vulnerability has been resolved:<br />
<br />
sched/rt: Have RT_PUSH_IPI be default off for non PREEMPT_RT<br />
<br />
RT migration is done aggressively. When a CPU schedules out a high<br />
priority RT task for a lower priority task, it will look to see if there&#39;s<br />
any RT tasks that are waiting to run on another CPU that is of higher<br />
priority than the task this CPU is about to run. If it finds one, it will<br />
pull that task over to the CPU and allow it to run there instead.<br />
<br />
Normally, this pulling is done by looking at the RT overloaded mask (rto)<br />
which contains all the CPUs in the scheduler domain with RT tasks that are<br />
waiting to run due to a higher priority RT task currently running on their<br />
CPU. The CPU that is about to schedule a lower priority task will grab the<br />
rq lock of the overloaded CPU and move the RT task from that CPU&#39;s runqueue<br />
to the local one and schedule the higher priority RT task.<br />
<br />
This caused issues when a lot of CPUs would schedule a lower priority task<br />
at the same time. They would all try to grab the same runqueue lock of<br />
the CPU with the overloaded RT tasks. Only the first CPU that got in will<br />
get that task. All the others would wait until they got the runqueue lock<br />
and see there&#39;s nothing to pull and do nothing. On systems with lots of<br />
CPUs, this caused a large latency (up to 500us) which is beyond what<br />
PREEMPT_RT is to allow.<br />
<br />
The solution to that was to create an RT_PUSH_IPI logic. When any CPU<br />
wanted to pull a task, instead of grabbing the runqueue lock of the<br />
overloaded CPU, it would start by sending an IPI to the overloaded CPU,<br />
and that IPI handler would have the CPU with the waiting RT task do a push<br />
instead. Then that handler would send an IPI to the next CPU with<br />
overloaded RT tasks, and so on. Note, after the first CPU starts this<br />
process, if another CPU wanted to do a pull, it would see that the process<br />
has already begun and would only increment a counter to have the IPIs<br />
continue again.<br />
<br />
The RT_PUSH_IPI solved the latency problem with PREEMPT_RT but could cause<br />
a new issue with non PREEMPT_RT. Namely, softirqs run in a threaded<br />
context on PREEMPT_RT but they can run in an interrupt context in non-RT.<br />
<br />
If an IPI lands on a CPU that has just woken up multiple RT tasks and the<br />
current CPU is running a non RT or a low priority RT task, instead of<br />
doing a push, it would simply do a schedule on that CPU. But if a softirq<br />
was also executing on this CPU, the schedule would need to wait until the<br />
softirq finished. Until then, the CPU would still be considered overloaded<br />
as there are RT tasks still waiting to run on it.<br />
<br />
A live lock occurred on a workload that was doing heavy networking traffic<br />
on a large machine where the softirqs would run 500us out of 750us. And it<br />
would also be waking up RT tasks, causing the RT pull logic to be<br />
constantly executed.<br />
<br />
When a softirq triggered on a CPU with RT tasks queued but not running<br />
yet, and the other CPUs would see this CPU as being overloaded, they would<br />
send an IPI over to it. The CPU would notice that the waiting RT tasks are<br />
of higher priority than the currently running task and simply schedule<br />
that CPU instead. But because the softirq was executing, before it could<br />
schedule, it would receive another IPI to do the same. The amount of IPIs<br />
would slow down the currently running softirq so much that before it could<br />
return back to task context, it would execute another softirq never<br />
allowing the CPU to schedule. This live locked that CPU.<br />
<br />
As RT_PUSH_IPI was created to help PREEMPT_RT, make it default off if<br />
PREEMPT_RT is not enabled.
Impact
Base Score 3.x
7.50
Severity 3.x
HIGH
References to Advisories, Solutions, and Tools
- https://git.kernel.org/stable/c/44aae426dbfd51286f7eb601cfa14bc32164812a
- https://git.kernel.org/stable/c/4bd0da48fbc1dbef6774175129107fbbdd353e26
- https://git.kernel.org/stable/c/860aaff72c8446fed5e576249e19952883a18885
- https://git.kernel.org/stable/c/89237c8fc15d8016a194076e648ccb57d75e65ae
- https://git.kernel.org/stable/c/a18f80bf5359238c4f067d691b96af00286fdd89
- https://git.kernel.org/stable/c/b99f04ae3d200d2f8844aa29145bd18eccbeecde
- https://git.kernel.org/stable/c/d8312a56d9a162e3ec76476aa487e7d20bc602e9
- https://git.kernel.org/stable/c/dd29c017aed628076e915fe4cdfb5392fd4c5cab



