diff options
author | Darrick J. Wong <djwong@kernel.org> | 2022-05-17 22:48:12 -0400 |
---|---|---|
committer | Eric Sandeen <sandeen@sandeen.net> | 2022-05-17 22:48:12 -0400 |
commit | 9b9c121a877adc88c3b95e791e88e8d54da23611 (patch) | |
tree | d1d5abeefcd3b52f784acb29f3915832a9f4632c | |
parent | baf2beba40e9759fe6daa635b07799931ecbe96e (diff) | |
download | xfsprogs-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.c | 15 |
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)) |