|
@@ -4572,10 +4572,12 @@ struct inode *ext4_iget(struct super_block *sb, unsigned long ino)
|
|
|
if (EXT4_INODE_SIZE(inode->i_sb) > EXT4_GOOD_OLD_INODE_SIZE) {
|
|
|
ei->i_extra_isize = le16_to_cpu(raw_inode->i_extra_isize);
|
|
|
if (EXT4_GOOD_OLD_INODE_SIZE + ei->i_extra_isize >
|
|
|
- EXT4_INODE_SIZE(inode->i_sb)) {
|
|
|
- EXT4_ERROR_INODE(inode, "bad extra_isize (%u != %u)",
|
|
|
- EXT4_GOOD_OLD_INODE_SIZE + ei->i_extra_isize,
|
|
|
- EXT4_INODE_SIZE(inode->i_sb));
|
|
|
+ EXT4_INODE_SIZE(inode->i_sb) ||
|
|
|
+ (ei->i_extra_isize & 3)) {
|
|
|
+ EXT4_ERROR_INODE(inode,
|
|
|
+ "bad extra_isize %u (inode size %u)",
|
|
|
+ ei->i_extra_isize,
|
|
|
+ EXT4_INODE_SIZE(inode->i_sb));
|
|
|
ret = -EFSCORRUPTED;
|
|
|
goto bad_inode;
|
|
|
}
|
|
@@ -4693,6 +4695,7 @@ struct inode *ext4_iget(struct super_block *sb, unsigned long ino)
|
|
|
if (EXT4_INODE_SIZE(inode->i_sb) > EXT4_GOOD_OLD_INODE_SIZE) {
|
|
|
if (ei->i_extra_isize == 0) {
|
|
|
/* The extra space is currently unused. Use it. */
|
|
|
+ BUILD_BUG_ON(sizeof(struct ext4_inode) & 3);
|
|
|
ei->i_extra_isize = sizeof(struct ext4_inode) -
|
|
|
EXT4_GOOD_OLD_INODE_SIZE;
|
|
|
} else {
|