lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Fri,  2 Mar 2018 16:59:23 -0800
From:   Eric Biggers <ebiggers3@...il.com>
To:     linux-ext4@...r.kernel.org
Cc:     Eric Biggers <ebiggers@...gle.com>
Subject: [PATCH 10/10] tests: test e2fsck of bad symlinks

From: Eric Biggers <ebiggers@...gle.com>

Add a test which verifies that e2fsck will detect a variety of bad
symlinks, both fast and slow, and with several combinations of
filesystem features including extents, encryption, and inline_data.
There was already a similar test (f_badsymlinks), but it's an old test
that doesn't use any of these newer filesystem features.

Signed-off-by: Eric Biggers <ebiggers@...gle.com>
---
 tests/f_badsymlinks2/expect.1   | 114 ++++++++++++++++++++++++++++
 tests/f_badsymlinks2/expect.2   |   7 ++
 tests/f_badsymlinks2/image.gz   | Bin 0 -> 14302 bytes
 tests/f_badsymlinks2/mkimage.sh | 127 ++++++++++++++++++++++++++++++++
 tests/f_badsymlinks2/name       |   1 +
 5 files changed, 249 insertions(+)
 create mode 100644 tests/f_badsymlinks2/expect.1
 create mode 100644 tests/f_badsymlinks2/expect.2
 create mode 100644 tests/f_badsymlinks2/image.gz
 create mode 100755 tests/f_badsymlinks2/mkimage.sh
 create mode 100644 tests/f_badsymlinks2/name

diff --git a/tests/f_badsymlinks2/expect.1 b/tests/f_badsymlinks2/expect.1
new file mode 100644
index 00000000..939edce9
--- /dev/null
+++ b/tests/f_badsymlinks2/expect.1
@@ -0,0 +1,114 @@
+Pass 1: Checking inodes, blocks, and sizes
+Pass 2: Checking directory structure
+Symlink /default/empty (inode #13) is invalid.
+Clear? yes
+
+Symlink /default/fast_isize_too_small (inode #15) is invalid.
+Clear? yes
+
+Symlink /default/fast_isize_too_large (inode #16) is invalid.
+Clear? yes
+
+Symlink /default/slow_isize_too_small (inode #19) is invalid.
+Clear? yes
+
+Symlink /default/slow_isize_too_large (inode #20) is invalid.
+Clear? yes
+
+Symlink /default/one_too_long (inode #22) is invalid.
+Clear? yes
+
+Symlink /default/too_long (inode #23) is invalid.
+Clear? yes
+
+Symlink /encrypted/empty (inode #25) is invalid.
+Clear? yes
+
+Symlink /encrypted/fast_isize_too_large (inode #28) is invalid.
+Clear? yes
+
+Symlink /encrypted/fast_isize_too_small (inode #27) is invalid.
+Clear? yes
+
+Symlink /encrypted/one_too_long (inode #34) is invalid.
+Clear? yes
+
+Symlink /encrypted/slow_isize_too_large (inode #32) is invalid.
+Clear? yes
+
+Symlink /encrypted/slow_isize_too_small (inode #31) is invalid.
+Clear? yes
+
+Symlink /encrypted/too_long (inode #35) is invalid.
+Clear? yes
+
+Symlink /extents/empty (inode #38) is invalid.
+Clear? yes
+
+Symlink /extents/fast_isize_too_small (inode #40) is invalid.
+Clear? yes
+
+Symlink /extents/fast_isize_too_large (inode #41) is invalid.
+Clear? yes
+
+Symlink /extents/slow_isize_too_small (inode #44) is invalid.
+Clear? yes
+
+Symlink /extents/slow_isize_too_large (inode #45) is invalid.
+Clear? yes
+
+Symlink /extents/one_too_long (inode #47) is invalid.
+Clear? yes
+
+Symlink /extents/too_long (inode #48) is invalid.
+Clear? yes
+
+Symlink /extents_encrypted/empty (inode #50) is invalid.
+Clear? yes
+
+Symlink /extents_encrypted/fast_isize_too_large (inode #53) is invalid.
+Clear? yes
+
+Symlink /extents_encrypted/fast_isize_too_small (inode #52) is invalid.
+Clear? yes
+
+Symlink /extents_encrypted/one_too_long (inode #59) is invalid.
+Clear? yes
+
+Symlink /extents_encrypted/slow_isize_too_large (inode #57) is invalid.
+Clear? yes
+
+Symlink /extents_encrypted/slow_isize_too_small (inode #56) is invalid.
+Clear? yes
+
+Symlink /extents_encrypted/too_long (inode #60) is invalid.
+Clear? yes
+
+Symlink /inline_data/empty (inode #63) is invalid.
+Clear? yes
+
+Symlink /inline_data/fast_isize_too_small (inode #65) is invalid.
+Clear? yes
+
+Symlink /inline_data/fast_isize_too_large (inode #66) is invalid.
+Clear? yes
+
+Symlink /inline_data/slow_isize_too_small (inode #69) is invalid.
+Clear? yes
+
+Symlink /inline_data/slow_isize_too_large (inode #70) is invalid.
+Clear? yes
+
+Symlink /inline_data/one_too_long (inode #72) is invalid.
+Clear? yes
+
+Symlink /inline_data/too_long (inode #73) is invalid.
+Clear? yes
+
+Pass 3: Checking directory connectivity
+Pass 4: Checking reference counts
+Pass 5: Checking group summary information
+
+test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
+test_filesys: 36/80 files (0.0% non-contiguous), 31/150 blocks
+Exit status is 1
diff --git a/tests/f_badsymlinks2/expect.2 b/tests/f_badsymlinks2/expect.2
new file mode 100644
index 00000000..3da98a87
--- /dev/null
+++ b/tests/f_badsymlinks2/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: 36/80 files (0.0% non-contiguous), 31/150 blocks
+Exit status is 0
diff --git a/tests/f_badsymlinks2/image.gz b/tests/f_badsymlinks2/image.gz
new file mode 100644
index 0000000000000000000000000000000000000000..d1f314ced5f639e635848b879b7dd248ec5ecade
GIT binary patch
literal 14302
zcmeIZ^+TIY(=d8hsZm<AcqzrLxRVxl3KX~E?k*v1DQ?9biaROpq(E^9?ydm>1cwm&
z+WWrW=XuZh1J3u$$q!d{XJ=<;W@...n%#>w^1*|L2Wk4Z@7Ow;T3h~gkcB6f1gHHO
zs~*!XXGx;Ml9!dY_~w-@3(w#%4LQyt`IT*H7_kCHVwinWS`DwHU=3@...YNJ;qFFp
zwUen??B3FdLR}&+&a%6a$PUEjNtF9js;7T_!m%#sQuTeg_gIr%H`Ljh>S^Xx=-ZsW
z1(F8xdo+T4bqyJ}`aX3$6=jql?RK%El}HUOEL?da#K;aIF*2);kaCBm)%)Rh2$&Io
zLg03}!@(P;`Z1rM4q=6wy8}dS0);~msHIIgx^Rs7i}eoW5R*m~?l+q*ZId{8b(khg
z%rlVpbR*Bpdw~;w{r$s|f9IB<$l)dG#Z}CSeIi$V^bh>c6K(bczn%65eck@...*yb
zL8y$SZ16vZ-GbizFBDz&><TjuHwiy6@...Wk{kfC)xeHcnBCYuEbtT2)t=`#fI@-&
zzTXIAUQ?T>;SIzKd+V=jUmw&*oFyBm5NCZohXZmMf`qMJ<l<0NySTqT1zO~v#GcOf
zf}%{&4mIl%ZQ#d!$3DAqF`&SmQGhEtbbli>Xjkn3_l;MOgx`=6E)#bOAm;3hH5-pU
zusR2RS8jyiWPwc$CUBg>#p0@...rjl4Xh*8h|#aN7wSdDfYWZ=;SFdHEGZM6b{lFS
zf5TOUdQl=Vh!eua2KYx`ZJ!t@...wDKfbzO7Rw`!xo2|#;jq-a$AWtXZXN!I2(HWd
z6ldkadv$)3a7s|7^O5c!T(ao3Sllq+YXrq4JFl1ma&(BZi|Ed@...4Ef%uv>Kd+Y<
z1s{?}a#64isXqBYYw35>s=fvai=ZH~D0`(~41xt^{(5N$VxOD@...tiOj+#=MR`M#
z5<!zY3QPYAK!J-p1N`RRK(^`5YZM@...P3h4d8bdNLEf8PMy_`J>`I}*a97S`}e?A
zo1mo>IHV$H^xcnymy(wFn-xX+8rWYKCdB<FM>WHBYB`;Aoj=QzujLbkvafq@o;(?D
zDnE;S<W1Gc8sC-UI#fvu>M5*}(By0JrE^6CHV`0maokVyl#0>-p8R^}_GelCGRdbm
zzJmOI3P>d#<?1=$0a}vyw?^wuSL2^&JYO{`e@...8dUbc`|c?$|7Q-KpeTFwJC?Sz
z&&Y^x{$n|J)R@...%rC>nUKsrGX~<X@...IBw%&%!t8Sy)6ud_7B9AlNxDA<2e|Pr
zx<N*G-KX{d79supFNSUn!i%ZBpE1G!n3XgJ=J&uv+ikG<2iH@...Db@...Bf?JAJ$
zgKJzqq=_)$%L-9u#oWVSs9Q*ZO5!X?LcAyG;3CCbKjMoErdpW|M~QKtN`bM_P%IVX
zj{+F&AD)^h+o5?6MwMi6eI^~j37Md*v4Pe1-*1>FD=@3g<`hi)L++UC1Zv>IG>Z8G
zmfr=j0`@A@...2`xe<TG5)9Rys(Avr%Gtn~;R(w>8iaR@$>&dSKLGrYZ<Nu43<C|g
zhAtB32Zyx3F>}mBPmZVV(&xKAHU6SW^KkT)D3<n;?0c8Vn7mqw1Fq30o#K%sF7&s0
z&b*;4`wz@@CODos`i5{(N_n9H2VC;O0I)xj+6_BBA-w;OHgIoJc@...W0QEN`hr7d
zFctd0Y36l7%4)f@...p}!tgI+IMXz3Y<=UeA}w2p>C>twbCa`V403<dR1U^D?NR$#
zfI-XI)65TM|1b*Toi>+%ecmC-dU&gpNyv%!`7G|lVg^^5cE_XGTR84aPCXaWL-of1
z&uHVZK3@...$04L<iz#i+{7~<1!Gm{wz>2@...gY;uHz~I06(j&#a4+4nX8NoJu2;
z3ed|A?Bd~{_w&)Q2DsubKvz@...mUmX|*8t?@...Vn0;iltksN5*%<34S;_TmDND{
z2+*&dOfAN3u5hk7m46&;(hrya&Prkc1CEFJVSl|m2kHKf0(%$&u}+*l2B)hy3#e5_
z#G{d5-{zDTUvvIAp9xA7)2FU0Wzwhl%>p(0<iX4Pxft``UhK5G$E9c*J*n_zQ=tK8
zGl2Q^vhGiZoO5hnKh}(R#%6XahH)NyM<Xcgoel1vkz(U8JuDTj0a<I38raK9^QVOW
zgoJ`Cfb3<;cMpuSLp>|QrU~)a)!#kf*R*nWxI1d8s2}Y&*b@...3nr2ILHy`fz4rL
z{xsUT-^ac!y)oI(@3Wa1I;3NAwFb8?u7FU)MWh6l=>@0UuVDd0%q%GfU^ti57h=Ov
zVM>yJ)bl&y4lR9gJ4Kl|&Kdgta17qn9J~TV5i=@...^AXU~Qy~zkQz49fU8+uk#Eb
z4X!zwWB!B?ZLHrZh$<<)jHp)Gsds02b2j*W2aZmR?)-dPD~t4o-<`7_Vfih;t>ct6
zj@...wumVF{wLNZ;il`>5=gTmukrnj1lyyx5{m+G-H;(O;L_*XB3YUsHQH;v<>EF8
zO=#=ennRPt9dF{Vmw$Z!ahs1j4>-ZVya@...*uD0fV{xPp+K~c;P5tYF|`KFsHLjh
z-}+6$oeuJy)r%<*GMER7YFG)*BvXJCnMxx#;>-Jy)+X#~a(~N?6E+^Eb4$P=pG<*;
zwg=UsUP5r(H4xh13zVXPWj`{5N?=I(AIv4yS*#F2_;i(93fDQY7ze{2Oh946xkhuA
zxCIK(*vbB{W2YpF>O~RcF!-{cUI%4+Wz%o{nbB1#Q%oB#DzhJnb9&}Rbno{nQi*1}
zd$c6aPdr4Gw4uQVE&G*>{$ntSoEq26S+jJD*p#8I?|+-pAOuu?&|9<dmh6_Jx8?oy
zU8cW@...0yG3$Z9I-qj0Ga|o?VgE#{%&A-WcP#Bw$Rrl<l}LA_)oZbk*sdGSMuIFx
znA+dw|2tX(kEB*|CS=mB<%Aw7AbCY;x1@...77!Vp4t@@E$9m8ilVjBe@>==Wcp{-
z%Tb2GaJ=u=)JCv)t!p84@...Re7yg4JCrN=w{yr1j~VeF*j_vCof2r%UFl37xjDiv
zOB8f`HC?TYzz_^#AV8dyh#8VX1KV=(i2aZ60oE^QU!#3X&UH?7*;L&y^uE*29&<my
z&?W<Lm{D{}t*P0813Lc-V6$gZZ@...0s;naR{UA{uoEV6$K#34$HnLV^iYt^-l!w}
zp!^`tt%95KZ$9>7cK{}5OpRD-c~i>ASw!FDYj9Fv6!}w0oE&Tx7XU=d{nmp@...ok
ziozub4{O16KNr`{(|!f$==;-v5r5~H7zI*))(h|mz!3et9U^;oNAoGwoz19NT3#M#
z>dAV$@m&{(s2ML+D36twsDp}x7(qH-Uzd%UomE@...$GO_0YO5xr$?>aLb}-hFOlJ
zPt_;p7~G^|cFs|j5c;CX30l+uRTVmaC1^>-buxE+))&_&Ng;TIxB_1K*sR)-3yS6!
zR@...mafNUlHU5ycIzkCJ(S4~4%`eF#{C!i*LBa@...d0{q@...Nzz`?cn}b<$o8^
z%0ezCAROo%&&S6lUsu`jAZxigw)sJy4=JxXleHA3l7SPIUk>OqL0__JGLDzuqoJ19
zqlUYoVF!5woav3(DQYtji>anuJ+4lu&tmg4#IA!GsBqh^_c{V;*In;He5lL?>8Nf{
z_o&#t8oF~VtnE3YoHl!FpT(~4-}w(KI1=eUeBijhqI`5!4Gp+kGY7<qYUvD=>1{zc
z-2<=32bYC~g%a>zzl38-L!yzj28SC$2baEcONOeY%8Kmp@...aBx@?M;U@...!HOu
zkK2H|nOcp|{K_w-f?RT;O<cNq)Hxa~0*2Nws}N61LyFL+A9V4SeBv|dVwR7hm$QXY
zA3U8S`!L_}CFF?Z1S{iTRJohatJBRCt;nGV%-EDBIWn%QO#K;!4Xw?$*6b#IJR9y1
z35r$glxEOod5*b@J;hW?(j?azkvzOJuE?SxVt$}3l-!>7#t<;!XrwBSAL-I%m$Qg8
zWaTaRvAEdmqg!xhe$5J{1_Dem_By0Ntha2q|D%$hkT@...&a8HuX5lb{@@n+c*7S{
zO-haN$NZ|R;1s{0>1i{Z4ytzz>=^iTf3x1+uJPQy>CV;xT%@...Z)9<6dy|aA8LQ0
zMR#zp`#nNeeM5FvnK8$WSMu%cD}#GKpMNH5?lXx78;v*2FxBDiYyM=QYhYNiE!*=Z
zOD@...|{<Q2AW8{tEc*ZkfVIlX|yoPu{Tt26_@...Xybf{aBTYbG1N6U@...2d9AM
z;Jf0cLk*R%gW<)v6CJfa=ki$ZG6iN`w<6dt?j@C@@r2RPDgjMWFE6$VDzLWBYJi^R
zVxUoY8N7fb24k=xG~rR?0~>M>y9FcvuN;9#=+zE093TG48|3TSPt^nU)6`cr2C7M;
za|LFGDZ6Y5<38NZPoX}sn;n39&LY;fOBFj+2UUR$3W!p{Aie1kes7DdaOgIUIL`Ow
z;k1njTXjptgdlKG=@...9jSQDi>~h)-sIE*1fM<m@3?@...NxY_<^iqPcL+mJL;JU
zr&IcAclCtjSkjRnKCG7BQxg+3R((8ZX58s{rK>+W_#;!UY_kI9-iM-ft5AKi4o&<K
zp$<09$Qp727YRXZHnkgB1O$CHX&+K+Ju%Akh0lCBm>YO_y7P{+KEYV02V>j~g&D8T
z`p&MX?Mlu~Oc4ben{i~c2Q&nS<?IhfZl1Q=!<r`@...pk7jnMkVywDbzO~Bt)Cv^U
z>I3X(T?<+{9GPdn<|8j6?JA#<73~&%iAkO*Rao!o9Mb>VN=)m1<77^v6~In}?sqII
zElfa<R}Y7yjPT8wb|s7{v5>vbBZl`r^KUjsxCv&m$)kcSITmlT<*#_ezMr0L3$AP}
z)6fxJPD_4e^WMl+)_mgD`o{Y!vZk@4S{)t1(ytbeoeeq+rTc%pYy^#Am%b&%EjMeU
zmRT>Xy-K~Ay+c)#TPhbD&X2dR_fb-^(e`!v5eB1I7U!NN<pU@...b7U9HcYEd8~A6
zhtIYvt*W+m=_sZL>y02*n8Vl0jR`3!hCTv)SQWp6O3g+}LBOaFAT*Kzi}@)F3Mi_v
zRz`nR%p1dmAy0XYxH9kuw83@...U4b`j#yUbB(3&{&1=gv{r`ND!6*ZAy;3hpHpwx
zH(D5T(B1pk%umDd5Ij9~7kX5x9W@{z@<KqxxZg4E!@...^CqlDjBO~7U{%;)K~%k3
zttPJ`$LRVeJHL);sUsdy)y^S{V@...!W8f4u8_7N^IqQr?hR`BUl1+Nhk7KXlVxK3
zV=4v37H};*6(FF~RW46a^U&8Ih8McO@PX(%h(6s?vVah>EAu?J5=-?if8{GcdH09%
z&ap&W-M8-3G=~_g^0TVHDvQqEZHF&9wsJnAJuqr@FD)Kr=^!ELiispD)0M5SRRwx%
zBPG4@*Kg<x5lgT~vOD%G)Z2yi10P{T3|Hqu1UeGA_+FZ$Djd)=?k#d2pEb@...#R)
z;V6--=2&VfwELpDg}~KC1$S*}xy6%N$3*XKe^b<&<cF#E-><*)7~FTc9hsB)*dJ26
zg*{8XvmV3m7B{#&8T+~}jKQnm@...fL(i@...Q4J9d&72^EBGl*xNCQN?(c6jQoC=
zUdE~k!YW2rds-L{%1_xksW&ElUJ+p}KU3<ZR}U}T<OBvI$4$dKg&p>SS{lFL+hsMd
zl*9ssC`^hZs!W}4k-^H1YQ@...%B%#jvQH6=m8&as;ri|qrV=S>3Qc}I>u_Xw^%My
zqf0K~!4M-#^W@...s^208YT=q224otsP|Qn^)Uu=KCc!yOm6=;d_cWSHf#lWW;bnk
zkRK4f=QvRmQDL+`+*Ev+i~m^4z`T+(?Cv7pX~d;o$LjI<sMsnzrA>(Ah3Flv1wn?g
z5$*JeOG7B)vk77a5B6d?7OWp`{%{y{&gVCAkY6P?NvL0#V_oVA7gtsq<Z7+5rRNa`
zc(&(hRBERgr))N*=2`3TusR`JH`Z^W`{=d`*zAWt#q5_Tb=pl{QvQP4ePeM5vrXP;
zSnzT+ZCO<hFN;Yu%msKf;^CQ;&*!C8B7Ry!fTBb*40FSWe)J#ft6X#pd-ut?sFG+S
zZ!(*&x|qGwOh{07sWcPrm>jpZUtH<xo+o5*-6eQh!ACXJbCJob;Unid@...rMs>VC
zo1uC<bhAra`$+6cT2TdYaFj_Ivdwre+HLZF0)_ApR}=BJ>q8|09!|F||3ff$lG8|>
z(aYy8-PYl@...d5Rie|pXM|*gSiJ^m)}MgIm&~}hMg#3PFwONX#iAaTv;vv$*A6x~
ztsq5dzSs$=%WTH!G!zMCAL*OR#ZmB?mqe?l*;FZBR_M+RE(a(YyCZ@@38`jqgg=pr
zt7o^243nn}ui+(sE?JXQIBub+kikQq^vdx=UJ1Kn0^vgv{kk&SRpz8uTku)&t0fRx
z#C;S10R+N^#b{vxP?%p1JQEItUaZ1_5;-T~LtE2NshMq0;y<K&7px{*lMY7Hx6=wt
zQyX&y>afffA%3_PIp2Zmq*jG>EXBX3yixW)HEPsoCHE{NOfQaDcHosfYZD_Oeq!l#
zNeL7!x(?d$>rB<7+@...1f8?|K*XB>M135T2M87D_29ee=_w=*hN>_ap8N{2QzH2U
zHmhWrs#tVijn~_1P~ylSvjt$KT>aD2xc6d@bK>U0tXsQY#WySE+RVvth&m{d<zi=)
zX&9fXt)$1kEexGLsO2d*T8gt6yIwx~gmh9PY?vqE<CisTHM2u3J5<Gs$cXK!fOice
zp<6*ANkMFID$1<PtNnp&j?`HuWZhZUx7z@...+hHE5b+dj`0=xq$Jr!9PFlUc5~I5
zBRdKH9zmcHw=1GW^>ym3R$yNu5o3zBA?m{(Ow5352<&fC)84K$wxeR2-Dzy)JKLD`
zL5#|?S)0?kC$*uEt!tKL>8wI0V?QB7UCa8TVM-Zm^_w$?rlprxWf9Iq<>^|=L=m+H
zG#7q+*5v@r<A($KDLe~(SJ6{h7hopivW5>cBx<LW23gOH7|O<tT_&B>_IDPY=~oS^
z7TQmJW{Igo+lONO+3WdIpNa16y9eLF`g?^3-!(ebN>5|Vngi60nZm}UzE~#L7vnwH
z@)H-du|>^z3F{Z6TZxf3HN0xn+SgDY@...6T%;o9q*nhxf9_~_(#xX6u15a)kmXT@
zj_rXwC2(wgeulz+F{(#oHX4s3R`rN{e~j;>@*4HTwX}d>`S7y@...IP-mJ4|hvz$E
z#PG0*HGf%F$5a^uaPgJc`Q`#6iWXY9;`}2Xe}Fk<@WCj)V|?I36?SUQuN-ApA4pVo
z=gK1H;Q8uHArX6x#`CRI+iXD$O+*<Nd_v6PY$z#<RYgs9w%#sGp(sSIqQo;ygbbNy
ztS_gjqg5h&+;uaEh7x!&mRSefK5#Ewu(DNRy^liKK8CTWqB5P>jydPa@`;<@KbvK^
zoL{kktTkjAI^@...yJv~^5Ci5kgCZyO~0&FmRTD=KQdQ=At#Tl^cg28t%qsm&G;*j
zJr~&J9_NJB)yr`b6N(9(U=jk3O1r3ydGMw~#9r$QsIR9^Q_D|WZk4<_ZJU-@...^_
zsKx>PIb?lr<E+lzxXudUr!}T;h3)5%-;ElDf87(-GGCCGx+I1R4c(L0y)tO`gdeh@
zoIKT{qQ$C}zgt^e3vc#d4~^zE1&u|y90CtExUB0WI6L0^8V;AT+pDUn98RWHp2mYO
zm!A&CX_hS~en(WX&(w{zE~@...TAM`p8=#n0n6{j$1Rj2bGu6KvFyVH^cNRBdsqDJ
z`Ny@...q-xdU<K_ICVe=sph*0v{a<;&7Dd08%`@...aq1$Z>Wi>$;ouQr5<edF0^v
ztYx{DY+}T(iWpw4bFx)9wQW&G;JhZb11ehmoZ1d(CS6E!wVH0eh1}cj>T6hKs^Gxq
z!U^QDLKiyFgOivqvrg0P&F;MSdPNIR#1At3>pktCAiveB7$CIePda+`qJhOvvg|z-
z#tt-!ke7|9O~E32--^_7^sY?*Mp}a_)98Z`NOj`L9AoM;6Va-JpWE8`-}2x!awD}#
zRm()}0-9hK#7-AuD7vXGBrL0pwnn6=suCzBf}M&9AUi3-Yq^;T`cfpaTr#Hx8f!8E
z_k`ZM$L5{VYFAmAaj?2kbRs`{W)@JQTx1#8-fg@...p`Y7c|kq`^^%9-m>O;GCryv
zNT597mbG+Mm_8)cvu4+b<RWaeaoQ8}kYSf*Vv@...7gOJYIp2!dPiu76-3F~IW6q9
z_6;AP(?i(I4ylLOr9J#Dn2d&u2stba&#Dc~u>}pbhediv2F6FVp6mp6JY*>u^e3`<
z<z>5*5A&^LCI^Q$@6)ojaW671IU|C!^4znuU-aTj@...y-l*(BnN)e06oIhpCjmz4
z9Ap6|A5ONT%|n9(_w;7?pmWvhorC<0WYJEcjs3w9USfgYsITX}w!@...2uR|?i)J^
zaev%yX^tG#`?}k<@SSIxx9oHu&DWX~PA008gf7zCs;qh=^(>u43>3aK$qgu%E%%Pz
zRiLP;dt0!ryf?5-O7OZdBkZD91Rl_Q=3tCiPyJEYt0%BpxbsL5RzEl^g7ADSc5IOx
z=Ucdztlio5U9eMB>1oqkixYRL$WDBn`^=9EIuR9H>W5z4Zq9)`XJh-(ho@...pXw+
z%QX19QkmAC%9T~55MGQ2YX)#!fyGp^dMB?WKQ}|f!>;a8Hb9<NUwr0JVTq6WL>YFg
zT38J<;~^3FW343TI<HbDQn8+^?V0g0`Yf^_F@3$<ys<4U5ZxA3pBgv(GO2RAh3SdZ
zo%1Rkbb-f54a;ad^o6Y-J;`!0i~gRzOiBeGDCI*sgt-c7p41)Z4J;(P*?;X|vPSzl
z9xe2emDxxLDq#36GtXsCeFFDB5j4@...S8%?DUW`b$$tDwVba0NSIo<J-j1Um4zim
z$?1dO+^p!El~Q_zSBS3VdogFqw<qu=3ST3>!P6E>X8Y6@...3Rw84)bIY~K{E^-iS
zFw^7#BqzCbgtS1V-a(pv6VG8q<*^Qm9cdW942>;8sj7}CVY5<uAauF7q^zpYd@lx1
zEyqLkDz(wj83ohTf%z{BS8ENCIp~`nZ{A?SYq&1I_Q{cD^z%1(Ciz9zuW;Kf%)7aA
zuUBEH{iOPsL4xyhjIV^n0u|K#OLf~O=jhBlX=<K&J>Ef|*RU_$oTJP`C_-+rRA!eS
zjf|2rHkNPgSSi6>l~yt?JeEjR=k%A~K#@...D_7M5L$aSZDdEz#jjGjYT?D6SL3Uk
zW1g71!FvMW8PYx3Jyt=x<WLxZ0-GP`@...WQroS92YX7DV$@...b`4s6m<XEu0m*v
zG_!HS(qp9LL3st<QzAgtA;-Rn-TU{6?JUe?OuajuriBrw-z!=Pc4m>n7wu;?-F%zV
zQ9G)Y5h23DcbrJe#N7x-)S%9#t`|*^f&wWkq*O|>vp_G(_=bU1-0YiokahY?ja)xe
z!hG(P&hn55_u7}5pCvqH){-G`dStm0<4XUM)fHyvIfdpWtFd0C|L=YK=keDlqO5xy
zcG`-U3o?Y5q!A@...&wlW(NIMh8rL(ac>&zruvk|o~NMDaV`EV$@...%t$GSX?a9-
zmf44d3;h;HX3*|_8<M*rzJ90^ivA8@<tZJ1J9V`bDu!WG%&+qQK#-o}l!SCK#7%U4
zUDKUBizd;u4l8bG%{hN?PzA~mJ@...+iOmBnFW(_#fv1-@...qcP6dFhn@...ep<a
z+ddU`Yx6h6%8uu~kE?YI4Sd)bK{4*6HAiZ=IwJ;d>e0>>EOEX1J|n@...7%U&A-1w
zg+HkPB1Mnw=n!O`t<t*a@T)YYLrOeihc*+^i57wuI;N|VAlsgtKgNppWmRw^H_?Rl
zU5+FdZUqxm;CsZ1fzTA6<h7HsgSrB&`{t~0l5zNQOvgSg-_Tb})zxSgrNB+xe8;%Y
zwHf3~xUJVawZ{#Ni(fm2Q7*!D9i!EzghA*jf^eo^SDsJ<C&8aW2HeL3>GXnGavs6M
z?1ZDO#ahoW(NN855`2;S3c<lU{02vQI-VTMX#3LD7T<RfzhC_h*-zaI6eH?LI%rF9
zZhD`t4vi!_rNCQ-_sBj(2e_GsICkiah#@;A4fcy!lt&XDmKp^JmI_+!E#@...v-GN
z613SWsZ|2S&|En{0%R&-%kcf6M@+>IHghfq*Uyu##fH)aAV#ghcQuIq&PD!QU8<#9
z`X?<3@...Kl)MxC6}1cWy+Q()i(^+(B-e-he!K_8{XD+M9SNxj#bEm*?jmLSu0y0l
z(Jyu>iOBaTcgRSngw98=^13lyU5SAJxpUA}7iNPPSNSyjJxXKf5k7Hv)b-}i{;-cp
z0BGdXNc1|~xEmLMxH2vSWnxe(DaM01?NI3woEjI4dK?bkz4~_^>=WqG2#yICd(DcA
zMYA^AV`O$_v5|V8p*m-OErWS(N+A7L`8YGq?^jxvv$%xjFSn3?_d6!I$O#brdHA<j
z$5*4c;fH^xg<j$k{>i{z!?r+wLyk>ku>ULVy5{@|@...Ir2oJ4e_I2`T$ga(bodqS
zj!*<an)-uWQws~kI3G_$Y^9`$zw|&@...c)U5zCJ&!F;inRw|-#eS$V;YB!va<vt=
z2ssmnA%$Qfvnam~XtOb_4T^%^`@...|5xK5<KpJ@...3}LmRy!D(k!C-?{q0Up8Ni
zsP;<xfDhg=Lf98ni(YQa$*0l8EeujOoEDYV$klWeTNFQB7c-R5@...~^Q|$uYdPUI
znU={Z6T{$S9in2CGaRH4$Ya1?RjKdqS{GLSOQW0%Na&7RO*zF+^zg00UHYCjSmog=
z$nYn5u_7e3&+j)^qIa}8bD=sqd0SUbWyl`|3PY_|r?^YoRfYncv=vXOvw-(i^SQj6
z+o+Wy7W87MlEmSs1P7|fF3%)}Dv0ajI_OPRgaQ9aCF;d&s<6hLD8uXhT4Habu`P|8
zM#xG|rg?oupra}Yc`3>qgwS3YEGAEVK=I1S9MQ6<WrSf1=fZUm_t5@(e1Vf0w1}kg
z2m9=f&lF@P(yT~$^&%#ti4b_+%tnqk6fb=<-;k^9^EL5YN1IQ|Ll+zSHQ}_z+|ToD
zt~ESTst|lT{|1fYRUe#AKo%<p@...Xm5;XdM^$!L&<p}l29!YFz1OH&nR0Omhm_bg
z@)jZdTwF%QHwB8N^&d$T<vLphHau*_e*^f(AU@...`XoYX++-!GHBI$Ob51e_<e@2
zGt%E?kD2^neeEP-qvhQgWmoGZeZCDqiVca3dv4H>*XPfYpTGe8z?Mwf$egR1$lVSf
zc}>RbEQDd{Go8)y$0E=(KH9It2QgJ7AKa@...zF;Iy3)0hQc-?aADKLawZ{n<qlJM
zx$p~V2wceYL%3>nU1r2<?3JQ5>h@...t>_!8Y6V#!0(ZqrD_33+5_mdl?U_urqIA@
zpIaR9tJu`{EfsZ7HEO;LZU6eB=16;(kLQH3%HAgbXnY_BRQ`qMe*YgSuT5@...FEu
zYxmWFL6pI9D;CD!5%V_6#Qe<Lv^nR4#<a{8S!iW@...dY)ed*GoSv+*c6W>Px-TDf
zkM4$7Wm1JWT(X58+(}>JJgvC2GfuQ#UR#miy(v1BL)u@Gd>L^RTyf+y5#&?VZ;?@$
zmk?fDPdXpx?N{0jZl})`l&oHN^Lt|MH<Y`9xGFD6<(%3|`I>PPJ<E&Yy4<?9C0*7P
zf~~m}@...Xx+5Z7%gXoc^vDM`x>XXCJ4bTa)b41^Z0x0dZOR_!x8Qk1dathBh>gL^
zs=p-5gZbrZAu4%3a(<`6NX5Z?(jUI5B5gM3q$6^9XQvLI>$QD5p$Ej!-EX^lO0)nf
zL)3O;L@...wI@...ec{+3~~PUTF_*|WS=S}Q$d~2nBLgoIe?N~?wwzDCB2EUXWuJ`
zg37?DRiH>@21(C#OrWO7&R9a3E6cWOWH~8dFTsp;%f75VC##8TMPatN$hH0AIk^4Z
zeKI3hV$S9B(j3-CDYPoi*SqvbM57c+%ZDh<c}DQkO(EX&#2)_D*0S_{p<ecffuuA*
zgW_g}DW&jiMqWmlud2XevEjUzLH!9s__j2X$cXNACr5|J{-#$+38~y%oOP8I4s_Mu
zet++5U<(r&3JG+fEfEplnP2x9N(Ov5+}?QSR&%6B_Z$M3Q#~-vhl%Vg4liT*tac5)
z{jkwyJ`7zX44+?0=C9Yf(~~e-|2UqHSw+W?bVqCDEXBpH0KU62J@...ifw;lt$MYC
zbt;jk5pJl46IU!j_;|0^I&K5a$+my_{af9dz(AMR;f3%xTW5Bw!LW_y;}@...Ld>D
zC#~`d3?^BNJjaXg%B??>@pY$A8wk*fM>tldil1&KGukqrn}Y=bzBAG97$fNiwbB-}
zdtz4N-Hde*9l5?T4motSCVtl*UsAz>e9SK6Yfj}>_1JCO1woHA5(rOf?7e4h#MC+a
z6=nWlzRZULgM^EtET)<B4mNA!&?=X+99f!a$}e?AtH=wd)w(&g0gVjC#Qh_7dYhE7
zINwOych>&aCf6r;gY){2cv&TJXl6ZzG`Z&465w{T*_#&8)M*K6lx+T1iAi>XF8}iP
zN-c-Awl5>;F9$B=c3|%I{*=a*z{W`Rrc8%a?!-AQ@...xuIk|1NOl*`Wpi#WrI6~1
z{mWFD<S91(AZhG0kiZ{ys7<_paI{%bnmgI+`W&$DOd^4{qD@OD>V2BMM?hzhJ!!Av
z;KmaGKBfQuRs@...xi;EYsDEY$(pgpU#mnDH>8-|U9RA+PeDgkergzNWRsMXEzXyJ
zvTK`#Q^<A)lZF==2@...X{jnvk-Dq+b4_P^zskL=(YC__i>2snW(mXJ2nJ_%XE~1+
zPFRLK8d^~^t#}M!i|2+LS3AsKzK=b-nbz*Eu~?2W`r@...O0;vSiM(v!af=xzDlnz
z>Sbw7Q@^><UifXF;>(BAy3ZR1H)CR(p3Mj*$0!<FJ1iPKT)>0K^gob%*nHopW~dwL
z%#z4nY|pevKRN`RC{Sq%z_v0{T^j{<1`i5d?H$y&D2cBO7qjSE1nuu6&iBx(@C#0e
zL&}*f^hlIe7aVo`(kGx(h=qy(cwYs8#Fh8(6<(CYR~cv$J7|KS^%%A7e*`#)E~SO}
zKi2VEQ2PK(d1Any?C01CsyCbTFyKerM+9k>&mQqrpozCF5?l$2*G+8sJXI(TY=i{&
zeY&!*9rQS4uQ%ml=)e;;t(?Uzz3v258T2KmuSZa_oCI|UA%zjYgUDPw(AP38!@n@o
zD*0}pBn6xuShlK&Ac5}*?a^^1BRc_`*AnB%l-@mNw;`VwUl|5c;qNh;<h<O^w+|9I
zIi7hd9tb}!zsu{oL|2iZs_=uebwlyygJ+~ibFCjnr;lz{wZ)IdIS9bYN=kkB6o~WD
z^c(AohHWj#y?1}}xJ1Z0=C%7$xac>w?lm5D`Hvc|h##CrA6t9P+UW!OPG|M313hu<
zuNHSE;9!3D_~8r7vUODJot$Ir_0J!#L~Y!b>8txWx86EpgCv+@...B5vrWy+ml)z@
zPZ)1>FZ25g<U6J99=%E#wzAa!Ze^KOq33<s4K+_8Y;LbKCZgryW)V+r(r~f)XrnA7
zjOkD(*W4`(-$)0pgpm5ngARj0;1DE#2@...Kp6+Wi1hKMH4oWfTT_vP+jZJW)<A19
z6DK3mHD}tyC*jqFg`$&x!{$btN2yFFSU-|X;_<%vy5Q<^zL-kt4<sF<to-X8=A(<f
zDG5novMaIAlQoq>C6V8Ig|0cobpjak#2kvg4=-gde7Xq;%1c$+$?!3meYw5b+{f2^
zb<-;D=-V(iRKp&Z{es+KR@...gXQ%Av(QJo8#VZL!~}h2bh>+er4<{Y%=9g~4)Sii
zQi>4IoIZFAGNVT?@...|C}Nr5_t~@...NO8^F^~i`1^K=1d+9I-rkn@...EwBkdul
zBpl;F>&b@...K`8Q_%!g@...4=9BYSk1)%Wcc1*Qov+>SXQ?;*sJAD|3#?;ADOn|>
zS0@...jxru!diJdR9{}t4LK4Lk<w$z<C)JdpcxD<nP3=@...T0eBYPZvXbHB!nnx3
z$FuGOyit(*DL!{(C2wM9rX;`tZ?&`A?Z_ko4Y7ArOv1EA&9^V#UW^YEWtVlo19F`^
z@...T#PK>J{@gMh(wgg(@?!pGhc$-+Z>>PR@>Oj0r_(cz$U9%*Jq#S5@...!X7NTe
z=n*1iMCE(59l#ECQl4g@...G8nz?dbK05fIsDaDy%=F7*cx>hCN!zE<<NMBBMZVk3
z1#XF4Jre-zOnaUDijn_qj~W7-x^3|Q`4)d5YCQSJij3k8_h^cqr`*yse^AF${OHpg
z9WB{;x2Y-G`9%P5r}a#HgnhcvZk9)2X&-S}^x-11yfx5*s7!ClgfIuDl8#@...15p
zB71k%HB2X+HS9Z|NlFa~--GACa)T@...=>RDFJ_dYp~@...JKxX5L-p!@%;Ez*5#S
zh#~n0LA1X>0hxzRg1*yxygo>M!e+z8cFW2z(~Dd(xQ!WAO(kyjz!hUyntyMmKD;iG
zKKqm}T=h&=39==VVr8_zDiE3El&0c4Rl&3UFhBtKJV)SNmbu&ND|<_WRh|sv4ByPA
z=ZzPwLQnS<iAp`<SCl`tTw-i@...l>?#cfMCEjjkh+amKY`;aFzoiT=7?+wUetPQ6
z%IDR<kpozl*LmkW=;oC(CaokL=r&NWHA4Gjd**KCFYA`zSmvYFsmBSAi_pNDJp;oN
zLHSGrKf_3Ham=^U&Vd_-x4N}GF2V(01FzrNX<3IL0|AF56c1TlDH|NgpY-0&(@evr
zgso#BY7PXb8eIvce1HJ+u}im$sg)2taH{qT>*Y)rVQ7F+-I95yC@...SfzO$sajR9
zw>KBq(h|y@...7$sQ$qqdi>T1bQU(QtA-|2i+JK4KwDkkiV3%^!TYTEbv)T^lxW@O
zVW4+*v8&uJPDo8SCu};M(f1KSo4#6P@^K;lr8$?!?~_)pYu#_ggJuRW0&2FRr#eZu
z1#>)LL48BQ(VBHs@H>-4y$-(8L5p1+pd;>FQZDse@...!a-_Iq+fVNG{lT5W*9Xti
zy4$na(&@...nV>D4Yxk|hK*jh?0?cSrk<!&sSMbB)fYj2s@(!3C889zwk;@nLJ6pS
z>UO0#s$gOVcOES6K#M4T3KnVfcS(O|`*K!>xyHBSjigx>HfZfTN_}IS(%u<h-4lgV
ztV}9pJFc0-=EGHM>JR!ee(r91>n8NHB~43En;TD1So$VN7q)h~)F-zePV26)(CD}d
zONkH_S=u$2oxEFAaZJEG>2<tH%Pftz84y17H+Pm;>aNkuSGdw{I}`2rb;_070vVuE
zegt&ma@...r=b7>_^e0NKJ0ctB))kayIRD%mfD`NH!CzKo_(q9ES<;`kG$`#%(m^-
z644@...^D_+%URa<7xrnS64v7dS+9w;NNGzMLYzXe+9->d4P?CxeN1Dq?0411#1L8
zlzcs!+t5GaH%#PMuCXX(e;8gw&R?S%$&klfTEbkwyqLscTf)aeuL)CDom~BW-2&DI
z1LmBG!hE49?3EY{n66|ln{?Odgo&cV)6%MmF;g9Xb@...pZ2gxNgG{&>8~%LvYl<1
z$x8wuE=E5I4&{;P*O3_~)yjmoIcmL!s~t^*uc5N2lyU{fyn8U8dQULvgq8Q*jM2Sx
z)5N4gooefMw39z2s{#&ffZD{3hPub+C_?jDbLE9SrqkdEsIi2`7R{KU7mI1NT!7wS
z>9z(nqd1M#Lwf@...llu>kk&#G;&rcw4QClQp$PjnQ^dT<ApJZp?uV=Cwn9bO>ujJ
z!Ofk^nusub=B$W%*HOK;zrt2aQBb`E(JtTdlKV2FiH)0MletpI=*Raexo_tQ-mc$c
zf>r|K^;_M{EgE>H;Umhka*<PCoIGV0z78@...U!kl~NO@...m*4|*?sOp}VSpt_(l
zs2934EZ-h0`_MoY*9)yi#?{)HIPYyXC2Tro7OmNj@...64lYv~WS1eCfNE2(<k9K~
ze*jI2*t~~|`1^m2-73smpvdKvR1|@...y!AsQauxp+>XS#;>6RfsEFnB%HHCTr7XR
z(bE-fWDrtk8(Y6d$~OL>x^ekhWSiido{?~V&M|Crl@...nA$Q5hW>71IAPt`-xlEM
zxS~J;U;wqKhGKO`9iA_+892E$ua!hOrCVy0^Rx~}!1k^iLcF^sF16^PwJZ|?1bfY_
zl(Us}kRcW-#QRH+D0tarZgyJ&AYqJ;xgKQW<U0GFMM}PM*t@...Rbba%2RQoiXo;V
zr6wxwTfw-T?fq7rXG;mTt@...+e%S-8TpNU7R;EXXPX)50J6}!6?d_NtPU;TxY2j2
z9UyvKT1a=N(&pyf)THnTM}t(xs~X7zFwF=%Q_fS-xvjE^Lmb{`CEc?@...tw7@}Uh
zL_L-^d74&8VD{5A`cearp%>e-dES}awh*YNnYVw&9S_%Lh)9*)A1bq{)+{z7^b6SH
zw+Bj>R6aHLRUZ;)f3j3w?rPRAI>JzGZyT}8r_ehBtxZx#ImWg;aoFXn@g{O@...uc
z=8}mvyWK9CLKf_yUwuR_+WRDR=6Uk5MhK-}*^3leAUtZ0bki;SfOBNbFhW|%1hMJ0
z+WCcPJXfjpsDkT&V31^9k(6`Q-lVxX#!b1{FRgyJ{y<!GaaXaEcldV5UHP<L*ZL>n
z!(neYIu{LVcu2nFHU{%Y;1iG(3|bHk)BJLBw}1T2$6Tv@...pY%$$7vTTF<-e1rwI
zZ6|B$*y51;v{YsNOh704u7WslTxH(_A734#<!1#A;PAo+-y}?`KYzsEnB{A=r<J08
zVA^qPJ}?)}bZXF_vxV>`xS90Q2}6!lg4KMq5{qbWlxEe7mIu~3bbi(>AX}YTlZO{5
z_O0!Zzr5DY+q!$#<-)QflQUi)8{Ck3=fI<sKXAirPYREgY-+52*?!6cZT2*T5bGo2
z5`#u*YE}D0?lMzQr-}|fd|doOAjQ_iivmi2_+5to*S5Q%j|INTkW#D2s6Xp!B~h}3
zitF1*@...N<OVC*1H|3Ze^YnI(Qwip!G9~)GnI_b9=yIy*4Xtc%l|Yj!@...uJ8%F
z^csVRuTRYi7*VcjsBxEj<Ef}KY4nlGm3Llss&aa3R!VKcAZ)Zv{9tK$n(^!y<Gy3s
zsEJHSh3fJ@k9;mK&A2Hg$=I#8DJ9|TU9>u-zn=rhs3=6zU2V-va||+ZXXRdWB)_CR
zF{gI;Czt)#&nrn3;0Bb%g2AP;09%iw*-yY7SaXSeGOJtmkT+6e858ATlw=MV7mWPW
znMnR=-FoM-EMk?&{eNVMStEGxPx+HG&CS1L|84y1lk;B!FaM|V|N8F;oco`9uy1h$
r|2E?McmMZ==ReR6_qptUTYq8!JOA@dnn@...`e^C@...k{OkV!t(3**

literal 0
HcmV?d00001

diff --git a/tests/f_badsymlinks2/mkimage.sh b/tests/f_badsymlinks2/mkimage.sh
new file mode 100755
index 00000000..6bbf020d
--- /dev/null
+++ b/tests/f_badsymlinks2/mkimage.sh
@@ -0,0 +1,127 @@
+#!/bin/bash
+
+# This is the script that was used to create the image.gz in this directory.
+
+set -e -u
+
+BLOCKSIZE=4096
+
+do_debugfs() {
+	umount mnt
+	debugfs -w "$@" image
+	mount image mnt
+}
+
+do_tune2fs() {
+	umount mnt
+	tune2fs $@ image
+	mount image mnt
+}
+
+symlink() {
+	local len=$1
+	local src=$2
+	local target=$(perl -e 'print "A" x '$len)
+	ln -s $target $src
+	stat -c %i $src
+}
+
+# Overwrite the length in the header of the encrypted symlink target
+set_encrypted_symlink_len() {
+	local ino=$1
+	local len=$2
+
+	echo "zap_block -f <$ino> -p $((len%256)) -o 0 -l 1 0"
+	echo "zap_block -f <$ino> -p $((len/256)) -o 1 -l 1 0"
+}
+
+create_symlinks() {
+	local dir=$1
+	local encrypted=${2:-false}
+	local overhead=0
+	local ino
+
+	if $encrypted; then
+		overhead=2
+	fi
+
+	mkdir -p $dir
+
+	{
+	ino=$(symlink 1 $dir/empty)
+	echo "set_inode_field <$ino> i_size 10"
+	echo "set_inode_field <$ino> block[0] 0"
+
+	symlink 1 $dir/fast_min > /dev/null
+
+	ino=$(symlink 10 $dir/fast_isize_too_small)
+	echo "set_inode_field <$ino> i_size 1"
+
+	ino=$(symlink 10 $dir/fast_isize_too_large)
+	echo "set_inode_field <$ino> i_size 20"
+
+	symlink $((59 - overhead)) $dir/fast_max > /dev/null
+
+	symlink $((60 - overhead)) $dir/slow_min > /dev/null
+
+	ino=$(symlink 100 $dir/slow_isize_too_small)
+	echo "set_inode_field <$ino> i_size 80"
+
+	ino=$(symlink 100 $dir/slow_isize_too_large)
+	echo "set_inode_field <$ino> i_size 120"
+
+	symlink $((BLOCKSIZE - 1 - overhead)) $dir/slow_max > /dev/null
+
+	ino=$(symlink $((BLOCKSIZE - 1 - overhead)) $dir/one_too_long)
+	echo "set_inode_field <$ino> i_size $BLOCKSIZE"
+	echo "zap_block -f <$ino> -p 65 0"
+	if $encrypted; then
+		set_encrypted_symlink_len $ino $((BLOCKSIZE - overhead))
+	fi
+
+	ino=$(symlink $((BLOCKSIZE - 1 - overhead)) $dir/too_long)
+	echo "set_inode_field <$ino> i_size $((BLOCKSIZE + 1000))"
+	echo "zap_block -f <$ino> -p 65 0"
+	if $encrypted; then
+		set_encrypted_symlink_len $ino $((BLOCKSIZE + 1000 - overhead))
+	fi
+
+	} >> debugfs_commands
+	do_debugfs < debugfs_commands
+}
+
+create_encrypted_symlinks() {
+	local dir=$1 link
+
+	mkdir $dir
+	echo | e4crypt add_key $dir
+	create_symlinks $dir true
+
+	# Move symlinks into an unencrypted directory (leaving their targets
+	# encrypted).  This makes the fsck output consistent.
+	mv $dir ${dir}~encrypted
+	mkdir $dir
+	mv ${dir}~encrypted/* $dir
+}
+
+mkdir -p mnt
+umount mnt &> /dev/null || true
+dd if=/dev/zero of=image bs=1024 count=600
+
+mke2fs -O 'encrypt,^extents,^64bit' -b $BLOCKSIZE -I 256 image
+mount image mnt
+
+create_symlinks mnt/default
+create_encrypted_symlinks mnt/encrypted
+
+do_tune2fs -O extents
+create_symlinks mnt/extents
+create_encrypted_symlinks mnt/extents_encrypted
+
+do_debugfs -R 'feature inline_data'
+create_symlinks mnt/inline_data
+
+rm -rf debugfs_commands mnt/*~encrypted
+umount mnt
+rmdir mnt
+gzip -9 -f image
diff --git a/tests/f_badsymlinks2/name b/tests/f_badsymlinks2/name
new file mode 100644
index 00000000..81d32856
--- /dev/null
+++ b/tests/f_badsymlinks2/name
@@ -0,0 +1 @@
+more types of corrupted symlinks
-- 
2.16.2.395.g2e18187dfd-goog

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ