From 7f5ba7cc82b5be96a9ae49d27071cf1b9dfac9f5 Mon Sep 17 00:00:00 2001 From: Theodore Ts'o Date: Sun, 23 Jul 2017 00:46:36 -0400 Subject: [PATCH] resize2fs: sanity check the free blocks and inode counts If the free block or free inodes count are larger than the number of blocks or inodes in the system, request that the file system be checked. Otherwise it's possible for calcuate_minimum_resize_size() to hang in an infinite loop. This problem was found using American Fuzzy Lop. Reported-by: Adam Buchbinder Signed-off-by: Theodore Ts'o --- resize/main.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/resize/main.c b/resize/main.c index 396391b..ab7375c 100644 --- a/resize/main.c +++ b/resize/main.c @@ -440,6 +440,10 @@ int main (int argc, char ** argv) !print_min_size) checkit = 1; + if ((fs->super->s_free_blocks_count > fs->super->s_blocks_count) || + (fs->super->s_free_inodes_count > fs->super->s_inodes_count)) + checkit = 1; + if (checkit) { fprintf(stderr, _("Please run 'e2fsck -f %s' first.\n\n"), -- 1.8.3.1