ext4: properly align shifted xattrs when expanding inodes
authorJan Kara <jack@suse.cz>
Thu, 11 Aug 2016 16:00:01 +0000 (12:00 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Thu, 11 Aug 2016 16:00:01 +0000 (12:00 -0400)
We did not count with the padding of xattr value when computing desired
shift of xattrs in the inode when expanding i_extra_isize. As a result
we could create unaligned start of inline xattrs. Account for alignment
properly.

CC: stable@vger.kernel.org # 4.4.x-
Signed-off-by: Jan Kara <jack@suse.cz>
fs/ext4/xattr.c

index b18b1ff7cc2725271c853f989b5da33223fbcac3..c893f00b6dc00f2af925da1298d154903336ea92 100644 (file)
@@ -1522,7 +1522,7 @@ retry:
                if (entry_size + EXT4_XATTR_SIZE(size) >= isize_diff)
                        shift_bytes = isize_diff;
                else
-                       shift_bytes = entry_size + size;
+                       shift_bytes = entry_size + EXT4_XATTR_SIZE(size);
                /* Adjust the offsets and shift the remaining entries ahead */
                ext4_xattr_shift_entries(entry, -shift_bytes,
                        (void *)raw_inode + EXT4_GOOD_OLD_INODE_SIZE +