CVE-2026-45919
Medium · 5.5CVSS
5.5
EPSS
0.1%
Published
May 27, 2026
CISA due date
—
Cloudanix analysis
A local user or workload may be able to freeze an affected Linux system by triggering a bug in how the operating system schedules real-time tasks.
- Exploitation
- Local Privilege
- Attacker needs
- Low Privilege
- Complexity
- Moderate
- Impact
- Denial Of Service
- Component
- OS kernel
- Class
- Denial of service
- Remediation
- Patch
- Effort
- Medium
- Patch risk
- Medium
What it actually does
This is a local Linux kernel denial-of-service flaw in the real-time scheduler load-balancing path. Under a specific CPU scheduling condition, the kernel can repeatedly select the currently executing overloaded CPU as the next target for RT push work, causing redundant self-directed inter-processor interrupts. The resulting infinite self-IPI loop can keep the CPU in interrupt handling long enough to trigger a hard lockup, making the system unresponsive and potentially requiring a reboot. The flaw impacts availability only; it does not directly provide confidentiality or integrity compromise.
Why it matters to the business
A local user or workload capable of creating the required real-time scheduling pressure could crash or hang affected Linux systems, interrupting applications, virtual machines, containers, or infrastructure services running on those hosts. The risk is most relevant for multi-user systems, shared compute platforms, latency-sensitive workloads, and environments where untrusted or semi-trusted users can run processes with real-time scheduling privileges. This issue is not known to be in CISA KEV, is not reported as ransomware-used, has very low EPSS, and has no known public exploit maturity in the provided data, so urgency is lower than for remotely exploitable kernel flaws but still important for availability-sensitive systems.
How an attack unfolds
An attacker first obtains local code execution on an affected Linux host. They then create or influence a scheduling scenario involving CPU-bound and non-CPU-bound real-time tasks, along with other tasks that cause RT load-balancing activity across CPUs. When other CPUs attempt to pull or push real-time tasks, the vulnerable scheduler logic can cause the overloaded CPU to queue RT push work to itself. Because the currently executing CPU is not skipped by the vulnerable rto_next_cpu() path, the same CPU can be repeatedly reselected, producing continuous self-IPIs. If the condition persists, the CPU can enter a hard lockup state, causing severe system degradation, service outage, or a forced reboot.
How to fix it
Upgrade the Linux kernel to a vendor-supported release that includes the scheduler fix for the RT load-balancing path, specifically the change that skips the currently executing CPU in rto_next_cpu(). No exact fixed package versions were provided, so use distribution advisories for the applicable kernel package and reboot into the patched kernel after installation. Where immediate patching is not possible, reduce exposure by limiting which users, containers, and services can create real-time scheduled tasks; review and restrict CAP_SYS_NICE; set conservative RLIMIT_RTPRIO values; avoid granting untrusted workloads real-time scheduling privileges; and use workload isolation for systems running RT-sensitive tasks. Availability-critical systems should also have watchdog, HA, and crash-dump procedures validated because exploitation can require reboot or failover recovery.
How to confirm the fix worked
Confirm the running kernel, not just the installed package, is updated to a build containing the fix. Validate with distribution package metadata, kernel changelogs, or vendor advisory references for the scheduler RT patch titled similar to 'sched/rt: Skip currently executing CPU in rto_next_cpu()'. After patching and rebooting, verify `uname -r` matches the intended fixed kernel and that package managers do not show the old vulnerable kernel as the active boot default. For mitigation validation, audit real-time scheduling permissions by checking users and services with CAP_SYS_NICE, nonzero real-time priority limits, privileged containers, or service unit settings that permit real-time scheduling. In test environments only, controlled scheduler stress testing can be used to confirm that RT overload scenarios no longer produce self-IPI storms or hard lockups.
Typical attack path
- Gain local access to an affected Linux system, such as through a shell, compromised service account, container escape-adjacent workload capability, or authorized but malicious user session.
- Obtain the ability to run or influence real-time scheduled tasks, commonly requiring appropriate scheduling privileges, limits, or capabilities such as permission to use SCHED_FIFO/SCHED_RR.
- Create CPU pressure using a mix of CPU-bound RT tasks, non-CPU-bound RT tasks, and other tasks so that one CPU becomes overloaded while other CPUs trigger RT load balancing.
- Cause repeated RT push/pull activity across CPUs so the vulnerable scheduler path invokes rto_next_cpu() and reselects the same currently executing CPU.
- Maintain the overload condition until repeated self-IPIs trigger a CPU hard lockup.
- Leverage the resulting hang or crash to disrupt services, force failover, or require manual recovery.
How to detect it
There may be no clean application-layer indicator because exploitation manifests as a local kernel availability failure. Review persistent system logs, kernel ring buffers, netconsole/serial console output, hypervisor console logs, kdump vmcores, and monitoring alerts for hard lockups, watchdog events, repeated interrupt activity, and scheduler stack traces. Look shortly before the lockup for evidence of local users or workloads creating real-time tasks, changing scheduling policy, using tools such as chrt/taskset/stress-style CPU loaders, launching privileged containers, or running processes with CAP_SYS_NICE. Audit authentication, sudo, auditd, container runtime, and EDR telemetry for local execution by unexpected users immediately before the outage. In vmcores or kernel stack traces, prioritize evidence showing repeated execution in RT scheduler functions such as rto_push_irq_work_func(), rto_next_cpu(), push_rt_task(), pull_rt_task(), tell_cpu_to_push(), irq_work_queue_on(), and resched_curr(). Distinguish exploitation from benign RT workload instability by correlating the hard lockup with unauthorized local activity or unusual real-time scheduling changes.
- NMI watchdog: Watchdog detected hard LOCKUP on cpu
- watchdog: Watchdog detected hard LOCKUP on cpu
- Kernel panic - not syncing: Hard LOCKUP
- BUG: hard LOCKUP
- rto_push_irq_work_func
- rto_next_cpu
- push_rt_task
- pull_rt_task
- tell_cpu_to_push
- irq_work_queue_on
- resched_curr
- sched_setscheduler
- SCHED_FIFO
- SCHED_RR
- CAP_SYS_NICE
- chrt --fifo
- chrt --rr
- kernel.watchdog
- soft lockup - CPU#
What your security team should do
- Prioritize patching multi-user Linux hosts, shared compute nodes, container hosts, real-time workload systems, and availability-critical servers running affected kernels.
- Identify systems where untrusted or semi-trusted users can execute local code or run containers with elevated scheduling permissions.
- Restrict CAP_SYS_NICE, privileged containers, and real-time priority limits to only services that explicitly require them.
- Monitor for kernel hard lockup events, unexpected reboots, and scheduler-related stack traces involving rto_next_cpu(), rto_push_irq_work_func(), push_rt_task(), pull_rt_task(), or irq_work_queue_on().
- Ensure crash dumps, persistent journaling, and remote log forwarding are enabled so evidence is retained after a lockup or reboot.
- Track distribution-specific kernel advisories because no exact fixed versions were provided in the input.
- Treat confirmed unexplained hard lockups on affected kernels with RT scheduling activity as potential exploitation or abuse until workload causes are ruled out.
The record
In the Linux kernel, the following vulnerability has been resolved: sched/rt: Skip currently executing CPU in rto_next_cpu() CPU0 becomes overloaded when hosting a CPU-bound RT task, a non-CPU-bound RT task, and a CFS task stuck in kernel space. When other CPUs switch from RT to non-RT tasks, RT load balancing (LB) is triggered; with HAVE_RT_PUSH_IPI enabled, they send IPIs to CPU0 to drive the execution of rto_push_irq_work_func. During push_rt_task on CPU0, if next_task->prio < rq->donor->prio, resched_curr() sets NEED_RESCHED and after the push operation completes, CPU0 calls rto_next_cpu(). Since only CPU0 is overloaded in this scenario, rto_next_cpu() should ideally return -1 (no further IPI needed). However, multiple CPUs invoking tell_cpu_to_push() during LB increments rd->rto_loop_next. Even when rd->rto_cpu is set to -1, the mismatch between rd->rto_loop and rd->rto_loop_next forces rto_next_cpu() to restart its search from -1. With CPU0 remaining overloaded (satisfying rt_nr_migratory && rt_nr_total > 1), it gets reselected, causing CPU0 to queue irq_work to itself and send self-IPIs repeatedly. As long as CPU0 stays overloaded and other CPUs run pull_rt_tasks(), it falls into an infinite self-IPI loop, which triggers a CPU hardlockup due to continuous self-interrupts. The trigging scenario is as follows: cpu0 cpu1 cpu2 pull_rt_task tell_cpu_to_push <------------irq_work_queue_on rto_push_irq_work_func push_rt_task resched_curr(rq) pull_rt_task rto_next_cpu tell_cpu_to_push <-------------------------- atomic_inc(rto_loop_next) rd->rto_loop != next rto_next_cpu irq_work_queue_on rto_push_irq_work_func Fix redundant self-IPI by filtering the initiating CPU in rto_next_cpu(). This solution has been verified to effectively eliminate spurious self-IPIs and prevent CPU hardlockup scenarios.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|
Related vulnerabilities
- CVE-2026-62250 LibreDWG is a free C library to read and write DWG files. CWE-835
- CVE-2026-119205 pypdf is a free and open-source pure-python PDF library. CWE-835
- CVE-2026-119203 pypdf is a free and open-source pure-python PDF library. CWE-835
- CVE-2026-118781 Forge (also called node-forge) is a native implementation of Transport Layer Security in… CWE-835
- CVE-2026-111731 P-Net before 1.0.3 enters an infinite loop when handling a read request for the… CWE-835
- CVE-2026-111496 Kafka Streams derives its stream-time clock from record timestamps. CWE-835
- CVE-2026-103410 An Integer Overflow vulnerability in the DPI certificate scanner in Juniper Networks… CWE-835
- CVE-2026-118036 In Progress® Telerik® Document Processing Libraries prior to version 2026.3.1027… CWE-835