mirror of
https://github.com/kdave/btrfs-progs
synced 2025-04-30 06:57:55 +00:00
btrfs-progs: fsck: Check bytenr alignment for extent item
Check bytenr alignment for extent item to filter invalid items early. Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
f51a34696b
commit
77deae9cb7
15
cmds-check.c
15
cmds-check.c
@ -5422,6 +5422,11 @@ static int process_extent_item(struct btrfs_root *root,
|
|||||||
num_bytes = key.offset;
|
num_bytes = key.offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!IS_ALIGNED(key.objectid, root->sectorsize)) {
|
||||||
|
error("ignoring invalid extent, bytenr %llu is not aligned to %u",
|
||||||
|
key.objectid, root->sectorsize);
|
||||||
|
return -EIO;
|
||||||
|
}
|
||||||
if (item_size < sizeof(*ei)) {
|
if (item_size < sizeof(*ei)) {
|
||||||
#ifdef BTRFS_COMPAT_EXTENT_TREE_V0
|
#ifdef BTRFS_COMPAT_EXTENT_TREE_V0
|
||||||
struct btrfs_extent_item_v0 *ei0;
|
struct btrfs_extent_item_v0 *ei0;
|
||||||
@ -5448,6 +5453,16 @@ static int process_extent_item(struct btrfs_root *root,
|
|||||||
metadata = 1;
|
metadata = 1;
|
||||||
else
|
else
|
||||||
metadata = 0;
|
metadata = 0;
|
||||||
|
if (metadata && num_bytes != root->nodesize) {
|
||||||
|
error("ignore invalid metadata extent, length %llu does not equal to %u",
|
||||||
|
num_bytes, root->nodesize);
|
||||||
|
return -EIO;
|
||||||
|
}
|
||||||
|
if (!metadata && !IS_ALIGNED(num_bytes, root->sectorsize)) {
|
||||||
|
error("ignore invalid data extent, length %llu is not aligned to %u",
|
||||||
|
num_bytes, root->sectorsize);
|
||||||
|
return -EIO;
|
||||||
|
}
|
||||||
|
|
||||||
memset(&tmpl, 0, sizeof(tmpl));
|
memset(&tmpl, 0, sizeof(tmpl));
|
||||||
tmpl.start = key.objectid;
|
tmpl.start = key.objectid;
|
||||||
|
Loading…
Reference in New Issue
Block a user