Commit 19134a13 authored by Ziyi Guo's avatar Ziyi Guo Committed by Jan Kara
Browse files

ext2: avoid drop_nlink() during unlink of zero-nlink inode in ext2_unlink()



ext2_unlink() calls inode_dec_link_count() unconditionally, which
invokes drop_nlink(). If the inode was loaded from a corrupted disk
image with i_links_count == 0, drop_nlink()
triggers WARN_ON(inode->i_nlink == 0)

Follow the ext4 pattern from __ext4_unlink(): check i_nlink before
decrementing. If already zero, skip the decrement.

Signed-off-by: default avatarZiyi Guo <n7l8m4@u.northwestern.edu>
Link: https://patch.msgid.link/20260211022052.973114-1-n7l8m4@u.northwestern.edu


Signed-off-by: default avatarJan Kara <jack@suse.cz>
parent ad0e9663
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -291,7 +291,10 @@ static int ext2_unlink(struct inode *dir, struct dentry *dentry)
		goto out;

	inode_set_ctime_to_ts(inode, inode_get_ctime(dir));

	if (inode->i_nlink)
		inode_dec_link_count(inode);

	err = 0;
out:
	return err;