ext4: include terminating u32 in size of xattr entries when expanding inodes
authorTheodore Ts'o <tytso@mit.edu>
Wed, 19 Dec 2018 17:28:13 +0000 (12:28 -0500)
committerTheodore Ts'o <tytso@mit.edu>
Wed, 19 Dec 2018 17:28:13 +0000 (12:28 -0500)
In ext4_expand_extra_isize_ea(), we calculate the total size of the
xattr header, plus the xattr entries so we know how much of the
beginning part of the xattrs to move when expanding the inode extra
size.  We need to include the terminating u32 at the end of the xattr
entries, or else if there is uninitialized, non-zero bytes after the
xattr entries and before the xattr values, the list of xattr entries
won't be properly terminated.

Reported-by: Steve Graham <stgraham2000@gmail.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Cc: stable@kernel.org
fs/ext4/xattr.c

index 510c9bb7ce7149b8c9ff53c4fc1deaf00cf5f01f..91037890a90b0e9527b4d6b3551810095dd69f2a 100644 (file)
@@ -2721,7 +2721,7 @@ retry:
        base = IFIRST(header);
        end = (void *)raw_inode + EXT4_SB(inode->i_sb)->s_inode_size;
        min_offs = end - base;
-       total_ino = sizeof(struct ext4_xattr_ibody_header);
+       total_ino = sizeof(struct ext4_xattr_ibody_header) + sizeof(u32);
 
        error = xattr_check_inode(inode, header, end);
        if (error)