CVE-2026-89601
nicheLost inode updates for sync-mode files in Linux kernel ext2 filesystem
A flaw in the Linux kernel's ext2 filesystem code silently drops inode metadata updates for inodes marked IS_SYNC — files opened with O_SYNC, flagged with chattr +S, or living on a sync-mounted ext2 filesystem. In ext2_setsize() (e.g., truncate/ftruncate) and ext2_xattr_set2() (setting extended attributes), the code called sync_inode_metadata() without first calling mark_inode_dirty(), and that helper only persists inodes that are already dirty, so size changes and xattr changes could never reach disk. An attacker or ordinary workload writing such sync-flagged files can therefore trigger silent metadata loss, resulting in corrupted files, reverted sizes/attributes, and confidentiality/integrity/availability impact (CVSS 3.1 score 8.8, AV:N/AC:L/PR:L). Any system running a kernel whose ext2 driver lacks the fix and actually using ext2 with sync semantics is affected. No public proof of concept exists and no exploitation has been observed.
What to do: Apply a kernel update from your distribution once it includes the upstream fix (unconditionally mark_inode_dirty() before sync_inode_metadata() in ext2_setsize() and ext2_xattr_set2()). Until patched, avoid sync semantics on ext2 — do not use O_SYNC, chattr +S, or sync mounts on ext2 volumes, and consider migrating affected filesystems to ext4. After crashes or heavy sync-flagged workloads on ext2, run fsck and verify file sizes and extended attributes for silent corruption.
| Linux kernel (ext2 filesystem driver) | — |
Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.
In the Linux kernel, the following vulnerability has been resolved: ext2: Fix lost inode updates for IS_SYNC inodes ext2_setsize() and ext2_xattr_set2() had a construct like: if (IS_SYNC(inode)) { sync_inode_metadata(inode, 1); } else { mark_inode_dirty(inode); } which leads to lost inode updates for IS_SYNC inodes because sync_inode_metadata() does anything only if the inode is already dirty and hence inode updates may be simply lost. Fix the problem by unconditionally marking the inode dirty and *then* call sync_inode_metadata().
- Vector
- CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
In the news0 stories
No ingested article mentions this CVE yet.