From 8e203507b36b3feacbda2c203401e161e4c2e1f2 Mon Sep 17 00:00:00 2001 From: "Darrick J. Wong" Date: Sat, 2 Aug 2014 23:48:58 -0400 Subject: [PATCH] tests: add tests for directory entry blocks with checksum errors Add some regression tests to examine how e2fsck handles directory entry blocks and htree blocks with (a) malformed directory entries; (b) incorrect checksums; or (c) obviously garbage entries. Signed-off-by: Darrick J. Wong Signed-off-by: Theodore Ts'o --- tests/f_dir_bad_csum/expect.1 | 62 ++++++++++++++++++++++++++++++++ tests/f_dir_bad_csum/expect.2 | 7 ++++ tests/f_dir_bad_csum/image.gz | Bin 0 -> 3499 bytes tests/f_dir_bad_csum/name | 1 + tests/f_htree_bad_csum/expect.1 | 28 +++++++++++++++ tests/f_htree_bad_csum/expect.2 | 7 ++++ tests/f_htree_bad_csum/image.gz | Bin 0 -> 5462 bytes tests/f_htree_bad_csum/name | 1 + 8 files changed, 106 insertions(+) create mode 100644 tests/f_dir_bad_csum/expect.1 create mode 100644 tests/f_dir_bad_csum/expect.2 create mode 100644 tests/f_dir_bad_csum/image.gz create mode 100644 tests/f_dir_bad_csum/name create mode 100644 tests/f_htree_bad_csum/expect.1 create mode 100644 tests/f_htree_bad_csum/expect.2 create mode 100644 tests/f_htree_bad_csum/image.gz create mode 100644 tests/f_htree_bad_csum/name diff --git a/tests/f_dir_bad_csum/expect.1 b/tests/f_dir_bad_csum/expect.1 new file mode 100644 index 00000000..bbcbfcb3 --- /dev/null +++ b/tests/f_dir_bad_csum/expect.1 @@ -0,0 +1,62 @@ +Pass 1: Checking inodes, blocks, and sizes +Pass 2: Checking directory structure +Directory inode 12, block #0, offset 12: directory passes checks but fails checksum. +Fix? yes + +Directory inode 13, block #0, offset 0: directory has no checksum. +Fix? yes + +Directory inode 13, block #0, offset 1012: directory passes checks but fails checksum. +Fix? yes + +Directory inode 14, block #0, offset 0: directory has no checksum. +Fix? yes + +Directory inode 14, block #0, offset 12: directory passes checks but fails checksum. +Fix? yes + +Directory inode 15, block #0, offset 0: directory has no checksum. +Fix? yes + +Directory inode 15, block #0, offset 1000: directory corrupted +Salvage? yes + +Directory inode 16, block #0, offset 0: directory has no checksum. +Fix? yes + +Directory inode 16, block #0, offset 12: directory corrupted +Salvage? yes + +Directory inode 17, block #0, offset 0: directory has no checksum. +Fix? yes + +Directory inode 17, block #0, offset 0: directory corrupted +Salvage? yes + +Missing '.' in directory inode 17. +Fix? yes + +Setting filetype for entry '.' in ??? (17) to 2. +Missing '..' in directory inode 17. +Fix? yes + +Setting filetype for entry '..' in ??? (17) to 2. +Entry 'file' in ??? (18) has invalid inode #: 4294967295. +Clear? yes + +Pass 3: Checking directory connectivity +'..' in /6 (17) is (0), should be / (2). +Fix? yes + +Pass 3A: Optimizing directories +Pass 4: Checking reference counts +Unattached inode 19 +Connect to /lost+found? yes + +Inode 19 ref count is 2, should be 1. Fix? yes + +Pass 5: Checking group summary information + +test_filesys: ***** FILE SYSTEM WAS MODIFIED ***** +test_filesys: 19/128 files (5.3% non-contiguous), 1098/2048 blocks +Exit status is 1 diff --git a/tests/f_dir_bad_csum/expect.2 b/tests/f_dir_bad_csum/expect.2 new file mode 100644 index 00000000..f5a3e5fa --- /dev/null +++ b/tests/f_dir_bad_csum/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: 19/128 files (5.3% non-contiguous), 1098/2048 blocks +Exit status is 0 diff --git a/tests/f_dir_bad_csum/image.gz b/tests/f_dir_bad_csum/image.gz new file mode 100644 index 0000000000000000000000000000000000000000..4b581876f07c1ec989ef85977dc53741b6356130 GIT binary patch literal 3499 zcmeH{=~Gi@6vk27(kdFKSc$SkIw-aXxQv2^a1}bGE)Yjh6dD;>6j>4=KvWDDi-5`! z8Y+vTSBrqC5DN$rC8;2bS_#Xr3AwQ($exgd?BTwpAN>~`&dmAnd^mIF{GM|TA?s_C zzRd%E%S~s6!4VXOjmeydq^b7ltvdixr?&)}SAOSxyteo_@$}SGIsL{3&G%79X4VCq z+t3_nu=fe*Hw!nd#5LdjZG{E0_UETRJlhfF5bnl2sa|8|k!>EnYHPmF{_62UI+;PI zbDGw?rd))OxoKHRKAkSr6dFk53}14J!xwk`eA-~HC*J3gvUN>c5BJFP=G@1xRCh#s zD7>PAkO%&6=;`UIPV>Ws%45obDo*Ff?c*++?W~>CV;c=Li`F!QS&BYC03=9Q{7W2+ zIkG)zeo#?5NvXO2=!|~8%ZetmL80xcH}$nH6d}Fp$TNp|`yow;wNTl5z8mF7XcT&FF@c7t|VKK{R=M{a!F44Zztn%;(JJ8Mj1MesII%6zxBDOyM_S7l5kSi6RWCh9x$a`G)IWGjXu+~V|pc2=$qzPO4+YkFAC ziC@%%3!Xvu8;$xoKF{?D&l!lep3&h(Msxrv9rtaWWL$r5y4MMiVew_Lf*^r5f@L~f z2fPn6RS@z(s?kgWJ<%&b504DoZdZBaaQ`5;@!NueH0*STaM$y>jQvr~Q~vKjQA?Dk zddu7y_9a5zhU#L}h$T#7H^;no^#(Lz$b!hO4TBtw8BFl#W(zl3P->25>Y>4)xk&27RcJucg|;TjLCW z6%;!rVl*Q(A;I8MIT-!YP#jXZ?V`3LRLzd1UjqPQm+UDLAnS{q$HU9e7Ac17)RD7^ z>Lx+33?waPbxaQs*8CF#&IHT=6k8Y+2@FQZA#7G%cy=$*Ov8M!AbY9hcNMn-H%u0m zbaiFvIn{8;*W!E944%!&Yttme)++RejDuzF0Vhsy)aP&Tsm#QW(mF0%>c6^h1M2#$ z!zR?5uTK9;0{!w>$&QZH4i--yusuR$T$v_rCzN?B??cSsut$$e=@O0y2s#TgC z+_Nx%offQLCvJeQ-*xbq@NF$~(bgRx*ey;P_)Z7+=yl-lTE^@IxP1HzlhnS~3$PRf zos)v;87+%8Iip3a&Vl5jY;r0}`O!%TEZ0eyfw>&v2g8_G9MEVk>&0Ey+X;HlQf=+6 z_8MYG0Zbb_N(S57;J1SJ>tP}@Dd6ll7>O{5TFM5&knjO0yb|O!I}XPI2XrMbv60z1 zFggx?ZM=B0@U+LIc*hcJviN~_MTt051Lj8~IFqb+! zF!dP)U6Xj=&Eo}%`3;hqA$GBkq&?|3svMD*QUz%a+sw zZ*S(2aLyj8L`opHx5gt(kSxqA$gxXC94l8Xe%$TAv0+xLxtWuw1G&b`TsKT`*ggJUgEKfQff9bgf-h(k z(ZLiflWolO?Esd(CC|$@-KED=6EV$|87+acs&nn3^zIgK+unn*N*mzK-f7m}){e_T eCi*vijx?8MS|ae75~%BgmvwK;FEcUOX!0LSB4$+p literal 0 HcmV?d00001 diff --git a/tests/f_dir_bad_csum/name b/tests/f_dir_bad_csum/name new file mode 100644 index 00000000..140ae45b --- /dev/null +++ b/tests/f_dir_bad_csum/name @@ -0,0 +1 @@ +dir block w/ missing/bad csum, no tail, or dir block corruption (metadata_csum) diff --git a/tests/f_htree_bad_csum/expect.1 b/tests/f_htree_bad_csum/expect.1 new file mode 100644 index 00000000..258362b3 --- /dev/null +++ b/tests/f_htree_bad_csum/expect.1 @@ -0,0 +1,28 @@ +Pass 1: Checking inodes, blocks, and sizes +Pass 2: Checking directory structure +Problem in HTREE directory inode 12: root node fails checksum. +Clear HTree index? yes + +Problem in HTREE directory inode 18: root node fails checksum. +Clear HTree index? yes + +Directory inode 24, block #0, offset 1020: directory corrupted +Salvage? yes + +Problem in HTREE directory inode 24: root node fails checksum. +Clear HTree index? yes + +Problem in HTREE directory inode 30: root node fails checksum. +Clear HTree index? yes + +Problem in HTREE directory inode 36: root node fails checksum. +Clear HTree index? yes + +Pass 3: Checking directory connectivity +Pass 3A: Optimizing directories +Pass 4: Checking reference counts +Pass 5: Checking group summary information + +test_filesys: ***** FILE SYSTEM WAS MODIFIED ***** +test_filesys: 47/128 files (2.1% non-contiguous), 1108/2048 blocks +Exit status is 1 diff --git a/tests/f_htree_bad_csum/expect.2 b/tests/f_htree_bad_csum/expect.2 new file mode 100644 index 00000000..7e3523bb --- /dev/null +++ b/tests/f_htree_bad_csum/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: 47/128 files (2.1% non-contiguous), 1108/2048 blocks +Exit status is 0 diff --git a/tests/f_htree_bad_csum/image.gz b/tests/f_htree_bad_csum/image.gz new file mode 100644 index 0000000000000000000000000000000000000000..def571c7900f39bf236a52f0086fccb54049c8c2 GIT binary patch literal 5462 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 literal 0 HcmV?d00001 diff --git a/tests/f_htree_bad_csum/name b/tests/f_htree_bad_csum/name new file mode 100644 index 00000000..ebfc3eaa --- /dev/null +++ b/tests/f_htree_bad_csum/name @@ -0,0 +1 @@ +htree block w/ missing/bad csum, bad protective dirent, or htree index corruption (metadata_csum)