From: Konstantin Khlebnikov Date: Mon, 22 May 2017 02:36:23 +0000 (-0400) Subject: ext4: keep existing extra fields when inode expands X-Git-Tag: C0P2-H0.0--20200415~8731 X-Git-Url: https://git.somdevices.com/?a=commitdiff_plain;h=9890b9cb75c9f661546c81098ec49fbfc24abc9c;p=linux.git ext4: keep existing extra fields when inode expands commit 887a9730614727c4fff7cb756711b190593fc1df upstream. ext4_expand_extra_isize() should clear only space between old and new size. Fixes: 6dd4ee7cab7e # v2.6.23 Signed-off-by: Konstantin Khlebnikov Signed-off-by: Theodore Ts'o Signed-off-by: Greg Kroah-Hartman --- diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index 01329688fb9e..6a6fa1fca8cf 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c @@ -5441,8 +5441,9 @@ static int ext4_expand_extra_isize(struct inode *inode, /* No extended attributes present */ if (!ext4_test_inode_state(inode, EXT4_STATE_XATTR) || header->h_magic != cpu_to_le32(EXT4_XATTR_MAGIC)) { - memset((void *)raw_inode + EXT4_GOOD_OLD_INODE_SIZE, 0, - new_extra_isize); + memset((void *)raw_inode + EXT4_GOOD_OLD_INODE_SIZE + + EXT4_I(inode)->i_extra_isize, 0, + new_extra_isize - EXT4_I(inode)->i_extra_isize); EXT4_I(inode)->i_extra_isize = new_extra_isize; return 0; }