43 lines
1.6 KiB
Diff
43 lines
1.6 KiB
Diff
|
|
From f6cf3e61932596c8d00e170d69ae2529f3a8dc81 Mon Sep 17 00:00:00 2001
|
||
|
|
From: Andreas Dilger <adilger@dilger.ca>
|
||
|
|
Date: Sun, 5 May 2019 18:33:46 -0400
|
||
|
|
Subject: [PATCH 185/202] 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 <adilger@dilger.ca>
|
||
|
|
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
|
||
|
|
---
|
||
|
|
misc/mke2fs.c | 6 ++++--
|
||
|
|
1 file changed, 4 insertions(+), 2 deletions(-)
|
||
|
|
|
||
|
|
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"),
|
||
|
|
--
|
||
|
|
2.7.4
|
||
|
|
|