]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
xfs_db: warn about suspicious finobt trees when metadumping
authorDarrick J. Wong <djwong@kernel.org>
Wed, 18 May 2022 02:48:12 +0000 (22:48 -0400)
committerEric Sandeen <sandeen@sandeen.net>
Wed, 18 May 2022 02:48:12 +0000 (22:48 -0400)
We warn about suspicious roots and btree heights before metadumping the
inode btree, so do the same for the free inode btree.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Eric Sandeen <sandeen@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
db/metadump.c

index c6f9d382afdc83fa989efb9c5ecc6b0f35ba706d..0d151bb827d35a00757f275bc9f1e34e255713bf 100644 (file)
@@ -2664,6 +2664,21 @@ copy_inodes(
                root = be32_to_cpu(agi->agi_free_root);
                levels = be32_to_cpu(agi->agi_free_level);
 
+               if (root == 0 || root > mp->m_sb.sb_agblocks) {
+                       if (show_warnings)
+                               print_warning("invalid block number (%u) in "
+                                               "finobt root in agi %u", root,
+                                               agno);
+                       return 1;
+               }
+
+               if (levels > M_IGEO(mp)->inobt_maxlevels) {
+                       if (show_warnings)
+                               print_warning("invalid level (%u) in finobt "
+                                               "root in agi %u", levels, agno);
+                       return 1;
+               }
+
                finobt = 1;
                if (!scan_btree(agno, root, levels, TYP_FINOBT, &finobt,
                                scanfunc_ino))