CVE-2025-40167
Description
In the Linux kernel, the following vulnerability has been resolved:
ext4: detect invalid INLINE_DATA + EXTENTS flag combination
syzbot reported a BUG_ON in ext4_es_cache_extent() when opening a verity file on a corrupted ext4 filesystem mounted without a journal.
The issue is that the filesystem has an inode with both the INLINE_DATA and EXTENTS flags set:
EXT4-fs error (device loop0): ext4_cache_extents:545: inode #15: comm syz.0.17: corrupted extent tree: lblk 0 < prev 66
Investigation revealed that the inode has both flags set: DEBUG: inode 15 - flag=1, i_inline_off=164, has_inline=1, extents_flag=1
This is an invalid combination since an inode should have either: - INLINE_DATA: data stored directly in the inode - EXTENTS: data stored in extent-mapped blocks
Having both flags causes ext4_has_inline_data() to return true, skipping extent tree validation in __ext4_iget(). The unvalidated out-of-order extents then trigger a BUG_ON in ext4_es_cache_extent() due to integer underflow when calculating hole sizes.
Fix this by detecting this invalid flag combination early in ext4_iget() and rejecting the corrupted inode.
AI Insight
LLM-synthesized narrative grounded in this CVE's description and references.
A corrupted ext4 filesystem with both INLINE_DATA and EXTENTS flags on an inode set triggers a BUG_ON due to unvalidated extent tree, fixed by early rejection in ext4_iget().
Vulnerability
Overview
CVE-2025-40167 is a flaw in the Linux kernel's ext4 filesystem driver where an inode is allowed to have both the INLINE_DATA and EXTENTS flags set simultaneously. This combination is invalid because inline data stores file content directly in the inode structure, while extents use block-mapped trees. The kernel's ext4_has_inline_data() check returns true for such inodes, causing __ext4_iget() to skip extent tree validation. As a result, a corrupted filesystem can present an out-of-order extent tree that leads to an integer underflow when calculating hole sizes in ext4_es_cache_extent(), triggering a BUG_ON crash [1][2].
Exploitation
Scenario
An attacker with the ability to mount a crafted ext4 filesystem image (e.g., via a removable device or a malicious disk image) can trigger this bug. The vulnerability is reachable when the filesystem is mounted without a journal, as reported by syzbot. No special privileges beyond mounting a filesystem are required, making it a local denial-of-service vector. The corrupted inode can be accessed by opening a verity file or any file that causes the kernel to read the inode's extent tree [3].
Impact
Successful exploitation results in a kernel panic (BUG_ON), causing a denial of service disruption. The crash occurs in ext4_es_cache_extent() due to an unvalidated extent entries. While the issue does not directly allow arbitrary code execution, it can be used to deny service to legitimate users. The vulnerability is classified with a CVSS score of 5.5 (medium severity) [4].
Mitigation
The fix, committed to the Linux kernel stable tree, adds a check in EXT4_IGET_BAD check in ext4_iget() to reject inodes that have both INLINE_DATA and EXTENTS flags set. This prevents the corrupted inode from being loaded, avoiding the subsequent crash. Users should apply the kernel patch from the referenced commits [1][2][3][4]. No workaround is available other than avoiding mounting untrusted ext4 filesystems without a journal.
AI Insight generated on May 19, 2026. Synthesized from this CVE's description and the cited reference URLs; citations are validated against the source bundle.
Affected products
1Patches
84954d297c91df061f7c331fc2e9e10657b041437c95ab2a2cb6039b68efade985264eef61f5ccd22ff481d3ad183943bVulnerability mechanics
Generated on May 9, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.
References
8- git.kernel.org/stable/c/1437c95ab2a28b138d4521653583729f61ccb48bnvd
- git.kernel.org/stable/c/1d3ad183943b38eec2acf72a0ae98e635dc8456bnvd
- git.kernel.org/stable/c/1f5ccd22ff482639133f2a0fe08f6d19d0e68717nvd
- git.kernel.org/stable/c/2e9e10657b04152ed0d6ecae8d0c02a3405e28f5nvd
- git.kernel.org/stable/c/4954d297c91d292630ab43ba4d195dc371ce65d3nvd
- git.kernel.org/stable/c/cb6039b68efa547b676a8a10fc4618d9d1865c23nvd
- git.kernel.org/stable/c/de985264eef64be8a90595908f2e6a87946dad34nvd
- git.kernel.org/stable/c/f061f7c331fc16250fc82aa68964f35821687217nvd
News mentions
0No linked articles in our index yet.