Re: [PATCH 0/2] ext2: fix WARN_ON in drop_nlink() triggered by corrupt images

From: Vasiliy Kovalev

Date: Sat Apr 04 2026 - 11:27:52 EST


On 4/2/26 01:08, Vasiliy Kovalev wrote:
A crafted ext2 image can contain a directory entry pointing to an inode
whose on-disk i_links_count is zero. ext2 mounts such an image without
error. Any subsequent syscall that decrements i_nlink on that inode
triggers WARN_ON inside drop_nlink() in fs/inode.c.

These patches prevent the warning by validating i_nlink before decrementing
it in ext2_unlink() and ext2_rename(), reporting the corruption via
ext2_error() instead.

The issues were found by Linux Verification Center (linuxtesting.org)
with Syzkaller.

Vasiliy Kovalev (2):
ext2: validate i_nlink before decrement in ext2_unlink()
ext2: guard against zero i_nlink on new_inode in ext2_rename()

Syzkaller found a third trigger via ext2_rmdir(). Rather than adding
another guard in namei.c, I fixed the root cause in ext2_iget() instead - a single check there covers all three cases at once.

New patch: https://lore.kernel.org/all/20260404152011.2590197-1-kovalev@xxxxxxxxxxxx/

If the previous two patches have not been picked up yet, please
consider this one as a replacement for the entire series.

fs/ext2/namei.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)

--- [Reproducer for PATCH 1/2: ext2_unlink] ---
[...]

--- [Reproducer for PATCH 2/2: ext2_rename] ---
[...]

--
Thanks,
Vasiliy