Check bytenr alignment for extent item to filter invalid items early.

Signed-off-by: Qu Wenruo <quwen...@cn.fujitsu.com>
---
 cmds-check.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/cmds-check.c b/cmds-check.c
index 2aa0a7b..c56b176 100644
--- a/cmds-check.c
+++ b/cmds-check.c
@@ -5422,6 +5422,11 @@ static int process_extent_item(struct btrfs_root *root,
                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)) {
 #ifdef BTRFS_COMPAT_EXTENT_TREE_V0
                struct btrfs_extent_item_v0 *ei0;
@@ -5448,6 +5453,16 @@ static int process_extent_item(struct btrfs_root *root,
                metadata = 1;
        else
                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));
        tmpl.start = key.objectid;
-- 
2.9.3



--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to