summaryrefslogtreecommitdiffstats
path: root/fs/ext4/xattr.c
diff options
context:
space:
mode:
authorTahsin Erdogan2017-06-22 04:14:30 +0200
committerTheodore Ts'o2017-06-22 04:14:30 +0200
commit7cec191894e4e2200d942415c3ebccb146214d26 (patch)
tree3d8bed994b49acd4e9afa0e69e3ac4321e1e2670 /fs/ext4/xattr.c
parentext4: fix ext4_xattr_move_to_block() (diff)
downloadkernel-qcow2-linux-7cec191894e4e2200d942415c3ebccb146214d26.tar.gz
kernel-qcow2-linux-7cec191894e4e2200d942415c3ebccb146214d26.tar.xz
kernel-qcow2-linux-7cec191894e4e2200d942415c3ebccb146214d26.zip
ext4: fix ext4_xattr_cmp()
When a xattr entry refers to an external inode, the value data is not available in the inline area so we should not attempt to read it using value offset. Signed-off-by: Tahsin Erdogan <tahsin@google.com> Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Diffstat (limited to 'fs/ext4/xattr.c')
-rw-r--r--fs/ext4/xattr.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/fs/ext4/xattr.c b/fs/ext4/xattr.c
index bd1e61a0c228..ed27b5241e69 100644
--- a/fs/ext4/xattr.c
+++ b/fs/ext4/xattr.c
@@ -2167,7 +2167,8 @@ ext4_xattr_cmp(struct ext4_xattr_header *header1,
entry1->e_value_inum != entry2->e_value_inum ||
memcmp(entry1->e_name, entry2->e_name, entry1->e_name_len))
return 1;
- if (memcmp((char *)header1 + le16_to_cpu(entry1->e_value_offs),
+ if (!entry1->e_value_inum &&
+ memcmp((char *)header1 + le16_to_cpu(entry1->e_value_offs),
(char *)header2 + le16_to_cpu(entry2->e_value_offs),
le32_to_cpu(entry1->e_value_size)))
return 1;