All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCHSET 0/2] xfs_db/xfs_repair: warn about bad btree heights
@ 2022-05-05 16:04 Darrick J. Wong
  2022-05-05 16:04 ` [PATCH 1/2] xfs_db: warn about suspicious finobt trees when metadumping Darrick J. Wong
  2022-05-05 16:04 ` [PATCH 2/2] xfs_repair: warn about suspicious btree levels in AG headers Darrick J. Wong
  0 siblings, 2 replies; 7+ messages in thread
From: Darrick J. Wong @ 2022-05-05 16:04 UTC (permalink / raw)
  To: sandeen, djwong; +Cc: linux-xfs

Hi all,

While I was backporting 5.16 to libxfs, I noticed that repair and
metadump don't completely check the btree heights stored in the AGF/AGI
headers.  This series corrects that problem by making them all check.

If you're going to start using this mess, you probably ought to just
pull from my git trees, which are linked below.

This is an extraordinary way to destroy everything.  Enjoy!
Comments and questions are, as always, welcome.

--D

xfsprogs git tree:
https://git.kernel.org/cgit/linux/kernel/git/djwong/xfsprogs-dev.git/log/?h=warn-bad-btree-levels
---
 db/metadump.c |   15 +++++++++++++++
 repair/scan.c |   29 ++++++++++++++++++++++++++---
 2 files changed, 41 insertions(+), 3 deletions(-)


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 1/2] xfs_db: warn about suspicious finobt trees when metadumping
  2022-05-05 16:04 [PATCHSET 0/2] xfs_db/xfs_repair: warn about bad btree heights Darrick J. Wong
@ 2022-05-05 16:04 ` Darrick J. Wong
  2022-05-05 20:01   ` Eric Sandeen
  2022-05-10  9:39   ` Christoph Hellwig
  2022-05-05 16:04 ` [PATCH 2/2] xfs_repair: warn about suspicious btree levels in AG headers Darrick J. Wong
  1 sibling, 2 replies; 7+ messages in thread
From: Darrick J. Wong @ 2022-05-05 16:04 UTC (permalink / raw)
  To: sandeen, djwong; +Cc: linux-xfs

From: Darrick J. Wong <djwong@kernel.org>

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>
---
 db/metadump.c |   15 +++++++++++++++
 1 file changed, 15 insertions(+)


diff --git a/db/metadump.c b/db/metadump.c
index c6f9d382..0d151bb8 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))


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 2/2] xfs_repair: warn about suspicious btree levels in AG headers
  2022-05-05 16:04 [PATCHSET 0/2] xfs_db/xfs_repair: warn about bad btree heights Darrick J. Wong
  2022-05-05 16:04 ` [PATCH 1/2] xfs_db: warn about suspicious finobt trees when metadumping Darrick J. Wong
@ 2022-05-05 16:04 ` Darrick J. Wong
  2022-05-05 20:13   ` Eric Sandeen
  2022-05-10  9:39   ` Christoph Hellwig
  1 sibling, 2 replies; 7+ messages in thread
From: Darrick J. Wong @ 2022-05-05 16:04 UTC (permalink / raw)
  To: sandeen, djwong; +Cc: linux-xfs

From: Darrick J. Wong <djwong@kernel.org>

Warn about suspicious AG btree levels in the AGF and AGI.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
---
 repair/scan.c |   29 ++++++++++++++++++++++++++---
 1 file changed, 26 insertions(+), 3 deletions(-)


diff --git a/repair/scan.c b/repair/scan.c
index 4a234ded..5a4b8dbd 100644
--- a/repair/scan.c
+++ b/repair/scan.c
@@ -2261,6 +2261,13 @@ validate_agf(
 {
 	xfs_agblock_t		bno;
 	uint32_t		magic;
+	unsigned int		levels;
+
+	levels = be32_to_cpu(agf->agf_levels[XFS_BTNUM_BNO]);
+	if (levels == 0 || levels > mp->m_alloc_maxlevels) {
+		do_warn(_("bad levels %u for btbno root, agno %d\n"),
+			levels, agno);
+	}
 
 	bno = be32_to_cpu(agf->agf_roots[XFS_BTNUM_BNO]);
 	if (libxfs_verify_agbno(mp, agno, bno)) {
@@ -2274,6 +2281,12 @@ validate_agf(
 			bno, agno);
 	}
 
+	levels = be32_to_cpu(agf->agf_levels[XFS_BTNUM_CNT]);
+	if (levels == 0 || levels > mp->m_alloc_maxlevels) {
+		do_warn(_("bad levels %u for btbcnt root, agno %d\n"),
+			levels, agno);
+	}
+
 	bno = be32_to_cpu(agf->agf_roots[XFS_BTNUM_CNT]);
 	if (libxfs_verify_agbno(mp, agno, bno)) {
 		magic = xfs_has_crc(mp) ? XFS_ABTC_CRC_MAGIC
@@ -2288,7 +2301,6 @@ validate_agf(
 
 	if (xfs_has_rmapbt(mp)) {
 		struct rmap_priv	priv;
-		unsigned int		levels;
 
 		memset(&priv.high_key, 0xFF, sizeof(priv.high_key));
 		priv.high_key.rm_blockcount = 0;
@@ -2320,8 +2332,6 @@ validate_agf(
 	}
 
 	if (xfs_has_reflink(mp)) {
-		unsigned int	levels;
-
 		levels = be32_to_cpu(agf->agf_refcount_level);
 		if (levels == 0 || levels > mp->m_refc_maxlevels) {
 			do_warn(_("bad levels %u for refcountbt root, agno %d\n"),
@@ -2378,6 +2388,13 @@ validate_agi(
 	xfs_agblock_t		bno;
 	int			i;
 	uint32_t		magic;
+	unsigned int		levels;
+
+	levels = be32_to_cpu(agi->agi_level);
+	if (levels == 0 || levels > M_IGEO(mp)->inobt_maxlevels) {
+		do_warn(_("bad levels %u for inobt root, agno %d\n"),
+			levels, agno);
+	}
 
 	bno = be32_to_cpu(agi->agi_root);
 	if (libxfs_verify_agbno(mp, agno, bno)) {
@@ -2392,6 +2409,12 @@ validate_agi(
 	}
 
 	if (xfs_has_finobt(mp)) {
+		levels = be32_to_cpu(agi->agi_free_level);
+		if (levels == 0 || levels > M_IGEO(mp)->inobt_maxlevels) {
+			do_warn(_("bad levels %u for finobt root, agno %d\n"),
+				levels, agno);
+		}
+
 		bno = be32_to_cpu(agi->agi_free_root);
 		if (libxfs_verify_agbno(mp, agno, bno)) {
 			magic = xfs_has_crc(mp) ?


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/2] xfs_db: warn about suspicious finobt trees when metadumping
  2022-05-05 16:04 ` [PATCH 1/2] xfs_db: warn about suspicious finobt trees when metadumping Darrick J. Wong
@ 2022-05-05 20:01   ` Eric Sandeen
  2022-05-10  9:39   ` Christoph Hellwig
  1 sibling, 0 replies; 7+ messages in thread
From: Eric Sandeen @ 2022-05-05 20:01 UTC (permalink / raw)
  To: Darrick J. Wong; +Cc: linux-xfs

On 5/5/22 11:04 AM, Darrick J. Wong wrote:
> From: Darrick J. Wong <djwong@kernel.org>
> 
> 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>

LGTM. I wonder if we could do this without quite so much copied code
(like maybe call copy_inodes twice, once for inode tree once for free inode
tree?) but that's a patch for another day.

Reviewed-by: Eric Sandeen <sandeen@redhat.com>

===

maybe like this? worth it?

static int
copy_inodes(
        xfs_agnumber_t          agno,
        xfs_agi_t               *agi,
        int                     finobt)
{
        xfs_agblock_t           root;
        int                     levels;
        int                     type;

        if (finobt) {
                type = TYP_FINOBT;
                root = be32_to_cpu(agi->agi_root);
                levels = be32_to_cpu(agi->agi_level);
        } else {
                type = TYP_INOBT;
                root = be32_to_cpu(agi->agi_free_root);
                levels = be32_to_cpu(agi->agi_free_level);
        }

        /* validate root and levels before processing the tree */
        if (root == 0 || root > mp->m_sb.sb_agblocks) {
                if (show_warnings)
                        print_warning("invalid block number (%u) in %s"
                                        "root in agi %u", root,
                                        finobt ? "finobt" : "inobt", agno);
                return 1;
        }
        if (levels > M_IGEO(mp)->inobt_maxlevels) {
                if (show_warnings)
                        print_warning("invalid level (%u) in %s root "
                                        "in agi %u", levels,
                                        finobt ? "finobt" : "inobt", agno);
                return 1;
        }

        if (!scan_btree(agno, root, levels, type, &finobt, scanfunc_ino))
                return 0;

        return 1;
}

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 2/2] xfs_repair: warn about suspicious btree levels in AG headers
  2022-05-05 16:04 ` [PATCH 2/2] xfs_repair: warn about suspicious btree levels in AG headers Darrick J. Wong
@ 2022-05-05 20:13   ` Eric Sandeen
  2022-05-10  9:39   ` Christoph Hellwig
  1 sibling, 0 replies; 7+ messages in thread
From: Eric Sandeen @ 2022-05-05 20:13 UTC (permalink / raw)
  To: Darrick J. Wong; +Cc: linux-xfs

On 5/5/22 11:04 AM, Darrick J. Wong wrote:
> From: Darrick J. Wong <djwong@kernel.org>
> 
> Warn about suspicious AG btree levels in the AGF and AGI.
> 
> Signed-off-by: Darrick J. Wong <djwong@kernel.org>

Reviewed-by: Eric Sandeen <sandeen@redhat.com>


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/2] xfs_db: warn about suspicious finobt trees when metadumping
  2022-05-05 16:04 ` [PATCH 1/2] xfs_db: warn about suspicious finobt trees when metadumping Darrick J. Wong
  2022-05-05 20:01   ` Eric Sandeen
@ 2022-05-10  9:39   ` Christoph Hellwig
  1 sibling, 0 replies; 7+ messages in thread
From: Christoph Hellwig @ 2022-05-10  9:39 UTC (permalink / raw)
  To: Darrick J. Wong; +Cc: sandeen, linux-xfs

Looks good:

Reviewed-by: Christoph Hellwig <hch@lst.de>

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 2/2] xfs_repair: warn about suspicious btree levels in AG headers
  2022-05-05 16:04 ` [PATCH 2/2] xfs_repair: warn about suspicious btree levels in AG headers Darrick J. Wong
  2022-05-05 20:13   ` Eric Sandeen
@ 2022-05-10  9:39   ` Christoph Hellwig
  1 sibling, 0 replies; 7+ messages in thread
From: Christoph Hellwig @ 2022-05-10  9:39 UTC (permalink / raw)
  To: Darrick J. Wong; +Cc: sandeen, linux-xfs

On Thu, May 05, 2022 at 09:04:25AM -0700, Darrick J. Wong wrote:
> From: Darrick J. Wong <djwong@kernel.org>
> 
> Warn about suspicious AG btree levels in the AGF and AGI.

Looks good:

Reviewed-by: Christoph Hellwig <hch@lst.de>

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2022-05-10  9:39 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-05-05 16:04 [PATCHSET 0/2] xfs_db/xfs_repair: warn about bad btree heights Darrick J. Wong
2022-05-05 16:04 ` [PATCH 1/2] xfs_db: warn about suspicious finobt trees when metadumping Darrick J. Wong
2022-05-05 20:01   ` Eric Sandeen
2022-05-10  9:39   ` Christoph Hellwig
2022-05-05 16:04 ` [PATCH 2/2] xfs_repair: warn about suspicious btree levels in AG headers Darrick J. Wong
2022-05-05 20:13   ` Eric Sandeen
2022-05-10  9:39   ` Christoph Hellwig

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.