Whamcloud - gitweb
libext2fs: fix possible inode count overflow when creating fs
authorJan Kara <jack@suse.cz>
Tue, 19 Jun 2018 03:19:27 +0000 (23:19 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Tue, 19 Jun 2018 03:19:30 +0000 (23:19 -0400)
If blocks count is exactly 1<<32, then the code computing number of
inode count in ext2fs_initialize() will overflow and set number of
inodes to 0 (which will be later fixed up to EXT2_FIRST_INODE(super)+1).
Fix the off-by-one bug in the check.

Reviewed-by: Andreas Dilger <adilger@dilger.ca>
Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
lib/ext2fs/initialize.c

index dbe798b..e1eff22 100644 (file)
@@ -295,7 +295,7 @@ retry:
        i = fs->blocksize >= 4096 ? 1 : 4096 / fs->blocksize;
 
        if (ext2fs_has_feature_64bit(super) &&
-           (ext2fs_blocks_count(super) / i) > (1ULL << 32))
+           (ext2fs_blocks_count(super) / i) >= (1ULL << 32))
                set_field(s_inodes_count, ~0U);
        else
                set_field(s_inodes_count, ext2fs_blocks_count(super) / i);