CVE-2025-21816 json
hrtimers: Force migrate away hrtimers queued after CPUHP_AP_HRTIMERS_DYING
published 2025-02-27 20 mo ago modified 2026-06-17 4 mo ago also EUVD-2025-5973
- cvss
- 5.5
- version 3.1, NVD
- cisa kev
- Not listed
- not in CISA's catalog
- epss
- 0.2%
- EPSS 0.2% chance of exploitation in 30 days, percentile 10%
- public exploits
- 0
- none known
Summary
In the Linux kernel, the following vulnerability has been resolved:
hrtimers: Force migrate away hrtimers queued after CPUHP_AP_HRTIMERS_DYING
hrtimers are migrated away from the dying CPU to any online target at the CPUHP_AP_HRTIMERS_DYING stage in order not to delay bandwidth timers handling tasks involved in the CPU hotplug forward progress.
However wakeups can still be performed by the outgoing CPU after CPUHP_AP_HRTIMERS_DYING. Those can result again in bandwidth timers being armed. Depending on several considerations (crystal ball power management based election, earliest timer already enqueued, timer migration enabled or not), the target may eventually be the current CPU even if offline. If that happens, the timer is eventually ignored.
The most notable example is RCU which had to deal with each and every of those wake-ups by deferring them to an online CPU, along with related workarounds:
_ e787644caf76 (rcu: Defer RCU kthreads wakeup when CPU is dying) _ 9139f93209d1 (rcu/nocb: Fix RT throttling hrtimer armed from offline CPU) _ f7345ccc62a4 (rcu/nocb: Fix rcuog wake-up from offline softirq)
The problem isn't confined to RCU though as the stop machine kthread (which runs CPUHP_AP_HRTIMERS_DYING) reports its completion at the end of its work through cpu_stop_signal_done() and performs a wake up that eventually arms the deadline server timer:
WARNING: CPU: 94 PID: 588 at kernel/time/hrtimer.c:1086 hrtimer_start_range_ns+0x289/0x2d0 CPU: 94 UID: 0 PID: 588 Comm: migration/94 Not tainted Stopper: multi_cpu_stop+0x0/0x120 <- stop_machine_cpuslocked+0x66/0xc0 RIP: 0010:hrtimer_start_range_ns+0x289/0x2d0 Call Trace: <TASK> start_dl_timer enqueue_dl_entity dl_server_start enqueue_task_fair enqueue_task ttwu_do_activate try_to_wake_up complete cpu_stopper_thread
Instead of providing yet another bandaid to work around the situation, fix it in the hrtimers infrastructure instead: always migrate away a timer to an online target whenever it is enqueued from an offline CPU.
This will also allow to revert all the above RCU disgraceful hacks.
Patch / fix
- Linux Linux 4.20, 5.5, 5.11, 5.16, 6.1.141, 6.6.93, 6.12.14, 6.13.3, 6.14
- linux Debian 12 6.1.147-1
- linux Debian 14, Debian 13 6.12.15-1
debian advisories DEBIAN-CVE-2025-21816
- linux Ubuntu 24.04 LTS 6.8.0-64.67
- linux-aws Ubuntu 24.04 LTS 6.8.0-1032.34
- linux-gcp Ubuntu 24.04 LTS 6.8.0-1033.35
- linux-gke Ubuntu 24.04 LTS 6.8.0-1028.32
- linux-ibm Ubuntu 24.04 LTS 6.8.0-1029.29
- linux-azure Ubuntu 24.04 LTS 6.8.0-1034.39
- linux-gkeop Ubuntu 24.04 LTS 6.8.0-1015.17
- linux-raspi Ubuntu 24.04 LTS 6.8.0-1031.35
ubuntu advisories UBUNTU-CVE-2025-21816
Ubuntu security data © Canonical Ltd., from https://github.com/canonical/ubuntu-security-notices via OSV; changed: normalised to fixed package versions per release. CC BY-SA 4.0
- kernel-rt Linux Micro 6.2 6.12.0-160000.7.1
- kernel-64kb SLES 16.0, Linux Micro 6.2, SLES for SAP applications 16.0 6.12.0-160000.7.1
- kernel-source SLES 16.0, Linux Micro 6.2, SLES for SAP applications 16.0 6.12.0-160000.7.1
- kernel-default SLES 16.0, SLE High Availability Extension 16.0, Linux Micro 6.2 +1 more 6.12.0-160000.7.1
- kernel-default-base SLES 16.0, Linux Micro 6.2, SLES for SAP applications 16.0 6.12.0-160000.6.1.160000.2.4
- kernel-syms SLES 16.0, Linux Micro Extras 6.2, SLES for SAP applications 16.0 6.12.0-160000.7.1
- kernel-obs-qa SLES for SAP applications 16.0, SLES 16.0 6.12.0-160000.7.1
- kernel-kvmsmall SLES for SAP applications 16.0, SLES 16.0 6.12.0-160000.7.1
suse advisories SUSE-SU-2025:21080-1SUSE-SU-2025:21147-1SUSE-SU-2025:21180-1SUSE-SU-2026:20561-1
- kernel-rt openSUSE Leap 16.0 6.12.0-160000.7.1
- dtb-aarch64 openSUSE Leap 16.0 6.12.0-160000.7.1
- kernel-64kb openSUSE Leap 16.0 6.12.0-160000.7.1
- kernel-syms openSUSE Leap 16.0 6.12.0-160000.7.1
- kernel-obs-qa openSUSE Leap 16.0 6.12.0-160000.7.1
- kernel-source openSUSE Leap 16.0 6.12.0-160000.7.1
- kernel-default openSUSE Leap 16.0 6.12.0-160000.7.1
- kernel-kvmsmall openSUSE Leap 16.0 6.12.0-160000.7.1
opensuse advisories openSUSE-SU-2025:20091-1
- git.kernel.org/stable/c/82ac6adbbb2aad14548a71d5e2e37f4964a15e38 commit
- git.kernel.org/stable/c/63815bef47ec25f5a125019ca480882481ee1553 commit
- git.kernel.org/stable/c/e456a88bddae4030ba962447bb84be6669f2a0c1 commit
- git.kernel.org/stable/c/2aecec58e9040ce3d2694707889f9914a2374955 commit
- git.kernel.org/stable/c/53dac345395c0d2493cbc2f4c85fe38aef5b63f5 commit
Vendor advisories
What the vendors themselves say about their products: affected, fixed or not affected, and what to do.
red hat product security vex CVE-2025-21816 updated cvss 5.5
kernel: hrtimers: Force migrate away hrtimers queued after CPUHP_AP_HRTIMERS_DYING
-
Red Hat Enterprise Linux 9 rv, perf, rtla, kernel, bpftool, libperf, +82 more Red Hat Enterprise Linux 10 kernelaffected: no fix planned “Will not fix”
-
Red Hat Enterprise Linux 6 perf, kernel, python-perf, kernel-kdump, kernel-firmware, kernel-bootwrapper, +1 more Red Hat Enterprise Linux 7 perf, kernel, bpftool, kernel-rt, python-perf, kernel-kdump, +8 more Red Hat Enterprise Linux 8 perf, kernel, bpftool, kernel-rt, kernel-core, kernel-tools, +29 morenot affected: vulnerable code not present
Red Hat CSAF VEX © Red Hat, Inc., from https://security.access.redhat.com/data/csaf/v2/vex/; changed: reduced to product statuses and remediations. CC BY 4.0 · csaf
Exploit prediction
0.21% chance of exploitation in the next 30 days, higher than 10% of all scored CVEs (FIRST EPSS, 2026-11-08).
CVSS scores
| assigned by | version | score | vector |
|---|---|---|---|
| NVD | 3.1 | 5.5 | CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H |
Affected products
- Linux Linux
Classification
- Technology feeds
References
-
git.kernel.org
/stable/c/82ac6adbbb2aad14548a71d5e2e37f4964a15e38
patch
-
git.kernel.org
/stable/c/63815bef47ec25f5a125019ca480882481ee1553
patch
-
git.kernel.org
/stable/c/e456a88bddae4030ba962447bb84be6669f2a0c1
patch
-
git.kernel.org
/stable/c/2aecec58e9040ce3d2694707889f9914a2374955
patch
-
git.kernel.org
/stable/c/53dac345395c0d2493cbc2f4c85fe38aef5b63f5
patch
- lists.debian.org /debian-lts-announce/2025/10/msg00008.html
Sources
- CVE List CVE-2025-21816
- NVD CVE-2025-21816
Fencer Vulns keeps one entry per vulnerability: the CVE id wins, then GHSA, and records that alias each other are merged, except that two CVEs always keep separate entries. The same data is available as JSON.