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 @@ errcode_t ext2fs_open2(const char *name, const char *io_options, } /* 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 + or + e2fsck -b 32768 + +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 Binary files /dev/null and b/tests/f_desc_size_zero/image.gz 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