From d17b890b746725ce7d9e7b844e175348376905fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rin=20Cat=20=28=E9=88=B4=E7=8C=AB=29?= Date: Thu, 11 Jul 2024 18:42:07 -0400 Subject: [PATCH] Update to v5.13.1-30-g37e60b26a.20220819 --- README.md | 2 +- ReleaseNotes.pdf | Bin 105607 -> 71069 bytes core/efuse/rtw_efuse.c | 10 ++--- core/rtw_ap.c | 6 +-- core/rtw_ieee80211.c | 40 ++++++++++++------- core/rtw_mlme.c | 9 +++++ core/rtw_mlme_ext.c | 28 ++++++++++++- core/rtw_p2p.c | 34 +++++++++++----- core/rtw_recv.c | 21 ++++++---- core/rtw_rm.c | 30 ++++++++++---- core/rtw_tdls.c | 38 ++++++++++-------- hal/btc/halbtc8822b2ant.c | 9 ++++- hal/hal_dm.c | 23 +++++++++-- include/ieee80211.h | 2 + include/rtw_rm.h | 6 +++ include/rtw_security.h | 3 ++ include/rtw_version.h | 4 +- os_dep/linux/ioctl_cfg80211.c | 73 ++++++++++++++++++++++++++++++++-- os_dep/linux/ioctl_linux.c | 17 +++++--- os_dep/linux/os_intfs.c | 14 ++----- 20 files changed, 276 insertions(+), 93 deletions(-) mode change 100644 => 100755 core/rtw_ap.c mode change 100644 => 100755 core/rtw_ieee80211.c mode change 100644 => 100755 core/rtw_mlme.c mode change 100644 => 100755 core/rtw_mlme_ext.c mode change 100644 => 100755 core/rtw_recv.c mode change 100644 => 100755 include/ieee80211.h mode change 100644 => 100755 os_dep/linux/ioctl_cfg80211.c mode change 100644 => 100755 os_dep/linux/ioctl_linux.c diff --git a/README.md b/README.md index 8493271..2c275b6 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # REALTEK RTL88x2B USB Linux Driver -**Current Driver Version**: 5.13.1 +**Current Driver Version**: 5.13.1-30 **Support Kernel**: 2.6.24 ~ 6.7 (with unofficial patches) Linux in-tree rtw8822bu driver is working in process, check [this](https://lore.kernel.org/lkml/20220518082318.3898514-1-s.hauer@pengutronix.de/) patchset. diff --git a/ReleaseNotes.pdf b/ReleaseNotes.pdf index dc05dd7bd04ab954e926c258694d555600eda9b4..caf20825f23becb46cb2d7656fac93726d80e088 100644 GIT binary patch literal 71069 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

O4K#uljeIWkz9@D5 zB}mdLI)h*wN--6(W{T$^Cbum}!6qgFgc(9#MULc579BtS#Hc>m06@rnD6s%Ima--l z3QHl&X_`z!xW@3{fh!LnC);Kk4Xe+GK|;|qkS?0XNm#J9nG2boU1>cEU)xCCbCB8v$ zu4CTo*|H<}l00moGLlpSN|3JKwV^S_pDT}J>glGoOJZKSA>9kpr>a$bMs=xpGTW&p zM~~FugGD>gZhS=JrhS!tk$9&u#|X!8G5mw715*uI za{o>tpN|08N#LhN%Z0IF@8rS~A}dHV8gWc{2L6Rw z)Q@7}H=9OU)DLSZUXh~yc~o+c0E`>IR*(l`Dz0j6(neBMbFge$3~GpQQ>G4c`c+cF zP0b$ddE0Bms?cD}$49bY$mc?GVC;{F7)-Y#LxMFK$dNje9SD}|QCp6R(`M-m=rl(2@euksRe#5Q;Ekor zA)I4);CK}`5f(mKfBj{7X?K?ZY* zNoRa7A)9LA^dh5$wW$IYk=zr4h)U{1`=+4=tQSJ@nHaM(s4~Y;K=JZi!v-)?6Lzl; zp%7ucDXn0EHbX8>Pvo`!J&@aJjBfRH)}MU#thH5Vds#80rGahU^?dY((sa4q-fp-{ zoUiWH2FspJS;B4W@mV}5IB36gwZ-zN;rp4)H{LXeT&1O=O7}gNuE*_3&aDpeT=Mqw z4mR48x$ANYOlF18Y2)T_B&t9{1FIlRJp(-OmxmMLlDh!x2Qp;x8~`H33G>t&0}8}J zyW@)mGr)=C%2P@IB?A#AD@zgp(TLOW4O>yF+kyc zUt)_VJNZoN`+;A>n7A^}{=5znkXYDZbU+?Hg zeqXMiuKffY>9^e$+@KGe7=4|ayGFLH{9AETOyGd7n!H#kD;>fXUi;Z zIG!!L7bzEcd6tKM`g;V$p>4l~Hl>UdeHP1Ws>>HUkwE$Yo8bNfyrB*b39VR#@yZ9j zaMFE+vO&nu#FqH#hAJs^wAcWB7-gk>yCgtz2l`QSP&IVRj+2g-3f*51pYyKfeD0VX z>Zxtv#T}1IeXrL83;lXhvEu;#?-zm%XxIl=^0Dd~B+LP!?Komw);}vY=!-_0l@Pz_jZ|LB5-sk_fO0`czPv^>R}1VO=xrNiw8GWNVEf4}w_-aohR76xy9=k7vVae`i8!5W>v@I0FhIHGQiH%4v^ zZRDoFDhw~=N3BeCMLH>Ctr9D$I=Z-Im@vArIRBj|NeNAzmkygW8VTehnazx&s+J|3 z&}pbq!!5Fh(8Ce+^)Q&Efy^=V3=WI_$Q8}2q;J5?+7qBO`=taD1T4zAYD}W?qsTS> zsg8(P&tpE+36n5@?RwwK<}_O0@qDsHh1vEUT`;b;bUfh!Ju1n}gk5S%s;AZUJ$%!# zoiEY3v+6LRpWNQ|QXh|56?E`BWOW`6#1WP;*%P`I<-WkHEGDQ_ff6ZPEUrha)H9yy zN;bv{@LS2zo5x_3OJdBDUSbuLv5{4Oy$Bl6A10BApi{PKD{x@i5LaF61|OLE26>#Y zq5RCy>b68(dxFx@?du_Meb+i%7IUSg^oVpx(iRc?APRV@9js@c_vjSd*aN9Ey2$#= zwA%$7egoqXf2LDAZ{jFiz|ucf8-t-u2pFcgX-x+J1bCJ&q7}5^6iKj@MG51F27nJ> zhzu8>;J{qoSjq-Mk(+>-!@&r)eV+sp-ii4EtUrGNthBp+{N6{s)ouLJzpya6+WWXc zs}mse-VdY2HciK>_Jwd~%9FUc+BYbR<#7U7FhbF0WpU{~7RJPv#`R$+{yNt4Vg zU|=_|k0gRcb=WgpMa7awxbnKhIRLpplJS_vY_*t;_nejZ?=G@oOzu&)nXsVW_T8Ri zCTGt(v-`2;VJ)`@aF1W?&m*nX*L`i&t@mA%RyMTf7^lxYWsp6V~Z)GOqK<)!yVu6_=VJS;$h5aIm2+o7N{dGc1 zWZ8wL%W)MU<`KKE`)5i%JBa1y@uKeUinb=DqiNsn4+lK7h#Wlu1Wr0aE*H?ZcCvw>0je-q&8ZUcC*wErV|Ax=(6z#vrH4tSDRUI=E^ceZbBJkROI%Y zOzDwdj^j>=;YXovxx9<{x?0mJLIpPg0nj_CxCd*{EP_oDkA(8_bt(Hb$;?_Xg3ESw z7@!sTy%-vm`S}=k!A&SWFZ%Rii zj~i7|qTESB61SP0aQMr`LiR%zdcYgkYRyT7Q4he_##u7vaWdtl7zWF767i)N@zSU< z4Oxa(C8Gv2{8EdSZ5EPBJ+jZkh%N|ZE}u+KodfF?n3x426^Nf{iFIn*j$0ZSK;tSd zM8h^9!w_O=^;Vy7xtfZq!z;6(tKY7-Z-c8MJ{q`{TJK|oydFHYyl*;YzX|BhlE;CJ zlr`9IBaIJ?n>5=?^X=>-TTg5HlhP}FIX^R@tJhm9^~Ebb>cfkZJ3e<1k|M7Cdk>A8 zl*L;&3(u3a#x7c|p0_VM+@3W`E4z?wsp0g*WX5n3n(70Nd_Abas1ojD$Nl|4ql4x+ zGWT`~q53$m_y3wPd~ht>*v19{;H2Q-=y3?R#JKdBh1 zJ5R%$RXmY)I!g3(FA;qcc9@hz4FO(V7gx56R#GAp4;EG!Sv9(y(;?g2QGHxUeN5)4F$-epmI8xdD^tGllgWq`!juQ~ApIGSR zAa>w=5Ox}Vihr_@_u2pk|6n2RuYX-N!DnfB`Sj zhT$Ob!93dXo-TUMoMvI4>8i?kwMt{s!ap7eif0D)q!k!HIMch`;MDn_;Ivr<67CmY z8@wpO!Hm&paoQ(U0-PsXeB;FKOf>LtV2{6EX)C!+Z;9T-+w8iZ6VsoB-cD>UeaVL>+(`+sfJoZ z7yjLzTup>-(4tsC%wa_fSDA~@P?@zThKAW!@1dRWAR>e(jKa_#1E(j{bFnDme00V* zF6jhtnJmniYNKTYTQ@j7(YUw}GoC!UIO*#sm)%NcWzPOJT>Aal*0&B6|rk9)7MXRtu*Mi)2-+MWY>1#3dt)ZJGhUKY0WvRA_)?u_eq+XqS z^Da^LvH3lOJ!K^^O!~sWC`>B)8b>qMRVp>c@|GW=BsNSE6mQNp=m#MPj#946Z!iQQ zNs=HX2qxX-c6pv=eR+YqYENNj(t)d<13(pQ{BnLLFAJf1Z~DT15BpLDCuazGxQBdZ zRxM;%G2@&3Q#rfGja6vq#90W2%pLZN9-Rb81SGgd=|!71`v zK9cin#Q4&s5gnb3a)LhE%p^H51DZP0A;2LXjtE!eQJ)Og;N5TCsUVnC7F_{~)hp(+ zMhw`Hx|MjqXJWuuts@5!v`VF}p7-N8_V@1m8F$NZHG4V#DyN{cr{?n`zi@Ukvv#AS z__PJ=wSO)Xmk&DS8}tMl^81`6Q}#y=NAvga{)(jFjs@%Dyo9e774b*{qK^ko1fCqo45fqO%6i6oqWxyXt zCL|sCuX&zKd4L>Bm)U6MaZ*r%FC^n)BIjnVB2*~~vB31mKlAj}l;vv8_4@5+Gf!yI z<9F<`*VpnJlT!a`t!|O+=C98nif6>p+f{$E@4K1S&+Hdo@}ou8A;M94=n)y$GkVyW zomm)3(k1+`ALSe_F-?Ckmvg>#Wov;63y3sv*_v9S_^omGm|}Gj6cMV3qdpm`LA&4j zuVM~~fQgGR?#3K=U$ahrjdP~9d{SKD$HO1R?@(Q@x0J8(Q{7%?d$BDJ)3dOjpIRJm zn4F)3iA&qIbBdR_SszkfQn+#1ak%3z_qhXp$^MR;)F?%sr#@{Ic+e~=si^T>$AKY| zC&sLV9RA)vV~_Go_E1%P;!_7Z#C8Q=?w*{>r!Z!+USUo5@xlr%$;u^}$E#_X1#LA? zWcwI1m&Cx=xCW_TaZLk~3XC~hILc6^Q`V&q6cv}gE+|3jFqQGSsc-`%W?qg`ir8hJ zI#M}rXSuk~KUO|F2GgCeW`GbZe3EKDr<@?f558l(3A@R@JpcOJA1Ej8{TW1hVn6U{ z7&IZ_odly)T1Wd?gt1*3d&n(Lu=a$Nr;XpEU(}k$*Q|{qqWTaE^^Bgn=EvT>V$_zvq~&v?8HWn67LkwFcL8)qr1|5#jyl#t_BU9sy+8EZBQ2hXfO#$xI7mjCsX=>bXw zBPJ)?h2qd7NM3%S-IWrm(ec>i^6?O}@wWQn-gkUQpa3!hd5oQJ$4Y2ib>9B@_*4f<#DO8uwu07SzKyf=RB$>h5X+x-cj$BN?h)23QS%5k1)F z!L1T-)$F2~PC(h93L$XmUa4HT3N^l|esN4S!*UfYsKa&^3`qOrnZFE`g*wt@HvvUT zj^$5J%jA|n0!7+ow*^&B;hCUZhuj^laAC)029;cDjzocTBHGnA)E)Qq_g6U2_`*8X zms~r%ncn#k6i=tN z55hlBJ51&}X+uw#@#cQdncgrWY>$8=#)x{FWKf~wUk)5s1^fSb))~m$^=<6pJ z;O45klv`NWYgQAuw)gGZd@8q!$bE%i59|4ezC4uG=!`kOEQgGe7tuJI6vl1~U=Wne z$S)9d&Ct&Ws0jma6#y2<4is5Bg5Hd8bqatUNC+AaU2h1$9_ZhktOsD=N1q|w<@ls@Goz8LczCEb`@{E@eWmh#wrY(buW4)?)f-<%9mX|IA?cp6mEM6B zXz!>EbA~)$wh8k5vV4lsGguxsz$H*0@E#+^1P8jGD$t!4fK8!3)w5g$2Y@kC)G@dp z2>`a~pSwzcFFF8Ousu0|8^}JKh;5lb9cN@tQUDf=Ck|{sUWKniKs4CCeIg%Q02VMk zX$G+rTmV%>Ugntn^6T8d+8C1?^oVSX>3*Zj1>*C=@!~`InbncA=5nNQKy0a&9f{M5 z7M~0PItw!zlm<-{07*RO3#Q|WD1txIzk_Ony)iL~6%9|BtWQ@AT;?-tj))qz2vg|} zgfLT6v8pv>pg2kK*E=l@4bUC5evvrX)s^2by1^i5jEy-e~*?SVo7jBxHqUE&Kgg*?(EwCae zxf&;RkZ~*RmslR*QLA*P<`e-r5}YqX7xyo^zw?GqaWp9!HYy4>I&Xa3s+8BS4`$kI zP`BQ6U{9;O=hkgpO_$7EJZ~z#$2~suR0KO zN-_3uNm*7?l0yy$r3R6y1*JwA%_!4JD*l-2$fV;-=Yz|Vqbh}{anX~A+tH`d(2}x=(Cl$tbe<$?1aUK{KH}FLhY4jbV=^IdC8yJ*q|tVhHdxw?Qo7}-NvuoZHBtCs?yVOH|B5t zS~U{-4Wk(xn%2pJyc7LC+)?u5wMRXD-Pk&uX zrje^zXn>50p?zQ@8?g6SJcS<)FQU08L-kzB{nK?6(0>%2 zgY-1vlf^}n6iB<-dz8t46HMQK~0N~BsJo4q}Rqr6ZdJ8)adv!SS<8Zv3T?AaZa zd~bTrU0)`wTdZ4b3R9&c>(-xV=DP!AFOf!)EGDx1G z96zUQC{xs4Qc)$lV4i3Zom`C7ROHI?Od+8#H(2q;(Y$gsq={laY#|()e2=5=Le452 z8}<7>_GT@rq+3AX_+=Xr!5ikc)uN9yYxD2t6pf3pE7789UFVv>3?RN$@-`yE5M$W7pAn++l2w5-c zW{xz0jiQSbMzN?m%hF#;+1cF2ePcY#bAb?$iF;v2^zCi?5I1CWw>K67da&CLZl;ak zF|wDGh%?rkwDFHM%+~6=p%-^OJSLNPuKM)frUmJM`Lbn5EKAq4DHTU5i$)Fpxw|a+ zN%g)3W}I z%1GqWG{Zuucu?uGN(2>G43&(TpE|8L(QT@|vMuT$NN zGVom@-BIVLTe(*VCWQ29vQAJsG2T6CkwB49O6k#xdi)g@vj9M(r?k9fU>K4zdVjM& z{lHleBT{r00f{7RHUaxa=Isy;(smRuK4ZXOiP1v|X2rb- z`T~pF!1hSc^PmJxEgXnhTVFws)GV=xzERjTo1mVuH zADWMz9=X4u<0dYh)_hVTDa+?lEG&zb3NFj*9*W)LdG~71pu{EPXLPe@YOT@B=5oCV z0Hq@=84#ol`b6%&y%hHDzJ(3w>ZHW^c;;TJC7L)8(OK9MQ1@s03dD_>0u7F8IgUr* zG#mPEsGxF`v9OM;Uhg6f9H#6qRtn^fjbaQTQ@aDTcm(M2F8{W!A_e&C>;<#8mJuJ{ z5@Oxt6{l*f6Jg$_uuZ3Y+OS8bed$fbSZFi;g6wv5U@u2}L|_&Ud0b!)j((H= z5?(T=edSneGWW10C{XNuQ73$|utN@f6M*!j_lhCnJ;nA-FWqj*~R6ie3kd6))b6Kz`x&P$uD5dJc(yIl`j(|Lz?W?0a zU_MknY(8KvHtuyytv4omzJHTJxj2L?S*%)Ed338Ax^TD|)E5LS(yOT0vSefyxKz)J zWXTb;^E(ZcA%$ecby>s9=!A>8HY&V2E=RLu&-QH>eK8fjUr|DUGRju=PQERSaK9c0 zlK+5;Ke$?9fc1tPB@i&6nuznZ%4Xi22C!tNpGveFNV1c|7UYoduVm_z-)VF`QY5F@ z6IHBkUM)^>5u{!?Xt6gE&ST9aqlR~Au}BhGIL1r|&b!0sf(bt6nc@hY_%p#tocgoD z1-bLVhYgdS^zSV(Q1xXHHklAr50F`t1(&nn7r){u5H$-|*`|wL|B{bPjWjVJNoHJ8)DlWr>f^; z!F=u{RKoS`n@p?jm42#TaXhzu4YhLcv>iYGR`tG|e2V0J&d|SiwBp7|XJ_`5`_{Q@ z_d8~%+CQqk=rE|_xINnkhd%Hgl6IlMS!+E$xMtegLhL?Y`Fr*}96!VL$wuN_bv)|F zcy;r(wm7egN!>r=X1)R3nCOy#HdP!fD2oVKVMLE!HgP$XE6T+_%a(wYD9W2N6J=-O zB=F??J>}soqW17d=;AX2@EU^(d^(Vtf6=SnMxT$FK2pk%&I@n`-X>ECYF zKOW&%*Va~Vt7+lV%4~C&o5X@zT@I#CY!e++dT=H?XHSR*$uVTpishn0D_Ff+QY@+% z3J>H2-d|C9do}^<!B&SDQI%u1Ck}KCWh7 zhke(Z1M~Eny9fluoq7d44W!4-dg!l%!+GH6rLMT=Z-qF^S>|hQx z2I>y7*uTqPMI_09*qy%U$kG{p*HaW!JVT~!V@jV#P&c3X3H^3)v;A}NnT_51Ildey zxrg*#^|diR43qr}QOWxatm5tCF1XG4(CGwMGr~hK&NBzagw!~l!#~FEy+--hpFrh( zk>Zb@BL|xF^NZ(Y3bf95;;ysPmyFJQ-5Yfoz*9cnYj#Hnk)6tvn=#mpsmVL$V@7z zAO3)g-MbI*>2O^laz=WRRdd@zT*3+5Hv>ezs?zBc%W>jz-b3KiFZEImY2xk({#!}K~o;lF$piLH!HcluUK)wRZ$zoy{W{ah;ky>Ao?rpBAiFYJM8|4_cxUb>A_Nj zeMxd2%~!*mIODY& zXfM;l!(men9@s2V{}uU+5 z{yqLujp)5p>=J>)bc`!2CcX}5ioA5xB$&pZsSan7l{)$n(g^&yKMZe5(UJ~9GRL;( zvnQw~H7S!RV$6dg2ygN?qNgqS`J+ewxGA(DM4_flU`>*KC1CuN^^iIlQyuiVb?Mo8Bl1TNFEyNM% zp89J_V2$VK+$&WSeZAI}m$`8?h;RiyQ6B7K@N^D|SqsWH5A@?%n8+<98DGeeF2 zeejfmZlHc%rC@LF`kGR0eUNaolXJ6k@-uT&a}Y&*T96!WSr`6s@*{9xP?K_ilAXD! zq-AfdX>0nK(L&AH!tzRUV`+YAVSR}bIpjz`GhJ(Yd9BD`Jlq%|NeVSPe0_zKIsCJ8 zveIHb-K`q7eXTf(|I%W8esyVkDXeFj+E(LcU5{pdV|#gln%Su_9HKO=e0`lwZH>IP zu(G)uHMaeY&9*S<`sDJ`?9xKk{ftsd5+@Sf{B6y-ITV@s`MLSg(OHrCSx1YdE@-Oi zs+-?dS=d-CxV5}R+S2muY;!&^Fs&M{cp0X)5#@M(aj_FFePcyAWZ(Mw@2iuGHNs~S zIjKeDH}>@RL{V$=^Q%h>lkK(#N`sXq+{#82*T(Ytu0OV|cZyAN^mxFD~s*T*2a2lwKLNzODo=RoK-fpcM^dZcztPm zWtoept*b0%%u_-!B?*GP9|iMgN9)Z{4$4(cON&aeDAvnNOSKvV=g!8qcQ8Zl%Z(0} znWe9&{KnX3XXi(~MeEwuMg)?mg>&oGTFD*6_*O2KmZPLCYs#~g_06bC%QK4W)9dRL zCHZ=@rK-JS05kPix`9>u(Qfjy?($;Fo@njDL`yYg+_yI5rHkATMWUMLJfyuc+(IcV z7%2%na(@h1d}ON z!-`<1L>vc{^I|n@aFlVUpqV~bbaLXxJA`qCp^K4+YBgOVNxJRG=A>Jb4I9>Tf?=Y- zl&{Z~3A$zy`Unq=PIyIB{qMh4`XDQtQN`!i5k}O(P6Zjt7B={tc39Kk>QWzdDwqdN z3eX7In)kg{hrJZKvWnj22@F`PR9+IaYLC4Ztw@@PZ8#*P2C679~om?A-a#96LQtEuCj( znu?A}<<)xD(oaP*Zj{TSszq;$GRM-zW|Y>|XS#D;*$XAS^OmgG@{~V{>@^cAtSj66 z@A);P${C-tg<6cowyp&_aLW?k;q_L9mxX~6dT{BXA;u6fGViKV$8_GyO++hF_6AeL zzlRsox7F3&dQIv?4y_C%tE=AS5M5HSPup0c&!mMq z>Pn_E*})Xi*=e_>hv$V&R3(mU0mqefp(sT9k%{5mY(-FBF&Bi9tb&+;XMWT}G6C>} zl=0)gWfvO+Cl+Ioy`^0Da z&e*!>VGr1@eh>+C2l`9{bLo9CGZDNju8QeRmP@5`d7jBNKgiX1K(OD{-q;@OuMTr! zLwQz=)Oh|7zEi64qGe-x`R;pO`n29{J0Edpt$P;V3h!XL(f;84;?!O47;E$E3t^FC zpQEFrvC}hfFt8M0y4l|epMcRO0aMcg>*@u}R(Y7bGFn|h)Nvtr1%z`UdxoKVp;5ts z;nKLLdEfaT>;Xvv^?%-E|HbNdz0whRr+@1vvD}8LgH(wN78^{StwZWB{mZ#;kd*?` z8~B#A*9e(w;|04H$OBgZc2Dk)vY^#+jzhO~+*!F-V|laTi@NLh*f$->+6d$c_R1i8 z{XZys2OvwHbpLyLdfK*a+nly-+qR8q+qP|M+O}=mdV7BV-MhQ@?#8|EiKxg^iOQ@v znRP1i^E}_j!<1weB?a#6f*jO|Dg*5;msLQlD7{S4rNNU2O60qlqJE(1DR7_FRub$MMmcqO@NKXw{w z!b+mCzWJzIA{3=QO=%ijxi&kCi7L8=TJ2p#!6nVRLrI}28E5F{X=bT=No2x_QT&{! zqwiU3x!WeY@>0tLc%mcUQf(xFfkSdRMU8|CYFNQ=?P~5DVkRvh_0~2jB(|lBx=i(3 zvXkEUO*6HfDW+A#VTEF6!92!Js`{?MdXP9q)OQb}*2hQ=kp^$qb_+{=&VwlGs3tu= zIe5Ti*f(L#eD;;aMQvUl85y5rtS3ouCq!Hu`7Cgv5<9sm5YOV=7ZV~<8Q3|_EoWc3 zpl=1(I_Hv}0?%^b5OZQ;=bZxf^|dd82$_+iu==onepX#b(<_1~kf z2w7V>2pHPy+nL%pSliM3IhE42G^FAC`R79+VX9|nr|V#9Z6$ALXKDmaBV?g#Y>&(M z_2sK3AD^|0Iu#Qm11=Q6qnf@&<9uqwi%~y2?!>?Pg&~-2rFx0m;F#KmfSIzj*$TVJ9!AB3E z(P6zWZA#ODSi|An;5|X?P!b%UoO9fMA6l)a%h@I?l9<|RN1xKsV?U!Bu8T-d7Me~; zetU3xuj3ad@W*XBCOn>C^F?E!n?~~khy2g+3hX+;GcK-6`(~`y(P}lru*>Te&&9&v9q$X}^D+RLjm?K>Ae)Vm=_VVAbw@#Uk=i*l;8HwX*=C-_9rhm!db z&5F2p*~DGb72J!u3-~*gN5BViO6*&WP)=81+Emx?wSW&PhU3dSk5nEH!f~8Qk=U*S z67Tab3D?$u59~>`nYa144~`^1o2P!=g1G}OMmf8o;A#Ophw5MO`Y?|55E-F z7iIT#4O0}|v~7+n`KZ7P)w6|481F8UUD{l6?=FD&O300Ww_Mo%A&>i4 zRH8rgk4D~6&%xEkkVe7I(eSTaK3#jmze@h&@-Vftci=bCwfi&eC3OGxotX`sM%mQB z!Ngvj4d`uBeSjOXwDGqAG#)$ULK|GoX6`(XPT z$Dg|YeEb;)>sPz~%KLM_e>=YN!2jg`sq@!(zsB{~*cj<>HUHm||Hq@~tJR-Sm*6xC z){0i9e^xW@U+ex~o&*g4Q>>WbKZzCpmkT@_13l|MKNGrFvWf(=I#Jvb8M z(A=xzw)i9WF`-2%aco;O4;=E);3CaahQP- zN(R6_+W?c!C*-1n_@?z8S9PPL*+tjnT_}L&n@tyXM7X5KaY}|YpveKiopeORC5ET{ zJBBwPZ6x5)89>)y(wkS^k7&p5mKLD6+a-a)cfY!Vo+N!ko-$~N^31>0%EMNn!nkvJ zOHfSXYlXS=1RPEbiF@EhxsdGW4KZwc*KRi$!wSEe(g^g{JQZa=&42fik$jFR=Be#B zz~FBO;cWvq{o#FNC?F$j8@XuW_=3n!{`T2kAB>0M)}Y?=L-$ zvPKu}r*}T%oAu98Qn@)2(Lm)bO+EQ(ysMtU?VnF$@Pc2O0nGT9Ru%;?d^X7@Ru&2Q zeXpdC$eg`<7eP3ETTnpO1i*JTXzbgDSH0Xz5Inf2sQYv?-=%w1^C4p|qowErm_NV) z^AUvbAcI8)?hBi_^5HLnq4j>h4&wSqi+KWO9!B<9T|EBsfN<)=jvblLDd5_pu!(Wd ziQg=695DaJp13NW8uz0!m}&awkH~KQFo%lwcV*rr4~WPzxAUpsj|=%_?k9$pq@UhF zk0>9d24Dc?#9A-RUNDcAk!>%o0^A__&76BIsQbE|zHfUcld;yl$AKGxbe5pcJi&lh z5WO)V+lw|NZ?@a8N&L(@f}ak%sWe(|xcMZT+u}Vo1k}n9g@Mj3se7w$lF{J)!=qvK z2EsSi?I6&e^^W^9o>C0HE75O#y@SXeYGn%|lm<*r?~_;R?x&G>N%l6`T~$p*ZKn$p zk>}@@6;zQ2g#*Cu?~N7eR?8Yqrn^D+r==B&2}tHjNeLT-35XCtY$-ReDM1?EaE$yXeW;N9?hzDAvZ+8nheHn1Og4Q3803zG_f%rivlMfAjbGp@!+jD-lNDTxlk2Lyim?gwF$q$W#e za+}1cL$?^zaqu#?&CRL5urffJ%6>9L}69!^iQo1nI{10gduimA)LNUUzcdY=d=C$oGMg)V>k z8O6!qH`@@*EJQzwcBv9tAfQyJV(dt#3YTa02qdVg9wf+Du@BD5qCli;Br?D;vKtG8 z6>n%1;s~FbEYQl~4fq}a?(Dh|@Bs+33_%R)OOGN4Tr%y%W$Eo0J;%2l^gsXo2-CslK5 ziH#P5lxhmW_Fcq?-|9}ECkr_{Re$YzAeNJ;R99FemXgUi5CjG^N?HPdv2fSiG{@dr zK5#B=F`Hz`E;~c)Y;JN7K)k$|ya0*uwkD~Gkl&J@&s;OmWo;)TP!bx%M6rVnM$<1T zJzqgnNPaB}_P6m;%>F96(t_Q&xkeL7VcGiGIU_PBBno9ipkNDG$8dDA`eMs4O3uRQ z7{A-)xdD;-L?DMF!J@q+4LRQUb1tb=3@VtiS~W-|`vzseMV-;mKtn%00~-ALWIOQ| zLs#2JtixPq+(Ilk)QJyb4<>d=R(8vpwF==v!5WP7G{R zo6J4X#XT#B@$~@C!#aGQ3|Tg@0)fz9h&hQbu%fy*iN@#O7{beRe+0Q7g3+pt;79m4 zXUdxx^~<8!8-PHwp$F<~$1mVg3FeH`qPHFRB#vd4HWV#EIT0jHs2+e4WeALzdH~SF zvKkT||E3RC^9<*dHadWG3d5)Khj$|C1@y;h#>TYEr2k%8!@+Krj}j^V^IKZPXF00? z4pw|r+jp?0Fe~PvzJ)ECn2>s?RYJ=?UI!sI#T%9pQ#pcyMR~UlzD3zqY~lDlIEAd9 zjmMz?scvXvIxEqdD?#yIj}WJkz+kc7w_vfYSmo<+VxY}0!$>5T^G3yLJ0d(c&C2EU zxRe%r%_QnyMk)>9Yn6&+jKE)7=cCy;PH0aOxwA(>nrx|*#Z3vue&b3q+FF?@K#o94 z4?|=4j*cnJ7_Wv+<*lub^8u5KD2s7t^B7_M?Q57B+!(fAj^jc14Tk#xhYNS!eJ=Oa z*EJ|zF%$a;>#tEb-q*JSfkQ26I2;|;GjzR{YQ@#{P3nyDf#=#h*ZcPS5Juu0O=NfT zAQvH8??}jP?5;7+w>&=INrRkTPmtI(6H7!$cOYBw2@HOQ%3O3wP3A6t9>CloG|s{uw&cL6-sW#?lT z&NO$&I|2qpIuBYV$9wm_G;ycf{fOq^0y0}+%O^TJyWUtyr;4&#SI6UC2txkZ^;PfU zY}Z!T^Fh*47}6Ip#aZ>)1a>QKsQL}V2sK%R>X1sE1kLlKO~d1&-1m$n+70k)BM)V+ zY#P3x_q0^JCbYiL;MHNJ_pTqy)IhH|Th^Syyf?rsN;Pr8a!D!@#aLiq zbV4c-avH-pn&5gRWF4_|*5c{RA=w48=C^YSzQ+DkgZX&_>K2U-m9R7mre_RGLXs#Y zQVfXLpHC48U*@>8Yd4ck8=hAHxm<}$t4-TxQF%_|LuS^7j}OxIFd=COs~}nI+~Oly z#grW{^EIAaO*W0Oeb#zhvC6S1Et|SHi@akOq|^JAL)~zi?ziV?dkK&`lz2Sk&z4|= z{9vNFv`}C)RTt$nwuEy5H^DJ?ivS+o9DB=U58SDM6 zn!!_7l^tyl)M?5q)>sD(?5l~=2))qiqDZRN)Rn`F;$>yD#_56WZ;F_Ycj7#)j+O1D z(*~QXEVW+p`Yt5PEROl@bX-l73(Ia{*3Dh9)t|052+ik>9$pD}5iID+2Ybn5?Jf0`t84os6Os(*^x>M7 zkSdDhG#5_$sJzx%s-S@#)Cvl1fvXah7-{f(D)UFW_(#O_ptreA}XOU@KZ0~%x2KJF}1#EIm>h)$UbSRAN zuYE}Bkq$7iCD&vYhN@E2p4QV^TD>$NP?>bgv?f(UVxn}Y5@;`H7Wrlj^=vI_w1z1` znq(TtQOkyqZC5f|5vqgsV9;)zlA;5JnDjV%u`MpOI!&}d2-^jQ#t_r(tZ7mcMUx%y zZ7;7y#t{&)w$M?C^uki6T4Wa1G#*tFyB?d(F7fT&Fz3F%j0a8A*$5DOk=uSev)gyJ z48`{87K|SUSt+}1wBXw{{=%feXAu0YDe$<%)K((}Rg6p$Fj}y`CNwmo8mo&??D9KO-qVT~=>+q1L|)7cgMF9c&UCL9CTz8DYMRnn#NOFTkHd<%^NkU2C=-xE+@0o zr3avi##8M@XP+r6)wGrUE$O&%Pw|6RVK>RW065!6JEfg3YcBjjJ1z+pIi@MX^v4#E zOPE6}N;CS~GvuSamceyFkJ>y9h*5Q~)SD9bz`&|eC?{h~@~0c7jM0@;RUE#!5vnN5HdQ~=W$!H^dC zat_?d%l*~H%gD=vn;MLeq@|8DY=w+mgON9ajDg4>min&jCI*}w}Du7Z*ce;M?vY32$2 zts{b2eo_VR&S~pSO6|tSZL1?%&A}+e=!ziFZz9GzI60I@<{6+tk z0KRQ9Mz;N`?q=b<4;5TgbOil!vCu|T7?&N!V=!+{^gFkK!AD&d68vH&zw4iZ9ra6Ce8?&gOeeyG`U<0>v5;9T;@(VLff*mP%PpRD9LyVo{P z(5aIqtf9UyJH8`^F;PMMwhB;T*jX?LgJyvpaR~L&DhE$`HrUpT;q61sB#}zQdWya- zoVCkl8JU@tH^mj#dd8(wwfA{0*Pd`+(J4q9=;<~>&S9n(Bx^rr2wzq?`Y%8iih%qP z6n(*MZABIpE95nG(EMXu%E^&2tH6Z^%h#zgrXYW!_8|>AqC8#4BiXvbKH}~L(hBI{ z2&5={E5YxycD-&#%mFUd#iE8&lO+#-vzoxNE7=&LFS;( zd_@zTA&E*h^sMOa-X7muuLbVwjtY|})zLC`=myLMI13L7<}7>!;e^O5`Wc1z-holi zbnoxzEZI}=6zzW)E53>FZFN)jlB`o3>cT%n$dK zRyw$SZ?PplHH@R1*vWOb|6Z2+gf8p6$+$WSz_bfyq#Qu)AyrobTGtsEDy|a6Qyfaq zl6P_!D#7AslWbU{GAOoyks6XED24~aK_euipZ=_*2T^@|RlV^tuQjL&9Cm+Gk}^|F z5H1G>&5Uvve^tiRfhC8QrG` zi!D6uiHKV6y~J;?f#}=Q5OpZcvxG=ksAnbqpN;o#TbGTU?4X-?cc;BRbZAnADe4C? z=0tC}>4T~1Rot8QUI*3LDC(zV)g>WgNFE{#)ei8qCcM&;u?Bm5cZzH z@UvLm{nAL#NS?pzX6CN~iOaEmG{3PvKJ_tgqpp0=SDpl)!`L5U6Bh;#bCPjB%fN*i zt@hKb1PIf$zRR&SsPF{~~gr%yH>#cJn?yEA~7Cr%kAe8Oa0mGH;x$)ZJ-l&qrfL`pY97 zPt}<>s3!+&f{pLO-t*;3*F<9(Z}E=9@KH=T_>8|>$`|d&7{%dD_B2vh|L8GN*dQ6N z-Zd&dY*u*x2ofe8IGNrMfdu+eM>;9xm&GJnUHSEck1S`45R=VrFLi zFDk|G-^1nn0R{iq&;AEm%J@-qC*ZtT2;qan>pK47NSU@6Hv>fMn} zG)x;RebH-zEriB_?6`%0bNtIgWDPed#C}hI?-t-WenNcDe$NkYQHb)x(F zo&SkC{UJPmh|%9^&VSLJFADRA%KRZbf6D$RiTP`0{|kxv0yuxz%s(+%hW{x>%<#X8 z5z{fzve5rCidlDqaKM;vI9g_SQHeE-Ff_kI1B>|bOS%@8iqE>O+gXal!dMMC*J0~P z)EllrScOlFjpoH@N~!`RB11GW6<;Zgj}k{53bb*@0fT+9Qa5Qq0pE`!uCK3en))H8 z`bOEsB}^a;o%2}PwxMQS!7?#+RyVovdbY`CoD~AE&p|+#6poPi^eW6(^R8@(LlVF# z44VAvO!V8^tjmq4*BDIKivf0(`KDs9$%FUT2`k=;{%X)8&+a6V89qp5Pc%#$geqUs>aP8r|B(`ofDLZt_TFV0bTb?n|dAxv%791i%mbvPm!aO zrSUOi$VOWa{Kz07{F&>bE?>(%mNmq%0ffourXn!a)aX}z{g|chn^&#g2dsc<$zOnP zaa9^WnC#MY70n`;g^O7B&~GI)I$N@*dey&#iMJdyg+4yJ=9=IkLQ0k4;%?F%YvO)O zVdEL7MM^I)%+tRQe@ar>9U+Wu;Z4Ry^?*ROAcKp*fW?uvBue`O^Lsr@~OS>G0q0+CFM_C z^NXTNg73E&9JF-Nj`(t}LOf$j|9U4?PbNue8Unbf&eg_t1v$A|4@c*&1T`VX%0h6% zY?z9(G=OOVXgMy>x?eUIV0mYWZ^+~f{6%aB)#4bmOOUN!?MBb#--Zupg0Xx)rVq*B z$iWPqyXH^$qbfJCsn(qOIP0^g-wBRjOg}8-Lat*BUr)@lmolAu5E+i^IF&oAN0LSQ zGXm=UabOBlAp(~r<%9nuRYB!k@zC#E0qXT9Vb$xRE(0GSaFfbU#r#LgMQJ@)&dsGBI$X{_JGR9%WJpEQyyG zyDfY%@6;I{ez5fB*z)+`=-+#{j z<<6Y8PN^%G?@0TS!<;3NPB9G%26A=GB?b8Xc&d)I+MH@$b~}l?n9Jytqfp}8Q;8RZ z7bA5sRi!{w5_16ENUU{FV=AtAt`7RjJe0g=*C)(HYqsjR7K9B^gA&T$V` zh_)Ut+7A%JLF(T{saZis0Yi_WFw)|HFqoZ5Qg(oCX#-H-lnGoD!7|^_QXgneh>wsR zpxu^sW7exbo3kwXh3q`|om;75D|!ijUs6F3rev?#)6eQ3$GQ(Na50?y1k+z#o92p9 zKw=3jaJzf@kg@ZiFj{nCqlHfzdzHBoK{)WJS;5Gz$2Xft#DtnGi1=&7@|bL zwA}Md_UfS6`bP9@RHMd6SDWru!d?8f%4EV1fY07qLzw}Zu`cS3_5C9nzUC!QQELwr zh)##!kuh1c3Q-(ctbt)VVZIdSexAYhX&kD4QMuyaq8X-Jnc$6%OYv_sf0w?yOwkbWs8 zHLg}y02YeGTrP=7q1Gs@CIGqpQb`sZ?yMgcrEwC6Bg2IX74>#+vPe6_J~8Y^n>!RM zXE$!BO%Jrf$3B~2G%zN{7zwaABwn0;kf^)Py(pAuVvQkSa+VnCB@)E_Ii40PAf@|R z>)~4obQ6$hbB@H8KI6bAjd}mNKg`*zfsD@-NRl6Ukr0o*7)Jx7WLeE@QxE#ungv_ao3A1?Fe1`|Hv*+PBV@5B z?u`lBzi(i}`x3=qikXC6900vX0{Kup!}S5#0B*}>y2jc+eM%am zd9Yaa&gPZDlSD_~D;q5vg?pe~-8u!}%7_wQg zVFR0lhS9-F<+s@5{{%Ga*bs0*uy#IT?D3H@W=>V?@ku#_NLK9_HaUSn9S_E&z3^cM zalz8D>#hf!VB7iy_`rsH^sNi<7vKcPRym*)`xY~Z0M?Z7u{r7c4P##w=_J6&?1c|G zh>gMm8c2G!rYBmEJ>oM3IfYP&tq;ZQqT;bRrTx8@>pqd2h@>j_^|IN>$jx~E%0WMh zg7V?(UKfyJb#XrAjVDA>@ofe2C)%^m(#gC)T0!=<<@uM zP~*7Z2g&!RL}|ISfI{M*4WrWzJ1uj_W1R&mfq_d|aeVOi_P=$u7|j~c!zqgzuimbY z&YYMo+`&4 zpXrf#wJ#Gqm2&{*=RwDltI@^pJW3oQh1`39UA&%h9K{nWirMN!-_H+<`-6yqbwR!fMXYqotK1{j6-}?h8;gHH1rl=Bi0KU8h{)y%}pVyJz}sn zYWbI-9i3DRKrE0~ei{a!B%Rrim%aO9O|1C3_CS-I!`Az6LjQ(-l;aH%&4Q1YD6Z^1 zf~~h8CN`1E5lWS>b(x0Wd^;#mmdbj5oI5pNq0w$BEvP`& z%5wX>%<_2K7`*Jb?tb+CeAvdBwM%l4=*nC1Gp5RP8EW_#tytmQaX>bKI1uspY3|ds zm!<~zEO2QBv3J6jkjKTVz!}3E?-TdU7l}q>in>P>EEXO!7FQ_E3#>F>;-Wy3_ujMi z)=bEqG;Mw4bVt}dUxPkj_jI;>|SLZe=qboDnqzT0v0PrdJ&z(%#&_#+5mi7 z@EL5K|01;NEyV5;3&J==rO4q)xvEn6yhv`wN>-!h^^aSHb*h><j*KiXk9qI2uKnPM z+rv3(RXB~ef;8erC6sZ`&s}$^%XqoZXMT6xOa3-*=3~AL&e==aO?gis`-+vzxx;-^ z)y8f!d9-_>bY8ED4FwUAkDzZ4#tOEaG=QPp3Rp}hu{2bb09pOUF*DS)djOnHyXT9T zYp#dV-mUo_*ZWCWlxrBqPUU3p_f;T8UiF2Er?q1}8eQHmk5?=Ygc)6mUcrLF0LJIc z_7_}fF>zi;F(@hWz}S2@$6+e$)YeKY!DL z7?LVzcqADhFqD+-o$n?5*}Gkg9yC{L?mTmMBa{n@}P<4eC3E(5&F?@Fa_YHLGEqVDsK6^=d&~)9{Zt-V}@r8lO44&uLDWunn~^>8)+|B z??cMoE`39}cPsVihyB_%l@mm^-u#hD=CUWU`-8vKYeQmWU_BZ%jzct=E_@{y48$Ik#?$W zyYe}>Q#li@CnT14Ak;mK8gmP5EYwFheK15$7Sqh%d@qJ;@I*{~WHeEJNSP0EqY&AaucRaN5JEo}s;m(Kk7P>MC0Et|LE zAu8>E_5z(#uQ6-L?EBqPv!43pL--+{I`xRIeCZz~L$p^eyAK>TL7LTG+NS|iYVPz& z5?EGgfEpyRL~RWKlx`>plB~1IA*nZZgRT-V6@Jj)<2I~?wGGatLKH}~ZYXwzo+{!^ zlvsWg1QN&f=`rdZt9JVe^=TeZGs1y@?VQb&I5<)IHh2PHg?W-oYG?Brdi6jlTD3;c zXj&=BhKy65@7oNssL{1mDvUlH8I?*6(6Tjvl#Nz(Ymka{zyN~CSCoKFX}$KTLwlW; zjnyi+7LIwGmCP+ikV%>7CH7D`U!=Pka&k=`iF0K)?;*A`!Euld}{)jK;I(lUo-MS2Xuk5(XGKq)8sB{icke}5fEihH7iw~9(8%@ zbGwmzARDXFv#aY`H>=w}Fb@k;rAr#8qN-67_3A_@qoM4&n+ft!nlxWp@EPE%HtHeD zK}=m0-?ktNPvWaagndZ*KFkQ$87$)+ObzPL!t&Oc63cCxZuB$p-WIjFSS z+>B_k`dA@X!@|>Sa(G$MLiSaRbz+t@L)Viu5b8?2wbCRsdHc-XmN9IsA(cUeN_*Vh zec~W6j%KIA6c$X*WPW&y)_Vs89)flVJ3NM+F7a`97UP@}m|_|$#Vx_Yh_o1drb@7S zA}&0bJN`&|>F|3mR6I4^z$(iilsLuu?P*Y+gScoTS>saXJU))HzsL3Y{n%^pkeT?5sYMq=EdB7$rnxHv~f|-MLSd<;Qw7 zu#I1)1OE(E@S06G)UMU9=?y2Ar*&MpOtf15cwCXTU+xbZJocU+Dz4Y63|N@vZl_IT zM7#?JV#-$bOvviT@Vp{jyxi#V)DNn3*GddmqjQoCS4L-db$MH5;_D|c7Zw{+Ewy8c zvbAf<$9j3JeVFn%bZ#CfUdZn~=aN8|-pgtVi_(h?xyO@p@5$C~oP#uX9HN;kvBtJb zmLA&OK_o61>N-95;uw&K$+ihKEk07lnF1(vJZwYqQsAsJ+a%Vq{p6bAE# zH=Ow$yZGiU4`Jyr61&#%SX1tSd4UxLnMP_uX3FI0AksRM{dyIp5yqUja01H0pXTS& zHibHi1Ie;^+Q-v$aEWx_O2p(WlGTh-n%a*xu|g%4BTk$i`$GA3Kl3Z54

)roFB? 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 literal 105607 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%0D|QH%48G%C`;Y0wihjX@>J1ZSx}f;!C^Qc_J= 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 X+UsJ!`mfD4Yqe*tAepRx*8BehtQ}}d diff --git a/core/efuse/rtw_efuse.c b/core/efuse/rtw_efuse.c index baaf49d..ff699f0 100644 --- a/core/efuse/rtw_efuse.c +++ b/core/efuse/rtw_efuse.c @@ -968,12 +968,12 @@ void rtw_efuse_analyze(PADAPTER padapter, u8 Type, u8 Fake) j = 0; for (i = 0; i < mapLen; i++) { - if (i % 16 == 0) { + if (i % 16 == 0) RTW_PRINT_SEL(RTW_DBGDUMP, "0x%03x: ", i); - } - _RTW_PRINT_SEL(RTW_DBGDUMP, "%02X%s" - , pEfuseHal->fakeEfuseInitMap[i] - , ((i + 1) % 16 == 0) ? "\n" : (((i + 1) % 8 == 0) ? " " : " ")); + _RTW_PRINT_SEL(RTW_DBGDUMP, "%02X%s" + , pEfuseHal->fakeEfuseInitMap[i] + , ((i + 1) % 16 == 0) ? "\n" : (((i + 1) % 8 == 0) ? " " : " ") + ); } _RTW_PRINT_SEL(RTW_DBGDUMP, "\n"); diff --git a/core/rtw_ap.c b/core/rtw_ap.c old mode 100644 new mode 100755 index ec72564..da3db56 --- a/core/rtw_ap.c +++ b/core/rtw_ap.c @@ -2227,11 +2227,7 @@ int rtw_check_beacon_data(_adapter *padapter, u8 *pbuf, int len) } psecuritypriv->mfp_opt = mfp_opt; -#ifdef CONFIG_RTW_80211K - /* RRM */ - update_rm_cap(pbuf, padapter, len, _BEACON_IE_OFFSET_); - -#endif /* CONFIG_RTW_80211K */ + rm_update_cap(pbuf, padapter, len, _BEACON_IE_OFFSET_); /* wmm */ ie_len = 0; diff --git a/core/rtw_ieee80211.c b/core/rtw_ieee80211.c old mode 100644 new mode 100755 index d9bf9cb..d7776a8 --- a/core/rtw_ieee80211.c +++ b/core/rtw_ieee80211.c @@ -1273,6 +1273,7 @@ u8 *rtw_get_wps_attr(u8 *wps_ie, uint wps_ielen, u16 target_attr_id , u8 *buf_at * @wps_ielen: Length limit from wps_ie * @target_attr_id: The attribute ID of WPS attribute to search * @buf_content: If not NULL and the WPS attribute is found, WPS attribute content will be copied to the buf starting from buf_content + * If len_content is NULL, only copy one byte. * @len_content: If not NULL and the WPS attribute is found, will set to the length of the WPS attribute content * * Returns: the address of the specific WPS attribute content found, or NULL @@ -1282,21 +1283,26 @@ u8 *rtw_get_wps_attr_content(u8 *wps_ie, uint wps_ielen, u16 target_attr_id , u8 u8 *attr_ptr; u32 attr_len; - if (len_content) - *len_content = 0; - attr_ptr = rtw_get_wps_attr(wps_ie, wps_ielen, target_attr_id, NULL, &attr_len); if (attr_ptr && attr_len) { - if (buf_content) - _rtw_memcpy(buf_content, attr_ptr + 4, attr_len - 4); + if (len_content) { + if ((buf_content && (*len_content > (attr_len - 4))) || !buf_content) + *len_content = attr_len - 4; + } - if (len_content) - *len_content = attr_len - 4; + if (len_content && buf_content) { + _rtw_memcpy(buf_content, attr_ptr + 4, *len_content); + } else if (buf_content) { + _rtw_memcpy(buf_content, attr_ptr + 4, 1); + } return attr_ptr + 4; } + if (len_content) + *len_content = 0; + return NULL; } @@ -2316,6 +2322,7 @@ u8 *rtw_get_p2p_attr(u8 *p2p_ie, uint p2p_ielen, u8 target_attr_id , u8 *buf_att * @p2p_ielen: Length limit from p2p_ie * @target_attr_id: The attribute ID of P2P attribute to search * @buf_content: If not NULL and the P2P attribute is found, P2P attribute content will be copied to the buf starting from buf_content + * If len_content is NULL, only copy one byte. * @len_content: If not NULL and the P2P attribute is found, will set to the length of the P2P attribute content * * Returns: the address of the specific P2P attribute content found, or NULL @@ -2325,21 +2332,26 @@ u8 *rtw_get_p2p_attr_content(u8 *p2p_ie, uint p2p_ielen, u8 target_attr_id , u8 u8 *attr_ptr; u32 attr_len; - if (len_content) - *len_content = 0; - attr_ptr = rtw_get_p2p_attr(p2p_ie, p2p_ielen, target_attr_id, NULL, &attr_len); if (attr_ptr && attr_len) { - if (buf_content) - _rtw_memcpy(buf_content, attr_ptr + 3, attr_len - 3); + if (len_content) { + if ((buf_content && (*len_content > (attr_len - 3))) || !buf_content) + *len_content = attr_len - 3; + } - if (len_content) - *len_content = attr_len - 3; + if (len_content && buf_content) { + _rtw_memcpy(buf_content, attr_ptr + 3, *len_content); + } else if (buf_content) { + _rtw_memcpy(buf_content, attr_ptr + 3, 1); + } return attr_ptr + 3; } + if (len_content) + *len_content = 0; + return NULL; } diff --git a/core/rtw_mlme.c b/core/rtw_mlme.c old mode 100644 new mode 100755 index 024c144..86aaffb --- a/core/rtw_mlme.c +++ b/core/rtw_mlme.c @@ -5004,6 +5004,15 @@ sint rtw_restruct_sec_ie(_adapter *adapter, u8 *out_ie) ielength = rtw_rsn_sync_pmkid(adapter, out_ie, ielength, iEntry); } + if ((psecuritypriv->auth_type == MLME_AUTHTYPE_SAE) && + (psecuritypriv->rsnx_ie_len >= 3)) { + u8 *_pos = out_ie + (psecuritypriv->supplicant_ie[1] + 2); + _rtw_memcpy(_pos, psecuritypriv->rsnx_ie, + psecuritypriv->rsnx_ie_len); + ielength += psecuritypriv->rsnx_ie_len; + RTW_INFO_DUMP("update IE for RSNX :", out_ie, ielength); + } + return ielength; } diff --git a/core/rtw_mlme_ext.c b/core/rtw_mlme_ext.c old mode 100644 new mode 100755 index f9e046e..8da68a4 --- a/core/rtw_mlme_ext.c +++ b/core/rtw_mlme_ext.c @@ -2797,6 +2797,10 @@ normal: goto authclnt_fail; } + if (len > sizeof(pmlmeinfo->chg_txt)) { + goto authclnt_fail; + } + _rtw_memcpy((void *)(pmlmeinfo->chg_txt), (void *)(p + 2), len); pmlmeinfo->auth_seq = 3; issue_auth(padapter, NULL, 0); @@ -4698,6 +4702,7 @@ void issue_p2p_GO_response(_adapter *padapter, u8 *raddr, u8 *frame_body, uint l /* Try to get the device password ID from the WPS IE of group negotiation request frame */ /* WiFi Direct test plan 5.1.15 */ rtw_get_wps_ie(frame_body + _PUBLIC_ACTION_IE_OFFSET_, len - _PUBLIC_ACTION_IE_OFFSET_, wpsie, &wpsielen); + wps_devicepassword_id_len = sizeof(wps_devicepassword_id); rtw_get_wps_attr_content(wpsie, wpsielen, WPS_ATTR_DEVICE_PWID, (u8 *) &wps_devicepassword_id, &wps_devicepassword_id_len); wps_devicepassword_id = be16_to_cpu(wps_devicepassword_id); @@ -6799,9 +6804,11 @@ unsigned int on_action_public_p2p(union recv_frame *precv_frame) merged_p2p_ielen = rtw_p2p_merge_ies(frame_body + _PUBLIC_ACTION_IE_OFFSET_, len - _PUBLIC_ACTION_IE_OFFSET_, merged_p2pie); + attr_contentlen = sizeof(invitation_flag); rtw_get_p2p_attr_content(merged_p2pie, merged_p2p_ielen, P2P_ATTR_INVITATION_FLAGS, &invitation_flag, &attr_contentlen); if (attr_contentlen) { + attr_contentlen = sizeof(pwdinfo->p2p_peer_interface_addr); rtw_get_p2p_attr_content(merged_p2pie, merged_p2p_ielen, P2P_ATTR_GROUP_BSSID, pwdinfo->p2p_peer_interface_addr, &attr_contentlen); /* Commented by Albert 20120510 */ /* Copy to the pwdinfo->p2p_peer_interface_addr. */ @@ -6820,6 +6827,7 @@ unsigned int on_action_public_p2p(union recv_frame *precv_frame) /* Re-invoke the persistent group. */ _rtw_memset(&group_id, 0x00, sizeof(struct group_id_info)); + attr_contentlen = sizeof(struct group_id_info); rtw_get_p2p_attr_content(merged_p2pie, merged_p2p_ielen, P2P_ATTR_GROUP_ID, (u8 *) &group_id, &attr_contentlen); if (attr_contentlen) { if (_rtw_memcmp(group_id.go_device_addr, adapter_mac_addr(padapter), ETH_ALEN)) { @@ -6831,6 +6839,7 @@ unsigned int on_action_public_p2p(union recv_frame *precv_frame) /* The p2p device sending this p2p invitation request wants to be the persistent GO. */ if (is_matched_in_profilelist(pwdinfo->p2p_peer_interface_addr, &pwdinfo->profileinfo[0])) { u8 operatingch_info[5] = { 0x00 }; + attr_contentlen = sizeof(operatingch_info); if (rtw_get_p2p_attr_content(merged_p2pie, merged_p2p_ielen, P2P_ATTR_OPERATING_CH, operatingch_info, &attr_contentlen)) { if (rtw_chset_search_ch(adapter_to_chset(padapter), (u32)operatingch_info[4]) >= 0) { @@ -6874,6 +6883,7 @@ unsigned int on_action_public_p2p(union recv_frame *precv_frame) /* Received the invitation to join a P2P group. */ _rtw_memset(&group_id, 0x00, sizeof(struct group_id_info)); + attr_contentlen = sizeof(struct group_id_info); rtw_get_p2p_attr_content(merged_p2pie, merged_p2p_ielen, P2P_ATTR_GROUP_ID, (u8 *) &group_id, &attr_contentlen); if (attr_contentlen) { if (_rtw_memcmp(group_id.go_device_addr, adapter_mac_addr(padapter), ETH_ALEN)) { @@ -6918,6 +6928,7 @@ unsigned int on_action_public_p2p(union recv_frame *precv_frame) _cancel_timer_ex(&pwdinfo->restore_p2p_state_timer); p2p_ie = rtw_get_p2p_ie(frame_body + _PUBLIC_ACTION_IE_OFFSET_, len - _PUBLIC_ACTION_IE_OFFSET_, NULL, &p2p_ielen); if (p2p_ie) { + attr_contentlen = sizeof(attr_content); rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_STATUS, &attr_content, &attr_contentlen); if (attr_contentlen == 1) { @@ -8900,6 +8911,7 @@ void issue_asocrsp(_adapter *padapter, unsigned short status, struct sta_info *p struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info); WLAN_BSSID_EX *pnetwork = &(pmlmeinfo->network); u8 *ie = pnetwork->IEs, cap[5], i; + struct security_priv *psecuritypriv = &(padapter->securitypriv); #ifdef CONFIG_P2P struct wifidirect_info *pwdinfo = &(padapter->wdinfo); #ifdef CONFIG_WFD @@ -9083,6 +9095,14 @@ void issue_asocrsp(_adapter *padapter, unsigned short status, struct sta_info *p pattrib->pktlen += pmlmepriv->wps_assoc_resp_ie_len; } + + if ((psecuritypriv->auth_type == MLME_AUTHTYPE_SAE) && + pmlmepriv->assoc_rsp && pmlmepriv->assoc_rsp_len > 0) { + _rtw_memcpy(pframe, pmlmepriv->assoc_rsp, pmlmepriv->assoc_rsp_len); + pframe += pmlmepriv->assoc_rsp_len; + pattrib->pktlen += pmlmepriv->assoc_rsp_len; + } + #ifdef CONFIG_P2P if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO) && (pstat->is_p2p_device == _TRUE)) { u32 len; @@ -9411,6 +9431,10 @@ void _issue_assocreq(_adapter *padapter, u8 is_reassoc) /*rtw_set_spp_amsdu_mode(padapter->registrypriv.amsdu_mode, pframe - (pIE->Length + 2), pIE->Length +2);*/ } break; + case WLAN_EID_RSNX: + pframe = rtw_set_ie(pframe, WLAN_EID_RSNX, pIE->Length, + pIE->data, &(pattrib->pktlen)); + break; #ifdef CONFIG_80211N_HT case EID_HTCapability: if (padapter->mlmepriv.htpriv.ht_option == _TRUE) { @@ -11273,6 +11297,7 @@ u8 collect_bss_info(_adapter *padapter, union recv_frame *precv_frame, WLAN_BSSI u32 attr_contentlen = 0; u8 listen_ch[5] = { 0x00 }; + attr_contentlen = sizeof(listen_ch); rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_LISTEN_CH, listen_ch, &attr_contentlen); bssid->Configuration.DSConfig = listen_ch[4]; } else { @@ -11404,7 +11429,8 @@ u8 collect_bss_info(_adapter *padapter, union recv_frame *precv_frame, WLAN_BSSI #ifdef CONFIG_RTW_80211K p = rtw_get_ie(bssid->IEs + ie_offset, _EID_RRM_EN_CAP_IE_, &len, bssid->IELength - ie_offset); if (p) - _rtw_memcpy(bssid->PhyInfo.rm_en_cap, (p + 2), *(p + 1)); + _rtw_memcpy(bssid->PhyInfo.rm_en_cap, (p + 2), MIN(*(p + 1), + sizeof(bssid->PhyInfo.rm_en_cap))); /* save freerun counter */ bssid->PhyInfo.free_cnt = precv_frame->u.hdr.attrib.free_cnt; diff --git a/core/rtw_p2p.c b/core/rtw_p2p.c index 24372de..61eba1d 100644 --- a/core/rtw_p2p.c +++ b/core/rtw_p2p.c @@ -2287,6 +2287,7 @@ u32 process_assoc_req_p2p_ie(struct wifidirect_info *pwdinfo, u8 *pframe, uint l while (p2p_ie) { /* Check P2P Capability ATTR */ + attr_contentlen = sizeof(cap_attr); if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_CAPABILITY, (u8 *)&cap_attr, (uint *) &attr_contentlen)) { RTW_INFO("[%s] Got P2P Capability Attr!!\n", __FUNCTION__); cap_attr = le16_to_cpu(cap_attr); @@ -2304,7 +2305,6 @@ u32 process_assoc_req_p2p_ie(struct wifidirect_info *pwdinfo, u8 *pframe, uint l u8 num_of_secdev_type; u16 dev_name_len; - rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_DEVICE_INFO , pattr_content, (uint *)&attr_contentlen); _rtw_memcpy(psta->dev_addr, pattr_content, ETH_ALEN);/* P2P Device Address */ @@ -2384,10 +2384,11 @@ u32 process_p2p_devdisc_req(struct wifidirect_info *pwdinfo, u8 *pframe, uint le u8 dev_addr[ETH_ALEN] = { 0x00 }; u32 attr_contentlen = 0; + attr_contentlen = sizeof(groupid); if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_GROUP_ID, groupid, &attr_contentlen)) { if (_rtw_memcmp(pwdinfo->device_addr, groupid, ETH_ALEN) && _rtw_memcmp(pwdinfo->p2p_group_ssid, groupid + ETH_ALEN, pwdinfo->p2p_group_ssid_len)) { - attr_contentlen = 0; + attr_contentlen = sizeof(dev_addr); if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_DEVICE_ID, dev_addr, &attr_contentlen)) { _irqL irqL; _list *phead, *plist; @@ -2455,6 +2456,7 @@ u8 process_p2p_provdisc_req(struct wifidirect_info *pwdinfo, u8 *pframe, uint l wpsie = rtw_get_wps_ie(frame_body + _PUBLIC_ACTION_IE_OFFSET_, len - _PUBLIC_ACTION_IE_OFFSET_, NULL, &wps_ielen); if (wpsie) { + attr_contentlen = sizeof(uconfig_method); if (rtw_get_wps_attr_content(wpsie, wps_ielen, WPS_ATTR_CONF_METHOD , (u8 *) &uconfig_method, &attr_contentlen)) { uconfig_method = be16_to_cpu(uconfig_method); switch (uconfig_method) { @@ -2552,6 +2554,7 @@ u8 process_p2p_group_negotation_req(struct wifidirect_info *pwdinfo, u8 *pframe, /* If some device wants to do p2p handshake without sending prov_disc_req */ /* We have to get peer_req_cm from here. */ if (_rtw_memcmp(pwdinfo->rx_prov_disc_info.strconfig_method_desc_of_prov_disc_req, "000", 3)) { + wps_devicepassword_id_len = sizeof(wps_devicepassword_id); rtw_get_wps_attr_content(wpsie, wps_ielen, WPS_ATTR_DEVICE_PWID, (u8 *) &wps_devicepassword_id, &wps_devicepassword_id_len); wps_devicepassword_id = be16_to_cpu(wps_devicepassword_id); @@ -2595,6 +2598,7 @@ u8 process_p2p_group_negotation_req(struct wifidirect_info *pwdinfo, u8 *pframe, rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_ING); /* Check P2P Capability ATTR */ + attr_contentlen = sizeof(cap_attr); if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_CAPABILITY, (u8 *)&cap_attr, (uint *)&attr_contentlen)) { cap_attr = le16_to_cpu(cap_attr); @@ -2604,6 +2608,7 @@ u8 process_p2p_group_negotation_req(struct wifidirect_info *pwdinfo, u8 *pframe, #endif /* defined(CONFIG_WFD) && defined(CONFIG_TDLS) */ } + attr_contentlen = sizeof(attr_content); if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_GO_INTENT , &attr_content, &attr_contentlen)) { RTW_INFO("[%s] GO Intent = %d, tie = %d\n", __FUNCTION__, attr_content >> 1, attr_content & 0x01); pwdinfo->peer_intent = attr_content; /* include both intent and tie breaker values. */ @@ -2631,17 +2636,19 @@ u8 process_p2p_group_negotation_req(struct wifidirect_info *pwdinfo, u8 *pframe, } } + attr_contentlen = sizeof(listen_ch_attr); if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_LISTEN_CH, (u8 *)listen_ch_attr, (uint *) &attr_contentlen) && attr_contentlen == 5) pwdinfo->nego_req_info.peer_ch = listen_ch_attr[4]; RTW_INFO(FUNC_ADPT_FMT" listen channel :%u\n", FUNC_ADPT_ARG(padapter), pwdinfo->nego_req_info.peer_ch); - attr_contentlen = 0; + attr_contentlen = sizeof(pwdinfo->p2p_peer_interface_addr); if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_INTENDED_IF_ADDR, pwdinfo->p2p_peer_interface_addr, &attr_contentlen)) { if (attr_contentlen != ETH_ALEN) _rtw_memset(pwdinfo->p2p_peer_interface_addr, 0x00, ETH_ALEN); } + ch_cnt = sizeof(ch_content); if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_CH_LIST, ch_content, &ch_cnt)) { peer_ch_num = rtw_p2p_get_peer_ch_list(pwdinfo, ch_content, ch_cnt, peer_ch_list); ch_num_inclusioned = rtw_p2p_ch_inclusion(padapter, peer_ch_list, peer_ch_num, ch_list_inclusioned); @@ -2667,8 +2674,8 @@ u8 process_p2p_group_negotation_req(struct wifidirect_info *pwdinfo, u8 *pframe, #endif /* CONFIG_CONCURRENT_MODE */ { u8 operatingch_info[5] = { 0x00 }, peer_operating_ch = 0; - attr_contentlen = 0; + attr_contentlen = sizeof(operatingch_info); if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_OPERATING_CH, operatingch_info, &attr_contentlen)) peer_operating_ch = operatingch_info[4]; @@ -2754,6 +2761,7 @@ u8 process_p2p_group_negotation_resp(struct wifidirect_info *pwdinfo, u8 *pframe while (p2p_ie) { /* Found the P2P IE. */ /* Check P2P Capability ATTR */ + attr_contentlen = sizeof(cap_attr); if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_CAPABILITY, (u8 *)&cap_attr, (uint *)&attr_contentlen)) { cap_attr = le16_to_cpu(cap_attr); #ifdef CONFIG_TDLS @@ -2762,6 +2770,7 @@ u8 process_p2p_group_negotation_resp(struct wifidirect_info *pwdinfo, u8 *pframe #endif /* CONFIG_TDLS */ } + attr_contentlen = sizeof(attr_content); rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_STATUS, &attr_content, &attr_contentlen); if (attr_contentlen == 1) { RTW_INFO("[%s] Status = %d\n", __FUNCTION__, attr_content); @@ -2779,7 +2788,7 @@ u8 process_p2p_group_negotation_resp(struct wifidirect_info *pwdinfo, u8 *pframe } /* Try to get the peer's interface address */ - attr_contentlen = 0; + attr_contentlen = sizeof(pwdinfo->p2p_peer_interface_addr); if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_INTENDED_IF_ADDR, pwdinfo->p2p_peer_interface_addr, &attr_contentlen)) { if (attr_contentlen != ETH_ALEN) _rtw_memset(pwdinfo->p2p_peer_interface_addr, 0x00, ETH_ALEN); @@ -2787,7 +2796,7 @@ u8 process_p2p_group_negotation_resp(struct wifidirect_info *pwdinfo, u8 *pframe /* Try to get the peer's intent and tie breaker value. */ attr_content = 0x00; - attr_contentlen = 0; + attr_contentlen = sizeof(attr_content); if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_GO_INTENT , &attr_content, &attr_contentlen)) { RTW_INFO("[%s] GO Intent = %d, tie = %d\n", __FUNCTION__, attr_content >> 1, attr_content & 0x01); pwdinfo->peer_intent = attr_content; /* include both intent and tie breaker values. */ @@ -2826,13 +2835,14 @@ u8 process_p2p_group_negotation_resp(struct wifidirect_info *pwdinfo, u8 *pframe /* Try to get the operation channel information */ - attr_contentlen = 0; + attr_contentlen = sizeof(operatingch_info); if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_OPERATING_CH, operatingch_info, &attr_contentlen)) { RTW_INFO("[%s] Peer's operating channel = %d\n", __FUNCTION__, operatingch_info[4]); pwdinfo->peer_operating_ch = operatingch_info[4]; } /* Try to get the channel list information */ + pwdinfo->channel_list_attr_len = sizeof(pwdinfo->channel_list_attr); if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_CH_LIST, pwdinfo->channel_list_attr, &pwdinfo->channel_list_attr_len)) { RTW_INFO("[%s] channel list attribute found, len = %d\n", __FUNCTION__, pwdinfo->channel_list_attr_len); @@ -2860,7 +2870,7 @@ u8 process_p2p_group_negotation_resp(struct wifidirect_info *pwdinfo, u8 *pframe #endif /* CONFIG_CONCURRENT_MODE */ { u8 operatingch_info[5] = { 0x00 }, peer_operating_ch = 0; - attr_contentlen = 0; + attr_contentlen = sizeof(operatingch_info); if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_OPERATING_CH, operatingch_info, &attr_contentlen)) peer_operating_ch = operatingch_info[4]; @@ -2886,8 +2896,8 @@ u8 process_p2p_group_negotation_resp(struct wifidirect_info *pwdinfo, u8 *pframe RTW_INFO("[%s] channel list attribute not found!\n", __FUNCTION__); /* Try to get the group id information if peer is GO */ - attr_contentlen = 0; _rtw_memset(groupid, 0x00, 38); + attr_contentlen = sizeof(groupid); if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_GROUP_ID, groupid, &attr_contentlen)) { _rtw_memcpy(pwdinfo->groupid_info.go_device_addr, &groupid[0], ETH_ALEN); _rtw_memcpy(pwdinfo->groupid_info.ssid, &groupid[6], attr_contentlen - ETH_ALEN); @@ -2928,6 +2938,7 @@ u8 process_p2p_group_negotation_confirm(struct wifidirect_info *pwdinfo, u8 *pfr u32 attr_contentlen = 0; pwdinfo->negotiation_dialog_token = 1; + attr_contentlen = sizeof(attr_content); rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_STATUS, &attr_content, &attr_contentlen); if (attr_contentlen == 1) { RTW_INFO("[%s] Status = %d\n", __FUNCTION__, attr_content); @@ -2968,15 +2979,15 @@ u8 process_p2p_group_negotation_confirm(struct wifidirect_info *pwdinfo, u8 *pfr } /* Try to get the group id information */ - attr_contentlen = 0; _rtw_memset(groupid, 0x00, 38); + attr_contentlen = sizeof(groupid); if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_GROUP_ID, groupid, &attr_contentlen)) { RTW_INFO("[%s] Ssid = %s, ssidlen = %zu\n", __FUNCTION__, &groupid[ETH_ALEN], strlen(&groupid[ETH_ALEN])); _rtw_memcpy(pwdinfo->groupid_info.go_device_addr, &groupid[0], ETH_ALEN); _rtw_memcpy(pwdinfo->groupid_info.ssid, &groupid[6], attr_contentlen - ETH_ALEN); } - attr_contentlen = 0; + attr_contentlen = sizeof(operatingch_info); if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_OPERATING_CH, operatingch_info, &attr_contentlen)) { RTW_INFO("[%s] Peer's operating channel = %d\n", __FUNCTION__, operatingch_info[4]); pwdinfo->peer_operating_ch = operatingch_info[4]; @@ -4015,6 +4026,7 @@ int process_p2p_cross_connect_ie(PADAPTER padapter, u8 *IEs, u32 IELength) while (p2p_ie) { /* Get P2P Manageability IE. */ + attr_contentlen = sizeof(p2p_attr); if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_MANAGEABILITY, p2p_attr, &attr_contentlen)) { if ((p2p_attr[0] & (BIT(0) | BIT(1))) == 0x01) ret = _FALSE; diff --git a/core/rtw_recv.c b/core/rtw_recv.c old mode 100644 new mode 100755 index db070f8..14a039d --- a/core/rtw_recv.c +++ b/core/rtw_recv.c @@ -2729,8 +2729,6 @@ union recv_frame *recvframe_defrag(_adapter *adapter, _queue *defrag_q) return NULL; } - curfragnum++; - /* copy the 2nd~n fragment frame's payload to the first fragment */ /* get the 2nd~last fragment frame's payload */ @@ -2738,6 +2736,15 @@ union recv_frame *recvframe_defrag(_adapter *adapter, _queue *defrag_q) recvframe_pull(pnextrframe, wlanhdr_offset); + if ((pfhdr->rx_end - pfhdr->rx_tail) < pnfhdr->len) { + RTW_INFO("Not enough buffer space, drop fragmented frame!\n"); + rtw_free_recvframe(prframe, pfree_recv_queue); + rtw_free_recvframe_queue(defrag_q, pfree_recv_queue); + return NULL; + } + + curfragnum++; + /* append to first fragment frame's tail (if privacy frame, pull the ICV) */ recvframe_pull_tail(prframe, pfhdr->attrib.icv_len); @@ -3835,11 +3842,11 @@ int validate_mp_recv_frame(_adapter *adapter, union recv_frame *precv_frame) for (i = 0; i < precv_frame->u.hdr.len; i = i + 8) RTW_INFO("%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:\n", *(ptr + i), *(ptr + i + 1), *(ptr + i + 2) , *(ptr + i + 3) , *(ptr + i + 4), *(ptr + i + 5), *(ptr + i + 6), *(ptr + i + 7)); - RTW_INFO("#############################\n"); - _rtw_memset(pmppriv->mplink_buf, '\0' , sizeof(pmppriv->mplink_buf)); - _rtw_memcpy(pmppriv->mplink_buf, ptr, precv_frame->u.hdr.len); - pmppriv->mplink_rx_len = precv_frame->u.hdr.len; - pmppriv->mplink_brx =_TRUE; + RTW_INFO("#############################\n"); + _rtw_memset(pmppriv->mplink_buf, '\0' , sizeof(pmppriv->mplink_buf)); + _rtw_memcpy(pmppriv->mplink_buf, ptr, precv_frame->u.hdr.len); + pmppriv->mplink_rx_len = precv_frame->u.hdr.len; + pmppriv->mplink_brx =_TRUE; } } if (pmppriv->bloopback) { diff --git a/core/rtw_rm.c b/core/rtw_rm.c index 38ceb2e..9517f81 100644 --- a/core/rtw_rm.c +++ b/core/rtw_rm.c @@ -36,6 +36,20 @@ u8 rm_post_event_hdl(_adapter *padapter, u8 *pbuf) return H2C_SUCCESS; } +void rm_update_cap(u8 *frame_head, _adapter *pa, u32 pktlen, int offset) +{ +#ifdef CONFIG_RTW_80211K + u8 *res; + sint len; + + res = rtw_get_ie(frame_head + offset, _EID_RRM_EN_CAP_IE_, &len, + pktlen - offset); + if (res != NULL) + _rtw_memcpy((void *)pa->rmpriv.rm_en_cap_def, (res + 2), + MIN(len, sizeof(pa->rmpriv.rm_en_cap_def))); +#endif +} + #ifdef CONFIG_RTW_80211K struct cmd_meas_type_ { u8 id; @@ -528,13 +542,13 @@ static int rm_parse_bcn_req_s_elem(struct rm_obj *prm, u8 *pbody, int req_len) RTW_INFO("DBG set ssid to %s\n",DBG_BCN_REQ_SSID_NAME); i = strlen(DBG_BCN_REQ_SSID_NAME); prm->q.opt.bcn.ssid.SsidLength = i; - _rtw_memcpy(&(prm->q.opt.bcn.ssid.Ssid), - DBG_BCN_REQ_SSID_NAME, i); + _rtw_memcpy(&(prm->q.opt.bcn.ssid.Ssid), DBG_BCN_REQ_SSID_NAME, + MIN(i, sizeof(prm->q.opt.bcn.ssid.Ssid)-1)); #else /* original */ prm->q.opt.bcn.ssid.SsidLength = pbody[p+1]; - _rtw_memcpy(&(prm->q.opt.bcn.ssid.Ssid), - &pbody[p+2], pbody[p+1]); + _rtw_memcpy(&(prm->q.opt.bcn.ssid.Ssid), &pbody[p+2], + MIN(pbody[p+1], sizeof(prm->q.opt.bcn.ssid.Ssid)-1)); #endif #endif RTW_INFO("RM: bcn_req_ssid=%s\n", @@ -2194,8 +2208,9 @@ void rtw_ap_parse_sta_rm_en_cap(_adapter *padapter, if (elem->rm_en_cap) { RTW_INFO("assoc.rm_en_cap="RM_CAP_FMT"\n", RM_CAP_ARG(elem->rm_en_cap)); - _rtw_memcpy(psta->rm_en_cap, - (elem->rm_en_cap), elem->rm_en_cap_len); + + _rtw_memcpy(psta->rm_en_cap, (elem->rm_en_cap), + MIN(elem->rm_en_cap_len, sizeof(psta->rm_en_cap))); } } @@ -2203,7 +2218,8 @@ void RM_IE_handler(_adapter *padapter, PNDIS_802_11_VARIABLE_IEs pIE) { int i; - _rtw_memcpy(&padapter->rmpriv.rm_en_cap_assoc, pIE->data, pIE->Length); + _rtw_memcpy(&padapter->rmpriv.rm_en_cap_assoc, pIE->data, + MIN(pIE->Length, sizeof(padapter->rmpriv.rm_en_cap_assoc))); RTW_INFO("assoc.rm_en_cap="RM_CAP_FMT"\n", RM_CAP_ARG(pIE->data)); } diff --git a/core/rtw_tdls.c b/core/rtw_tdls.c index d557234..a52baf8 100644 --- a/core/rtw_tdls.c +++ b/core/rtw_tdls.c @@ -1918,13 +1918,15 @@ sint On_TDLS_Setup_Req(_adapter *padapter, union recv_frame *precv_frame, struct switch (pIE->ElementID) { case _SUPPORTEDRATES_IE_: - _rtw_memcpy(supportRate, pIE->data, pIE->Length); - supportRateNum = pIE->Length; + if (pIE->Length <= sizeof(supportRate)) { + _rtw_memcpy(supportRate, pIE->data, pIE->Length); + supportRateNum = pIE->Length; + } break; case _COUNTRY_IE_: break; case _EXT_SUPPORTEDRATES_IE_: - if (supportRateNum < sizeof(supportRate)) { + if ((supportRateNum + pIE->Length) <= sizeof(supportRate)) { _rtw_memcpy(supportRate + supportRateNum, pIE->data, pIE->Length); supportRateNum += pIE->Length; } @@ -1935,17 +1937,19 @@ sint On_TDLS_Setup_Req(_adapter *padapter, union recv_frame *precv_frame, struct rsnie_included = 1; if (prx_pkt_attrib->encrypt) { prsnie = (u8 *)pIE; - /* Check CCMP pairwise_cipher presence. */ - ppairwise_cipher = prsnie + 10; - _rtw_memcpy(ptdls_sta->TDLS_RSNIE, pIE->data, pIE->Length); - pairwise_count = *(u16 *)(ppairwise_cipher - 2); - for (k = 0; k < pairwise_count; k++) { - if (_rtw_memcmp(ppairwise_cipher + 4 * k, RSN_CIPHER_SUITE_CCMP, 4) == _TRUE) - ccmp_included = 1; - } + if (pIE->Length <= sizeof(ptdls_sta->TDLS_RSNIE)) { + /* Check CCMP pairwise_cipher presence. */ + ppairwise_cipher = prsnie + 10; + _rtw_memcpy(ptdls_sta->TDLS_RSNIE, pIE->data, pIE->Length); + pairwise_count = *(u16 *)(ppairwise_cipher - 2); + for (k = 0; k < pairwise_count; k++) { + if (_rtw_memcmp(ppairwise_cipher + 4 * k, RSN_CIPHER_SUITE_CCMP, 4) == _TRUE) + ccmp_included = 1; + } - if (ccmp_included == 0) - txmgmt.status_code = _STATS_INVALID_RSNIE_; + if (ccmp_included == 0) + txmgmt.status_code = _STATS_INVALID_RSNIE_; + } } break; case _EXT_CAP_IE_: @@ -2100,13 +2104,15 @@ int On_TDLS_Setup_Rsp(_adapter *padapter, union recv_frame *precv_frame, struct switch (pIE->ElementID) { case _SUPPORTEDRATES_IE_: - _rtw_memcpy(supportRate, pIE->data, pIE->Length); - supportRateNum = pIE->Length; + if (pIE->Length <= sizeof(supportRate)) { + _rtw_memcpy(supportRate, pIE->data, pIE->Length); + supportRateNum = pIE->Length; + } break; case _COUNTRY_IE_: break; case _EXT_SUPPORTEDRATES_IE_: - if (supportRateNum < sizeof(supportRate)) { + if ((supportRateNum + pIE->Length) <= sizeof(supportRate)) { _rtw_memcpy(supportRate + supportRateNum, pIE->data, pIE->Length); supportRateNum += pIE->Length; } diff --git a/hal/btc/halbtc8822b2ant.c b/hal/btc/halbtc8822b2ant.c index 2b20cfc..86673d2 100644 --- a/hal/btc/halbtc8822b2ant.c +++ b/hal/btc/halbtc8822b2ant.c @@ -28,7 +28,7 @@ static const char *const glbt_info_src_8822b_2ant[] = { "BT Info[bt scbd]" }; -u32 glcoex_ver_date_8822b_2ant = 20200302; +u32 glcoex_ver_date_8822b_2ant = 20220812; u32 glcoex_ver_8822b_2ant = 0x7b; u32 glcoex_ver_btdesired_8822b_2ant = 0x79; @@ -2012,6 +2012,11 @@ static void halbtc8822b2ant_table(struct btc_coexist *btc, boolean force_exec, 0xffff55ff, break_table, select_table); break; + case 19: + halbtc8822b2ant_set_table(btc, force_exec, 0x55555555, + 0x6a5a6a5a, break_table, + select_table); + break; default: break; } @@ -3477,7 +3482,7 @@ halbtc8822b2ant_action_wifi_native_lps(struct btc_coexist *btc) BT_8822B_2ANT_PHASE_2G); halbtc8822b2ant_table(btc, NM_EXCU, 8); - halbtc8822b2ant_tdma(btc, NM_EXCU, FALSE, 0); + halbtc8822b2ant_tdma(btc, NM_EXCU, TRUE, 19); } static void diff --git a/hal/hal_dm.c b/hal/hal_dm.c index b42235a..e8c5c61 100644 --- a/hal/hal_dm.c +++ b/hal/hal_dm.c @@ -350,6 +350,15 @@ void rtw_phydm_priv_init(_adapter *adapter) odm_cmn_info_init(phydm, ODM_CMNINFO_PLATFORM, ODM_CE); } +#ifndef CONFIG_LITTLE_ENDIAN +static u8 *convert_to_big_endian(void *value, int size) +{ + u8 *temp; + temp = (u8 *)value + size - 1; + return temp; +} +#endif + void Init_ODM_ComInfo(_adapter *adapter) { struct dvobj_priv *dvobj = adapter_to_dvobj(adapter); @@ -467,11 +476,9 @@ void Init_ODM_ComInfo(_adapter *adapter) odm_cmn_info_hook(pDM_Odm, ODM_CMNINFO_TX_UNI, &(dvobj->traffic_stat.tx_bytes)); odm_cmn_info_hook(pDM_Odm, ODM_CMNINFO_RX_UNI, &(dvobj->traffic_stat.rx_bytes)); - odm_cmn_info_hook(pDM_Odm, ODM_CMNINFO_BAND, &(pHalData->current_band_type)); odm_cmn_info_hook(pDM_Odm, ODM_CMNINFO_FORCED_RATE, &(pHalData->ForcedDataRate)); odm_cmn_info_hook(pDM_Odm, ODM_CMNINFO_SEC_CHNL_OFFSET, &(pHalData->nCur40MhzPrimeSC)); - odm_cmn_info_hook(pDM_Odm, ODM_CMNINFO_SEC_MODE, &(adapter->securitypriv.dot11PrivacyAlgrthm)); #ifdef CONFIG_NARROWBAND_SUPPORTING if ((adapter->registrypriv.rtw_nb_config == RTW_NB_CONFIG_WIDTH_10) || (adapter->registrypriv.rtw_nb_config == RTW_NB_CONFIG_WIDTH_5)) { @@ -479,9 +486,19 @@ void Init_ODM_ComInfo(_adapter *adapter) } else #endif + +#ifdef CONFIG_LITTLE_ENDIAN + odm_cmn_info_hook(pDM_Odm, ODM_CMNINFO_BAND, &(pHalData->current_band_type)); + odm_cmn_info_hook(pDM_Odm, ODM_CMNINFO_SEC_MODE, &(adapter->securitypriv.dot11PrivacyAlgrthm)); odm_cmn_info_hook(pDM_Odm, ODM_CMNINFO_BW, &(pHalData->current_channel_bw)); - odm_cmn_info_hook(pDM_Odm, ODM_CMNINFO_CHNL, &(pHalData->current_channel)); odm_cmn_info_hook(pDM_Odm, ODM_CMNINFO_NET_CLOSED, &(adapter->net_closed)); +#else /* CONFIG_BIG_ENDIAN */ + odm_cmn_info_hook(pDM_Odm, ODM_CMNINFO_BAND, convert_to_big_endian(&(pHalData->current_band_type), sizeof(BAND_TYPE))); + odm_cmn_info_hook(pDM_Odm, ODM_CMNINFO_SEC_MODE, convert_to_big_endian(&(adapter->securitypriv.dot11PrivacyAlgrthm), sizeof(u32))); + odm_cmn_info_hook(pDM_Odm, ODM_CMNINFO_BW, convert_to_big_endian(&(pHalData->current_channel_bw), sizeof(enum channel_width))); + odm_cmn_info_hook(pDM_Odm, ODM_CMNINFO_NET_CLOSED, convert_to_big_endian(&(adapter->net_closed), sizeof(int))); +#endif + odm_cmn_info_hook(pDM_Odm, ODM_CMNINFO_CHNL, &(pHalData->current_channel)); odm_cmn_info_hook(pDM_Odm, ODM_CMNINFO_SCAN, &(pHalData->bScanInProcess)); odm_cmn_info_hook(pDM_Odm, ODM_CMNINFO_POWER_SAVING, &(pwrctl->bpower_saving)); diff --git a/include/ieee80211.h b/include/ieee80211.h old mode 100644 new mode 100755 index 8e17b22..736d10e --- a/include/ieee80211.h +++ b/include/ieee80211.h @@ -764,6 +764,7 @@ struct ieee80211_snap_hdr { #define WLAN_EID_WIDE_BANDWIDTH_CHANNEL_SWITCH 194 #define WLAN_EID_CHANNEL_SWITCH_WRAPPER 196 #define WLAN_EID_VHT_OP_MODE_NOTIFY 199 +#define WLAN_EID_RSNX 244 #define WLAN_EID_EXTENSION 255 #define WLAN_EID_EXT_OWE_DH_PARAM 32 @@ -1274,6 +1275,7 @@ struct ieee80211_txb { #define MAX_OWE_IE_LEN (128) #define MAX_P2P_IE_LEN (256) #define MAX_WFD_IE_LEN (128) +#define MAX_RSNX_IE_LEN (16) #define NETWORK_EMPTY_ESSID (1<<0) #define NETWORK_HAS_OFDM (1<<1) diff --git a/include/rtw_rm.h b/include/rtw_rm.h index 8aa2b9d..5699f0b 100644 --- a/include/rtw_rm.h +++ b/include/rtw_rm.h @@ -25,6 +25,10 @@ u8 rm_post_event_hdl(_adapter *padapter, u8 *pbuf); #define RM_CAP_ARG(x) ((u8 *)(x))[4], ((u8 *)(x))[3], ((u8 *)(x))[2], ((u8 *)(x))[1], ((u8 *)(x))[0] #define RM_CAP_FMT "%02x %02x%02x %02x%02x" +#ifndef MIN +#define MIN(x, y) (((x) < (y)) ? (x) : (y)) +#endif + /* remember to modify rm_event_name() when adding new event */ enum RM_EV_ID { RM_EV_state_in, @@ -102,4 +106,6 @@ void indicate_beacon_report(u8 *sta_addr, u8 n_measure_rpt, u32 elem_len, u8 *elem); #endif /*CONFIG_RTW_80211K */ +void rm_update_cap(u8 *frame_head, _adapter *pa, u32 pktlen, int offset); + #endif /* __RTW_RM_H_ */ diff --git a/include/rtw_security.h b/include/rtw_security.h index 9cceed6..8cd18a9 100644 --- a/include/rtw_security.h +++ b/include/rtw_security.h @@ -182,6 +182,9 @@ struct security_priv { u8 owe_ie[MAX_OWE_IE_LEN];/* added in assoc req */ int owe_ie_len; + u8 rsnx_ie[MAX_RSNX_IE_LEN]; + int rsnx_ie_len; + u8 binstallGrpkey; #ifdef CONFIG_GTK_OL u8 binstallKCK_KEK; diff --git a/include/rtw_version.h b/include/rtw_version.h index 09afbbf..ad7d38d 100644 --- a/include/rtw_version.h +++ b/include/rtw_version.h @@ -1,2 +1,2 @@ -#define DRIVERVERSION "v5.13.1-20-gbd7c7eb9d.20210702_COEX20210316-18317b7b" -#define BTCOEXVERSION "COEX20210316-18317b7b" +#define DRIVERVERSION "v5.13.1-30-g37e60b26a.20220819_COEX20220812-18317b7b" +#define BTCOEXVERSION "COEX20220812-18317b7b" diff --git a/os_dep/linux/ioctl_cfg80211.c b/os_dep/linux/ioctl_cfg80211.c old mode 100644 new mode 100755 index c605493..a1fbd0f --- a/os_dep/linux/ioctl_cfg80211.c +++ b/os_dep/linux/ioctl_cfg80211.c @@ -205,6 +205,9 @@ static struct ieee80211_channel rtw_5ghz_a_channels[MAX_CHANNEL_NUM_5G] = { CHAN5G(165, 0), CHAN5G(169, 0), CHAN5G(173, 0), CHAN5G(177, 0), }; + +static int rtw_cfg80211_set_assocresp_ies(struct net_device *net, const u8 *buf, int len); + #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)) static u8 rtw_chbw_to_cfg80211_chan_def(struct wiphy *wiphy, struct cfg80211_chan_def *chdef, u8 ch, u8 bw, u8 offset, u8 ht) { @@ -3042,8 +3045,8 @@ static int rtw_cfg80211_set_probe_req_wpsp2pie(_adapter *padapter, char *buf, in _rtw_memcpy(pmlmepriv->p2p_probe_req_ie, p2p_ie, p2p_ielen); pmlmepriv->p2p_probe_req_ie_len = p2p_ielen; - if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_LISTEN_CH, (u8 *)listen_ch_attr, (uint *) &attr_contentlen) - && attr_contentlen == 5) { + attr_contentlen = sizeof(listen_ch_attr); + if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_LISTEN_CH, (u8 *)listen_ch_attr, (uint *) &attr_contentlen)) { if (wdinfo->listen_channel != listen_ch_attr[4]) { RTW_INFO(FUNC_ADPT_FMT" listen channel - country:%c%c%c, class:%u, ch:%u\n", FUNC_ADPT_ARG(padapter), listen_ch_attr[0], listen_ch_attr[1], listen_ch_attr[2], @@ -3829,7 +3832,8 @@ static int rtw_cfg80211_set_wpa_ie(_adapter *padapter, u8 *pie, size_t ielen) int ret = 0; int wpa_ielen = 0; int wpa2_ielen = 0; - u8 *pwpa, *pwpa2; + int rsnx_ielen = 0; + u8 *pwpa, *pwpa2, *prsnx; u8 null_addr[] = {0, 0, 0, 0, 0, 0}; if (pie == NULL || !ielen) { @@ -3880,7 +3884,26 @@ static int rtw_cfg80211_set_wpa_ie(_adapter *padapter, u8 *pie, size_t ielen) RTW_INFO("got wpa2_ie, wpa2_ielen:%u\n", wpa2_ielen); } - } + + prsnx = rtw_get_ie(buf, WLAN_EID_RSNX, &rsnx_ielen, ielen); + if (prsnx && (rsnx_ielen > 0)) { + if ((rsnx_ielen + 2) <= MAX_RSNX_IE_LEN) { + _rtw_memset(padapter->securitypriv.rsnx_ie, 0, + MAX_RSNX_IE_LEN); + padapter->securitypriv.rsnx_ie_len = \ + (rsnx_ielen + 2); + _rtw_memcpy(padapter->securitypriv.rsnx_ie, + prsnx, + padapter->securitypriv.rsnx_ie_len); + } else + RTW_ERR("%s:no more buf to save RSNX Cap!\n", + __func__); + } else { + _rtw_memset(padapter->securitypriv.rsnx_ie, 0, + MAX_RSNX_IE_LEN); + padapter->securitypriv.rsnx_ie_len = 0; + } + } /* end of (pwpa2 && wpa2_ielen > 0) */ if (group_cipher == 0) group_cipher = WPA_CIPHER_NONE; @@ -5371,6 +5394,13 @@ static int cfg80211_rtw_start_ap(struct wiphy *wiphy, struct net_device *ndev, ret = rtw_add_beacon(adapter, settings->beacon.head, settings->beacon.head_len, settings->beacon.tail, settings->beacon.tail_len); + if (settings->beacon.assocresp_ies && + settings->beacon.assocresp_ies_len > 0) { + rtw_cfg80211_set_assocresp_ies(ndev, + settings->beacon.assocresp_ies, + settings->beacon.assocresp_ies_len); + } + if (settings->ssid && settings->ssid_len) { WLAN_BSSID_EX *pbss_network = &adapter->mlmepriv.cur_network.network; WLAN_BSSID_EX *pbss_network_ext = &adapter->mlmeextpriv.mlmext_info.network; @@ -5395,6 +5425,37 @@ exit: return ret; } +static int rtw_cfg80211_set_assocresp_ies(struct net_device *net, const u8 *buf, int len) +{ + int ret = 0; + _adapter *padapter = (_adapter *)rtw_netdev_priv(net); + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv); + + RTW_INFO("%s, ielen=%d\n", __func__, len); + + if (len <= 0) + goto exit; + + if (pmlmepriv->assoc_rsp) { + u32 free_len = pmlmepriv->assoc_rsp_len; + + pmlmepriv->assoc_rsp_len = 0; + rtw_mfree(pmlmepriv->assoc_rsp, free_len); + pmlmepriv->assoc_rsp = NULL; + } + + pmlmepriv->assoc_rsp = rtw_malloc(len); + if (pmlmepriv->assoc_rsp == NULL) { + RTW_INFO("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__); + return -EINVAL; + } + _rtw_memcpy(pmlmepriv->assoc_rsp, buf, len); + pmlmepriv->assoc_rsp_len = len; + +exit: + return ret; +} + static int cfg80211_rtw_change_beacon(struct wiphy *wiphy, struct net_device *ndev, #if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 7, 0)) struct cfg80211_ap_update *ap) @@ -6464,6 +6525,7 @@ static int rtw_cfg80211_set_probe_resp_wpsp2pie(struct net_device *net, char *bu #endif /* Check P2P Capability ATTR */ + attr_contentlen = sizeof(cap_attr); if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_CAPABILITY, (u8 *)&cap_attr, (uint *) &attr_contentlen)) { u8 grp_cap = 0; /* RTW_INFO( "[%s] Got P2P Capability Attr!!\n", __FUNCTION__ ); */ @@ -7250,6 +7312,7 @@ void rtw_cfg80211_issue_p2p_provision_request(_adapter *padapter, const u8 *buf, pwdinfo->tx_prov_disc_info.wps_config_method_request = WPS_CM_PUSH_BUTTON; rtw_get_wps_ie(frame_body + _PUBLIC_ACTION_IE_OFFSET_, frame_body_len - _PUBLIC_ACTION_IE_OFFSET_, wpsie, &wpsielen); + wps_devicepassword_id_len = sizeof(wps_devicepassword_id); rtw_get_wps_attr_content(wpsie, wpsielen, WPS_ATTR_DEVICE_PWID, (u8 *) &wps_devicepassword_id, &wps_devicepassword_id_len); wps_devicepassword_id = be16_to_cpu(wps_devicepassword_id); @@ -7277,7 +7340,9 @@ void rtw_cfg80211_issue_p2p_provision_request(_adapter *padapter, const u8 *buf, if (rtw_get_p2p_ie(frame_body + _PUBLIC_ACTION_IE_OFFSET_, frame_body_len - _PUBLIC_ACTION_IE_OFFSET_, p2p_ie, &p2p_ielen)) { + devinfo_contentlen = sizeof(devinfo_content); rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_DEVICE_INFO, devinfo_content, &devinfo_contentlen); + capability_len = sizeof(capability); rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_CAPABILITY, (u8 *)&capability, &capability_len); } diff --git a/os_dep/linux/ioctl_linux.c b/os_dep/linux/ioctl_linux.c old mode 100644 new mode 100755 index 1751022..964ec30 --- a/os_dep/linux/ioctl_linux.c +++ b/os_dep/linux/ioctl_linux.c @@ -4304,6 +4304,7 @@ static int rtw_p2p_get_wps_configmethod(struct net_device *dev, wpsie = rtw_get_wps_ie_from_scan_queue(&pnetwork->network.IEs[0], pnetwork->network.IELength, NULL, &wpsie_len, pnetwork->network.Reserved[0]); if (wpsie) { + attr_contentlen = sizeof(attr_content); rtw_get_wps_attr_content(wpsie, wpsie_len, WPS_ATTR_CONF_METHOD, (u8 *)&attr_content, &attr_contentlen); if (attr_contentlen) { attr_content = be16_to_cpu(attr_content); @@ -4437,6 +4438,7 @@ static int rtw_p2p_get_go_device_address(struct net_device *dev, /* The P2P Device Info attribute is included in the probe response frame. */ _rtw_memset(attr_content, 0x00, 100); + attr_contentlen = sizeof(attr_content); if (rtw_get_p2p_attr_content(p2pie, p2pielen, P2P_ATTR_DEVICE_ID, attr_content, &attr_contentlen)) { /* Handle the P2P Device ID attribute of Beacon first */ blnMatch = 1; @@ -4519,6 +4521,7 @@ static int rtw_p2p_get_device_type(struct net_device *dev, wpsie = rtw_get_wps_ie_from_scan_queue(&pnetwork->network.IEs[0], pnetwork->network.IELength, NULL, &wpsie_len, pnetwork->network.Reserved[0]); if (wpsie) { + dev_type_len = sizeof(dev_type); rtw_get_wps_attr_content(wpsie, wpsie_len, WPS_ATTR_PRIMARY_DEV_TYPE, dev_type, &dev_type_len); if (dev_type_len) { u16 type = 0; @@ -4593,6 +4596,7 @@ static int rtw_p2p_get_device_name(struct net_device *dev, wpsie = rtw_get_wps_ie_from_scan_queue(&pnetwork->network.IEs[0], pnetwork->network.IELength, NULL, &wpsie_len, pnetwork->network.Reserved[0]); if (wpsie) { + dev_len = sizeof(dev_name); rtw_get_wps_attr_content(wpsie, wpsie_len, WPS_ATTR_DEVICE_NAME, dev_name, &dev_len); if (dev_len) { sprintf(dev_name_str, "\n\nN=%s", dev_name); @@ -4633,7 +4637,7 @@ static int rtw_p2p_get_invitation_procedure(struct net_device *dev, struct wlan_network *pnetwork = NULL; u8 blnMatch = 0; u8 *p2pie; - uint p2pielen = 0, attr_contentlen = 0; + uint p2pielen = 0, attr_contentlen = 2; u8 attr_content[2] = { 0x00 }; u8 inv_proc_str[P2P_PRIVATE_IOCTL_SET_LEN] = { 0x00 }; @@ -4664,6 +4668,7 @@ static int rtw_p2p_get_invitation_procedure(struct net_device *dev, if (p2pie) { while (p2pie) { /* _rtw_memset( attr_content, 0x00, 2); */ + attr_contentlen = sizeof(attr_content); if (rtw_get_p2p_attr_content(p2pie, p2pielen, P2P_ATTR_CAPABILITY, attr_content, &attr_contentlen)) { /* Handle the P2P capability attribute */ blnMatch = 1; @@ -4836,7 +4841,7 @@ static int rtw_p2p_invite_req(struct net_device *dev, uint uintPeerChannel = 0; u8 attr_content[50] = { 0x00 }; u8 *p2pie; - uint p2pielen = 0, attr_contentlen = 0; + uint p2pielen = 0, attr_contentlen = 50; _irqL irqL; struct tx_invite_req_info *pinvite_req_info = &pwdinfo->invitereq_info; #ifdef CONFIG_CONCURRENT_MODE @@ -4894,6 +4899,7 @@ static int rtw_p2p_invite_req(struct net_device *dev, /* The P2P Device ID attribute is included in the Beacon frame. */ /* The P2P Device Info attribute is included in the probe response frame. */ + attr_contentlen = sizeof(attr_content); if (rtw_get_p2p_attr_content(p2pie, p2pielen, P2P_ATTR_DEVICE_ID, attr_content, &attr_contentlen)) { /* Handle the P2P Device ID attribute of Beacon first */ if (_rtw_memcmp(attr_content, pinvite_req_info->peer_macaddr, ETH_ALEN)) { @@ -5109,7 +5115,7 @@ static int rtw_p2p_set_pc(struct net_device *dev, struct wlan_network *pnetwork = NULL; u8 attr_content[50] = { 0x00 }; u8 *p2pie; - uint p2pielen = 0, attr_contentlen = 0; + uint p2pielen = 0, attr_contentlen = 50; _irqL irqL; uint uintPeerChannel = 0; @@ -5149,6 +5155,7 @@ static int rtw_p2p_set_pc(struct net_device *dev, /* The P2P Device ID attribute is included in the Beacon frame. */ /* The P2P Device Info attribute is included in the probe response frame. */ printk("[%s] Got P2P IE\n", __FUNCTION__); + attr_contentlen = sizeof(attr_content); if (rtw_get_p2p_attr_content(p2pie, p2pielen, P2P_ATTR_DEVICE_ID, attr_content, &attr_contentlen)) { /* Handle the P2P Device ID attribute of Beacon first */ printk("[%s] P2P_ATTR_DEVICE_ID\n", __FUNCTION__); @@ -5321,7 +5328,7 @@ static int rtw_p2p_prov_disc(struct net_device *dev, uint uintPeerChannel = 0; u8 attr_content[100] = { 0x00 }; u8 *p2pie; - uint p2pielen = 0, attr_contentlen = 0; + uint p2pielen = 0, attr_contentlen = 100; _irqL irqL; #ifdef CONFIG_CONCURRENT_MODE struct roch_info *prochinfo = &padapter->rochinfo; @@ -5390,7 +5397,7 @@ static int rtw_p2p_prov_disc(struct net_device *dev, while (p2pie) { /* The P2P Device ID attribute is included in the Beacon frame. */ /* The P2P Device Info attribute is included in the probe response frame. */ - + attr_contentlen = sizeof(attr_content); if (rtw_get_p2p_attr_content(p2pie, p2pielen, P2P_ATTR_DEVICE_ID, attr_content, &attr_contentlen)) { /* Handle the P2P Device ID attribute of Beacon first */ if (_rtw_memcmp(attr_content, peerMAC, ETH_ALEN)) { diff --git a/os_dep/linux/os_intfs.c b/os_dep/linux/os_intfs.c index 0a5bc72..4988d3d 100644 --- a/os_dep/linux/os_intfs.c +++ b/os_dep/linux/os_intfs.c @@ -433,17 +433,11 @@ int rtw_hwpwrp_detect = 1; int rtw_hwpwrp_detect = 0; /* HW power ping detect 0:disable , 1:enable */ #endif - -/* -Causes excessive rescanning by nature of WPS, the "Push Button Configuration" - being something initialized on the access point by button due to the - traditionally non-graphical nature of routers. This should only be enabled - during those events, otherwise the radio(s) will have to drop beam forming - capabilities to do a general scan for an access point emitting the unsecured - connection information. -*/ +#ifdef CONFIG_USB_HCI +int rtw_hw_wps_pbc = 1; +#else int rtw_hw_wps_pbc = 0; - +#endif #ifdef CONFIG_80211D int rtw_80211d = 0;