]> git.ipfire.org Git - thirdparty/e2fsprogs.git/commitdiff
ChangeLog, super.c:
authorTheodore Ts'o <tytso@mit.edu>
Tue, 17 Apr 2001 00:40:02 +0000 (00:40 +0000)
committerTheodore Ts'o <tytso@mit.edu>
Tue, 17 Apr 2001 00:40:02 +0000 (00:40 +0000)
  super.c (check_super_block): Fix bad calculation of inodes_per_block,
   and tighten min/max checks to be a bit more paranoid.  Thanks to
   Andreas Dilger for pointing out this bug.

e2fsck/ChangeLog
e2fsck/super.c

index 93f8116df9c5aad833ead9f0d243db330ce81555..a9b3f0840f4dbcff699b8c30ae289c4541ea3006 100644 (file)
@@ -1,3 +1,10 @@
+2001-04-16  Theodore Tso  <tytso@valinux.com>
+
+       * super.c (check_super_block): Fix bad calculation of
+               inodes_per_block, and tighten min/max checks to be a bit
+               more paranoid.  Thanks to Andreas Dilger for pointing out
+               this bug.
+
 2001-03-29  Theodore Tso  <tytso@valinux.com>
 
        * journal.c (mark_buffer_uptodate): Add emulation of kernel
index 352a6b43825af1ae4d3dcb0693cb790be43cc754..56fc2282187b163ceec24e5dcb9a47ef7599a967 100644 (file)
@@ -300,9 +300,8 @@ void check_super_block(e2fsck_t ctx)
        blk_t   should_be;
        struct problem_context  pctx;
        
-       inodes_per_block = (EXT2_INODE_SIZE(fs->super) + 
-                           EXT2_BLOCK_SIZE(fs->super) - 1) /
-                                   EXT2_BLOCK_SIZE(fs->super);
+       inodes_per_block = (EXT2_BLOCK_SIZE(fs->super) /
+                           EXT2_INODE_SIZE(fs->super));
 
        ctx->invalid_inode_bitmap_flag = (int *) e2fsck_allocate_memory(ctx,
                 sizeof(int) * fs->group_desc_count, "invalid_inode_bitmap");
@@ -328,12 +327,13 @@ void check_super_block(e2fsck_t ctx)
                          MIN_CHECK | MAX_CHECK, sb->s_log_frag_size,
                          2);
        check_super_value(ctx, "frags_per_group", sb->s_frags_per_group,
-                         MIN_CHECK | MAX_CHECK, 1, 8 * EXT2_BLOCK_SIZE(sb));
+                         MIN_CHECK | MAX_CHECK, sb->s_blocks_per_group,
+                         8 * EXT2_BLOCK_SIZE(sb));
        check_super_value(ctx, "blocks_per_group", sb->s_blocks_per_group,
-                         MIN_CHECK | MAX_CHECK, 1, 8 * EXT2_BLOCK_SIZE(sb));
+                         MIN_CHECK | MAX_CHECK, 8, 8 * EXT2_BLOCK_SIZE(sb));
        check_super_value(ctx, "inodes_per_group", sb->s_inodes_per_group,
-                         MIN_CHECK | MAX_CHECK, 1,
-                         inodes_per_block * blocks_per_group);
+                         MIN_CHECK | MAX_CHECK, inodes_per_block,
+                         inodes_per_block * (blocks_per_group-4));
        check_super_value(ctx, "r_blocks_count", sb->s_r_blocks_count,
                          MAX_CHECK, 0, sb->s_blocks_count);