filefrag: Fix segfault on virtual fs
PATCH 1/1 filefrag: Fix segfault on virtual fs
filefrag on a virtual fs like proc segfaults:
# filefrag /proc/filesystems 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 <[email protected]>
Signed-off-by Eric Sandeen <[email protected]>
---
misc/filefrag.c +6 -5
@@ -365,11 +366,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 ;
Theodore Ts'o
AppliedQuoted 5 lines · Eric Sandeen
filefrag on a virtual fs like proc segfaults:
# filefrag /proc/filesystems Floating point exception
Quoted 8 lines
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 <[email protected]>Signed-off-by Eric Sandeen <[email protected]>
Applied, thanks.
- Ted