mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-05 02:21:52 +09:00
btrfs: Check if item pointer overlaps with the item itself
commit 7f43d4affb upstream.
Function check_leaf() checks if any item pointer points outside of the
leaf, but it doesn't check if the pointer overlaps with the item itself.
Normally only the last item may be the victim, but adding such check is
never a bad idea anyway.
Signed-off-by: Qu Wenruo <quwenruo.btrfs@gmx.com>
Reviewed-by: Nikolay Borisov <nborisov@suse.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Signed-off-by: Ben Hutchings <ben.hutchings@codethink.co.uk>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
a5cc85fe13
commit
ac6ea50bb6
@@ -644,6 +644,13 @@ static noinline int check_leaf(struct btrfs_root *root,
|
||||
return -EUCLEAN;
|
||||
}
|
||||
|
||||
/* Also check if the item pointer overlaps with btrfs item. */
|
||||
if (btrfs_item_nr_offset(slot) + sizeof(struct btrfs_item) >
|
||||
btrfs_item_ptr_offset(leaf, slot)) {
|
||||
CORRUPT("slot overlap with its data", leaf, root, slot);
|
||||
return -EUCLEAN;
|
||||
}
|
||||
|
||||
prev_key.objectid = key.objectid;
|
||||
prev_key.type = key.type;
|
||||
prev_key.offset = key.offset;
|
||||
|
||||
Reference in New Issue
Block a user