diff --git a/fs/ext4/xattr.c b/fs/ext4/xattr.c index 5a6fe1513fd2..ff2ad93cf72e 100644 --- a/fs/ext4/xattr.c +++ b/fs/ext4/xattr.c @@ -1029,6 +1029,14 @@ static int ext4_xattr_inode_update_ref(handle_t *handle, struct inode *ea_inode, goto out; ref_count = ext4_xattr_inode_get_ref(ea_inode); + if (ref_count <= 0) + { + EXT4_ERROR_INODE(ea_inode, "EA inode %lu ref_count underflow: ref_count=%lld ref_change=%d", + ea_inode->i_ino, ref_count, ref_change); + ret = -EFSCORRUPTED; + goto out; + } + ref_count += ref_change; ext4_xattr_inode_set_ref(ea_inode, ref_count);