ext4: fix ext4_xattr_cmp()
authorTahsin Erdogan <tahsin@google.com>
Thu, 22 Jun 2017 02:14:30 +0000 (22:14 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Thu, 22 Jun 2017 02:14:30 +0000 (22:14 -0400)
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>
fs/ext4/xattr.c

index bd1e61a0c228684b223d3c9c5d81c74c6a15fab7..ed27b5241e69f52473ae241923c021dd5860c52b 100644 (file)
@@ -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;