CVE-2026-45858

ext4: don't zero the entire extent if EXT4_EXT_DATA_PARTIAL_VALID1

MEDIUM
5.5
CVSS Score
Published: May 27, 2026 at 12:15 PM UTC
Updated: June 27, 2026 at 11:41 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.2%

Description

In the Linux kernel, the following vulnerability has been resolved: ext4: don't zero the entire extent if EXT4_EXT_DATA_PARTIAL_VALID1 When allocating initialized blocks from a large unwritten extent, or when splitting an unwritten extent during end I/O and converting it to initialized, there is currently a potential issue of stale data if the extent needs to be split in the middle. 0 A B N [UUUUUUUUUUUU] U: unwritten extent [--DDDDDDDD--] D: valid data |<- ->| ----> this range needs to be initialized ext4_split_extent() first try to split this extent at B with EXT4_EXT_DATA_ENTIRE_VALID1 and EXT4_EXT_MAY_ZEROOUT flag set, but ext4_split_extent_at() failed to split this extent due to temporary lack of space. It zeroout B to N and mark the entire extent from 0 to N as written. 0 A B N [WWWWWWWWWWWW] W: written extent [SSDDDDDDDDZZ] Z: zeroed, S: stale data ext4_split_extent() then try to split this extent at A with EXT4_EXT_DATA_VALID2 flag set. This time, it split successfully and left a stale written extent from 0 to A. 0 A B N [WW|WWWWWWWWWW] [SS|DDDDDDDDZZ] Fix this by pass EXT4_EXT_DATA_PARTIAL_VALID1 to ext4_split_extent_at() when splitting at B, don't convert the entire extent to written and left it as unwritten after zeroing out B to N. The remaining work is just like the standard two-part split. ext4_split_extent() will pass the EXT4_EXT_DATA_VALID2 flag when it calls ext4_split_extent_at() for the second time, allowing it to properly handle the split. If the split is successful, it will keep extent from 0 to A as unwritten.

Affected

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

v ≥ 3.2.33v ≥ 3.4.16v ≥ 3.6.43.2.33 ≤ v < 3.33.4.16 ≤ v < 3.53.6.4 ≤ v < 3.73.7 ≤ v < 6.12.753.7 ≤ v < 6.18.143.7 ≤ v < 6.19.43.7 ≤ v < 6.6.1303.7 ≤ v < 7.03.7.1 ≤ v < 6.6.1306.13 ≤ v < 6.18.146.19 ≤ v < 6.19.46.7 ≤ v < 6.12.753.2.333.4.163.6.43.73.7 rc33.7 rc43.7 rc53.7 rc63.7 rc73.7 rc84319fd00002630a761fa5559a086f11ed7623006814a7833df19e1de7447f870ae890adb12561627dee1f973ca341c266229faa5a1a5bb268bed3531e28b27be06c5e6a5236c0c0b370ca0768ab086bb
Vendor states this is fixed in 1bf6974822d1dba86cf11b5f05498581cf3488a2 (fixed)
Vendor states this is fixed in 58ddae5d77b1db3a27b891c75a8fa120239ac092 (fixed)
Vendor states this is fixed in 7015fcf473796e1d2d876f241bd9e0c36f3d4eef (fixed)
Vendor states this is fixed in d17857b4fb9ba5745b59be0ef38fd532991fccbf (fixed)
Vendor states this is fixed in d67c8ecf3d8fda9b8ef80e6f665d84b6d6ac9d88 (fixed)
Affected range stops below 3.3, so it looks safe — our inference, not a vendor statement
Affected range stops below 3.5, so it looks safe — our inference, not a vendor statement
Vendor states this is fixed in 3.7 (unaffected)
Vendor states this is fixed in 6.12.75 (unaffected)
Vendor states this is fixed in 6.18.14 (unaffected)
Vendor states this is fixed in 6.19.4 (unaffected)
Vendor states this is fixed in 6.6.130 (unaffected)
Vendor states this is fixed in 7.0 (unaffected)

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