aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/ext2fs/openfs.c11
-rw-r--r--tests/f_desc_size_zero/expect.113
-rw-r--r--tests/f_desc_size_zero/image.gzbin0 -> 589 bytes
-rw-r--r--tests/f_desc_size_zero/name1
-rw-r--r--tests/f_desc_size_zero/script2
5 files changed, 22 insertions, 5 deletions
diff --git a/lib/ext2fs/openfs.c b/lib/ext2fs/openfs.c
index fd56a9acd..eb44d5864 100644
--- a/lib/ext2fs/openfs.c
+++ b/lib/ext2fs/openfs.c
@@ -330,13 +330,14 @@ retry:
}
/* Enforce the block group descriptor size */
- if (!(flags & EXT2_FLAG_IGNORE_SB_ERRORS) &&
- ext2fs_has_feature_64bit(fs->super)) {
+ if (ext2fs_has_feature_64bit(fs->super)) {
unsigned desc_size = fs->super->s_desc_size;
- if ((desc_size < EXT2_MIN_DESC_SIZE_64BIT) ||
- (desc_size > EXT2_MAX_DESC_SIZE) ||
- (desc_size & (desc_size - 1)) != 0) {
+ if (desc_size == 0 ||
+ (!(flags & EXT2_FLAG_IGNORE_SB_ERRORS) &&
+ ((desc_size > EXT2_MAX_DESC_SIZE) ||
+ (desc_size < EXT2_MIN_DESC_SIZE_64BIT) ||
+ (desc_size & (desc_size - 1)) != 0))) {
retval = EXT2_ET_BAD_DESC_SIZE;
goto cleanup;
}
diff --git a/tests/f_desc_size_zero/expect.1 b/tests/f_desc_size_zero/expect.1
new file mode 100644
index 000000000..acb752a75
--- /dev/null
+++ b/tests/f_desc_size_zero/expect.1
@@ -0,0 +1,13 @@
+../e2fsck/e2fsck: Block group descriptor size incorrect while trying to open test.img
+../e2fsck/e2fsck: Trying to load superblock despite errors...
+../e2fsck/e2fsck: Block group descriptor size incorrect while trying to open test.img
+
+The superblock could not be read or does not describe a valid ext2/ext3/ext4
+filesystem. If the device is valid and it really contains an ext2/ext3/ext4
+filesystem (and not swap or ufs or something else), then the superblock
+is corrupt, and you might try running e2fsck with an alternate superblock:
+ e2fsck -b 8193 <device>
+ or
+ e2fsck -b 32768 <device>
+
+Exit status is 8
diff --git a/tests/f_desc_size_zero/image.gz b/tests/f_desc_size_zero/image.gz
new file mode 100644
index 000000000..4e43c0c61
--- /dev/null
+++ b/tests/f_desc_size_zero/image.gz
Binary files differ
diff --git a/tests/f_desc_size_zero/name b/tests/f_desc_size_zero/name
new file mode 100644
index 000000000..e77bb11c2
--- /dev/null
+++ b/tests/f_desc_size_zero/name
@@ -0,0 +1 @@
+zero s_desc_size
diff --git a/tests/f_desc_size_zero/script b/tests/f_desc_size_zero/script
new file mode 100644
index 000000000..8ab2b9c61
--- /dev/null
+++ b/tests/f_desc_size_zero/script
@@ -0,0 +1,2 @@
+ONE_PASS_ONLY="true"
+. $cmd_dir/run_e2fsck