[PATCH] xfs_repair: catch bad depth in traverse_int_dir2block
Christoph Hellwig
hch at infradead.org
Mon Jun 8 02:42:30 CDT 2009
On Sun, Jun 07, 2009 at 10:51:52PM -0500, Eric Sandeen wrote:
> A bad on-disk tree depth in traverse_int_dir2block() can
> later cause a segfault when it's used as an array index in
> this function; if we get something beyond the max depth,
> just error out and the dir will get rebuilt.
>
> Reported-by: Richard Kolkovich <richard at intrameta.com>
> Signed-off-by: Eric Sandeen <sandeen at sandeen.net>
> ---
>
> diff --git a/repair/dir2.c b/repair/dir2.c
> index 9575fb1..2723e3b 100644
> --- a/repair/dir2.c
> +++ b/repair/dir2.c
> @@ -339,9 +339,17 @@ traverse_int_dir2block(xfs_mount_t *mp,
> /*
> * maintain level counter
> */
> - if (i == -1)
> + if (i == -1) {
> i = da_cursor->active = be16_to_cpu(node->hdr.level);
> - else {
> + if (i >= XFS_DA_NODE_MAXDEPTH) {
> + do_warn(_("bad header depth for directory "
> + "inode %llu\n"),
> + da_cursor->ino);
> + da_brelse(bp);
> + i = -1;
> + goto error_out;
> + }
> + } else {
More information about the xfs
mailing list