ext4: don't set EXT4_GET_BLOCKS_CONVERT when splitting before submitting I/O
Key facts
- Attack vector
- Local
- Privileges required
- Low
- User interaction
- None
- Attack complexity
- Low
- Impact type
- —
- Confidentiality · integrity · availability
- None · None · High
- Fix status
- Partial Red Hat: 5 without a fix
Attack profile from CVSS 3.1 · NVD. Fix status from CNA and Red Hat.
Summary
In the Linux kernel, the following vulnerability has been resolved: ext4: don't set EXT4_GET_BLOCKS_CONVERT when splitting before submitting I/O When allocating blocks during within-EOF DIO and writeback with dioread_nolock enabled, EXT4_GET_BLOCKS_PRE_IO was set to split an existing large unwritten extent. However, EXT4_GET_BLOCKS_CONVERT was set when calling ext4_split_convert_extents(), which may potentially result in stale data issues. Assume we have an unwritten extent, and then DIO writes the second half. [UUUUUUUUUUUUUUUU] on-disk extent U: unwritten extent [UUUUUUUUUUUUUUUU] extent status tree |<- ->| ----> dio write this range First, ext4_iomap_alloc() call ext4_map_blocks() with EXT4_GET_BLOCKS_PRE_IO, EXT4_GET_BLOCKS_UNWRIT_EXT and EXT4_GET_BLOCKS_CREATE flags set. ext4_map_blocks() find this extent and call ext4_split_convert_extents() with EXT4_GET_BLOCKS_CONVERT and the above flags set. Then, ext4_split_convert_extents() calls ext4_split_extent() with EXT4_EXT_MAY_ZEROOUT, EXT4_EXT_MARK_UNWRIT2 and EXT4_EXT_DATA_VALID2 flags set, and it calls ext4_split_extent_at() to split the second half with EXT4_EXT_DATA_VALID2, EXT4_EXT_MARK_UNWRIT1, EXT4_EXT_MAY_ZEROOUT and EXT4_EXT_MARK_UNWRIT2 flags set. However, ext4_split_extent_at() failed to insert extent since a temporary lack -ENOSPC. It zeroes out the first half but convert the entire on-disk extent to written since the EXT4_EXT_DATA_VALID2 flag set, but left the second half as unwritten in the extent status tree. [0000000000SSSSSS] data S: stale data, 0: zeroed [WWWWWWWWWWWWWWWW] on-disk extent W: written extent [WWWWWWWWWWUUUUUU] extent status tree Finally, if the DIO failed to write data to the disk, the stale data in the second half will be exposed once the cached extent entry is gone. Fix this issue by not passing EXT4_GET_BLOCKS_CONVERT when splitting an unwritten extent before submitting I/O, and make ext4_split_convert_extents() to zero out the entire extent range to zero for this case, and also mark the extent in the extent status tree for consistency.
Why it matters now
SSVC decision points
CISA ADP · SSVC 2.0.3
- Exploitation
- None
- Automatable
- No
- Technical impact
- Partial
The decision (Track, Attend, Act) also depends on your mission and well-being impact; see CISA's SSVC guide.
Affected products
| Vendor | Product | Affected versions | Fixed in | Status | Source |
|---|---|---|---|---|---|
| Linux | Linux | 3.15 and later | 5.10.253, 5.15.203, 6.1.191, 6.6.130, 6.12.77, 6.18.17, 6.19.4, 7.0 | Patch available | CNA |
- Linux VendorLinux Affected 3.15 and later Fixed in 5.10.253, 5.15.203, 6.1.191, 6.6.130, 6.12.77, 6.18.17, 6.19.4, 7.0 Patch available CNA
CPE configurations NVD · 1
| CPE | Versions | Role | Vendor |
|---|---|---|---|
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 3.15 to before 5.10.253; 5.11 to before 5.15.203; 5.16 to before 6.6.130; 6.7 to before 6.12.77; 6.13 to before 6.18.17; 6.19 to before 6.19.4 | Vulnerable | Linux |
- cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* Versions 3.15 to before 5.10.253; 5.11 to before 5.15.203; 5.16 to before 6.6.130; 6.7 to before 6.12.77; 6.13 to before 6.18.17; 6.19 to before 6.19.4 Vulnerable ·Linux
Remediation
- Fix · CNA Linux (Linux) Fixed in 5.10.253, 5.15.203, 6.1.191, 6.6.130, 6.12.77, 6.18.17, 6.19.4, 7.0
Vendor assessments
Red Hat
Red Hat rating: Moderate. Red Hat's page for this CVE →
| Product | Status | Plan or fix |
|---|---|---|
| Red Hat Enterprise Linux 10 | Affected | No fix yet |
| Red Hat Enterprise Linux 6 | Affected | No fix planned: Out of support scope |
| Red Hat Enterprise Linux 7 | Affected | No fix yet |
| Red Hat Enterprise Linux 8 | Affected | No fix yet |
| Red Hat Enterprise Linux 9 | Affected | No fix yet |
Timeline
- 2026-10-02 Threatist record created from CVE-2026-45985
- 2026-10-03 Alias added: GHSA-qwcw-8jc7-8mhw
- 2026-10-30 Fix available: Linux/[email protected], Linux/Linux@6d8fa684b42724d74a77f980f5ee47cfd1ec7e74 · CNA
- 2026-10-30 1 new reference · CNA
- 2026-11-06 CISA SSVC decision points changed
References
Patch 7
- https://git.kernel.org/stable/c/77e407967cd872cd75d7e4a691908e49c8e6b4d4
- https://git.kernel.org/stable/c/37555690f39f78ef69af347d9aff897e07445949
- https://git.kernel.org/stable/c/67cdb7bd7442bd3cdc6d6088bbb2df9be2fe936c
- https://git.kernel.org/stable/c/2920ec61c98b9476781359f05b94da84e80f54d4
- https://git.kernel.org/stable/c/2698731d25823267c29190cb578da9296a0c0d7b
- https://git.kernel.org/stable/c/716e7439a5a9b18c3ff882c2f8c834b9ced1aaec
- https://git.kernel.org/stable/c/feaf2a80e78f89ee8a3464126077ba8683b62791
More Linux Kernel vulnerabilities
- TI-2025-26358 tls: fix handling of zero-length records on the rx_list KEVCVSS 3.1CRITICAL 9.8
- TI-2026-38352 netfilter: bridge: make ebt_snat ARP rewrite writable KEVCVSS 3.1HIGH 8.8
- TI-2013-05264 The (1) get_user and (2) put_user API functions in the Linux kernel before 3.5.5 on the… KEVCVSS 3.1HIGH 8.8
- TI-2022-00125 Integer overflow in kernel KEVCVSS 3.1HIGH 8.4
- TI-2013-01864 The perf_swevent_init function in kernel/events/core.c in the Linux kernel before 3.8.9… KEVCVSS 3.1HIGH 8.4
- TI-2021-05514 Heap Out-Of-Bounds Write in Netfilter IP6T_SO_SET_REPLACE KEVCVSS 3.1HIGH 8.3
Sources
- CVE-2026-45985 · CVE Program
- CVE-2026-45985 · NVD
- FIRST EPSS
- GHSA-qwcw-8jc7-8mhw · GitHub Advisory Database · CC BY 4.0
- CVE-2026-45985 · Red Hat security data · CC BY 4.0
This product uses the NVD API but is not endorsed or certified by the NVD. Sources and licences