From: Eric Sandeen Date: Sat, 28 Jul 2012 21:52:13 +0000 (-0400) Subject: filefrag: fix segfault on virtual fs X-Git-Tag: v1.42.5~11 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=339e457939bf1663ac2dbd52e47cd6e145726771;p=thirdparty%2Fe2fsprogs.git filefrag: fix segfault on virtual fs filefrag on a virtual fs like proc segfaults: Floating point exception because stat.f_blocks is 0, so the calculation of cylgroups is 0, which leads to a divide by 0 when calculating expected extents. Since it's only used for ext2 filesystems anyway, just move the calculation of expected under "if (is_ext2)" to fix this. Reported-by: Max Beikirch Signed-off-by: Eric Sandeen Signed-off-by: Theodore Ts'o --- diff --git a/misc/filefrag.c b/misc/filefrag.c index af008fbcf..3ec788fea 100644 --- a/misc/filefrag.c +++ b/misc/filefrag.c @@ -360,11 +360,12 @@ static void frag_report(const char *filename) else printf("%s: %d extents found", filename, num_extents); /* count, and thus expected, only set for indirect FIBMAP'd files */ - expected = (count/((bs*8)-(fsinfo.f_files/8/cylgroups)-3))+1; - if (is_ext2 && expected && expected < num_extents) - printf(", perfection would be %d extent%s\n", expected, - (expected>1) ? "s" : ""); - else + if (is_ext2) { + expected = (count/((bs*8)-(fsinfo.f_files/8/cylgroups)-3))+1; + if (expected && expected < num_extents) + printf(", perfection would be %d extent%s\n", expected, + (expected>1) ? "s" : ""); + } else fputc('\n', stdout); close(fd); once = 0;