KernelScan.io

CRITICAL

ext4 ExtentTree Corruption

CVE-2026-31448

CVSS 9.4 / 10.0 NVD

CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:H/A:H

KernelScan AI5.5MEDIUM

01

In the Linux kernel, the following vulnerability has been resolved: ext4: avoid infinite loops caused by residual data On the mkdir/mknod path, when mapping logical blocks to physical blocks, if inserting a new extent into the extent tree fails (in this example, because the file system disabled the huge file feature when marking the inode as dirty), ext4_ext_map_blocks() only calls ext4_free_blocks() to reclaim the physical block without deleting the corresponding data in the extent tree. This causes subsequent mkdir operations to reference the previously reclaimed physical block number again, even though this physical block is already being used by the xattr block. Therefore, a situation arises where both the directory and xattr are using the same buffer head block in memory simultaneously. The above causes ext4_xattr_block_set() to enter an infinite loop about "inserted" and cannot release the inode lock, ultimately leading to the 143s blocking problem mentioned in [1]. If the metadata is corrupted, then trying to remove some extent space can do even more harm. Also in case EXT4_GET_BLOCKS_DELALLOC_RESERVE was passed, remove space wrongly update quota information. Jan Kara suggests distinguishing between two cases: 1) The error is ENOSPC or EDQUOT - in this case the filesystem is fully consistent and we must maintain its consistency including all the accounting. However these errors can happen only early before we've inserted the extent into the extent tree. So current code works correctly for this case. 2) Some other error - this means metadata is corrupted. We should strive to do as few modifications as possible to limit damage. So I'd just skip freeing of allocated blocks. [1] INFO: task syz.0.17:5995 blocked for more than 143 seconds. Call Trace: inode_lock_nested include/linux/fs.h:1073 [inline] __start_dirop fs/namei.c:2923 [inline] start_dirop fs/namei.c:2934 [inline]

02

Engine v0.2.0

Risk summary

Local users with filesystem write access can trigger an infinite loop in ext4 extent tree management, causing the system to hang indefinitely. This affects any system using ext4 filesystems where users can create directories or files, leading to denial of service requiring system reboot.

Affectedfs/ext4/extents.c (ext4 filesystem)

Vulnerability analysis

The vulnerability occurs in ext4_ext_map_blocks() when extent tree insertion fails due to metadata corruption or filesystem inconsistency. The original code unconditionally calls ext4_free_blocks() to reclaim allocated physical blocks without properly cleaning up extent tree state, leaving residual data that causes subsequent operations to reference already-freed blocks. This creates a situation where directory and xattr operations compete for the same buffer head, leading ext4_xattr_block_set() to enter an infinite loop while holding inode locks. The fix distinguishes between recoverable errors (ENOSPC/EDQUOT) where cleanup should proceed normally, and corruption errors where cleanup is skipped to prevent further damage.

03

BranchFixed inPatch commit
6.16.1.168c66545e83a80
6.126.12.803a7667595bca
6.186.18.21416c86f30f91
6.196.19.1164f425b06b3b
6.66.6.131ecc50bfca9b5
mainline7.05422fe71d26d