diff options
author | Jan Kara <jack@suse.cz> | 2016-08-29 15:39:11 -0400 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2016-08-29 15:39:11 -0400 |
commit | 2de58f1102cf1ac6091209e1dfa8eccbcb039570 (patch) | |
tree | 065c26c641632243b85f4f2f59814534f06eda64 /fs/ext4 | |
parent | e3014d14a81edde488d9a6758eea8afc41752d2d (diff) |
ext4: Check that external xattr value block is zero
Currently we don't support xattrs with values stored out of line. Check
for that in ext4_xattr_check_names() to make sure we never work with
such xattrs since not all the code counts with that resulting is possible
weird corruption issues.
Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Diffstat (limited to 'fs/ext4')
-rw-r--r-- | fs/ext4/xattr.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/fs/ext4/xattr.c b/fs/ext4/xattr.c index 22d2ebcd1f09..f845cb7c6623 100644 --- a/fs/ext4/xattr.c +++ b/fs/ext4/xattr.c | |||
@@ -199,6 +199,8 @@ ext4_xattr_check_names(struct ext4_xattr_entry *entry, void *end, | |||
199 | } | 199 | } |
200 | 200 | ||
201 | while (!IS_LAST_ENTRY(entry)) { | 201 | while (!IS_LAST_ENTRY(entry)) { |
202 | if (entry->e_value_block != 0) | ||
203 | return -EFSCORRUPTED; | ||
202 | if (entry->e_value_size != 0 && | 204 | if (entry->e_value_size != 0 && |
203 | (value_start + le16_to_cpu(entry->e_value_offs) < | 205 | (value_start + le16_to_cpu(entry->e_value_offs) < |
204 | (void *)e + sizeof(__u32) || | 206 | (void *)e + sizeof(__u32) || |