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 <sandeen@redhat.com>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
/*
* 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 {