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 000000000..bbcbfcb31 --- /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 000000000..f5a3e5fa6 --- /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 zc-rmM=~Gi@6bA4pZLx~RDOOThA{~@k1YAZzL%0f^QWuCLC<={?EQ%}%5FlC%7mI+( z5*jLtqE|}+Q6Ux(BuY|27PS(VVJqaOB|-LtBxDcwE&bRJ{R7(JH*-Fpnddokh}o-f z{aXk9SDMXutgZ3wt3L$NX1)lrsQT3BWL?Qg(%I?h3dYS#+Rvkp&29|5 zu&E`;=-?YTU>;#sg>Sj{{c1~O!`Dx@J=+!S7~#%3tyypGnPU;Lc6)*E!J3I828GFB zaGTe^rhW$@^E2|&0tQ2-Ei#fPn0}O0#}DrL`?kY8FM{tQRonXZUf!|iEqRY$sqc#S zQTfG%p$`JyFfuaKT^2`+R3}t})!eSpJ11SY+S|Bf#5Eb|mTl=q^Hf7YAV`$51(&%P zYjkJw!jQ6Tidy^gqjQFZZfm;S7KL`I-!#;@QbmmFW6vBH9EP=_HX>Eqv4^Ljs!SvR zPJn~xdoP$^3}tU?(qhHduumGKYV494I{kv z)Hj-;MX%tWn@omz0pINj-vx-bpVQ++HxB~c1(1}pUV zPWS+3rX=QrG?Td$dSXz5UOol5->LS@<^4!$7qkZlYdIN?5pEarm6P7rI-5U4a(-$07A!*<}^{5XiuWg{&P1-1l`}^NVRYJ)FLaU{C zrpwbhDDR+s8~wWW&bZ~+T%6>fmXB$4mdkUgcD`#W;f%6xarSDn6X`7CDz*BUi@XvC zM#Wk;p1C+p$}ME#v!0MIzpt(llhtu&#x!Bgy$XcVNIK!HRyg{O2?T9A1nYk-$}MEu zT~i2WFD;Bb_q2J79Ld@$F)38R~!Nht=GDZto=#*)yg9pC9X!!(>Y#&rN7PU*g4A@W(V%S1#u+A72FU3y9m zNz*J0k%Q!=sfq0cqT1hL!MVU$fMSb7VxiIGG>pw@iq7vRnQK`u7UeH>g6@(I;Eu_| zldr8QyPzHkT_w3M%jDahzCJ@n?5xAKWgaf~2t0L)tGRenKw~Anm(}w)vVe6(n^3oB zowi{*PsW#)-mTM!IhIA;L`eEFTyeq zd_e|gW_4`()T|D%z5r5+b0}#j^-E_Fu-YhN1?6!?e;CKTKY6$9m|jdrbG#V&*f{- z*do;@jl`M$^}s4P2OKESAwwG^h$v1zfI`y07dY7p6i^O0Yr^CHRT`)!Y_z*#MLYEN zRz4Z;;;Bxe2J!l8J;Q}5qWr>K`xG=jr1LJ*0=I10vj4ko8hK55zC}e6r_e3?&@T4} z)IYWgje|~AYnMLmPTn0UtuAaw91$eDwf4D zW%+diE5Fj`6?`ZG9=OU8>o0qd+ Uw(LKnz8_xEv!kFKhue(%3rr$rRR910 literal 0 Hc-jL100001 diff --git a/tests/f_dir_bad_csum/name b/tests/f_dir_bad_csum/name new file mode 100644 index 000000000..140ae45bd --- /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 000000000..258362b34 --- /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 000000000..7e3523bb4 --- /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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 my0q1Y5gmNtzx*#u0D~WlFCU$kif=GAVIQ9