diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index 0c466ccbed69..ed79a558b6fd 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c @@ -5310,6 +5310,16 @@ struct inode *__ext4_iget(struct super_block *sb, unsigned long ino, ret = -EFSCORRUPTED; goto bad_inode; } + if (ext4_test_inode_flag(inode, EXT4_INODE_INLINE_DATA)) { + if (size > 512) { + ext4_error_inode(inode, function, line, 0, + "iget: inline data flag set but size %lld exceeds capacity", + size); + ret = -EFSCORRUPTED; + goto bad_inode; + } + } + inode->i_blocks = ext4_inode_blocks(raw_inode, ei); ei->i_file_acl = le32_to_cpu(raw_inode->i_file_acl_lo); if (ext4_has_feature_64bit(sb))