CVE-2026-43323

sched/fair: Fix zero_vruntime tracking fix

MEDIUM
5.5
CVSS Score
Published: May 8, 2026 at 01:31 PM UTC
Updated: June 17, 2026 at 10:49 AM UTC
1 product affected across 1 vendorLinux Kernel

Using Linux by Linux?

Get instant alerts when new vulnerabilities affect Linux - before attackers find them.

Real-time alertsTrack your software stackFree plan available
Severity
MEDIUM5.5
Exploit prediction
EPSS 0.1%

Description

In the Linux kernel, the following vulnerability has been resolved: sched/fair: Fix zero_vruntime tracking fix John reported that stress-ng-yield could make his machine unhappy and managed to bisect it to commit b3d99f43c72b ("sched/fair: Fix zero_vruntime tracking"). The combination of yield and that commit was specific enough to hypothesize the following scenario: Suppose we have 2 runnable tasks, both doing yield. Then one will be eligible and one will not be, because the average position must be in between these two entities. Therefore, the runnable task will be eligible, and be promoted a full slice (all the tasks do is yield after all). This causes it to jump over the other task and now the other task is eligible and current is no longer. So we schedule. Since we are runnable, there is no {de,en}queue. All we have is the __{en,de}queue_entity() from {put_prev,set_next}_task(). But per the fingered commit, those two no longer move zero_vruntime. All that moves zero_vruntime are tick and full {de,en}queue. This means, that if the two tasks playing leapfrog can reach the critical speed to reach the overflow point inside one tick's worth of time, we're up a creek. Additionally, when multiple cgroups are involved, there is no guarantee the tick will in fact hit every cgroup in a timely manner. Statistically speaking it will, but that same statistics does not rule out the possibility of one cgroup not getting a tick for a significant amount of time -- however unlikely. Therefore, just like with the yield() case, force an update at the end of every slice. This ensures the update is never more than a single slice behind and the whole thing is within 2 lag bounds as per the comment on entity_key().

Affected

Our own answer: ranges merged, affected separated from platform-only, with confidence and review flags.

6.12.78 ≤ v < 6.12.816.18.17 ≤ v < 6.18.226.19.7 ≤ v < 6.19.126.12.786.18.176.19.7978d4fe59665c13db692ba96839f9c52d69f13f399673934a89febe664e704550216638dcb2336a8b3d99f43c72b56cf7a104a364e7fb34b0702828bd2fc2dcfce47a56ffd414783003cc966c742c8a9
Vendor states this is fixed in 1319ea57529e131822bab56bf417c8edc2db9ae8 (fixed)
Vendor states this is fixed in 87573883c30f1a8555ff720836bb6ea231058539 (fixed)
Vendor states this is fixed in c089147074ed96ff4330739a0559394c19a3dfc8 (fixed)
Vendor states this is fixed in fb61ffb3fb30a161eb5404c27fc7635e275beafd (fixed)
Affected range stops below 6.12.81, so it looks safe — our inference, not a vendor statement
Affected range stops below 6.18.22, so it looks safe — our inference, not a vendor statement
Affected range stops below 6.19.12, so it looks safe — our inference, not a vendor statement

CVSS

Attack Vector
LOCAL
Complexity
LOW
Privileges
LOW
User Interaction
NONE
Scope
UNCHANGED
Confidentiality
NONE
Integrity
NONE
Availability
HIGH
Vector?

Quick Info

StatusANALYZED
CWE
NVD-CWE-noinfo

Get alerted

Stop reading CVE feeds looking for your own stack

Track the products you run and VulnTracker tells you when a new CVE affects them — with what is known about fixing it, and nothing about the rest.

Free plan, no card