aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDarrick J. Wong <djwong@kernel.org>2022-05-17 22:48:12 -0400
committerEric Sandeen <sandeen@sandeen.net>2022-05-17 22:48:12 -0400
commit9b9c121a877adc88c3b95e791e88e8d54da23611 (patch)
treed1d5abeefcd3b52f784acb29f3915832a9f4632c
parentbaf2beba40e9759fe6daa635b07799931ecbe96e (diff)
downloadxfsprogs-dev-9b9c121a877adc88c3b95e791e88e8d54da23611.tar.gz
xfs_db: warn about suspicious finobt trees when metadumping
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>
-rw-r--r--db/metadump.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/db/metadump.c b/db/metadump.c
index c6f9d382af..0d151bb827 100644
--- a/db/metadump.c
+++ b/db/metadump.c
@@ -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))