blkmap_getn() contains a loop which populates an array of extents with mapping information for a dir2 "block," which may consist of multiple filesystem blocks. As written, the loop re-allocates the array for each new extent, leaking the previously allocated memory and worse, losing the previously filled-in extent information. Fix this by only allocating the array once, for the maximum possible number of extents - the number of fs blocks in the dir block. Signed-off-by: Eric Sandeen <sandeen@xxxxxxxxxx> --- diff --git a/repair/bmap.c b/repair/bmap.c index 2f1c307..c43ca7f 100644 --- a/repair/bmap.c +++ b/repair/bmap.c @@ -168,7 +168,8 @@ blkmap_getn( /* * rare case - multiple extents for a single dir block */ - bmp = malloc(nb * sizeof(bmap_ext_t)); + if (!bmp) + bmp = malloc(nb * sizeof(bmap_ext_t)); if (!bmp) do_error(_("blkmap_getn malloc failed (%" PRIu64 " bytes)\n"), nb * sizeof(bmap_ext_t)); _______________________________________________ xfs mailing list xfs@xxxxxxxxxxx http://oss.sgi.com/mailman/listinfo/xfs