summaryrefslogtreecommitdiff
path: root/net
diff options
context:
space:
mode:
authorSchspa Shi <schspa@gmail.com>2022-12-01 11:33:10 +0800
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2022-12-31 13:26:52 +0100
commit73c47b3123b351de2d3714a72a336c0f72f203af (patch)
treedc0a1dcc2bb2f3720e46e953a06eb3610e03fb1a /net
parent416c5bd1ff017c97643fcba813e73008163c2ae9 (diff)
downloadlinux-73c47b3123b351de2d3714a72a336c0f72f203af.tar.gz
linux-73c47b3123b351de2d3714a72a336c0f72f203af.tar.bz2
linux-73c47b3123b351de2d3714a72a336c0f72f203af.zip
9p: set req refcount to zero to avoid uninitialized usage
commit 26273ade77f54716e30dfd40ac6e85ceb54ac0f9 upstream. When a new request is allocated, the refcount will be zero if it is reused, but if the request is newly allocated from slab, it is not fully initialized before being added to idr. If the p9_read_work got a response before the refcount initiated. It will use a uninitialized req, which will result in a bad request data struct. Here is the logs from syzbot. Corrupted memory at 0xffff88807eade00b [ 0xff 0x07 0x00 0x00 0x00 0x00 0x00 0x00 . . . . . . . . ] (in kfence-#110): p9_fcall_fini net/9p/client.c:248 [inline] p9_req_put net/9p/client.c:396 [inline] p9_req_put+0x208/0x250 net/9p/client.c:390 p9_client_walk+0x247/0x540 net/9p/client.c:1165 clone_fid fs/9p/fid.h:21 [inline] v9fs_fid_xattr_set+0xe4/0x2b0 fs/9p/xattr.c:118 v9fs_xattr_set fs/9p/xattr.c:100 [inline] v9fs_xattr_handler_set+0x6f/0x120 fs/9p/xattr.c:159 __vfs_setxattr+0x119/0x180 fs/xattr.c:182 __vfs_setxattr_noperm+0x129/0x5f0 fs/xattr.c:216 __vfs_setxattr_locked+0x1d3/0x260 fs/xattr.c:277 vfs_setxattr+0x143/0x340 fs/xattr.c:309 setxattr+0x146/0x160 fs/xattr.c:617 path_setxattr+0x197/0x1c0 fs/xattr.c:636 __do_sys_setxattr fs/xattr.c:652 [inline] __se_sys_setxattr fs/xattr.c:648 [inline] __ia32_sys_setxattr+0xc0/0x160 fs/xattr.c:648 do_syscall_32_irqs_on arch/x86/entry/common.c:112 [inline] __do_fast_syscall_32+0x65/0xf0 arch/x86/entry/common.c:178 do_fast_syscall_32+0x33/0x70 arch/x86/entry/common.c:203 entry_SYSENTER_compat_after_hwframe+0x70/0x82 Below is a similar scenario, the scenario in the syzbot log looks more complicated than this one, but this patch can fix it. T21124 p9_read_work ======================== second trans ================================= p9_client_walk p9_client_rpc p9_client_prepare_req p9_tag_alloc req = kmem_cache_alloc(p9_req_cache, GFP_NOFS); tag = idr_alloc << preempted >> req->tc.tag = tag; /* req->[refcount/tag] == uninitialized */ m->rreq = p9_tag_lookup(m->client, m->rc.tag); /* increments uninitalized refcount */ refcount_set(&req->refcount, 2); /* cb drops one ref */ p9_client_cb(req) /* reader thread drops its ref: request is incorrectly freed */ p9_req_put(req) /* use after free and ref underflow */ p9_req_put(req) To fix it, we can initialize the refcount to zero before add to idr. Link: https://lkml.kernel.org/r/20221201033310.18589-1-schspa@gmail.com Cc: stable@vger.kernel.org # 6.0+ due to 6cda12864cb0 ("9p: Drop kref usage") Fixes: 728356dedeff ("9p: Add refcount to p9_req_t") Reported-by: syzbot+8f1060e2aaf8ca55220b@syzkaller.appspotmail.com Signed-off-by: Schspa Shi <schspa@gmail.com> Reviewed-by: Christian Schoenebeck <linux_oss@crudebyte.com> Signed-off-by: Dominique Martinet <asmadeus@codewreck.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'net')
-rw-r--r--net/9p/client.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/net/9p/client.c b/net/9p/client.c
index 0a6110e15d0f..8464d95805d0 100644
--- a/net/9p/client.c
+++ b/net/9p/client.c
@@ -279,6 +279,11 @@ p9_tag_alloc(struct p9_client *c, int8_t type, unsigned int max_size)
p9pdu_reset(&req->rc);
req->t_err = 0;
req->status = REQ_STATUS_ALLOC;
+ /* refcount needs to be set to 0 before inserting into the idr
+ * so p9_tag_lookup does not accept a request that is not fully
+ * initialized. refcount_set to 2 below will mark request ready.
+ */
+ refcount_set(&req->refcount, 0);
init_waitqueue_head(&req->wq);
INIT_LIST_HEAD(&req->req_list);
w'>b-"I64 6¼O7H?x$8迦IV^'ȿx<% Gr/c)U2m(RToPÜ }ԬzdG kgxklziY >v/>s\dnJNot]ۚH3P:˛J`l8^9 qy>G3)B\sy0] l |=>}g(X=JF/ŠHrs|90U}II)nM>juZ)n^mڣ~o?ޜBBVY?6Vwwaf]|9񄜸b*tgYNEk}pu;Ckۇ^#u˳k"#<_H}|99R;q/. ;A ucZ|~}^2WX~vu׾}<.>{[ c{:0/ٌGw-ǎ'6<ԯ=C,v?ᧀۃ^Bޛh&vQuv|V֩x|WEW%矏|ʾ{GC֒C+{2zz7ѝY{H4*[pro9wܠxh5>j8aX9 o5a? 1V\¾2r%7 ZDe?}rv56XnSsX*X%b8rrG|ϝ[IgdҞ-nw u?v;>|_]SͻkNgXs8q.2:mJs;kSޥ3m峢]ؔ׭_;5:AZNQg}?}n˫(?ʫ2nhYHFMon^_$D}hdKFD2OUJ$,8!\AlwPG W.f!ą0-U ́!{{~XU׈}'fKv+*ws{ SR"~UsڨHOwPjѧ̏K)ʡ(7-8QʉK?1h\8n!m$I&Gea `U1W.cX#`TdF*5`UӁd YU(nXnd*-̢^ͪնmUUImBI$)I  5 tZy4.-r ]uH<=Z?j+Mpouo+[d )%le+:[ep*a-{Pr\86Hl$eVMQ1RvLz|q-ٯGaCӄ TN>~y~ 3ꐪ"66IM^\?pO/o.ˍ9g]$LGG]80Svd ĿP$ )#kolxU,;& P`*1@H,=ko  r@8[M䙏X:wbQygv~ٗddi>l}sN8J*on8,zx|혛I)PTSn"E0بX9ƪkKSnã6(oqD*+.f,5HSadW+'\?wwm oS%:yx/^AS2~ 8RDZEEoU[{Ggk:TָKІzWS$Ra'&TРKaK(z~)e,?߁[l_n:czsa_gdn%#T//E3bs7#,ݓD fH]| dU Gu E `+^q,7)6j0t4;y ? 0 n&4c/1xm9}r{LѮSP- PXN>,9OFf0lo[#z;}<":0:~=DkVw?w~xطs`Xz9GY1mIh%sYpģb 탑Ʌ#wOu?H}ކ]Ks1u*bk.O| YW^gEs< $>hl{vNuE$D;C{{(9ВW.һko||_##: lmFk߼:cflK~7\P]c&Wp]:Y>T?cԱo 9>O~ŁK| o8=iGl/WN`*( wP叓kdzDz^*+˪O- rr0paLf6 ǔNA/m`POOwwk-~c1A`~.ԏ^Qz$rթmׂ>H]L)vW;>.S_[~C{̾Ԅ;v ~U=sGG1!!vEGiK >{w-8_|.vd2+gk٣`]ߋ;>C:kRM&~y {'IpOa뛒@yU酲F(b=tXV#N}o[}AW?_ }ݵ }gG(87x,<+- Ia$>ט(sqCz9hѸu}C_;,H놘{v"a)%2An.č2Ro2 !DHKSD۔D1 ? -` 9ɀQm~aߠMrÏ~rGMrFp~BڽxF CWu6zX;?q;M}#Ԁ;{@69kOUSy@TO kUz'L7!ܴ'GW˹s<}RTMSyK{dmޞq}!NѺN52 F:%t'<\;7BV C]!|nz 8wp.e NwHr}ӄ(a=A|U1Bmk(&Wگ.`H|q=b\ jbz+I]r%qS_)7119!A{N$$#ӓsjPwP4PGCNC0(@AQFe4|<&lyÈ"iA3ȚeR)BH%MfEE"F\YxGp \mH9 <&Ta] .5)g y̧d#5ɤ04#6Ϧ }pHcQ$4 p%ch8Ѡ{Pܾ3mód(JL {cbyk:c$ܰ(pnF*A/&3p@D06Y,kƞ]慎FH`zC*:^`Vs` ڽ/W޲ w¥kZx-%9R.aEU/'(GJrX ;5-pݱ q+r԰5uUK+e{.OϏ{>0 S$y|wr [/nLjl8[c0x .s7n=7)>˽!B߷zF,51tUc}pG4AMUt Bmqj~lgu΋KmSpCy߫= E^VW?I&6^wgkN[Q7w3LͶ<xtúmuiٔ< ͯW1 5ỻS4k|sY+p;|܀A>@5|ǚwP3rHSt8.0흘sFz׮vlt?;NlKllh+In!n3N >R}NTP5l%68J%3?v\p迎nYÏ#.oTi [b~fd@?,\w?x~+dv_1u;fݾwtxf'֢՛'Kl}5gV t! R$:ݤXs\3WڗA#MO$[o8##|F7q:w ʁn|G:{/;9Xxr:GN&:qz6vZf8XJL2uK۬f+&=5fn,X9JwVܾd3*b!;1yx/b(7קYw)Ք>__G %f|uJy#!Y[r#|e*@ޗ]澻@XJ4ښ S z~`>=ִn^)kL(@䃳L'_Kt k6d# tBNeJn " ;fWFmt]{Ҫ":Q C=U}K +gnd]:="`1{ P{;{CFt n>]CXTjydLcw(Rt[v5z, A;zwp8A&T st[챤,= mįi{}x&P@`$JfJ/fƢFnG{}5]E_v`Q~Y,1* 63u0wY)㷀ÆY&iymǗWE.oC6p/ESÓU:1! X%lz ԳTUŞ?UÛ i7Q6W cjiKTR@ 7<(H6(k͝yGX'-3,u%sEz>g7b 3I揽x/fgUbw~yJ{ʋ!/stF3g?5[USIT;KSnaz`C0.ꢁ[š|58+[;7L|ţ D{*{ GPſ>v5h:dd#lRr'ʗf΃cC[7ϑ;ݷ6~]L^n^ΘAmqH꣟EO}do~>|~:;tQ^M $^O'@DtM,}p+^em9^֪fRf"A8؁}يWxW!/ξw/ R`W,%]:2w΀rYlكoN[(Ju]s "*[~O $1 %6sN\#ΐ׼tkl= +xG'CP0flG;Y:MdPyx4l|bmE˯9_K )_ƝIq}." we蘯͏~Bwރdq˯X8<\<4 ČX8[#XMy"?mL$BILǴKz͹YI2/k-RƉ0tdyנs#kg㇕MґPd1MMSem0Ww W(:;gUEHDfz=~%z&U;BcfUQiYLU@dpϓz\k[/Ç97ӧyt:'%% +;KL.S1 Tβg:Scߟ|uMO~}=A?a `79OAiOu~C_\첉";DH7VHY!&UyKKL6k|! u!o9|rq [5 Na͔/BQKMQH+n0v8U}1'ȠPiNpo}Ȏ_X۩PޚzlyJ3VUSl!lE-WSC|fͷ'g֍<-@@LaHHC`la!|&w0x"2!-ôpvh"DtGz0ֈN~7F^ "+}_:>=+Is6m 4(e.s*=nArw띩LB[q'PˮK͇6cd37 ~4O-Z?Þ߁AK@ہB{A yרA0yM"vtscQ>7ѸV:l7PfU Kai(#_ 0ՕLn/H}40"UܒXCTZd8=Q9l}v* nF?Z ֎|`3%,s0fTal1c0VQ ;.G c#\22; Ety"&ine@qjSqT,(er`y3~ՏVIR VR;&5r0]vX f3L60I{qz-tM5 n&aBa z#FZ\!01*~!7B˲xT/M=`lJUl5  N@wKc֫z G< ?v"Jƃz8:oO~R:x9cdUj p>n|3;f4HFPILllg b0ט~y,YlFlHk%Xy4BNLPTe9MRmm/!Mz=A I\r.7'<,|l{g3 k̨\Dfĵ\5Q!`Yut N">P}ζӚ tM΄S mPrN yBb?GT4AA6Vx}vg }6x~go]{xUR~ЊAhyEF=' N8 C^r 'DKUl7(X1U n݉#Lo-h+FDw꠻IuH14[#k"mطN$ՅBlP+A\u``nbŁg39lLgÃ2Z)Df&19QfuBRWmяJq?4ve,5M0DeA@ƌ\%c=[f#Ķ5Tۅ[C^==&psciҘ.kJ*tƾ;ȻIDto?Ꝙ{/K)Xcs˂rQ%e6y7%{յbB-dJ hjPdhYּz'_|Pp!]Fpyٞ׀xZw栬[>{eY' jG [6!oN?8vcQP\Dm=`{۩@ qOt(Fŧz6sKt@tD<:- #<"?g7QGy#m~5^A7(1k*1l!Ӊ2O0ڿ6j`mQmު7sWV]+8exB{u5w!ĘkgX x:~dv5 LV>=CsX7 7-l̢c=8̎)ʦ,͍YXWmqIdv:Dܰݮl,wђ$p^%X_5K% r" q.Wu4Z:e69]"*٤&&},&=!rh,{Ysn%"t6PyV+|w%J*~|tMϠGчc|Z!g3i7vE &8O0bGߌ9:X* 0ػ\H f1Q-@9ZE|l~g.Jrg(?־K$&iwudSQg-&n~.]ZWk4Bᕢ֗)f3l9ǥsׄ=(!@bewv x~&q=;"^L׭;?qIu2LϕB 6JCg[ 'zک%jmƫ;#H5p)ӄHi~Cv8@RtSfR)kܫiH##%h ]Gz_DQ>I}|z^Ḫ*I$5+3yq|b@?t` ؎[@s%Q=ÜwaKrwd}cv">x0ՔHF5ȋ!.2x{mV_];GZq;O ey6K aO8:q] ܓClw ~>t;?aqf=^Zo4xNx &A3o ^C²O c۬AÎS^ oX Fk>*3&Vď9i =csLG.G`ƞ֬Œv~{&&T"Ej;"{\HxfA 9+p|~m^q1mP|a#Gn wVϲ>~V/V`E/Uq/l~W5m@GQf']t߽HjޢQ INYwRΜ3L|BW#G;3:wW҃X@ݘqbBr 9A -cKt9f&r㱢TPxG)WѶSL)P'DF;6 p] '"I,AJ|W{:N+ Xvƣ:At\aNF lVӤ; Λ/*J&]E9VI$#X׈2n[7p>R[x3z v!m/o͑ XFcצB"Ad|jD=mfGGMS%{!3V*3bhԸOpyƳ ?dQ̳eo%'~{jPo4vGR?GY}'t|xy^WAUh&Eͣpol9<.0?`+z\^ 6+70Xΐ$69fX #UA'!ʇNZK[\׻] 7vێ Ti8t.ʐǧܰS K^q# |B 5/O |m%m䲳gtng0Nu(:^lS }j}9"v TI k}Ӥ:*X^u0v.8%sߴQ:yxKk/2}݂F^aTȽ21F#<.}n$>'_VdJcI=܅Jcf؄ _}2L. 41/A14?ug(6 {u.0;(U VN۞;%7ͼ_t X/ә JdR-phEʴ(%EQnZFQ9;>DĘ"*wx@}RDpr"+*PR"`PjQy$86 n^*e&cڐ6)D& ^n-چV[GQ`i`N8@$>]ɭjquUb5=1뇞H]I2ғ1AB)ei"X1S(Bgg-N<^a騬ʚ 7 {UѴf&c*t/NA?s~wfeKr{Ys 52r< Ȗ ny3;zϮ˧M!# _h }:D 6RY,> jF<?[3)b0 =$P+z 3(-'Wr{\*Eq {9sr<߅آbRQY-۸^' = 8q#ϑ&v_sܡI(` -)W+8JQR/Мi.J )xM/yZ#Y("{`swjuIӆ(ש%Jh0fQ/t|C.D"aT%&ۭfC-ۆq:Q֑"M:{ID~)kHh:NIj _-6R ˭gK"9gɀ Klgո'+> Mۮ703 VwP<%2 zrc•uC Ad2pmLk4eA#~QKB**6x&POm*`DdFoUk҈DuTpq[1X<"|J G29*߰_{`Q E!0Vu=:f֘ɥ_VT=~. aJCr|#LPS wDs衍G7gVg_7$>_ks0H/pq;eö'Ru?ev$ȒcgvlĒ!'n{8MVo+{j&^hPYƚڐ !6;VaEq^ߝwm9W[ &)! kg Έs@RN4EC" J{Ǯa&qoPU0a&BAby oFrݺy16hKJp"Y؊5~*+ahPS?>J ?q~I v[P9LRZ&҉ 1-( }]^E/a6BgS*whOIڟ3d &CCk?O R9Ĕp"31*U>tx ~?Kg'bmJi.@ |W/;@!pZglY˝b ,Oְj\QF _@`׿vuXS7E ft" ,4k6ׯGF#kZ8Р:j鐁Pg-IH&5_\|iM';gb/?Ĩ{2$Kn;tT6:k~&%^l}l5J6}Dn-CN3R929ITGA cbJ/ž\wk-SgՂH9TPRD#~6YE cs4:Dj'C7J2zTPzxMqYze/Ɩw"-AShcs zGquZ9z:9u|rgYH,ⲉXFcp0~ P0UT X2?d j{0ِdo&Db]i!PXvp-l$_޾pWGZauG.QSVzw0p ZCF9k->G,a/;ͩ7t1~0aDBs]5ԬFV$_h`)B*2jV UΈ"lg)#7uB(m.>?%388VW=|IC!S%S<5,}^^+(¬ w89H0(h@lDJ#Gݩ)%XڪC|Oڰyq$;;/x3|L^^{ #')MG"~=6xtf:d8!HKz::>rbuFx@uzr X T(#fJ8=$2 [>UeQ\aK2qO[g p|]O~nӱ+g n|CaXu7bC;_80 l@iᨵ,n"oWS1[*%,@x\:e?Z:Agy(#1kE[Y|S,6 !|?{ N5! fdUe| b);y'"fOl귫I%q!-]\]׾1^ďݕՏt{zWh${^yq `<`<-Ff .x Kë06XRia0@FT7,1fXt72b>j-, jiMYcs=HAڕ8o??7}+yT(w !,"K_^e =P+Q۰ܢP? F0C>Iesx'sL˽?[2~u80taYg^ T-kFqB{S3Շ"+@| ;ec `\1lH\dd[f9;JtG_99 ڦyR yed& 3P,t?-}w8΄]~ʼ\tH| !\C.&ȏǵ'W8Pf`nO`h&* _5ob}50;'sM}6hΊŘ瓁єD'+O 5%1V.r =BB6; }1 9ˈg @ĐE>z]Ū~ C -PGMiDXm#HvDlOM>,T_v;"ӳBhNn0Na^1 1<%Y[5}쌶1?mhHYI,BB}AQ/7>kE&>Ԩ)DwڃlQD/vz{qS{EϿlt)@鐞AF* B$QG"Dj*/b;"%`yHhgÈ<~7>;+l3RŒGk°o{QDD|nd+n;sYG{)FU쟳A &0P"-J l|RMLd:XZ(梁M Jx/+zo۬n. /|O\hyNTħg4ᕽ+pR=?/t0vN9@C);o㤼JU\yJ5]n s?gPy'G\#JUU؏_+ bҪGdyʒ*ew83Gc|©8bTPkȥC)1u'sÄ|^(J#9Q?6[Ts$d-L#!vg x7q1oa~ڿ9oT3.@Y>W s? =A߼L=3(ݞHZPƍ>d6χK,Op$?n-YYRƚxPR$K @D6Z5|xф+yf-=e*elŸDc6Ȇ +rl`QdӾ{ g>faz|,ԓ1Ga">ijg|;`0e QQVLU ?g{߁QeI#S<9UjFg{ӫ XS?c4+V{01$He0ӬJFk/cnbY&cCIׁ -K.W?{6;7\H-^2Emi6]Mm&k&7<)/~~ 2x#llKX) T2P.,:ZpCzG>x NJVXS)V@[&l@&V9]J l5Z9s~?@UozHﱵ~}_>^uNӴ8+VoÌنPv4~*̧tϩDk{ Ǟˣ6uF0pxnzj@*Q+bU˦N},8$b?'Gc7h#Bl'&X#;|Os1;H$߭&Lᓪ&O`fxmVo1nhaO'b#26*U JkJoO LBmtU$sJwU̸B1~$b .gXq1|ՈϘOrȎpm= ̈́/)WȆ;"J@Qi\3dT"Pi e`?ERz_f$@+Gx6/N%g<EC1,9NvW ekEغX)3Dnxm$C7($J Y'9M;s^.o}uB* o!".׃Mߡ˺θ ̎XAUd3))?yd)`U|Cl|GBsպ-HW&G7VS~M|Avt MΩ A.,Ǵ=Jiֆx̍u&G*FqF-XP @Ag(v `GZwv rg ʤг] bA}r8p,}*L$v…0wCJYaC5ɢ%Gvz(j<]E4ʱ+Ƙ,JC|v1_GdyÆVsy3òYM?UV smcФ}* {Z0Vj\f[3f6Hcs5B#3,ߴpqqF{m6Fn~K1ǯ)NF7֊0ɫjaʊ 6љtD4S4H%x#A~}59OϷMsl>n{\qErۇ4lp>*RrhfQ:Pڎvj%jcR(hލtW})I:^:oxicƯX,mu1kѳ\=M*;G?*R"4d(XgS0r램7ZzRȒunwN7B>X/?pqjGws4W>9n ŐRV+6Q4~ fp3a[MJ^~.eDͻ0w5ckˬtHb}r3ZەrOKAd*s7֦7`dS-{f?ۃNcQ?- wUC!4W9\q`(ljjg=ΫFy Diu>f E` E˥݈>$\]׵.#j٭_g|Pq#9ez8;5yɭ: ?OR>;r& C>c[*4-qy{ǩ#:xe6q4j:Y}u GK. |z2ч bgsqz7lUƒ>wL Lr+D5r[n,_6gOSP[e!Lڢ\V#+}'Ae!C>缂af7k(׭5۔#zt]/ͿXw]6}ԿbH:.+k`UmL ĞꤟéꍃYkQ~8g(ֆxQI+჆En0! M U35YfDz4A$GA툷(e6ޢ}tz < #VLRoL3azXc;sA-LKj-M`DSUP<;_Gu۳Me3p,?5 H:Պ` ϔPTw ޟymi'r~(流˄ ޟ-gi>>xԁ{#hV>*MS|ݚZLAVAwL6ǥEGl@5K o9stXOB{z:cXFI&;B9k{u6wVSVfUSZ4Tyb/ e'Wu0RT2-7Pi݃0X#sL 6+ƸʚDa{$5BEίZ=DV\OpuXTPT08݆FooY$~k-lA[3@%H?`Rٖ}Ih9 !Qm'NݚN ?5!aa(ݶI!5 u4.䒘+}ݝO[4]%w@x M={_l7xD'D Wzt0Bsy( Gsrצ|eڅCBl~^7%goAqNnK۾ȈLu%Br_VXϷ]TZ1߶n;i +g x&Պ^7pA x|ٻ8̑ӽ)5wY9_BȠukBo k`qL; QEÂߏs@hifFaY=!'va,dzuѳx\ifC8>?9C}%,K+qɨg'Cvw oCEl}x=!0}RFW[UP*"uY"!9o%!þFP8,rLӕQM{*Gdzo^t3 0W_9{:,Ǟ/=Ps_@4+kA `z#fX 0|DEPe(/="H$eAaQu9}8$'I{R] JNz=țp8?M)0k~A՜9ݤi}o;L MRLM`v~߿G3q#ȷZkK!*],60o0$z!}O'5] B ve̎7;`fgsE2`U*?5~.6r bpP4;7KǑdȁM05)*PX~s4S|zv5:4`ɘgF \ + #ˋڛ;lN W-@oa|YfNX/Ꮔz;NETʎohcn<-ӝo 0_/h&\/dpIA5T ]q56k}fKvŀ訌`٠)*HGj٪ b-WTt0QRV#O|hR~1_r2a폿__BU|f(ԪDL;mP@?뱂m7Of]GL| ~%c.d61gΥb K~8u'x?3\r`0]eHI9OՊB@`q. cT++ h5ίxb0u|l@GѼ3(o4a_7Oo'Q7Tl 9&` sQMϏK8_ F3+e>v%u ;#93Il5CT,)vnMfe-ATxע~/b K>/HTVο!c_5R"c=aW#}]oˋ}B=;=K' SyZOd}9.uSfUl[.^~X`qkx3^׆!T&e (z3s;U 1[}e.{m,HJ gb[`&woV*zӕF)c2$1S~ZsF ."dF՝`8u2̷MV/dp t9[i MgM!5e!"#Bp/GuxafT"+WTZ') ("ʁ-}}gR۲mۢrw k 賌&̠@m?_݆y)k_l,%МwfYj#!f pXa{-0Qe.` Jx*sN>9vgSd$$p/_wtyMGOHw.>?:Ka "S1ִgphrƆҹ޳R4IďÌS >(|^&<>-s@fQҌ]ҴS{`:ċ#2zjɚLV>#qk1>^vSaw3+9񓍧1y9U3鷺*n>yr6TǍW5su"ôll.`#CC{?\/ ndfɃ6) \w0xѫXQ.JI5! "URf~{\TGw֊eAk,V> o)WxkouLPvl ԕڮ5 %<}y3{d|gY˨-tC@=I+[1y G*zM_;L8]JMBw1ڥȈ^3x\ÖDqn#gӚ30s~ƄpKY2E4\m+siX;rlcUBJOΪ?F7v3ں8>x1'g/= ͆nXT82 sj/z6+'-Ul>Dgl!юw˜JR/,o6k pK4RwH&O"Uyl*/o3} v~+Q: u e_ 6p?&9όUvs[{|5/x/} ͏v%;L:w-N?\wzoXUʇR .t \;l)7ڱH+yGy\gS$dx#"Eֻm(m;B.YܶLIwa[E:km}&lwMwft0 =T,lܺY]cVi m޳9CA.pWEcz͇KyFZՕ6&>j%\og%5 >&ߌ6!j);ц|c]5O"k<\pzfַ#ә\uf'/ӷbSw%O03W:t؜jvrg}G~%ptP%|"b8r:1:%8yΎ0]犻9I@J( ˒;@h'}(S%^e8k Os穚z㶴lT3*:-g3.XDso(Vb};.^C_PƦz,rlII^OD^Ozq@ŰPwN\j"` ̗P;\ǞQ0f)=l]5rN!v~T"TƁͽX˃s'oXGG$a[jGVy2q 6޷=acJ\;zf+g,cq%UIk`B_ 0J0oHl;fN&ˇKߔ-Kħ1dˢ81OW/$u>M$Ze?64%@vw[ëwtUK?F< ?4ѧ$5)wɸU("T~"fdD"M(Y~_ߗ`*ymy@,)07k8lZrB1()c44|W1VJ_y(%+ֺOgrP7GD!Wi9Re+x7$LTqӳt0LfG6Г}1ǭeGlT}ܠ+Cz|bk .wW>bpg~n.-bn(p_4\YEko?:{HPK'YAKeK?],.ff?\aB46 B θz遀|rdqq.1wyv crrrz^0Ph9,QZIۄB>% wMJ•j:\>2mv}z("wY`Y ӧh#4k .̣R0C Sn#@ Lc%&OZ^Zp-FvvP]ThPq˲hE.?h?~\sm7Gʬ,7c- &KoRA9q3*vo玬:kQA`8E?;ٚEi@飾ɨ {TJv7G꾒&Y̡M VcXP^Œm8ݭ׍ɽJEHj'!Qn TeysA M'50t)Ĭjs:OT-Sdn j]u5RV:;7Aptj0 tK׾x8 F\3RṶatмQz(sZ<;g&av2氊q|Et?i޸DV Na SW2ɺEޱrsLT-L=W=~De e$y5D3ƦrURETh?9 C& 9^1(ba.Az/UJO:٩0kF9!R3~ i$0m}7:=!o3c]sx j~8flUgbM754'Хo7;% FPƩLDz3{Ezkᕣ83S|iGaMp79 )8EmO7||GGBۋm .]_&qK+h}:%]gMC 8M>U~BcQ.l*gs c[NY6"iYSe%4AʢC $mNaB4H7!& ;/& h"nE֣ɘ>>!1 QyjxeB-\7(xzXV** xhCޮ2(*[:Ci/att[F%ngόo/+-jFs뗘CUƪL֨ܺzsգ%8+R'(0B,Ȏ*PD*L7q9n+jcp}}-]IMAuaXR:4L6 l!Q{\ c˄瞻Sy2"'2C uoBgmb|D߅k&%͔:57n6E -/E ^VG )_?U&4XgeGtlSzz=kG 2nTf|)~ @[Zs-񏝌5u*:h?|axX ~|ɍ9hH2LHʡR]KÀ phDX#x!f`I }Oa s̺h>~;Gi:UUE4L <=-b2VP)q<9z1 1 VOG|NDN!+)穟Hp͹19h i2k&W&p٪I8"z mv`9$4Lغw1{*>=?ïÔX7IzJ8Bi|RQyu5hځjbWu$ZnnMz&į)Ϥ>/vkqxl 1nѯ$k=B>FGKrZr D}7 U267ż7Ql^3o;YF aXPˋdRls$]7t\EwӹvTХ Vk?~>rۇG!ߊ4Ã- ,8QEuD<"pͅ4u ©B+fkRGtVVs mr=$&b~'C.qYvv <9I-g"ǥBi~X,@)}`(a;xf5{Q˜mW8ד޵E$[i$|UH|S,_)M  =d5]x) GH\̓@k:,MAռe?-v)pi01MLF<_{3(BP^6!Ns7?h?4Qpʖ ڡ%ީ= ߨM`Ib!*)6(l"RkFT6a??fw{[?wn3s]q#[,KgVtbh7@",>&mW_Fٯ\,+\\+K68s=[7V}Ϧ0W>Yŝ/R Eq+ 'C#H!_UWN廋^TjܖBN#"Ģt`)M \E3P~P*&*!)ҙ!`i?<`$[mg1DD%o>v0A@ ѭA6 ? v!8]U uM<ـQ?<>ßŘ,z`ߟWt'_oᒈXEoBkNmq྘`bW})wDJrWIGx|$jhf)abL;W`ȦN"a6éQQQf&ԬwhZF-iQe^"tהwz}xP[*Xe37L+|Ihtxط6QHm%ۥ%?i]GD!f221})x,gˆ1zN:bW>>?א<`Y^f<(?vD>bg C TY+f+{8v=~_W;BW׫48O,m)4AABp7 'FL/RLgd8TZ+:.˟:YX}~κC83; Nz BrCo:2_#&92_B_?gdh0=8^ШP~>_alU'K,#om%~(a".㉉n8.X.fW?A"qyD F~ $*@bM `"^Ұ_J %RД|*xɭ $9C}Y PT?QۤSx%"$03 ft-Ww%n=,\/ S{C ä_jܖyL'O;]>wׯ=gHm3u ?.WS-m{9T&8G<~_'FW9Q`T0{lï-V[ӆN/ sh:*K*$krG \~.w163x҃h[LC POJRBP@ŦY(pL|GO<ϡ0{鯻_'aŇXznj.p(WoʗV{]O:yr7M'C/}Og%cdsjyxa˿@50Bd;mfz1kOr~bGt^{#F_ўCmln80nʐOrŸ o_Ru.N`*.u2{H͚zUҳ: Pht +w7[z>P ?,!"{/`sśKpjec7`Gs31z.}Y{fFX+1V$-7k@pv[ë=,Xgӏ_2oD}l\@HK=&B@WO.{?Soԃtģ "~~܅FxT,;BW:MK?5wT|l\.WDtC3D<%NL g՟?+KswqjTKbB˃Ѵ{|P y;#?G hOf?FR(zD~jT,=ɖPpGzk^9خaiPf^1?ơL}&X/SjeWtX-&R~CE^17[HR@xu5A0Q^^h":@ A?<>?okmmmg~(쟔aQhhF!TM?~_laK_R>>xnc&&z&z=Hh@HW9҃uOg!5GˢS;^nteo1[tǬ@p}ѓKli՛tA{Yb( ?DN1_o5Ξ%ic{|3Nj476Dg՗ѶϞΡigmGVDnϧS{k#Wmќ].u| ػV|Gwu xjգ[}y;_<"EVjLW u>ރV_L:Nk#F2Ha[tosf-{?S`vN@fUψ*G$`{ }:>p}GH[*XaxǐZ (4 2@z`qR1-K_"s/`DՖW\Q >ݳUk VxvLȅÅYWgO7[霶Dts!"~>JJ/l0"h򨠋UW r03||i!pNp䬘ns#|O}SHMf5%Or77 ue>rnK+\y=:.0}>UJǓq \7Mm}N ?T`Bhr@U˘ Tl֠XfQcx <e,tƓ*9#ݫ)E 9Q"0ר UPevt6ϺKii`:i x}}k  f x-\7}2l.PU- .643=;lj03}6ج#0.3$WÍdg"t>t{#Z yc ^>>(s .\NRȭ8|^LgA萝^1熮:cߩ+ h4[tE"rEy>\F`>.0+ï_V{x8[ > Og E'M `"h ""d Kd3E'IRRgiٮ;ɐぁ1C aL߆ ҊcPU'L]_d_wh]&cрb_f ٸ}҆t{=CCoǏ zٺ -u}+8PwP~J/5ϫP37;4=A0!qt9ߞm׼_DZ1dDcPw;;m?hA?h dY[{@ݗc N?|PC ,G :)W_w1$,=P[~;XK7JhM9W_B\W}ǟy}!,`]XMlOPpuEF£$6r_~ Ko'm=a+{x(DdMY wW$Y?t$.$L7egGnY[LfOBo;̹Ur} #(.\я.bzI!CW.T 6c;c.0$C t I NnɁ5a8>m]@ƈ#/=hNY9zr'ȓHK!ZS`Ŀn+=c/nXjApj2jr :R  & 'n`@JD}H;Lv>{1 UC{ncƁ$*nMyKk d7nC |XpXGRW-ݫ|ٌu; &Q(0KQ?N"9FysxUv4^ōګ2$X[6!" kB$0\Al÷aF9aN[>BbAnk@,^k[X.DGI (wQ,j DMaebdye$Na[VqL*aw}_QgʡZ;z !lY g`/^Pᛑ 8-Bǎ?.d/lQ(9@(S%NœqųfWtۂo?V jj:7%Wru!K~Nսy7wf.#xU$QFc ȁWfU? N#Z%$-LD{䍘E3"yAMhUs(} |v: }**k\^4s~ˤ ~H*ݕ..OR޵_]^T9!َ.^p'%$aC[c8Y UQX} +5]N]+!+5tQ9߽ \*3?_[MXJ2~*_l`[lF?S`W_ vrQֱv'lJsGJD(ǔQcN4VerGY~RS^CG7eQd h-E mPBGh~Iy Zu˲BYZ9X};4۞p &W`;K z!MCUj%5x|p1]CKن\?9uPYg_Xw>C "MC-XOK,2l1CbGq8jaGl 7Ffta0~6[awbG<&t >[ kw JT-96i;u! mJV vb(፫mmv;rՍ$ tqRQy0EX9LC"UpQG{c}e`>j޻Ze%KAp0 \UI,QEjwE_{ftߺJΫ0^~v"vuN(vKVvU k褓 D::n: enՎꃡѐ?c\~wɪQƲT;vbҍYCUիXj'3nabp^Sx<!˺*,]KչƊ9=wW=D XE~NE9Tiܜpp7M";]/e@ŷF͆ 2祬t;cgg~Gn V)m[2gkKR $Y#CMD, 3ztec6-Ck.{[P$vI: )^GVʲמ1\WSߋRvV. X=BDiebg:s'IsgY|7q6e,zܰ3t={mgL*У^%j"݂O;vؐڿ0WFJ}my+si`rV OluΙ|iHMgKB $S.U_'ٜy50=!>?F 045dM]qwc$<+N2w ydf5ZH̰(1;N˙HzӠRTC%Dk,-sݮ[&7$sz65Q8}* !y3:\.lpZUh?:5sCyay]+a[=YYwTmzI:NMQB1}ʂOU;ç'B$ҬN:2kLQ*$ri"ā"&/? Y݀x+'ٻUVݏ~*3X*1(q1zxdk[< 4Clr|8ﭘe8UP`,*CHkö(x~qV)(Y|!dodة;%qßix#xd aҐ 0\`-}}N5ct_5\|auZg}$2$Ztsxdž!/ |~](<'I-O;kilmE|d3*ʛ)U\U6;s?G T(F10f~wp|85K~=NiES+y4L֐u詾j~zN]XF7Z(4N9ԐGp ˛:)\+X D@7(0DOn~8G~{}j "( }#}H3ۻ Zi8yG|3!4uTpvV;uW D'H " '>#}F'oVs>]8][ZnagLJ''=p@2ripOͻ. :@:#a6~gv $,ĸ%j Z|2@KY#YC蹂qty4!n)IhfAxm5# :;r;v 0"6}.{voy2tdN|8t3Nrk1gNu,BFA6!Rb:?sqzR7F5_w[7<Gb6 5:SKq 13?){X$UgX'O!\l?XAٞNRBN8gRV*=<4}vVfm=&ހ+* d5X$um0HϪ/_?zV6DWYUI :RxGf6O_;1u_>z78J*)plm(I"cTDGA/wߖX/n}*/֖Y' 6NXrDenA@ Y=斸\C.[wl7m,Xݚll%$uaH jnes'#9kt4w=M@<N瞦"jzdȃrݗ7p.}N @;g8z.O^z'Q3jGFBA*"tɭ&+ez*ϲvQxݰ*ß(aYn6S[+6cڵ8` 9NŗMCDD+o. *A("A@Mf :ru5{eu'tet! "1v^:Pᣊj0tIX9&(^oK22OnFwrg{c ='_>Nt ۄSa $Lf`i-!+"[ލdkedB +2HlOᄋ=YZ!\Q3"^[3l !mς`5?ٍL.9™pK9lrpr!O`IȲU݋Z/~%DAqܸfІ:-2<<tI-:93!IR>mo~M{lt_aU@h.v f N㊛B HWu9Ri֔*H+svՙ= 1p][u*A6xf|قK0"w6ſie8[,:kEg!{U9K=nv)9-\enNn}X)HD*shS]!3ݳlc1[UhpJlUuxnp3p:-]϶S^_me`77¤G:ίzMCSvw_h3ZA z0 /KNjU$cF&PJaH,Mtdkm Swҿä-4@NATyǷ&/%@ VƊ>I>K;2 )s lsCA,XSη¨\-fexSB kheT B'~Dk1 xR#J_Ƚ vCot8 yGbڂl)0}_fǢWh}"+8oxr¿V M?![:uΧ~c4bs Ы͊:TDG[uKӖp6KxnZнP^d#6h?-^}e5IS`X\gO,gȳ}H,_T0nIap4-P#E MƔDvCZC%l?kf#$ 23vjFL-A2|! (!@8/nuN?bd G0 Q+(qkALf|}5ӧ " th*PXP}jpڸe$(d(d(*(j(j)dUNZq2'>t  6]|hA jx z$X*=ޚ :'0њ$} L:4v(`zp YwdS*m|̈c$DSyW09(O,̉L ʤNHegW^[ Y!$)aP) Y`f*"&hh F"$a@pq8DI00I0ËDRDJJ`Eh%NH" _YQPQ!@R!@RTHJDQ151@PDQofڹu+wI; ٯEPLf$P(C+sr's,$H )P0%c[27o !Q@O|K[z8H 1iUmcTFH_TZC=`[ %{  ؏PvG2 s>[>EXp2|zp&:é,rFF$IhLńy}}1@-U IgV^CD9]:!=CXi0gj~5 =Iwp>,ޜ~"2BC> Ȃ@|wFh992 ֎f2Q o񱹤`æU"D6|8,Kk OnbޓBA:jkvOZ['aچΝ0j;*E]b#c0ͳeMq y)M\:Y˫ÎO> RW%5CdH '$Z  TI)@9`x4U(DA)I+O "ҁHSJ%%UUUQP9p*UUUKWJ Td(!Rs(ST4U5J5B,@@H|sOv fkr@֗U 7:=bЯbDE* 5+l;oWVL6aC&&g`ڠ\1,opg`Њ1 㳮#%,,\:E*wKs,WE8zr0xHDJ@D3c0j|x9W3: KP9H5|8%y?te5XZDZ@;"3a-aĐqLNZl@B@!{/qOKr>򤹏W/38Sç3** ب緇V>DY¿u"'*\n=:šc洓 I,+^ W3wԢ[ /j[3 o#Gmsw+Ewmo?>*Ry)@H((HNX*dsJL_m;?CF#p $x V^e ZѷbsW@{ uT),70Eo*U•`"<܌tW?]kz!b\َ\έC@!6ѳX ݜ?b} DmAXWR@@c6QYJ]\32OO4Jpc%?3烷,tsĒ۷]2r h)U@1=>|0ܸ_F(?LvH&{^pWjWh3!5JIɾxOGN g'qxwz Q"IPH9 EZ! :ef9L[G+"bcJkTmy}R)5s@Qg|_g?>7v5ў+ ĤA $҆@59AJXH?) XgDγIjc؝Z#y7.\Zn(B!!c]5эO{__ `+T S'e5)k%lR ڏ^\)3t==wCz\fL%$!f 8~鼭GwrӼdy-_y?czVZl]A,#,_5ۛ`a ,H $?p>] ⵺Q7><ʮ_ bb\G.p6"H+"ҡ@Ibav7񃹤.TThf#/:9>3] E(16jَO30N*J!$ ݔ*xy3s*Y#׬U/>6`ӳx r|@¿`yB?W:pnNW:KUwRD*Nkj($#`Y7Oʏ_w5$h" R$FY&( a`oaVhCvUTpM NDPVl; A%`1߇3CfŬl_^_g;xѥ r;h=frŷVTG l7=Na1Z.I-/˒~ P6=tх۷`u(25ɵt_Qb`QH( bE8DC'TaKJٴR+{PpsC0V[R`*Xo9+J=$H0i 2kIB%J&@ b%Hc % @6QzrMrg̸"b@{h@Ѽ- c,B>tUaQ#Ue)U ՝1"P)QkSDP~ܠ@`pC3R'= S'&N\4:]a_8y?$Y/b>8a&SI5Wa0XnFgԩ[?D2m`c Urk·DsA W{8a8]P6N$9fZ?p`3gXwA[cX Qn)q)MM? (2;>/0/Ldg0Hp_ f4o.e|PH]H#H8( pi-{ނ0f|'<rU b$h)@Aϩ=6ޠwPz{/K*^h1 LA( LY۬*T ef3ԛYdJYDthp.5^ݥ˟Li9 fFYE:Z@{FghU