Whamcloud - gitweb
Fix test in ext2fs_check_desc() for inode table within block group
authorEric Sandeen <sandeen@redhat.com>
Fri, 20 Jul 2007 21:50:26 +0000 (16:50 -0500)
committerTheodore Ts'o <tytso@mit.edu>
Sun, 22 Jul 2007 20:00:43 +0000 (16:00 -0400)
The test in ext2fs_check_desc() is off by one; if the inode table
goes all the way to the last block of the block group, it will
falsely assert that it has extended past it.  The last block
of a range is start + len -1, not start + len.

You can create (valid) filesystems that will cause e2fsck to complain
via one of the following mkfs commands:

mkfs.ext3 -F -b 1024 /dev/sdb1 2046000000
mke2fs -j -F -b 4096 -m 0 -N 5217280 /mnt/test/fsfile2 327680
mkfs.ext2 -F -b 1024 -m 0 -g 256 -N 3744 fsfile 1024

Addresses-Red-Hat-Bugzilla: #214765

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
lib/ext2fs/check_desc.c
tests/f_full_bg/expect.1 [new file with mode: 0644]
tests/f_full_bg/expect.2 [new file with mode: 0644]
tests/f_full_bg/image.gz [new file with mode: 0644]
tests/f_full_bg/name [new file with mode: 0644]

index 3150d3e..146f9e5 100644 (file)
@@ -61,7 +61,7 @@ errcode_t ext2fs_check_desc(ext2_filsys fs)
                 */
                if (fs->group_desc[i].bg_inode_table < first_block ||
                    ((fs->group_desc[i].bg_inode_table +
-                     fs->inode_blocks_per_group) > last_block))
+                     fs->inode_blocks_per_group - 1) > last_block))
                        return EXT2_ET_GDESC_BAD_INODE_TABLE;
        }
        return 0;
diff --git a/tests/f_full_bg/expect.1 b/tests/f_full_bg/expect.1
new file mode 100644 (file)
index 0000000..00819bf
--- /dev/null
@@ -0,0 +1,7 @@
+Pass 1: Checking inodes, blocks, and sizes
+Pass 2: Checking directory structure
+Pass 3: Checking directory connectivity
+Pass 4: Checking reference counts
+Pass 5: Checking group summary information
+test_filesys: 11/3744 files (9.1% non-contiguous), 685/769 blocks
+Exit status is 0
diff --git a/tests/f_full_bg/expect.2 b/tests/f_full_bg/expect.2
new file mode 100644 (file)
index 0000000..00819bf
--- /dev/null
@@ -0,0 +1,7 @@
+Pass 1: Checking inodes, blocks, and sizes
+Pass 2: Checking directory structure
+Pass 3: Checking directory connectivity
+Pass 4: Checking reference counts
+Pass 5: Checking group summary information
+test_filesys: 11/3744 files (9.1% non-contiguous), 685/769 blocks
+Exit status is 0
diff --git a/tests/f_full_bg/image.gz b/tests/f_full_bg/image.gz
new file mode 100644 (file)
index 0000000..9be419d
Binary files /dev/null and b/tests/f_full_bg/image.gz differ
diff --git a/tests/f_full_bg/name b/tests/f_full_bg/name
new file mode 100644 (file)
index 0000000..b0614de
--- /dev/null
@@ -0,0 +1 @@
+inode table in last block of first bg