[PATCH] 1/6 Avoid overflows in calculations of groups_count
Eric Sandeen <[email protected]> Wed, 16 Aug 2006 15:50:02 -0500
| Newsgroups | gmane.comp.file-systems.ext2.devel |
|---|---|
| Message-ID | <[email protected]> |
When s_blocks_count is at its maximum value (2^32-1), the way groups_count was calculated could overflow; change the arithmetic to avoid this. This is the same calculation that was submitted for the ext3 kernel mount code. Signed-off-by: Eric Sandeen <[email protected]> Index: e2fsprogs-1.39-test/ext2ed/init.c =================================================================== --- e2fsprogs-1.39-test.orig/ext2ed/init.c +++ e2fsprogs-1.39-test/ext2ed/init.c @@ -415,8 +415,8 @@ int set_file_system_info (void) file_system_info.first_group_desc_offset=2*EXT2_MIN_BLOCK_SIZE; else file_system_info.first_group_desc_offset=file_system_info.block_size; - file_system_info.groups_count=( sb->s_blocks_count-sb->s_first_data_block+sb->s_blocks_per_group-1) / - sb->s_blocks_per_group; + file_system_info.groups_count = ((sb->s_blocks_count - sb->s_first_data_block - 1) / + sb->s_blocks_per_group) + 1; file_system_info.inodes_per_block=file_system_info.block_size/sizeof (struct ext2_inode); file_system_info.blocks_per_group=sb->s_inodes_per_group/file_system_info.inodes_per_block; Index: e2fsprogs-1.39-test/lib/ext2fs/initialize.c =================================================================== --- e2fsprogs-1.39-test.orig/lib/ext2fs/initialize.c +++ e2fsprogs-1.39-test/lib/ext2fs/initialize.c @@ -205,10 +205,9 @@ errcode_t ext2fs_initialize(const char * } retry: - fs->group_desc_count = (super->s_blocks_count - - super->s_first_data_block + - EXT2_BLOCKS_PER_GROUP(super) - 1) - / EXT2_BLOCKS_PER_GROUP(super); + fs->group_desc_count = ((super->s_blocks_count - + super->s_first_data_block - 1) + / EXT2_BLOCKS_PER_GROUP(super)) + 1; if (fs->group_desc_count == 0) { retval = EXT2_ET_TOOSMALL; goto cleanup; Index: e2fsprogs-1.39-test/lib/ext2fs/openfs.c =================================================================== --- e2fsprogs-1.39-test.orig/lib/ext2fs/openfs.c +++ e2fsprogs-1.39-test/lib/ext2fs/openfs.c @@ -258,9 +258,9 @@ errcode_t ext2fs_open2(const char *name, retval = EXT2_ET_CORRUPT_SUPERBLOCK; goto cleanup; } - fs->group_desc_count = (fs->super->s_blocks_count - - fs->super->s_first_data_block + - blocks_per_group - 1) / blocks_per_group; + fs->group_desc_count = ((fs->super->s_blocks_count - + fs->super->s_first_data_block - 1) + / blocks_per_group) + 1; fs->desc_blocks = (fs->group_desc_count + EXT2_DESC_PER_BLOCK(fs->super) - 1) / EXT2_DESC_PER_BLOCK(fs->super); Index: e2fsprogs-1.39-test/resize/resize2fs.c =================================================================== --- e2fsprogs-1.39-test.orig/resize/resize2fs.c +++ e2fsprogs-1.39-test/resize/resize2fs.c @@ -190,10 +190,9 @@ errcode_t adjust_fs_info(ext2_filsys fs, fs->super->s_blocks_count = new_size; retry: - fs->group_desc_count = (fs->super->s_blocks_count - - fs->super->s_first_data_block + - EXT2_BLOCKS_PER_GROUP(fs->super) - 1) - / EXT2_BLOCKS_PER_GROUP(fs->super); + fs->group_desc_count = ((fs->super->s_blocks_count - + fs->super->s_first_data_block - 1) + / EXT2_BLOCKS_PER_GROUP(fs->super)) + 1; if (fs->group_desc_count == 0) return EXT2_ET_TOOSMALL; fs->desc_blocks = (fs->group_desc_count + Index: e2fsprogs-1.39-test/misc/mke2fs.c =================================================================== --- e2fsprogs-1.39-test.orig/misc/mke2fs.c +++ e2fsprogs-1.39-test/misc/mke2fs.c @@ -819,8 +819,8 @@ static void parse_extended_opts(struct e if (!bpg) bpg = blocksize * 8; gdpb = blocksize / sizeof(struct ext2_group_desc); - group_desc_count = (param->s_blocks_count + - bpg - 1) / bpg; + group_desc_count = ((param->s_blocks_count - 1) + / bpg) + 1; desc_blocks = (group_desc_count + gdpb - 1) / gdpb; rsv_groups = (resize + bpg - 1) / bpg; ------------------------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642