From: Andreas Dilger Date: Sun, 5 May 2019 22:33:46 +0000 (-0400) Subject: mke2fs: fix check for absurdly large devices X-Git-Tag: v1.45.1-rc1~4 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=f6cf3e61932596c8d00e170d69ae2529f3a8dc81;p=tools%2Fe2fsprogs.git mke2fs: fix check for absurdly large devices The check in mke2fs is intended to be for the number of blocks in the filesystem exceeding the maximum number of addressable blocks in 2^32 bitmaps, which is (2^32 * 8 bits/byte * blocksize) = 2^47 blocks, or 2^59 bytes = 512PiB for the common 4KiB blocksize. However, s_log_blocksize holds log2(blocksize_in_kb), so the current calculation is a factor of 2^10 too small. This caused mke2fs to fail while trying to format a 900TB filesystem. Fixes: 101ef2e93c25 ("mke2fs: Avoid crashes / infinite loops for absurdly large devices") Signed-off-by: Andreas Dilger Signed-off-by: Theodore Ts'o --- diff --git a/misc/mke2fs.c b/misc/mke2fs.c index 9152360..0ba2bf3 100644 --- a/misc/mke2fs.c +++ b/misc/mke2fs.c @@ -2183,9 +2183,11 @@ profile_error: } /* * Guard against group descriptor count overflowing... Mostly to avoid - * strange results for absurdly large devices. + * strange results for absurdly large devices. This is in log2: + * (blocksize) * (bits per byte) * (maximum number of block groups) */ - if (fs_blocks_count > ((1ULL << (fs_param.s_log_block_size + 3 + 32)) - 1)) { + if (fs_blocks_count > + (1ULL << (EXT2_BLOCK_SIZE_BITS(&fs_param) + 3 + 32)) - 1) { fprintf(stderr, _("%s: Size of device (0x%llx blocks) %s " "too big to create\n\t" "a filesystem using a blocksize of %d.\n"),