From 02f1c21bf97e896d78aa8e048db752bd6107ac11 Mon Sep 17 00:00:00 2001 From: Eric Sandeen Date: Wed, 14 Oct 2015 10:31:17 +1100 Subject: [PATCH] xfs_repair: catch bad level/depth in da node Two tests added some time ago to dir2.c: 44dae5e xfs_repair: test for bad level in dir2 node 28148f6 xfs_repair: catch bad depth in traverse_int_dir2block never made it to the similar tree-walking code in attr_repair.c; fix that up here. The error string details will be fixed up later. Signed-off-by; Eric Sandeen Signed-off-by: Eric Sandeen Reviewed-by: Brian Foster Signed-off-by: Dave Chinner --- repair/attr_repair.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/repair/attr_repair.c b/repair/attr_repair.c index 5ae2356d5..2aafdf65b 100644 --- a/repair/attr_repair.c +++ b/repair/attr_repair.c @@ -212,9 +212,17 @@ traverse_int_dablock(xfs_mount_t *mp, /* * maintain level counter */ - if (i == -1) + if (i == -1) { i = da_cursor->active = nodehdr.level; - else { + if (i < 1 || i >= XFS_DA_NODE_MAXDEPTH) { + do_warn( +_("bad header depth for directory inode %" PRIu64 "\n"), + da_cursor->ino); + libxfs_putbuf(bp); + i = -1; + goto error_out; + } + } else { if (nodehdr.level == i - 1) { i--; } else { -- 2.47.2