From bd828a27e2cfec9f14837d9a693e2a414f44bf91 Mon Sep 17 00:00:00 2001 From: Eric Sandeen Date: Fri, 20 Jul 2007 16:50:26 -0500 Subject: [PATCH] Fix test in ext2fs_check_desc() for inode table within block group 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 Signed-off-by: "Theodore Ts'o" --- lib/ext2fs/check_desc.c | 2 +- tests/f_full_bg/expect.1 | 7 +++++++ tests/f_full_bg/expect.2 | 7 +++++++ tests/f_full_bg/image.gz | Bin 0 -> 1860 bytes tests/f_full_bg/name | 1 + 5 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 tests/f_full_bg/expect.1 create mode 100644 tests/f_full_bg/expect.2 create mode 100644 tests/f_full_bg/image.gz create mode 100644 tests/f_full_bg/name diff --git a/lib/ext2fs/check_desc.c b/lib/ext2fs/check_desc.c index 3150d3e..146f9e5 100644 --- a/lib/ext2fs/check_desc.c +++ b/lib/ext2fs/check_desc.c @@ -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 index 0000000..00819bf --- /dev/null +++ b/tests/f_full_bg/expect.1 @@ -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 index 0000000..00819bf --- /dev/null +++ b/tests/f_full_bg/expect.2 @@ -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 index 0000000000000000000000000000000000000000..9be419d1a87344b98cfbad8373d1c6567428d2ab GIT binary patch literal 1860 zcmd6n|1;Zn9LJgM>dQK3z7-SHT1D0EP?a=IuRULOs;WXY8lz}@X;>$!Vrgn?8%-#i zVL03+a#Mtwq}p`KHeYsCb)OQS%m7YLLHc(9rWRgGH(>FEj(cGRmT5^-`-F;>&q+TI`|PfK zo*Vv_A844A-6%Rh@hIv~#5j`a88@-7RwzGmROUkSOYb|%D)=!%kc5M!BSi5akpYu_7&}N@3RaaKp<2QcK3?8c8xTl}^_3f)9 zUAAtMa^d2^gkb)?6zTQVM9FWf-(KjB#2C60wOwYuRE63kne3jvUfesIFKl|_U{xO_ zVTUYuY;wfWFG=;17uznPs5SFcDqUY9O9Pdna(W@{1Jw^y$vCvgph!pRbASbav<`Mi zdX4TR#UD0g3jiFUR|M+9e%OFVz2ndu`wze2_H<L@BYkxB!Ih9M@bnui;tSHs}?1gTzg1HfDkPy)b$UgBkaNpu$!Mo`dE zDhn9Ip=*DE0Hx=^F#&SgLxu$tP-_vmBX|JEe?b@;3Y`qL8KADgP5of6tQ~f$kbe)f zAU72<2tb2q?+B>KB<)P=sz!1;>_9I3jEGLd=fG zc}`Y4H{Gf;VqW6RY?A!1XDnaKiJ)#RIW4tVB@eG0^U!@$LTtAjHo(s$ZS_t$z3 z$$_n^qW=5Dp}AAf&enVKG+{#o>m}vo)hnxCGVoeoyd}$qg=1N;>{v?HE`uHV#H^i` zSO{fsBBfn25)9Ti;Q6=WDU_Rc|_$zV~pN^T9SIa`z z^ufY5w)34vZ^M_Qc>N6>d?x+}-DUi5)HYv7iT6_MMBJ9U(Y7mHu4k;$`43X)3_63# zV2$8Jyo`d3LOfrCg+A|*;)<$EUW=-fr_;ow;QV?iFjrGX&zmwGqq z(oTerIM8{E#kc}oA&#r%a|GKd&T<^_Q=&c5hKN%YTn+jjv&2fVNNgB8vwBMGDR)%e zxh+nOLQs