summaryrefslogtreecommitdiff
path: root/lib/error-inject.c
diff options
context:
space:
mode:
authorMichal Luczaj <mhal@rbox.co>2025-01-28 14:15:27 +0100
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2025-02-21 14:01:47 +0100
commit645ce25aa0e67895b11d89f27bb86c9d444c40f8 (patch)
tree64480ffd4e20fe09bd6b403ab6d21a2151f0f23d /lib/error-inject.c
parent7d0dc28dae836caf7645fef62a10befc624dd17b (diff)
downloadlinux-645ce25aa0e67895b11d89f27bb86c9d444c40f8.tar.gz
linux-645ce25aa0e67895b11d89f27bb86c9d444c40f8.tar.bz2
linux-645ce25aa0e67895b11d89f27bb86c9d444c40f8.zip
vsock: Keep the binding until socket destruction
commit fcdd2242c0231032fc84e1404315c245ae56322a upstream. Preserve sockets bindings; this includes both resulting from an explicit bind() and those implicitly bound through autobind during connect(). Prevents socket unbinding during a transport reassignment, which fixes a use-after-free: 1. vsock_create() (refcnt=1) calls vsock_insert_unbound() (refcnt=2) 2. transport->release() calls vsock_remove_bound() without checking if sk was bound and moved to bound list (refcnt=1) 3. vsock_bind() assumes sk is in unbound list and before __vsock_insert_bound(vsock_bound_sockets()) calls __vsock_remove_bound() which does: list_del_init(&vsk->bound_table); // nop sock_put(&vsk->sk); // refcnt=0 BUG: KASAN: slab-use-after-free in __vsock_bind+0x62e/0x730 Read of size 4 at addr ffff88816b46a74c by task a.out/2057 dump_stack_lvl+0x68/0x90 print_report+0x174/0x4f6 kasan_report+0xb9/0x190 __vsock_bind+0x62e/0x730 vsock_bind+0x97/0xe0 __sys_bind+0x154/0x1f0 __x64_sys_bind+0x6e/0xb0 do_syscall_64+0x93/0x1b0 entry_SYSCALL_64_after_hwframe+0x76/0x7e Allocated by task 2057: kasan_save_stack+0x1e/0x40 kasan_save_track+0x10/0x30 __kasan_slab_alloc+0x85/0x90 kmem_cache_alloc_noprof+0x131/0x450 sk_prot_alloc+0x5b/0x220 sk_alloc+0x2c/0x870 __vsock_create.constprop.0+0x2e/0xb60 vsock_create+0xe4/0x420 __sock_create+0x241/0x650 __sys_socket+0xf2/0x1a0 __x64_sys_socket+0x6e/0xb0 do_syscall_64+0x93/0x1b0 entry_SYSCALL_64_after_hwframe+0x76/0x7e Freed by task 2057: kasan_save_stack+0x1e/0x40 kasan_save_track+0x10/0x30 kasan_save_free_info+0x37/0x60 __kasan_slab_free+0x4b/0x70 kmem_cache_free+0x1a1/0x590 __sk_destruct+0x388/0x5a0 __vsock_bind+0x5e1/0x730 vsock_bind+0x97/0xe0 __sys_bind+0x154/0x1f0 __x64_sys_bind+0x6e/0xb0 do_syscall_64+0x93/0x1b0 entry_SYSCALL_64_after_hwframe+0x76/0x7e refcount_t: addition on 0; use-after-free. WARNING: CPU: 7 PID: 2057 at lib/refcount.c:25 refcount_warn_saturate+0xce/0x150 RIP: 0010:refcount_warn_saturate+0xce/0x150 __vsock_bind+0x66d/0x730 vsock_bind+0x97/0xe0 __sys_bind+0x154/0x1f0 __x64_sys_bind+0x6e/0xb0 do_syscall_64+0x93/0x1b0 entry_SYSCALL_64_after_hwframe+0x76/0x7e refcount_t: underflow; use-after-free. WARNING: CPU: 7 PID: 2057 at lib/refcount.c:28 refcount_warn_saturate+0xee/0x150 RIP: 0010:refcount_warn_saturate+0xee/0x150 vsock_remove_bound+0x187/0x1e0 __vsock_release+0x383/0x4a0 vsock_release+0x90/0x120 __sock_release+0xa3/0x250 sock_close+0x14/0x20 __fput+0x359/0xa80 task_work_run+0x107/0x1d0 do_exit+0x847/0x2560 do_group_exit+0xb8/0x250 __x64_sys_exit_group+0x3a/0x50 x64_sys_call+0xfec/0x14f0 do_syscall_64+0x93/0x1b0 entry_SYSCALL_64_after_hwframe+0x76/0x7e Fixes: c0cfa2d8a788 ("vsock: add multi-transports support") Reviewed-by: Stefano Garzarella <sgarzare@redhat.com> Signed-off-by: Michal Luczaj <mhal@rbox.co> Link: https://patch.msgid.link/20250128-vsock-transport-vs-autobind-v3-1-1cf57065b770@rbox.co Signed-off-by: Jakub Kicinski <kuba@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'lib/error-inject.c')
0 files changed, 0 insertions, 0 deletions
ba!2/.HDt tE:pλt }jٺuV$!885v& R1g.hVJӮ=C)5ξOE]uduWX-wbw3ߧWLt Hpzia]3r vps۾1JIT/AB$@O=]&N@204[QQ?'Y("N yN;4ʽy~aEP3 лfD_R[U% 9R ȱc :"!D7+"yM諢!9YϪXH4N/~m>nc3a%iv 4\T50Q|. 7K66#VؗjV{mL.9uvOG )U{"g;ue*]ebqFGS'=\t{/ss?3Q'i3-.tAF 9˙Ïf^6v9>2}޸[ӿwm츧2mf눹ao=ug[lx1~O Z,s5_}rZǂW>1Ч9hoxyEm(G)EsVlni\gHNA8|(]l"qzpu)G@0I}iMհg sТ6TDl٘EpLYvEUV7[ 8W\ߜ[!!}~xhx^-hK%*q ,Msߛ~u`5$ST@pF\1 ^S<;DO{!{Ɂ+шx73EJ`y7 ŢB8SCMDN5ƝJ Q$"OVt6ƪNʇ#pֆHnǫ K_f%EV1R"(DtFgL06{3u5s`9%)'!Q+Q{da7N)Y+J=8+eVg$wuL#ICw8FeN`]'lGŴFOGYWQF]~X[,#N{A%)^M%v ni]90ٌ{-4AU-pUpkڔ[ פ/sCLu7s92cK:׾ _gbQ촋UD𦖣+^;s IMlƋ8h+rdr\IضmN_~>Z\Mo:ys7~'(ZaÉy.ݹx=>ȧ@BB&@D73v0>ЇwX+v趭Fxdlq> TjҘ0nK[U$YT`K޲c M>T6qڼ1ɗm 0g5067H%OPo_qwpL ᖶbP[M˞ØtEoul7 BfmKLf|RԐ&=E)S)QH;},)Q]W)#Mb-ʂ"GJ0iQfe/g[>=d S8 Ýsnٞ>:w6u+8\1tt{oѢQ}c)>_އfmw.zpcsnmdDODzW#yw@ht5nj OmU>Tno+[jnЮU{J_t ceUͶE{ ,{+A`qcgFyhg/E-)S.0pԵݡJXy1^s^_w]YDvnw{*qgxo.ev0pcrhpk۫}жMM]cCk&:5K⹭'Ce.1KYb!80t^ ¦SR5rr݃}Z2a` ׼[.>f w a{2qy ikWqQg3K6a?BiwDg_,*0m/­FU{HV%[6f0%/~d{,~7Jw}KKXS.UҲDߊb6iOuw8uk -ư8TQpXzW6Vp9 [m_׽[;Yɥ?K[ݢ=oyqB60z\篓o@>.7ZT]w@k-*%Ԅ,x^8W=To|j3uy΍c|(j<,`惕]*FoIv=}os'[MB)ue]˶y>Ve*ܡZ@p2f鳏d&ސ9Gƅv'o|;.5 8akQg#VMFCU_2ނͩ.0p5ϒ[^WZsTJg6Je?^j}Y_-Ss‘"%uԐ{>dz\P\а'p^Fn87|\g9p^RVkZ#edJ̩Uؑ9W6Vڪm6rI$$B@/WvUmHJhx1/}[ij$&e#cդ8GW:Ǧ܏vc%bƸfdGVqkĈ cTRݛ(~]*V{T:_dd?HEXĭ)R?YjzWqLt-QERP Np*i=0jeHs4w{㿤I$I$xkvE֯߾63ňB !%sR&gqmUPD5y{4.zjZr @UwqE:Wg6pHepU?ΧFBS$@ΌI L% buZ#Dm *5l;Cn(L_>͵THS!ň~&z4K4bkH~m>̺t<qs&9Nn^+`+AdmT1㋶=vb$rDe"0HD/DxKx! 8e*| w8G>W ɿZ˜7OXzfշ멥'Xo+ng4NἋ=^ߏpgz!y9/l#F X (/搓a98?Ф?%UR;G'9y ci.TQzZؗ۠ʢS ;z7|c5.uƳXV5Rf}A۰r4B}+{%!2 ,hԅ'~^|΋ =ɝ$łm(zNS0\{@@֝iQD~)GbkGs1- -Lxl噚 &+"is!|)u#6`oĿ)i ^P\?Cop([M;V߷`vz "=)Y!N"޹+ ގ0$!_ S߆=mcTf.G]"%ҥ21gf܋ %1 D=3>de"&,={a>}qP@Y~ܤ!f Z69(fmz R& km$DJh  W!0!p:{&c"=_}#vCMz'u}z:j9ˬ+^i!"'oM;ۈ({l{In_1砮vRew0nq.ޞZ$VzP!/& @k0b| h(Wу{NjC3n&mtvP61dk0w^2to`2k(sҲ`FAQDpMYn\>_{@]Yݶ-+S5n?GSM2-q|J=:_:~•vQM"6Da/xFDt, FHm+svgT}!tFjOˮXf*8Fm‚%]d(jsQöket1>M G!n K>>"W{ۉWjQcv0~#}~職89DDc мG@.Wskuf6xqFc72'\X%. 3趮I}a_RCނ XTg=`BXdH_ݾez0rB}{nnUDQRˤDzNH.[zp|r+xx˒z?XvC+RXG4 eƟ).2F]~ui}Ƨs6#M'nr芐ɰ}z8g/v)B+GO;o) beρ9;SIU r%oPD1Nw=Scq!U| GkS^~G˭05~Zt^-mֶ7GZxeAYýQ zĊ>FU#WԎ DtvN`y;ۥmI킐ڀzb&_뵈%Vb/ٷM"C_'~ϻ.k˹MgʿJP}Zj;A ":K(LQO0 T|r`b&Ȉΰ#*-wW95j2Q?Ӕ,Nq@/(cfWΜ̳.&bR oQǧKҞ]Kmog-އg{si:}ݷ莫{l~J~|5H 6j 7gl)sm :;l\jնSwWk1o֩ڝq55iX([+wohs u[:zGZ>7$0|,Z+1&W&旯yvښyßGgWI\7yoE?n"?#K2T 0hS@ˢ.͏  aagnY%bkMPh@]l{lkiN6-+pO|vioB(o`DEH6rjl,g\3% 9&035 a9c)\ 5JѾp7*M~A6(HjͦpŠ l0rx鉂 3zJVxI%Zqp}@=q֑# tɄG"i fyd~lN{\t|'%I~XOM%uvSEi. z[ ɓ : ȈW_+b}ICwh 4vLDRLy]YGǣhF_>6V.1]=[uߧVߜ?G,F_i>W) rA}R?OmPC~] WWdfn+,*ovǵ>1yF@`ܱ՗3kǠ^^,1 |nC閏y_I;#ggF\Azk#gl.snRt>aPan we4im wXx{FܢnV h6Yy{ k^uw;قsAJk@#Ot,2ƕqvry9tfGǢ,nll|sYXwr ǫ(VpLu{XtJkFɝzm%Є3;%KԷm"Ӣ>qC<=2$t6=zٰȐG wOX{>cߺ8F%{&ytstcTVRRh7z: xceæN5WB޴Nse\~~Dz:Aڷv;6,t{ǣ"nV$EݾMdfHMxf#Eܔſ{Zmd؉nƯRݺ F v@B›{z=_=@}Iz?^1Bq87/2wsછMIɿ擉?o4LLmo'tAc3.oLE Ehhn\C\aoc=ΝomRsn蚓x0IlhbɁdsC&;.e0COJ3P>׌=Lw+v[-4a(Ft/8twp3 5$.,n;1.8uĨ۟O6qs'`Έ!vf p8ڀpx;.f0(.d:CxȮ &o9wCX@&dNӟ;,ֹY)͒3PI z\)$k ;7ld|`??$Sa:8G dnWO!U.kȤ3KԞooo}EC+҃ .zv( )rw?逽sopQ }=7sEG3]wn}n!/d@6mM0=>VQpyvJNk8R@t<(G{rᯆ xݧ.1zq\!hӯ8:>=uنy"[k/zۑ[PRW 4a6_~מs^˄Q;Y{z!1Qpk9nP"on PW y+`FXn HDixp%^z) z/?7t~FDN898V=~Α+m"[U ]Z6\1;XQ*PP9Mȁ Ms+ FD*bAӎf3vxmGNoXa.0k} ,B,o:a.,#Jxw%/ێRvk׿{懘k߫:?,Di'ϷK»|G{(-jB!kbN"T~9W/Ƶn =:DQa< Y..sRwYXТ^@3CW?he1D6ғlGWG>WR(TN6%3gc7+)8bHWBd'Qldo~ $#:$?PP%z'qDrJݲD^3ܘ") qҏ~GwI ;w.~"-=J U _LȤmr_NU sO3.O;aw>VyWHɭ|i͌9qtpqhϵcZ{|ti1gI u|uk}v4Pg*k'-@A*˼8w3k#^)o}j?Om n@KCPbq4\n9 + #ðڷ.PÜJu[k~F _~\DPw(<ݝ+x\!~GM|fL:53=p@/q0flYCa)/n鬒<6X>MF$]g[xSW/F ,bqxb]xx=JKMwApm_rrVIM_N^90 \arN̓ JIQ ;8$nIFal"EXH4Az#Iڂ+ nƇ}o,oD.SyI/\pܝИTUU贿Df | YfX.?c}Rw^F`Zw7S9~gd E涱{| .[2A2 wLjod R6&;s,1[D ^丢 *9A I]=+r:)Oom5j2FJ߂D+`iC3㦀 /@}N蝓^4}|DqYk8ešY۰H\UZߩ&^#񥼿e B \g|h!^( nϖRۡrY=9Za*9<  ktnA-f게I}@$an G|PQDe:L>"#*BiPD F67Ab ap)D8~VF ;w)>O+gƷ R]&r'ȦcU0̺KdcJ$ڕRS8=W<5K}HY Cxu<#;F]vVUpew G t*|ʌ @EKN.#Y P5a/6-NQ?N{i<'@P Bf fO[b0nz}u qf׋ctV`-FbH+ kC-"-)Nl "-'Um4fLG#ˆMw֊sނF("}cП6%6dS3/~I?ҿ Pa+) ģJ?Wia^H*޷ ,1 T" EO PXoFu5x|+W;H{wnjlsj \V-` 訥AX!NY4r )DŽ մX5w_,6y"3 P"m+g$̸^3!>SXPH_”G#%}0tm^b?whP%r(C[p V4DDx&ޅk5 -z6Cv DAIH*'|*Y A$>:,M(/ }{8`vGs_A*5ߜ,IhK %"I?~':V?]*yZ{)T85GOP̰OKouJf)ݲJ}bƥARPXD6b 1 .ܳo KvgOOKD @ qd4!߅":tCXI E@vwҏo4 >f-bMhIB}j0ADexTH@mXЯh. } h pk~K5z I89n~8fF;/hGI(vDˁsѤYnW6Tv4 C_Np&ʪ1]kl4Pz-˭]?j CѪᠢ(*AH>eP)&˾6xC]ˆwBNZ~oHV6ȏ`z!'}\=-A{[ldx!Jѹ]28\i"^M]zb̵KOଈFl<ÒaUGH_MqNLm6ӝLPl~:_XwgͤOOdžK6!T%'xР hVļy辐٬dc$3vM̐ӭ19y(~Ag,;!P\)|3ڂ9t9c]l$zR,5I y:y[(,50x>6<aQl#VA u4,q܅F34dSYDbc4uflKTe{J4vIH&G ԝqG:Al}A!T͚ODa9Zd sr(>IbRDQK{5;Å:`8D+DF 1`h4#u+nCs.JRha :>.q*&FB֍\;m:Zq~?'|H6ޞp'OO3ꀿ[=2_4]ejY[9ˢ59@Ɂ|aoOfF8^n1 1E^:y1ڇV]څO(%"U'-+q 8(9Z剀"k4IBHH1s%yyZ3RwVV`K`kOcUg6?|#2l1 :7 Z<9ѺH;;U6xvTpvoӒ~[9mz߹8"';L>gn1Y8eSn@-&nůy0%`2B/&3(ٯ[xU'וj}tBc4#8>&7mkn.%{M=DmtS7U}945?;XҼ/2p%Mk-9' .*K4؜v5pr\+?Euiv7^"Ru>ܞf8xBbb0ښGAdLR޽ۨdGsA4'sPg_vgx "\%z66łMT1 8>P>XP4pD Rɷ#;|\snz/*WÂTe'PC4sXE~Ѫg±Ԋϧp|S)]a?Sy,YBL&5gz.O:/9r}Y5c(~}knt ~v~r AmVw/`޶>FVTE8UMNSbʘ*zuU^}4`ۢ-}zK2 Kvݏ$q9#SuQ te..=Y!NqH (>2O3DA|R.Иub<0]7Lb 7:[Hg̴e~p@3%E=YKX-JXAK"/`XuJON%7_s;;r2Zmv @vel*"dsW?w3^8}V[nj‹%'9D7ȚGtWH#=8UE}vSn޵YF4n>J)6dYsڏ*o4̢%j/ *Z;O1+T9 CH3[jK)[\B\&T}jopݧ5,+yH%+Q줱ft-rmd0)'[キ2[.C,*6Q`1S!" ekXUe5 p|l_PEbbHWe ˛J>\_?HK~cLѮöo5m?ꗗT|O c]tqX-k0`1r]l#N vF&H"Gxgq*Okz̪;aLF!1g%&VQHl?*ndL ^ow;>xeqˇ AAtU.&}eGOR1v+?(1(Y+mT}=IXa/ e_ F:b>} :gSmXL:f^ ʺ[;шb-̊Ldw%"AT1Bv$jAu5r3}Aȁ:]ӷ\<~ކh@0[߬ {n JKG[qU]"9WR\%Ty!\ء%,A0&I(6yNUusuckb:B%|^rPi \/B"zǍw2Tf4,viٶxv}]82rkLo}\ip×XIXy#radpT 4摁5QDR;+ kR7^Ubk=]ܤfWKWeDhղd M<6.ZiMf20g]̎4cDcW2LkK(qs58 SLxH%ua3V`ݮ+b1=h̰icnRIe$L_禽L .Xsɺ_"lM]kePX9mUYVO{s-p}LD p~f{7GѲG ?L FLn Ȉx2AC"^e%ЅEEr.ʺi@.f TP{%fLCe` UK F!փ>1Wjcnt~#StDoT6\Ʒlw$H)zG@7igebΫ|!vtb)3PBV m~:q@\{+=bvO{GAde=r6DhE]BV]5B7#spMpYXn#:*k5SY$s.8':/UĒ.H )pOrՉ8 n cҁˊ+N~棓'ODYhU ˔9g6(:ADQܱ] 2aa$99T@CFH>˛@4$eFߊNZ蛛<ڵL["m-;;مHOӲc`3~c@ȌhUpʚ8i4!i}/Wa a}a9 Ǟim=9=ibIp/~2gBJWhY!QHmT4CHd7iMS vX)eSMGpk*XY-F&KHk+r^}JDe'mguW"6喏X+\:;=iJ=JFqb?Q g;&|'[{0 \m!C #c|x)z3>-\\D'Fq9ك %y ~q݀ Pl|K{S̠)04oILQH# ªܯj&QѭTQęk^v?~~}А-~qWunuѧs7=UmXBKH/ ꊰα)Pyp?4, <1u9! p5(s Y\-cs~d P0? :@n{y 5^E|K(ZҁGMqH8x%b<>{2qx]is?Es0l!>@72-NJ[Jp YY>n0Iem݌/aaGi/t|b,_zx|_pGgmVΕ NiX8sY+;qc0w{.$+V^xG>??CvӸv,.zڛɥoUeaFpL=46#u8F^F26X g?Ю`a%}Yo\&KW>ꖛCrv792$fY_D 3E9(t.W1g|}:P` N9d9Ǧ}暭6[1_v]b9{f1ZK[ˁT߰0xUTk&pm̋"עu P1Qy^$ Q}ωL'b%BoIPTDDu,Bz!7eW굆c 0ہ`,BL yR(a j;F< g6m#mJmWx`\F0&Dwm:jZvA-Muwin2cGz1Q T0vp=JъkfC9TyjӟrPԞޅ(ͣeU) \B@Na6uJ׼f"ü"yM㎆186"&볰H/$߮qn{rQtK&4Ke`WS5 XQET2%C!s8) bX l 1~X{_km gf6F2{ƛEvrf:{3fUJJ@f gk@/w0AqAPӧ*.xM}>--AY Bo18B,woR]!uK!0Ϻvn ӵo9a&46,juʡ[/Än^@|z+_|Fx,?=0+%sc8 C룞Z=0lFm~%ʵ(JY|PK`q'Es5vԞɲ }h;׆JehJ9&zRR@CJtP=sc`Ł":qW{=T1Vtܲ 5$ \XHt oWV@9( )@$AAW}𖕆N;MK;geob럴޼u1ZVwu+f߮ƦM;]Vmt_etɡDh>Mx'2Ά㡣N0:#P(.!B1g9R\߿ֵ1f} Þn]):9/\\h)C \Lz}af ӥe֪h#Ռ|:oM;;ήZ ۅѨ&diݲJؙِ\q71N{i4'ɛqTFy5\ e !دWU%A3ߠ~z/[n(Yǰs*Say]wRyӣ޽C#i*`ؚЦ#'ftlwGRoaէb-꫐7Z}Ñh kzB^ԓc9K \qo?w ^}ΉݶN 1U=;CtD Ir+. 1 }fow>@`c_o%+vK ROҡ>pit]Z}y~5%ҥqvZ>{(O\zx28sz׃zY'rk8M:ZxCV 0& \mO}ٛFv<.h\^ngfM&C13aw[j%vgMI TJ ˰}J'GOп| \Qw# YRʎ5 _*դQgji x2Z >@C@wZOՙΉ}W+~%DxT^i z}G{G!o;2אVSrr޻G ,gZU_ۛ~8g<;`H>X',f6y۷v =gQ섈xܭxg5ޠ)U.Ь2"u4dF86CăޖfVԾ0AYhĽ!&BI3UOF0F˰voR.AZD}zBX__>iP6TLc69i->?:XQ~N?}?U7 [QW& 21jУ@HD׿AnAm:VDq ȠvahP * e}]z[+v$QtCäo}pE =@(/] ɜB D@G.nT 0Iٺ)3ubUaPߺkYbIt-HB@ <{~=׻J61h&{ u }Í׮2ֺۯN[]+_v~MF`FI=yp9'N'9xoc|[KbG~iu&DsuL*ɧĭ0 >d߳y`P"  5*Wc!&Pt#^])z8Pnl( (|Z|;MQDp^]*)-޳~?%2-M)H}{1y"}hG3dsDP*)ĎpkQz~cZ壔ف} s;}m3xPOQ!*AkÙQ2g&ٯeMy-gG4M4UxsHLoGO9¿]sȮ09=QP/_ʞQ{Ċ̦dvuh'xr30Q%SQ׸h},벊gKZ7oԛqV8>7L7j= Il I K+9)n Y=HǗвQ£YV\|O~><<u~vUuT1BuGc[I=84Oz;1;V| 돣 j ˣ։8{E>c"(Zg咬A#_U+7#''(^"@ Z^{H 7] We~>(KH@e瀳i%QJٹ B鉬 :iev⎠v$#o==+]٭#7 &b@ZQ2Z},Ctð1`?v޿$9T1?O%Wxms~1 ,*,IYS20y'>':i#W+@E@^C|<u==^zsyrUƕ~7?X!vJWf[)1yf#8PRYs$Sx'?}6.h%qBS  _H^. (OB ;_ͧ4!<(D ztG*Pà'^lXgF2l Pqiτ;(JBTMmG|g8XAI:< PQnU ԸKv`҇T_^xC73I58UD}nmi֝|?o z/&|O+c`x*FM+"ϓ{IE㟣 n؏þlb;'`‹Nj9,secvWrQ4tq3bkÞ )>L.E1@b,1K|<=Wqs8}@#^K= ]/jR/LBεM2鋦zJ^hz윽ki&sr!h0"(x磤60DR9aQ[ vQ[F'@OA@}_{FG U*@*h>ȑ冮p+!vpRck|R88fM\YCI7.^^:ɮC|aڎ$)Fvr8 o)k[9|wړTvV<]ՇF =vPLUˆmxIc|ȸ! `];1^ A`^ܠ~o:&I5EG/9\com8J5!l`36SH\G1o PJ_@j'PAJk/u5qހ s &*Θ?Qkwش{pdX<w/t˹I .-KL&#v};|6Qpe cO^nuAJ*v~ \dMW6b>KY?fж?ΟѮ~9/zJ ]=Q|,&\7Cg50hq5Nco8::*/tݻ/8#X(O?bBs"d]i;HoDhJK#Eޘ;FtgTE2,P Y\a=QWu5pJJʵ2K7{C<[o'eB%$ <\MIR{(,EJ tYD,ϪGܯ#G 2jI4BCb[!f ,4@Vl&j7I?6L(|Y/kkf  KʇQuT6JTBEKA8|rWZC'}b{z\vq,RԘ[ }>lhޭ V: [)s^HHg-xVﲕGVOFYu<Œ؅˅.Sxɞ5ь&S|XFRzQ2 M:l ml@қHDH W Rs,>SYdfrY J۪IT'*u,DY:2qBw.1L,n2-3Ϲ_Էq:o)vK o5̺1G(be4EXSWD@%;'e=<!Ġɳ\<";7Ƞ9dr/Q= OtùNqȎ,%DmJȒ [WD,YR /N ,.y &)k,y}b֡ S R8?s]_J_ɖ}ؓڜ$_~&:vHI9e5;hrMtݫwUæ/ǡ5珋S8֊CY!{D2 q$!pݭ1K>ȣύTB4SV6TѦՠ}NpDG.by8*)*D!L~tm}.'7=:W=Laoй#W#fZ0xD_|`&FɿHJ}3{S̹ uzTIsT(C]JƂ_}6bmUA*4a g{ȹ6RW׬YޏWS_1\u'ʹi51MIm鵜Ɣ+3xD?moK|e.3HW1ʰ7bp)4CTb+#db5nZzז7xPfL"TemW&X:fY+Kl˧thS4ej<)̻B NU| r"!椑]䓰;uΘvnE!-ErS=Xe͓,E_" [6Ѽ:,oņrYY9agsKI.d ##S/|]3 ƹ^-Oz Ė@KWg\QX1_z4e?z.;Jsu\XuS3)to$!:ʣ(LXsQƮ>)oNeFD͌2%,lK?vZVGge}MoU XV4";X' ȋuy)8v.~Ts rt Պ[19R%6out,2Lk9#>pi =4lu*uk,>0 &İ$ge}gs^'TbC-sl%*ba>m7vQ,/Da ;eV ߊ1aD]P"W5[R ejtKiĹB sӤ5SG&Ƴp,0@O$+8d44̆!8ZvVƺb7|Tffgj8m6r VV ˅$ 昦eA7\JXEwzOG{(pN-{kU @BT j!AUS`Cw`Ӌhߗy˥&G|6-B_QeގuQuշ`ASkάT eWzL.Q' iOEa⣄iJTˮ3~r}^Mf1wޝjƍ>eMqs9AhIm&lJ4HJMQœVhhŕTX`jEfp Ica1}nb'3<9?]ȓ7;oZ)[E͸gr3[z!!ܶ3ѿh1:8"<'zbivAE%$5~u}f /R#WL;z bܢ7DvhTx Yy$etgo0x-&:vvKRփԌ;*~}@# C EhQ24/1 R1Fd*^Q9Ty y4ls=O&;EN҃>]:9L=CqdFӂ)K lUt]}U-[ߩSxDOձ8Y>)ʸGV6B' D">k?K%M-~J/9 ^H͗X41 AQъI({L&E{ g]CԱr [7Oe>L~ NVۉMn=n:o r `<؍/%>Q'go3Ϙf֦G҄m.bC/Y?W-nP@B^)sa{$+F79 _T's)BU?q 7A.ᯙao㋺5 &_s+{VϽ%3$:BC85;v)XВ_wgGIpdg9=g.(V1 +ݫlQ7xav}<K Y>!Hڠ~]2[DwnG'Op>[+9uno$tQ2*}V,!Xf7.jPD90<נ #Ne<`L4KmZ  ȠA޺<\Lq!KdCQeCiT,њ"NGI=x9dp]Q'A:DiM=x !UGxhrGR| `.``V1E$Et$xTatZ{-6 >DԜ!Jz#CEQiCibDׅ$.hĻ (6np!c RX`]ݽW2w _hQ.)nXIú8P~2}  vȲt&= ȑ%c(BG %J'Iҍm QLao˃Eڍ}\@@2([ nIHvG<7IoZajP3=4UGEZJtr @pPWY?M@h/3Vҫ53)L/ȭNJt|@OY&_%V4 k49 b~f׉h`۩wNB2%(c8޹pv{ڤ?& St޵ xC`ByP7fc{8 G1C!HU1tjLQ%k{{8)sTq{&gu6'97Ǟb^jmB˘oZSNQ;(*AdBfWb\~q/jdžZ6"q^F"G-4Q8lQ2k8WGE |)9p6fM KV,jηhXT 9˿|v9(8{$Gg+xĴLU,]* LGւņU U6 Bʽ1`H;>>w(+P0 zFu`AqQi6;`K|jUA?h pwE8uA ]T;UJZ[06ZT.Xr"kE1 4AyXWSyxoߌ&+̥b״ˬD2#GaQCBu9p)L'ǥOfQ0!WVĆag3 jTה2 !C8E8*x(kQ@GmP]Թ縎D`IQr@:DZz#CP2 @Dh=n3g8PV`|.:&IKSonRz79x3^K%A'^a섦'!@/A47 ohJv!@]2W[tia6[gK)~n!G~[ C-IXzC'@YԺ0XaߧV[|>IaVLxLJ3rVdD( 0107AALyO僚?zh< FsXeQ[ﺺ>Cs {ݶ$@Av=WޯIv+u$(;<C/ D( n9RD4;D~E]D PT2!zOb jJn he .vQQ(msd `1 v啄c>pM~^hjX9@Ŋ^r{jB^m~,6D5ҴI[ WjH:G0!$m*8<(hk.:+5ʶЋeHFAUH- շk7&.m;D_ (/o8E&9)1=U;颌=~-oab؝0bS"gE N LHt#}\+rR',JP؃)u}NzTo$(ADu^g P^#lET爦E-2XQx+sKWSͼ9ݯ*&qGB{ac+O9O$yEi8bmdɃpdy}`K|Dqc-OVMӼ)O5–w1FۛW&ވ8C3%&G;mJԕ4@}b1\f:"3!Ld:Ȇj= uƒ@tCJV\jD0!ݜUw%=FPnu}N~J8-ӆU&_1ap妭P9)W*DJ_9h:N s`Lcfڣlu?Y2[3W*5Ί8#\kC!PEPQXtfx˪\g &S2c1K-yU6qܷ)K!̬QOF*sd;DD6nF̚Ӈմ츼 .b+` V3 ؙ>5T.e6gBxJD\DZkWG}e;u1-_}vڄ;\UTZqN/5G aٓ/WRp揲31IE.DwQ dlb|}prB1k !+-(ÜdtEF8~/1'Lt;s?Ce⯗fkuWs]Gis}n58psw i2*;8Nu1n (wgM(/wP+9oîfy~9|AS7PnXI9E|N;r>|x3u~;rx۲@onf<7^ؚsׇ ?+݊瘇aܣ8jU[;⻢zL("/8Q]lc%f0cYv9]?x&&eM*}w$Q,w2Ou)AKgeQY~L[υ䁕qd'XovN^<'& fA}uUwDfM1ubq;_ɡr XF5ݴZ(λRNVg\n֍o˙Į6l2V!c@N&c3y:Gȱ.8σ{ӵv'.hFk9lƇ퇥pk58p`ht̹--^-]&NȞ/69|O;.{s|G埸~frT0Gnq jìuO5MwVWI`y$#Ͽ΍-}kaa.ן5w4" \; (·j6kA9v%ɖfn33EDww&k3h# Q $%^'p$9ilMxdY)ƚsFB8}nYzH:q&8;﬘XfMI)eBP fSӋ*mX"@uKI$VK L`)HIYywג{~qR6gIUr]m_/hk $i7`pv6QQbȲl2sQ&9} L3G=Nx8OuUS;@UNa=:2DmdiDnCTϑ#Im iR%uP;yRK OgmpcVƷsnSjSEPeafFwJŕ-O|Xv&)ϳZɬC'賊= ^s|Htkp,@?goc/_Er9|.d|_0ʼsv~ 'Kۈ qU޳$7ShV\_PϮJ47;C²fe Z=O^ "N/{FRXuE7qrzoՊ5:!T;tԚQN_H3[F;hm[I{Z&(jX|b@{3IX+x29^=zexӻebߦ3Vz  zga޹!oMQz>o&keX$&w"=De9tc/+bJػn0D:<C/e |}A]a "Y|d}F_d\S6=jW~dK/t=ز;+>Pg.dkCzI߾y>z|&r*bW|G~kI"73YcVElgS_S $MMX*f3f9?!b9 ..^^uPv>A' 3c#CZ޿cZN>&8?4n#*hhwN({;?op@bdWշN jܲ4Չ?UPYs2ۋwu~13/i{WRU*%)sh߅e 撗mXs(\9}B2P4 j /ƒC×%RShmo_*nFy2o98QQ&oghfvb=w5H/J.K>mHKG/ho\Oa$?;d&="X:q,sz]ޢmJ0z-]ӒE%wN%e4\ ( $E\bg^Ep/{fJT3^n|8,sj9f#\"P_F|sރ䡽+KX&Ui6%4I1XU ?C(!FvrÛN֜g;b0q=wwk{6D<}BK5@f{~!E[2ԍ-#޺ک1ד_iEue(dQ}_GD$zd슦{S`"1RarƂ"GT>WdDn1[ߗio^Ȫ@(Q1K^4Gq@E=|8#g'1-u=3;u,526\:Unzya=GjaBdnU 5pQd7F~H#PHw;E %!{h݆dD/;Þaq0A]7;'xJ>yf=7ĆMt&"IʑƩEڶ\](Ӿv]IF\e '}_׍ Re?@a^ |Adދ<\:6_.puN5֦afא;SnG2"f^BǽulV^vG$ B1Cúoy'oN W(>v9ϘwXSftݜ履X @܆_"[{@!Ys(! C&fܒ8 է49uu@7k"/tϿBPY㎪ <6/gþ(Ey2끈ӎpE--E\σqŎ)9WsҨS@'z -B؊aE#{ x=FNNu 8/_? ǰn!~s΀?M/ fU<]@Ǣxu67;I}1І+O?/&T/SxVëSBR@:S! bSHk4!A0JG@!CJrF "4Bk_~ɑ6@QR(5 &va?f~I/ 7ٻ`UtFe!-QPDk>bSg旷m}Ň&y^ެҵ?-X>պ'V7j,1@Y6ll`ҙ5 yln)á2,U8v ӬyykewI0FPCmRYgSP@)3Y&լ>V'8>Y نQt%vS'23G8ٔ滓$b:߯1r/RՄỺ>NuԟѕJZFM0SG~V?i~7 t?E?_4nc/{ HY* A:.\p>P\c_]{of:Y5çAdX{l'ƿ2{mW[>(R G>p09>Apﱙpp8V|]oH~O,B%9A7Āд"ĔH( @LQ]XZPHҧ ?`ZfVN鈽򧐿'^0k  !)huք6J/Fbqwt0_t}Ts<@ מ_w|peݏͱ1)}Qp:L tE 8xjO?nVh.>u_s+vMr]w}6w}n ~tk9/ 71ҩ^ޏdjq6/, u tDK0:8Ţ ֑}vO\ D*B%ܸ jO~_=N٥cq&Ũ.Ry_L!aKL`JbQܡ#AIps}>=`|.Z#~=~^?'6;7k~M}?-}Շt2g1ˀۢ{,۰_x퍻]a^bck- 8:t_8/Be{=.}ߛ?Fi7?dHy8ysg;cףgdlMӇ4o}{Xp o{~S1ggƋj]]R68u8 b;C8 kK{zqN0r7p.Ť) @Q2imc,KvOl+=`"ÔMKf*ąo#[޻bsv:scկCc:Ez4Q ׶hD=© I$]XuX`lh h5_&A:J2(.D}$G@M̨Ct!  I IS4ER?wBJ! b2~.3y~]khxo'g?3wk{w Aq@+&"`>_HխrB} awn~F ? nJhHA% 9?C8}ofb!puuVx:~٧^e̩HOĂH k*iDf8s/+0$V ~}F^8m>ntǢaagT}?N燃]?<}i$lt8?`g/wmz} n\>_9'jU1~읓,Qc@{=l^V?;f斴@nWEu y`}63Fە刱1M!vhf4;`+8x^оNwұ[(?m*:M5-[f ?ax7dFk4^] _Ёy"%#=_L~mIcNЀ`8*p(5});vUVbڽp@RvcNzl#vV=#=w^%uMJLzCYm3@.J]Хi|ؾK}se1pdF0Z=(J݌^Enx7HyeP"'U/<|jgj=%MI|>>AIeD}謨6( N "㒰qNw<|p#u?)N" =<== lѮo:1 f>DEM$aw:#e2xU鱍"0xvrE\'j Ezg?k}sİٖ9w/A|8#W:V~n]]%?R:%VxFlfsl:bjfmJ 2Kq1T3(7;?5]iJ7o>xE8yҬ\8n;Sff%LQlXTpEzlx'J uW]'o+1}h_/e_w@#xóD_G9սPGWP(|$]YB#\@P0~o]Af=[>rK=zzD1#gNt9RѫtiIq@-* ŘDCӻ:2U6ʷ B}('H  DF](!sڳPQW^ψL-8l H42ȣƛi>~Ox'x6##%(!O+l޳ß??EM*uwF%5%x 0@]If-z džjL$)}deُOyz秀 $]ua>Gz E|ν5oDA $;:+CuPN{E0qDFeaE `4r0_0}A%R&QoJmkLQ~nup$2"X#g6}S\3=XoY;m DaQC*d#PsS/N@#xX9d#^m|n)Mv`ԮOʜ6PV󣫄Bm7vo=sMQf y P1[ԶYJYWp`ɯ[hoRj_oOj]g_N_7Ì\6b0$kǩkdl"%c ykG<u~.[]-Vޭ[bNLC1wfձ ;N3sw,?|S픐8@E`LIĪ FY{½#&RO,X3j9a#kQju]|s""at ԕnͥ949܋0絵؃uC蹄pw@Qv}Q{_R1b_>eNhji %iP :c[ 5discA3Ӣd-Fׂ/IMvC?_e&N78um=fbQPR  `5%>Z?67a"$ ZI,;ς&Q}n2@!K̝|G,yXnSe|TuYC`|7 I?dwZ^vn &CzBɇu;w "P:G5|p<9}6˪4Uxyݛ#Iȣ/Kop[ W1l4sXLZOзMFYQd9z6`0_QhÛ{&7=x$Qʨ;YU,B-1J0:w>fUBIw-uOޱ74F2nưr`CHʹijZ2Ryմ Ad_dtNS}}$zyN5Zc"?8ErضjguU]cGu{g+='7ҝF3ҥƮ~1zCޓN?U(yvGLE h{:=wH6Jۛ&!0{-HQC[@>,іM<‡w!Dʋw]]52]AӕE'~ݬ7b嵝][8ATUT4J`" >u^cj{E,X s~ ,/(cL#dK銆Ty2 U_V%*9 D,,\M?ʱu7BAV%=/j JF J0t3afjUITu&>^ HȪUۼtd~Xۥm*R9v(eI&R& RuJS-d"}rmH 7#;֡bi ԩ! Eag*$;^~G7\^V976s6J:c^{(7kƭ%OGFhn,Ҳ|µ獏S)'@ɺ~Oc 1/m1B~}}a7o69"M*JX$tJ QdɑL-VL3џ*K$'숁:SaW1@ NsAN`8UAl<&^Qn\̴[f\iKYBY8|"zdOcVD?̑n'\t7 .kkASܩN @|8V:Lx|$ n "s%8L otz&oeMSl45D)ʬj܇Xeo,R.LXyVFthCh) ~g&uV~ %rHf+>f/}~j̇џme;Ec|5U&R~?AGw~詫/]I낋k,suz MQ/4,ɘ fW3O/魇E lcWp <&q/s@9gro޸D؁ɻB\QB@廐w>K:>}5@:2Eј8MOG$™]ZU¾Ww gb4duQJ &;d'C9H|ڪ_pw=&U^Q}V -ʾ{HsxQ̊Bgj%&_nlRvyɟ>?}!Eft %"cزҀp*53aG,6$3C8Axi;*́16A"Z5 s& *B9%{SnV47 /2>){o)hm\ A~uy2+rID\y*=<}CP|H/2zi兑cDo?fݶנArsGwzAQ_&GA=$@' (?6AJm}++%E-< S,[@i.*@`|A@ꡀ>~ ̌'(v@Eg=wɏm iy\vIC&a Iבj'F "(fijŠ́rČhrdutMcF~624Gtqp`xi_KNI9 ߝ~;}3yS<#P}%)+dmx45j#Hk$=ǀ@PTk k v{"8!7 %"sAQ'>GÁa)eϾg5/F$wCk!o?;nn[~n>TB (/ я_?zAQMˍߦva{b$:&$A#umx˰VBbWI!:8HY}Tۖ1H jj` {yZ/݊^u-8?7zg&1M]Js0RJ)C~s@Qe .Ծl4Yk=W,- {bg-۞ rX|{Is1y<`ԅVVWN%0rGdbrp6`ƄCԉȔ>| "lzz EDBvT2XNyItE CfC] Iq|NϪ>ѕjB8遌S5qqҤpF'"0icam053\)Mғ-0G*smu4{cgVoFLE#HODa9SFyE[qZoɽi|DcC8eHa$V0:+?"%)`k8$$SK<_ ƦΉ&%9lZ7ĭC9oFM*B81[`@uYjOayِ<ei{њ\ *v\>n{ 7JzXǂ6zWƬm6SX Fv#_t֌Yn|X3΂|r ꞩt_a_3~im!uY`Cj!_Df΍{@b*ҷL3Y]TMb71oM\*qˉUU꠰ܔTmA1{cb/Ʊxσ`*Qr[Fxٲ &BL,Ј5DH \b!ocR*JYWLb>GwWwBӻ{+84AlzUK-q2ts"A zDv/mWBEfF~.jo_>D(.Y_bEs4;Yy h \&DD X>:=U",3X|8;oӃ|a=0@5BUQ$N6lO;n$th-| KYecRϡBR@p zzzcO,QZy)րNWr':i o@a14PJV/Cx r+,[LȎ'i 1M*׎w̸H mvJUblj{7 !Qi|=uq|^{꺷$DW],0R G*k0uPA z=`@Od/~b^odPd d!X!$5הɤt"j$;Ѝ۴Q'`X& 9 ]4eEFܸt$RB\5h _5 d^ʱA(q,-PM% !3`{!)R($?76h %ʕ @4huy9aQ6{ CI8fYWvV0IJdzP6&GWn_Ma~ӫw h~rw!I%@r'fK1[$#+pY @d K e~sDusV"AW/:xps: )"~F-o@ s%}d}<@y >OԐ2BNLm!}znpE;tIį檄/38Sç3}BI7oZ@RF'%Sųhxw{+(@H}Vάe0(E')DmFN[|  0L&` C*)G j!i9cf5W6I0! =DuKg5a&Git\l3b b2/XAqkfT`%@uR0 ?BUek( E[ i(iVߎ4&F1}  ^w?yHrvfݾ6<D7#O4Tm^#(ƸQ[tL%}s-6$Ŧ+?'?2:(ZSR PI FZE!ODy\۲QȔ#Lhs2n R\+1 7HWSI,eG trHT(83!BKG̫@l6aYRc %LnwhK՚qi Ӂ1AL~z) / H*Uy 3@%%ҥ2W[.3C'2xlJ>/RPڶ a} պ(c*j 铖b@ĵb٠:1 1'n?kb(& O`GX4?@ѳ޳[ϴR9®|?֘\eˌ?|/oߪFz['>nOu#q?d>'smz;0XGdtsX[.~?Ff?"5~×olٶ͟8r=|xwx<{F 'sG|~) QH@XQ"- W<{[_]i`[sÌ3\| oDhKo11N@00 L7enEhy#9*Nn6YxgLͮB7r(to%Sk_6n^{$˚!HI{sA Kc1D5jc D$S^i;V:[:6$M@߳3c|H ` iRBRa3CyRtWdbJ]Ɓh\y.gx'PGJ?.Ã.LH0]~XuҚK'3 O-[J]l#mr"4}5dOҔ*}%ٌYG BvD05ue|phc|ԱD@Z9+~qs^G{uٻz"YXsc([*A)&ÕSewCoΧ }`RnY $(c>A53e…&ºݐ2x79b~e[=w_ui 1A X =Ey=b9Lz @) apn&?|>e; WjAC6uW,Ssg5|AP͓@rP{h  T44.A(ȿSQGY2Tz4=]PG6]'-]Z:bn@$?9'ի|B4R@7q׷)g<$AY!2yEnξ|+$`@%-Y,A|.W]3 B/$"sxy n+Nd9Q-_YW#oOn @nny4a@8Ԙ 3h!Ux [aЩAo1ˆK,Kr$g%h(kR !픗ٔN]Ra<Ç-xۓ/r}(K{!̭S[#ħI@ C(iM@i\4?X,H#]**Kx?7<Y9g ~} 7Y%2{^~yɝ"a!`Pc]FV=OO[DMHqߩzAmY*+yFC"%5;4è'H" `7-24nNݖ>$dA{T6'n47W=\R$~Cv̱mw%\7C-_@D(*P,9ckZ(B_wyg[RK-HD4w7b@b)mѯ0Ũh[sTR0pA/7Ϳ|4t٫vF'լ:ۛM\GWQV^&TC@ݜ{nj׸݂"=w= RB ?crH+l50X <q}k&#?Q& ex_4y,owϹ};1=;7T8 Q7p82 uEE) 0yAUOżεY&,@3!KI"'-lL/T!mګ`]ID@Hj[/MlCBj,[#6Q%a_/P뇺EN\L'mum%  E{"H(EEJArP(2z߶psw ո,,/J""qQԕe?&wb;u)NqɨoZ1ŽBtzE8P5^- Cb>[Q4T\{UٻY4Mwk wDw=’|83{(Cmf軺S_!^s7I'y/+ZLhH&S/M<8DžUxǖdPn}cKW\OC*x]Ń 3_fN9#+OS1p%HNthΟs EYm3&֥N\9ᶛ;Ef _~?ǧ>;G/;guA¤15e}v7{G6i}ߪTa&{E ?pDqB=p`C1ܕ~喝