CVE-2026-53180
NoneCVSS
—
EPSS
0.3%
Published
Jun 25, 2026
CISA due date
—
Cloudanix analysis
Some Linux systems can get stuck in a loop that makes them slow or unresponsive until they are updated and rebooted.
- Exploitation
- Local Privilege
- Attacker needs
- Local User
- Complexity
- Moderate
- Impact
- Denial Of Service
- Component
- OS kernel
- Class
- Denial of service
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
This is a Linux kernel timer-migration flaw that can cause a CPU to enter an indefinite livelock while handling timer expiry. Under a specific timing race, a timer that expires after the local timer wheel has advanced may be skipped during remote timer handling. The expired timer remains on the timer wheel, is repeatedly reported as immediately expired, and causes the kernel timer migration loop to re-queue the event continuously. The primary impact is denial of service through CPU starvation, degraded scheduling, high softirq/kernel time, and potential system unresponsiveness. The provided data does not indicate privilege escalation, data disclosure, or remote code execution.
Why it matters to the business
Affected Linux systems may become slow, unstable, or unresponsive if the kernel enters the timer livelock condition. This can disrupt workloads, increase latency, trigger failovers, reduce application availability, and require manual recovery such as rebooting affected hosts. The currently provided exploitation context indicates low observed exploitation likelihood, no known public exploit maturity, no CISA KEV listing, and no ransomware association, so this should generally be prioritized as an operational stability and availability fix rather than an actively exploited emergency.
How an attack unfolds
An attacker would need to create or influence workload conditions that exercise Linux kernel timer migration and remote timer handling in a way that exposes the race between local timer-wheel advancement and remote expiry evaluation. If the vulnerable timing window is hit, an expired timer can be skipped instead of having its callback invoked and removed. The kernel then repeatedly identifies the same timer as expired and re-enters the handling loop, causing livelock. In practice, exploitation is likely to be reliability-oriented and environment-dependent rather than a simple network-delivered attack: an attacker would typically need local execution, workload control, or the ability to trigger application behavior that creates the relevant timer patterns. There are no named threat actors, public exploit maturity, or known ransomware use indicated in the supplied data.
How to fix it
Upgrade to a Linux kernel version that includes the fix for unconditional timer_expire_remote() handling in the timer migration path. If using a distribution kernel, apply the vendor-provided kernel security or stable update once available and reboot into the fixed kernel. If building kernels directly, incorporate the upstream fix for timers/migration in tmigr_handle_remote_up()/tmigr_handle_remote_cpu() that calls timer_expire_remote() unconditionally. Where immediate patching is not possible, reduce exposure by limiting untrusted local code execution, isolating multi-tenant workloads, applying resource controls where appropriate, and monitoring for abnormal CPU softirq/kernel-time saturation. Because no affected product or fixed-version list was supplied, remediation should be tracked through the relevant Linux distribution, appliance, cloud image, container host, or embedded-device vendor advisories.
How to confirm the fix worked
Confirm that systems are running a kernel build that includes the vendor or upstream fix. Validate by checking the installed and booted kernel version after patching, not only the package version staged on disk. Review distribution advisories and changelogs for references to the Linux kernel timer migration fix, tmigr_handle_remote_up(), tmigr_handle_remote_cpu(), timer_expire_remote(), or this vulnerability. After remediation, monitor representative workloads for absence of recurring soft lockup, RCU stall, excessive ksoftirqd CPU usage, or repeated timer-related kernel warnings. For source-based builds, verify the timer migration code path calls timer_expire_remote() unconditionally and that the patched kernel is the one actually deployed.
Typical attack path
- Gain the ability to run code locally or otherwise influence timer-heavy workloads on a vulnerable Linux system.
- Generate workload patterns that create frequent kernel timer activity and exercise timer migration across CPUs.
- Attempt to hit the race where a timer expires after local timer processing but before remote timer expiry evaluation.
- Cause the expired timer to remain on the timer wheel without its callback being invoked.
- Trigger repeated immediate re-queuing of the expired timer event, causing a kernel livelock loop.
- Degrade system performance or make the host unresponsive, resulting in denial of service.
How to detect it
Detection should focus on symptoms of kernel livelock and abnormal timer/softirq behavior rather than a definitive exploit artifact, because this flaw does not inherently create files, registry keys, network callbacks, or application-level indicators. Review kernel logs, system journal, console logs, hypervisor out-of-band logs, and monitoring telemetry for sudden high CPU usage in kernel mode or ksoftirqd threads, soft lockup messages, RCU stall warnings, hung task reports, timer-related warnings, and unexplained host freezes. Correlate events with local user activity, container or job launches, timer-heavy workloads, or recent workload changes. On Linux hosts, useful sources include dmesg, journalctl -k, /var/log/kern.log, /var/log/messages, /var/log/syslog, systemd-coredump and watchdog telemetry where present, plus EDR process telemetry showing local workloads immediately preceding the lockup. Absence of these artifacts does not prove the vulnerability was not triggered, because a severe livelock may prevent logs from being flushed to disk.
- soft lockup
- watchdog: BUG: soft lockup
- rcu: INFO: rcu_preempt detected stalls
- rcu: INFO: rcu_sched detected stalls
- INFO: task .* blocked for more than
- hung_task_timeout_secs
- ksoftirqd
- tmigr_handle_remote_cpu
- tmigr_handle_remote_up
- timer_expire_remote
- fetch_next_timer_interrupt_remote
- run_timer_base
- __run_timer_base
- /var/log/kern.log
- /var/log/messages
- /var/log/syslog
- journalctl -k
- dmesg
What your security team should do
- Inventory Linux systems, appliances, hypervisors, container hosts, and embedded devices that depend on the affected kernel timer migration code path.
- Track vendor advisories for the exact kernel packages that include the fix and prioritize internet-facing, multi-tenant, latency-sensitive, and high-availability systems.
- Apply fixed kernel updates during the next appropriate maintenance window and reboot systems into the updated kernel.
- Restrict untrusted local shell, container, CI runner, and batch workload access on unpatched shared systems until remediation is complete.
- Add monitoring for abnormal kernel CPU consumption, soft lockups, RCU stalls, hung tasks, and unexplained host unresponsiveness.
- Prepare operational recovery procedures for affected systems, including safe reboot/failover steps if a host becomes stuck in livelock.
- Because current EPSS is low, exploit maturity is listed as none, and the issue is not in CISA KEV, prioritize based on business criticality and exposure rather than treating it as confirmed active exploitation.
The record
In the Linux kernel, the following vulnerability has been resolved: timers/migration: Fix livelock in tmigr_handle_remote_up() tmigr_handle_remote_cpu() skips timer_expire_remote() when cpu == smp_processor_id(), assuming the local softirq path already handled this CPU's timers. This assumption is wrong because jiffies can advance after the handling of the CPU's global timers in run_timer_base(BASE_GLOBAL) and before tmigr_handle_remote() evaluates the expiry times. As a consequence a timer which expires after the CPU local timer wheel advanced and becomes expired in the remote handling is ignored and the callback is never invoked and removed from the timer wheel. What's worse is that fetch_next_timer_interrupt_remote() keeps reporting it as expired, and the event is re-queued with expires == now on each iteration. The goto-again loop spins indefinitely. Fix this by calling timer_expire_remote() unconditionally. That's minimal overhead for the common case as __run_timer_base() returns immediately if there is nothing to expire in the local wheel. [ tglx: Amend change log and add a comment ]
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|