Whamcloud - gitweb
libext2fs: Fix resize inode creation with non-standard s_first_data_block
authorTheodore Ts'o <tytso@mit.edu>
Sun, 6 Apr 2008 21:00:23 +0000 (17:00 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Sun, 6 Apr 2008 21:00:23 +0000 (17:00 -0400)
Thanks to Max Lindner (lokimuh) for pointing this out.

   I'm playing around a bit with ext2 and multi-user encryption and I
   need space for my key management. So I set s_first_data_block to 4000
   or something like that.

   This way mke2fs segfaults when executing
   ext2fs_create_resize_inode() because

   blk_t goal = 3 + sb->s_reserved_gdt_blocks + fs->desc_blocks +
   fs->inode_blocks_per_group;

   will produce a integer underrun later and segfault then in the
   ext2fs_test_bit assembler inline function.

   when exchanging 3 with 2 + sb->s_first_data_block, mke2fs does not
   segfault.

   I'm not 100% sure if thats the correct way dealing with this issue
   but I think its a proper solution.

Addresses-Sourceforge-Bug: #1935847

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
lib/ext2fs/res_gdt.c

index fa72fc9..ef87ab7 100644 (file)
@@ -93,8 +93,9 @@ errcode_t ext2fs_create_resize_inode(ext2_filsys fs)
                if (retval)
                        goto out_inode;
        } else {
-               blk_t goal = 3 + sb->s_reserved_gdt_blocks +
-                       fs->desc_blocks + fs->inode_blocks_per_group;
+               blk_t goal = sb->s_first_data_block + fs->desc_blocks +
+                       sb->s_reserved_gdt_blocks + 2 + 
+                       fs->inode_blocks_per_group;
 
                retval = ext2fs_alloc_block(fs, goal, 0, &dindir_blk);
                if (retval)