FAILED: patch "[PATCH] staging: rtl8723bs: fix OOB reads in rtw_get_sec_ie()," failed to apply to 5.10-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 5.10-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-5.10.y
git checkout FETCH_HEAD
git cherry-pick -x 1463ca3ec6601cbb097d8d87dbf5dcf1cb86a344
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2026071300-length-drainable-3f8e@gregkh' --subject-prefix 'PATCH 5.10.y' 'HEAD^..'
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 1463ca3ec6601cbb097d8d87dbf5dcf1cb86a344 Mon Sep 17 00:00:00 2001
From: Alexandru Hossu <[email protected]>
Date: Fri, 22 May 2026 02:45:31 +0200
Subject: [PATCH] staging: rtl8723bs: fix OOB reads in rtw_get_sec_ie(),
rtw_get_wapi_ie(), and rtw_get_wps_attr()
Three IE/attribute parsing functions have missing bounds checks.
rtw_get_sec_ie() and rtw_get_wapi_ie() iterate over a raw IE buffer without verifying that the header bytes (tag + length) are within the remaining buffer before reading them. Additionally, rtw_get_sec_ie() compares the 4-byte WPA OUI at cnt+2 without checking that at least 6 bytes remain, and rtw_get_wapi_ie() compares a 4-byte WAPI OUI at cnt+6 without checking that at least 10 bytes remain.
rtw_get_wps_attr() reads wps_ie[0] and wps_ie+2 unconditionally at entry, before verifying that wps_ielen is large enough to contain the 6-byte WPS IE header (element_id + length + 4-byte OUI). Inside the attribute loop, get_unaligned_be16() is called on attr_ptr and attr_ptr+2 without checking that 4 bytes remain in the buffer.
Add a cnt+2 bounds check before each loop body in rtw_get_sec_ie() and rtw_get_wapi_ie(), guard each multi-byte comparison with a minimum IE length requirement, add a wps_ielen < 6 early return in rtw_get_wps_attr(), and add a 4-byte bounds check in its inner loop.
drivers/staging/rtl8723bs/core/rtw_ieee80211.c +15 -0
@@ -583,9 +583,14 @@ int rtw_get_wapi_ie(u8 *in_ie, uint in_len, u8 *wapi_ie, u16 *wapi_len) cnt = (_TIMESTAMP_ + _BEACON_ITERVAL_ + _CAPABILITY_);while (cnt < in_len) { +if (cnt +2 > in_len) +break ; +if (cnt +2 + in_ie[cnt +1 ] > in_len) +break ; authmode = in_ie[cnt];if (authmode ==WLAN_EID_BSS_AC_ACCESS_DELAY && + in_ie[cnt +1 ] >=8 && (!memcmp (&in_ie[cnt +6 ], wapi_oui1,4 ) || !memcmp (&in_ie[cnt +6 ], wapi_oui2,4 ))) {if (wapi_ie)
@@ -615,9 +620,14 @@ void rtw_get_sec_ie(u8 *in_ie, uint in_len, u8 *rsn_ie, u16 *rsn_len, u8 *wpa_ie cnt = (_TIMESTAMP_ + _BEACON_ITERVAL_ + _CAPABILITY_);while (cnt < in_len) { +if (cnt +2 > in_len) +break ; +if (cnt +2 + in_ie[cnt +1 ] > in_len) +break ; authmode = in_ie[cnt];if ((authmode ==WLAN_EID_VENDOR_SPECIFIC ) && + in_ie[cnt +1 ] >=4 && (!memcmp (&in_ie[cnt +2 ], &wpa_oui[0 ],4 ))) {if (wpa_ie)memcpy (wpa_ie, &in_ie[cnt], in_ie[cnt +1 ] +2 );
@@ -698,6 +708,9 @@ u8 *rtw_get_wps_attr(u8 *wps_ie, uint wps_ielen, u16 target_attr_id, u8 *buf_attif (len_attr) *len_attr =0 ; +if (wps_ielen <6 ) +return attr_ptr; +if ((wps_ie[0 ] !=WLAN_EID_VENDOR_SPECIFIC ) || (memcmp (wps_ie +2 , wps_oui,4 ))) {return attr_ptr;
@@ -708,6 +721,8 @@ u8 *rtw_get_wps_attr(u8 *wps_ie, uint wps_ielen, u16 target_attr_id, u8 *buf_attwhile (attr_ptr - wps_ie < wps_ielen) {/* 4 = 2(Attribute ID) + 2(Length) */ +if (attr_ptr +4 > wps_ie + wps_ielen) +break ;u16 attr_id =get_unaligned_be16 (attr_ptr);u16 attr_data_len =get_unaligned_be16 (attr_ptr +2 );u16 attr_len = attr_data_len +4 ;
Sasha Levin
maintainerPATCH 1/10 staging: rtl8723bs: remove 5Ghz code blocks
From: Fabio Aiuto <[email protected]>
[ Upstream commit ddd7c8b0033ba01a0ee605697f12a33fd31e6fca ]
remove 5 Ghz code blocks, related to networks
working over channel numbers above 14.
Stable-dep-of: 1463ca3ec660 ("staging: rtl8723bs: fix OOB reads in rtw_get_sec_ie(), rtw_get_wapi_ie(), and rtw_get_wps_attr()")
--- drivers/staging/rtl8723bs/core/rtw_mlme_ext.c | 7 ++----- .../staging/rtl8723bs/os_dep/ioctl_linux.c | 20 +++---------------- 2 files changed, 5 insertions(+), 22 deletions(-)
drivers/staging/rtl8723bs/core/rtw_mlme_ext.c +2 -5
@@ -4133,7 +4133,7 @@ static void issue_action_BSSCoexistPacket(struct adapter *padapter) p =rtw_get_ie (pbss_network->IEs + _FIXED_IE_LENGTH_, _HT_CAPABILITY_IE_, &len, pbss_network->IELength - _FIXED_IE_LENGTH_);if ((p ==NULL ) || (len ==0 )) {/* non-HT */ -if ((pbss_network->Configuration.DSConfig <=0 ) || (pbss_network->Configuration.DSConfig >14 )) +if (pbss_network->Configuration.DSConfig <=0 )continue ;ICS [0 ][pbss_network->Configuration.DSConfig] =1 ;
@@ -6194,10 +6194,7 @@ u8 join_cmd_hdl(struct adapter *padapter, u8 *pbuf) {struct HT_info_element *pht_info = (struct HT_info_element *)(pIE->data); -if (pnetwork->Configuration.DSConfig >14 ) { -if ((pregpriv->bw_mode >>4 ) >CHANNEL_WIDTH_20 ) - cbw40_enable =1 ; - }else { +if (pnetwork->Configuration.DSConfig <=14 ) {if ((pregpriv->bw_mode &0x0f ) >CHANNEL_WIDTH_20 ) cbw40_enable =1 ; }
drivers/staging/rtl8723bs/os_dep/ioctl_linux.c +3 -17
@@ -135,14 +135,7 @@ static char *translate_scan(struct adapter *padapter,else snprintf (iwe.u.name,IFNAMSIZ ,"IEEE 802.11bg" ); }else { -if (pnetwork->network.Configuration.DSConfig >14 ) { -if (vht_cap) -snprintf (iwe.u.name,IFNAMSIZ ,"IEEE 802.11AC" ); -else if (ht_cap) -snprintf (iwe.u.name,IFNAMSIZ ,"IEEE 802.11an" ); -else -snprintf (iwe.u.name,IFNAMSIZ ,"IEEE 802.11a" ); - }else { +if (pnetwork->network.Configuration.DSConfig <=14 ) {if (ht_cap)snprintf (iwe.u.name,IFNAMSIZ ,"IEEE 802.11gn" );else
@@ -762,7 +755,7 @@ static int rtw_wx_get_name(struct net_device *dev,struct adapter *padapter = (struct adapter *)rtw_netdev_priv (dev);u32 ht_ielen =0 ;char *p; -u8 ht_cap = false, vht_cap = false; +u8 ht_cap = false;struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);struct wlan_bssid_ex *pcur_bss = &pmlmepriv->cur_network.network;NDIS_802_11_RATES_EX * prates =NULL ;
@@ -788,14 +781,7 @@ static int rtw_wx_get_name(struct net_device *dev,else snprintf (wrqu->name,IFNAMSIZ ,"IEEE 802.11bg" ); }else { -if (pcur_bss->Configuration.DSConfig >14 ) { -if (vht_cap) -snprintf (wrqu->name,IFNAMSIZ ,"IEEE 802.11AC" ); -else if (ht_cap) -snprintf (wrqu->name,IFNAMSIZ ,"IEEE 802.11an" ); -else -snprintf (wrqu->name,IFNAMSIZ ,"IEEE 802.11a" ); - }else { +if (pcur_bss->Configuration.DSConfig <=14 ) {if (ht_cap)snprintf (wrqu->name,IFNAMSIZ ,"IEEE 802.11gn" );else
Signature · 1 line
2.53.0
Sasha Levin
maintainerPATCH 2/10 staging: rtl8723bs: remove commented out condition
From: Fabio Aiuto <[email protected]>
[ Upstream commit 2a62ff13132a22a754d042b2230117bbea0af477 ]
remove commented out condition checking channel > 14.
Stable-dep-of: 1463ca3ec660 ("staging: rtl8723bs: fix OOB reads in rtw_get_sec_ie(), rtw_get_wapi_ie(), and rtw_get_wps_attr()")
--- drivers/staging/rtl8723bs/os_dep/ioctl_linux.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/staging/rtl8723bs/os_dep/ioctl_linux.c +1 -1
@@ -165,7 +165,7 @@ static char *translate_scan(struct adapter *padapter, start =iwe_stream_add_event (info, start, stop, &iwe,IW_EV_UINT_LEN ); } -if (pnetwork->network.Configuration.DSConfig <1 /*|| pnetwork->network.Configuration.DSConfig > 14*/ ) +if (pnetwork->network.Configuration.DSConfig <1 ) pnetwork->network.Configuration.DSConfig =1 ;/* Add frequency/channel */
Signature · 1 line
2.53.0
Sasha Levin
maintainerPATCH 3/10 staging: rtl8723bs: fix camel case in struct wlan_bssid_ex
In reply to Sasha LevinFrom: Fabio Aiuto <[email protected]>
[ Upstream commit d3fcee1b78a533c256077f1300dd236801397cf7 ]
fix camel case in struct wlan_bssid_ex.
Stable-dep-of: 1463ca3ec660 ("staging: rtl8723bs: fix OOB reads in rtw_get_sec_ie(), rtw_get_wapi_ie(), and rtw_get_wps_attr()")
--- drivers/staging/rtl8723bs/core/rtw_ap.c | 126 ++++---- drivers/staging/rtl8723bs/core/rtw_cmd.c | 50 +-- .../staging/rtl8723bs/core/rtw_ieee80211.c | 58 ++-- .../staging/rtl8723bs/core/rtw_ioctl_set.c | 14 +- drivers/staging/rtl8723bs/core/rtw_mlme.c | 290 +++++++++--------- drivers/staging/rtl8723bs/core/rtw_mlme_ext.c | 268 ++++++++-------- .../staging/rtl8723bs/core/rtw_wlan_util.c | 66 ++-- drivers/staging/rtl8723bs/hal/hal_btcoex.c | 2 +- drivers/staging/rtl8723bs/hal/hal_com.c | 2 +- drivers/staging/rtl8723bs/hal/rtl8723b_cmd.c | 54 ++-- drivers/staging/rtl8723bs/include/rtw_mlme.h | 6 +- .../staging/rtl8723bs/include/wlan_bssdef.h | 30 +- .../staging/rtl8723bs/os_dep/ioctl_cfg80211.c | 74 ++--- .../staging/rtl8723bs/os_dep/ioctl_linux.c | 126 ++++---- drivers/staging/rtl8723bs/os_dep/os_intfs.c | 12 +- 15 files changed, 589 insertions(+), 589 deletions(-)
drivers/staging/rtl8723bs/core/rtw_ap.c +63 -63
@@ -61,7 +61,7 @@ static void update_BCNTIM(struct adapter *padapter)struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;struct wlan_bssid_ex *pnetwork_mlmeext = &pmlmeinfo->network; -unsigned char *pie = pnetwork_mlmeext->IEs; +unsigned char *pie = pnetwork_mlmeext->ies;/* DBG_871X("%s\n", __func__); */
@@ -78,7 +78,7 @@ static void update_BCNTIM(struct adapter *padapter) pie + _FIXED_IE_LENGTH_, _TIM_IE_, &tim_ielen, - pnetwork_mlmeext->IELength - _FIXED_IE_LENGTH_ + pnetwork_mlmeext->ie_length - _FIXED_IE_LENGTH_ );if (p !=NULL && tim_ielen >0 ) { tim_ielen +=2 ;
@@ -87,7 +87,7 @@ static void update_BCNTIM(struct adapter *padapter) tim_ie_offset = (sint)(p - pie); - remainder_ielen = pnetwork_mlmeext->IELength - tim_ie_offset - tim_ielen; + remainder_ielen = pnetwork_mlmeext->ie_length - tim_ie_offset - tim_ielen;/* append TIM IE from dst_ie offset */ dst_ie = p;
@@ -102,7 +102,7 @@ static void update_BCNTIM(struct adapter *padapter) pie + _BEACON_IE_OFFSET_, _SSID_IE_, &tmp_len, - (pnetwork_mlmeext->IELength - _BEACON_IE_OFFSET_) + (pnetwork_mlmeext->ie_length - _BEACON_IE_OFFSET_) );if (p !=NULL ) offset += tmp_len +2 ;
@@ -111,7 +111,7 @@ static void update_BCNTIM(struct adapter *padapter) p =rtw_get_ie ( pie + _BEACON_IE_OFFSET_, _SUPPORTEDRATES_IE_, &tmp_len, - (pnetwork_mlmeext->IELength - _BEACON_IE_OFFSET_) + (pnetwork_mlmeext->ie_length - _BEACON_IE_OFFSET_) );if (p !=NULL ) offset += tmp_len +2 ;
@@ -121,7 +121,7 @@ static void update_BCNTIM(struct adapter *padapter) premainder_ie = pie + offset; - remainder_ielen = pnetwork_mlmeext->IELength - offset - tim_ielen; + remainder_ielen = pnetwork_mlmeext->ie_length - offset - tim_ielen;/* append TIM IE from offset */ dst_ie = pie + offset;
@@ -173,7 +173,7 @@ static void update_BCNTIM(struct adapter *padapter) } offset = (uint)(dst_ie - pie); - pnetwork_mlmeext->IELength = offset + remainder_ielen; + pnetwork_mlmeext->ie_length = offset + remainder_ielen; } }
@@ -426,7 +426,7 @@ void add_RATid(struct adapter *padapter, struct sta_info *psta, u8 rssi_level) shortGIrate =query_ra_short_GI (psta); -if (pcur_network->Configuration.DSConfig >14 ) { +if (pcur_network->configuration.DSConfig >14 ) {if (tx_ra_bitmap &0xffff000 ) sta_band |=WIRELESS_11_5N ;
@@ -492,17 +492,17 @@ void update_bmc_sta(struct adapter *padapter)/* psta->dot118021XPrivacy = _NO_PRIVACY_;//!!! remove it, because it has been set before this. */ /* prepare for add_RATid */ - supportRateNum =rtw_get_rateset_len ((u8 *)&pcur_network->SupportedRates); + supportRateNum =rtw_get_rateset_len ((u8 *)&pcur_network->supported_rates); network_type =rtw_check_network_type ( - (u8 *)&pcur_network->SupportedRates, + (u8 *)&pcur_network->supported_rates, supportRateNum, - pcur_network->Configuration.DSConfig + pcur_network->configuration.DSConfig );if (IsSupportedTxCCK (network_type)) { network_type =WIRELESS_11B ; }else if (network_type ==WIRELESS_INVALID ) {/* error handling */ -if (pcur_network->Configuration.DSConfig >14 ) +if (pcur_network->configuration.DSConfig >14 ) network_type =WIRELESS_11A ;else network_type =WIRELESS_11B ;
@@ -679,8 +679,8 @@ static void update_ap_info(struct adapter *padapter, struct sta_info *psta) psta->wireless_mode = pmlmeext->cur_wireless_mode; - psta->bssratelen =rtw_get_rateset_len (pnetwork->SupportedRates); -memcpy (psta->bssrateset, pnetwork->SupportedRates, psta->bssratelen); + psta->bssratelen =rtw_get_rateset_len (pnetwork->supported_rates); +memcpy (psta->bssrateset, pnetwork->supported_rates, psta->bssratelen);/* HT related cap */ if (phtpriv_ap->ht_option) {
@@ -775,16 +775,16 @@ void start_bss_network(struct adapter *padapter, u8 *pbuf)/* DBG_871X("%s\n", __func__); */ - bcn_interval = (u16 )pnetwork->Configuration.BeaconPeriod; - cur_channel = pnetwork->Configuration.DSConfig; + bcn_interval = (u16 )pnetwork->configuration.BeaconPeriod; + cur_channel = pnetwork->configuration.DSConfig; cur_bwmode =CHANNEL_WIDTH_20 ; cur_ch_offset =HAL_PRIME_CHNL_OFFSET_DONT_CARE ;/* check if there is wps ie, */ /* if there is wpsie in beacon, the hostapd will update beacon twice when stating hostapd, */ /* and at first time the security ie (RSN/WPA IE) will not include in beacon. */ -if (!rtw_get_wps_ie (pnetwork->IEs + _FIXED_IE_LENGTH_, - pnetwork->IELength - _FIXED_IE_LENGTH_,NULL ,NULL )) +if (!rtw_get_wps_ie (pnetwork->ies + _FIXED_IE_LENGTH_, + pnetwork->ie_length - _FIXED_IE_LENGTH_,NULL ,NULL )) pmlmeext->bstart_bss = true;/* todo: update wmm, ht cap */
@@ -815,7 +815,7 @@ void start_bss_network(struct adapter *padapter, u8 *pbuf)Set_MSR (padapter, _HW_STATE_AP_);/* Set BSSID REG */ -rtw_hal_set_hwreg (padapter,HW_VAR_BSSID , pnetwork->MacAddress); +rtw_hal_set_hwreg (padapter,HW_VAR_BSSID , pnetwork->mac_address);/* Set EDCA param reg */ acparm =0x002F3217 ;/* VO */
@@ -856,10 +856,10 @@ void start_bss_network(struct adapter *padapter, u8 *pbuf)/* set channel, bwmode */ p =rtw_get_ie ( - (pnetwork->IEs +sizeof (struct ndis_802_11_fix_ie )), + (pnetwork->ies +sizeof (struct ndis_802_11_fix_ie )), _HT_ADD_INFO_IE_, &ie_len, - (pnetwork->IELength -sizeof (struct ndis_802_11_fix_ie )) + (pnetwork->ie_length -sizeof (struct ndis_802_11_fix_ie )) );if (p && ie_len) { pht_info = (struct HT_info_element *)(p +2 );
@@ -908,14 +908,14 @@ void start_bss_network(struct adapter *padapter, u8 *pbuf) pmlmeext->cur_wireless_mode = pmlmepriv->cur_network.network_type;/* let pnetwork_mlmeext == pnetwork_mlme. */ -memcpy (pnetwork_mlmeext, pnetwork, pnetwork->Length); +memcpy (pnetwork_mlmeext, pnetwork, pnetwork->length);/* update cur_wireless_mode */ update_wireless_mode (padapter);/* update RRSR after set channel and bandwidth */ -UpdateBrateTbl (padapter, pnetwork->SupportedRates); -rtw_hal_set_hwreg (padapter,HW_VAR_BASIC_RATE , pnetwork->SupportedRates); +UpdateBrateTbl (padapter, pnetwork->supported_rates); +rtw_hal_set_hwreg (padapter,HW_VAR_BASIC_RATE , pnetwork->supported_rates);/* update capability after cur_wireless_mode updated */ update_capinfo(
@@ -959,7 +959,7 @@ int rtw_check_beacon_data(struct adapter *padapter, u8 *pbuf, int len)struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);struct wlan_bssid_ex *pbss_network = (struct wlan_bssid_ex *)&pmlmepriv->cur_network.network; -u8 *ie = pbss_network->IEs; +u8 *ie = pbss_network->ies;/* SSID */ /* Supported rates */
@@ -980,23 +980,23 @@ int rtw_check_beacon_data(struct adapter *padapter, u8 *pbuf, int len)if (len <0 || len >MAX_IE_SZ )return _FAIL; - pbss_network->IELength = len; + pbss_network->ie_length = len;memset (ie,0 ,MAX_IE_SZ ); -memcpy (ie, pbuf, pbss_network->IELength); +memcpy (ie, pbuf, pbss_network->ie_length); -if (pbss_network->InfrastructureMode != Ndis802_11APMode) +if (pbss_network->infrastructure_mode != Ndis802_11APMode)return _FAIL; - pbss_network->Rssi =0 ; + pbss_network->rssi =0 ; -memcpy (pbss_network->MacAddress,myid (&(padapter->eeprompriv)),ETH_ALEN ); +memcpy (pbss_network->mac_address,myid (&(padapter->eeprompriv)),ETH_ALEN );/* beacon interval */ p =rtw_get_beacon_interval_from_ie (ie);/* ie + 8; 8: TimeStamp, 2: Beacon Interval 2:Capability */ -/* pbss_network->Configuration.BeaconPeriod = le16_to_cpu(*(unsigned short*)p); */ - pbss_network->Configuration.BeaconPeriod =get_unaligned_le16 (p); +/* pbss_network->configuration.BeaconPeriod = le16_to_cpu(*(unsigned short*)p); */ + pbss_network->configuration.BeaconPeriod =get_unaligned_le16 (p);/* capability */ /* cap = *(unsigned short *)rtw_get_capability_from_ie(ie); */
@@ -1008,26 +1008,26 @@ int rtw_check_beacon_data(struct adapter *padapter, u8 *pbuf, int len) ie + _BEACON_IE_OFFSET_, _SSID_IE_, &ie_len, - (pbss_network->IELength - _BEACON_IE_OFFSET_) + (pbss_network->ie_length - _BEACON_IE_OFFSET_) );if (p && ie_len >0 ) { -memset (&pbss_network->Ssid,0 ,sizeof (struct ndis_802_11_ssid )); -memcpy (pbss_network->Ssid.Ssid, (p +2 ), ie_len); - pbss_network->Ssid.SsidLength = ie_len; +memset (&pbss_network->ssid,0 ,sizeof (struct ndis_802_11_ssid )); +memcpy (pbss_network->ssid.Ssid, (p +2 ), ie_len); + pbss_network->ssid.SsidLength = ie_len; }/* channel */ channel =0 ; - pbss_network->Configuration.Length =0 ; + pbss_network->configuration.Length =0 ; p =rtw_get_ie ( ie + _BEACON_IE_OFFSET_, _DSSET_IE_, &ie_len, - (pbss_network->IELength - _BEACON_IE_OFFSET_) + (pbss_network->ie_length - _BEACON_IE_OFFSET_) );if (p && ie_len >0 ) channel = *(p +2 ); - pbss_network->Configuration.DSConfig = channel; + pbss_network->configuration.DSConfig = channel;memset (supportRate,0 ,NDIS_802_11_LENGTH_RATES_EX );/* get supported rates */
@@ -1035,7 +1035,7 @@ int rtw_check_beacon_data(struct adapter *padapter, u8 *pbuf, int len) ie + _BEACON_IE_OFFSET_, _SUPPORTEDRATES_IE_, &ie_len, - (pbss_network->IELength - _BEACON_IE_OFFSET_) + (pbss_network->ie_length - _BEACON_IE_OFFSET_) );if (p !=NULL ) {memcpy (supportRate, p +2 , ie_len);
@@ -1047,7 +1047,7 @@ int rtw_check_beacon_data(struct adapter *padapter, u8 *pbuf, int len) ie + _BEACON_IE_OFFSET_, _EXT_SUPPORTEDRATES_IE_, &ie_len, - pbss_network->IELength - _BEACON_IE_OFFSET_ + pbss_network->ie_length - _BEACON_IE_OFFSET_ );if (p !=NULL ) {memcpy (supportRate + supportRateNum, p +2 , ie_len);
@@ -1056,23 +1056,23 @@ int rtw_check_beacon_data(struct adapter *padapter, u8 *pbuf, int len) network_type =rtw_check_network_type (supportRate, supportRateNum, channel); -rtw_set_supported_rate (pbss_network->SupportedRates, network_type); +rtw_set_supported_rate (pbss_network->supported_rates, network_type);/* parsing ERP_IE */ p =rtw_get_ie ( ie + _BEACON_IE_OFFSET_, _ERPINFO_IE_, &ie_len, - (pbss_network->IELength - _BEACON_IE_OFFSET_) + (pbss_network->ie_length - _BEACON_IE_OFFSET_) );if (p && ie_len >0 )ERP_IE_handler (padapter, (struct ndis_80211_var_ie *)p);/* update privacy/security */ if (cap &BIT (4 )) - pbss_network->Privacy =1 ; + pbss_network->privacy =1 ;else - pbss_network->Privacy =0 ; + pbss_network->privacy =0 ; psecuritypriv->wpa_psk =0 ;
@@ -1084,7 +1084,7 @@ int rtw_check_beacon_data(struct adapter *padapter, u8 *pbuf, int len) ie + _BEACON_IE_OFFSET_, _RSN_IE_2_, &ie_len, - (pbss_network->IELength - _BEACON_IE_OFFSET_) + (pbss_network->ie_length - _BEACON_IE_OFFSET_) );if (p && ie_len >0 ) { if (rtw_parse_wpa2_ie(
@@ -1114,7 +1114,7 @@ int rtw_check_beacon_data(struct adapter *padapter, u8 *pbuf, int len) p, _SSN_IE_1_, &ie_len, - (pbss_network->IELength - _BEACON_IE_OFFSET_ - (ie_len +2 )) + (pbss_network->ie_length - _BEACON_IE_OFFSET_ - (ie_len +2 )) );if ((p) && (!memcmp (p +2 ,OUI1 ,4 ))) { if (rtw_parse_wpa_ie(
@@ -1150,7 +1150,7 @@ int rtw_check_beacon_data(struct adapter *padapter, u8 *pbuf, int len) p, _VENDOR_SPECIFIC_IE_, &ie_len, - (pbss_network->IELength - _BEACON_IE_OFFSET_ - (ie_len +2 )) + (pbss_network->ie_length - _BEACON_IE_OFFSET_ - (ie_len +2 )) );if ((p) && !memcmp (p +2 ,WMM_PARA_IE ,6 )) { pmlmepriv->qospriv.qos_option =1 ;
@@ -1176,7 +1176,7 @@ int rtw_check_beacon_data(struct adapter *padapter, u8 *pbuf, int len) ie + _BEACON_IE_OFFSET_, _HT_CAPABILITY_IE_, &ie_len, - (pbss_network->IELength - _BEACON_IE_OFFSET_) + (pbss_network->ie_length - _BEACON_IE_OFFSET_) );if (p && ie_len >0 ) {u8 rf_type =0 ;
@@ -1239,26 +1239,26 @@ int rtw_check_beacon_data(struct adapter *padapter, u8 *pbuf, int len) ie + _BEACON_IE_OFFSET_, _HT_ADD_INFO_IE_, &ie_len, - (pbss_network->IELength - _BEACON_IE_OFFSET_) + (pbss_network->ie_length - _BEACON_IE_OFFSET_) );if (p && ie_len >0 ) pHT_info_ie = p;switch (network_type) {case WIRELESS_11B : - pbss_network->NetworkTypeInUse = Ndis802_11DS; + pbss_network->network_type_in_use = Ndis802_11DS;break ;case WIRELESS_11G :case WIRELESS_11BG :case WIRELESS_11G_24N :case WIRELESS_11BG_24N : - pbss_network->NetworkTypeInUse = Ndis802_11OFDM24; + pbss_network->network_type_in_use = Ndis802_11OFDM24;break ;case WIRELESS_11A : - pbss_network->NetworkTypeInUse = Ndis802_11OFDM5; + pbss_network->network_type_in_use = Ndis802_11OFDM5;break ;default : - pbss_network->NetworkTypeInUse = Ndis802_11OFDM24; + pbss_network->network_type_in_use = Ndis802_11OFDM24;break ; }
@@ -1285,7 +1285,7 @@ int rtw_check_beacon_data(struct adapter *padapter, u8 *pbuf, int len)HT_info_handler (padapter, (struct ndis_80211_var_ie *)pHT_info_ie); } - pbss_network->Length =get_wlan_bssid_ex_sz ( + pbss_network->length =get_wlan_bssid_ex_sz ( (struct wlan_bssid_ex *)pbss_network );
@@ -1294,9 +1294,9 @@ int rtw_check_beacon_data(struct adapter *padapter, u8 *pbuf, int len)rtw_startbss_cmd (padapter,RTW_CMDF_WAIT_ACK );/* alloc sta_info for ap itself */ - psta =rtw_get_stainfo (&padapter->stapriv, pbss_network->MacAddress); + psta =rtw_get_stainfo (&padapter->stapriv, pbss_network->mac_address);if (!psta) { - psta =rtw_alloc_stainfo (&padapter->stapriv, pbss_network->MacAddress); + psta =rtw_alloc_stainfo (&padapter->stapriv, pbss_network->mac_address);if (psta ==NULL )return _FAIL; }
@@ -1586,7 +1586,7 @@ static void update_bcn_erpinfo_ie(struct adapter *padapter)struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);struct wlan_bssid_ex *pnetwork = &(pmlmeinfo->network); -unsigned char *p, *ie = pnetwork->IEs; +unsigned char *p, *ie = pnetwork->ies;u32 len =0 ;DBG_871X ("%s, ERP_enable =%d\n" , __func__, pmlmeinfo->ERP_enable);
@@ -1599,7 +1599,7 @@ static void update_bcn_erpinfo_ie(struct adapter *padapter) ie + _BEACON_IE_OFFSET_, _ERPINFO_IE_, &len, - (pnetwork->IELength - _BEACON_IE_OFFSET_) + (pnetwork->ie_length - _BEACON_IE_OFFSET_) );if (p && len >0 ) {struct ndis_80211_var_ie *pIE = (struct ndis_80211_var_ie *)p;
@@ -1657,8 +1657,8 @@ static void update_bcn_wps_ie(struct adapter *padapter)struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);struct wlan_bssid_ex *pnetwork = &(pmlmeinfo->network); -unsigned char *ie = pnetwork->IEs; -u32 ielen = pnetwork->IELength; +unsigned char *ie = pnetwork->ies; +u32 ielen = pnetwork->ie_length;DBG_871X ("%s\n" , __func__);
@@ -1696,8 +1696,8 @@ static void update_bcn_wps_ie(struct adapter *padapter)if (pbackup_remainder_ie)memcpy (pwps_ie, pbackup_remainder_ie, remainder_ielen); -/* update IELength */ - pnetwork->IELength = wps_offset + (wps_ielen +2 ) + remainder_ielen; +/* update ie_length */ + pnetwork->ie_length = wps_offset + (wps_ielen +2 ) + remainder_ielen; }kfree (pbackup_remainder_ie);
drivers/staging/rtl8723bs/core/rtw_cmd.c +25 -25
129 lines not on this page · raw message
drivers/staging/rtl8723bs/core/rtw_ieee80211.c +29 -29
168 lines not on this page · raw message
drivers/staging/rtl8723bs/core/rtw_ioctl_set.c +7 -7
@@ -110,9 +110,9 @@ u8 rtw_do_join(struct adapter *padapter) pmlmepriv->fw_state =WIFI_ADHOC_MASTER_STATE ; - pibss = padapter->registrypriv.dev_network.MacAddress; + pibss = padapter->registrypriv.dev_network.mac_address; -memcpy (&pdev_network->Ssid, &pmlmepriv->assoc_ssid,sizeof (struct ndis_802_11_ssid )); +memcpy (&pdev_network->ssid, &pmlmepriv->assoc_ssid,sizeof (struct ndis_802_11_ssid ));rtw_update_registrypriv_dev_network (padapter);
@@ -184,13 +184,13 @@ u8 rtw_set_802_11_bssid(struct adapter *padapter, u8 *bssid)if (check_fwstate (pmlmepriv, _FW_LINKED|WIFI_ADHOC_MASTER_STATE ) == true) {RT_TRACE (_module_rtl871x_ioctl_set_c_, _drv_info_, ("set_bssid: _FW_LINKED||WIFI_ADHOC_MASTER_STATE\n" )); -if (!memcmp (&pmlmepriv->cur_network.network.MacAddress, bssid,ETH_ALEN )) { +if (!memcmp (&pmlmepriv->cur_network.network.mac_address, bssid,ETH_ALEN )) {if (check_fwstate (pmlmepriv,WIFI_STATION_STATE ) == false) goto release_mlme_lock;/* it means driver is in WIFI_ADHOC_MASTER_STATE, we needn't create bss again. */ }else {RT_TRACE (_module_rtl871x_ioctl_set_c_, _drv_info_, ("Set BSSID not the same bssid\n" ));RT_TRACE (_module_rtl871x_ioctl_set_c_, _drv_info_, ("set_bssid =" MAC_FMT "\n" ,MAC_ARG (bssid))); -RT_TRACE (_module_rtl871x_ioctl_set_c_, _drv_info_, ("cur_bssid =" MAC_FMT "\n" ,MAC_ARG (pmlmepriv->cur_network.network.MacAddress))); +RT_TRACE (_module_rtl871x_ioctl_set_c_, _drv_info_, ("cur_bssid =" MAC_FMT "\n" ,MAC_ARG (pmlmepriv->cur_network.network.mac_address)));rtw_disassoc_cmd (padapter,0 , true);
@@ -411,7 +411,7 @@ u8 rtw_set_802_11_infrastructure_mode(struct adapter *padapter, {struct mlme_priv *pmlmepriv = &padapter->mlmepriv;struct wlan_network *cur_network = &pmlmepriv->cur_network; -enum NDIS_802_11_NETWORK_INFRASTRUCTURE *pold_state = &(cur_network->network.InfrastructureMode); +enum NDIS_802_11_NETWORK_INFRASTRUCTURE *pold_state = &(cur_network->network.infrastructure_mode); RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_notice_, ("+rtw_set_802_11_infrastructure_mode: old =%d new =%d fw_state = 0x%08x\n",
@@ -664,8 +664,8 @@ u16 rtw_get_cur_max_rate(struct adapter *adapter) psta->htpriv.ht_cap.supp_mcs_set ); }else { -while ((pcur_bss->SupportedRates[i] !=0 ) && (pcur_bss->SupportedRates[i] !=0xFF )) { - rate = pcur_bss->SupportedRates[i]&0x7F ; +while ((pcur_bss->supported_rates[i] !=0 ) && (pcur_bss->supported_rates[i] !=0xFF )) { + rate = pcur_bss->supported_rates[i]&0x7F ;if (rate > max_rate) max_rate = rate; i++;
drivers/staging/rtl8723bs/core/rtw_mlme.c +145 -145
702 lines not on this page · raw message
drivers/staging/rtl8723bs/core/rtw_mlme_ext.c +134 -134
734 lines not on this page · raw message
drivers/staging/rtl8723bs/core/rtw_wlan_util.c +33 -33
173 lines not on this page · raw message
drivers/staging/rtl8723bs/hal/hal_btcoex.c +1 -1
@@ -614,7 +614,7 @@ static u8 halbtcoutsrc_Set(void *pBtcContext, u8 setType, void *pInBuf)struct wlan_bssid_ex *cur_network; cur_network = &padapter->mlmeextpriv.mlmext_info.network; - psta =rtw_get_stainfo (&padapter->stapriv, cur_network->MacAddress); + psta =rtw_get_stainfo (&padapter->stapriv, cur_network->mac_address);rtw_hal_update_ra_mask (psta,0 ); }break ;
drivers/staging/rtl8723bs/hal/hal_com.c +1 -1
@@ -1213,7 +1213,7 @@ u8 GetHalDefVar( pmlmepriv = &adapter->mlmepriv; pstapriv = &adapter->stapriv; - psta =rtw_get_stainfo (pstapriv, pmlmepriv->cur_network.network.MacAddress); + psta =rtw_get_stainfo (pstapriv, pmlmepriv->cur_network.network.mac_address);if (psta) *((int *)value) = psta->rssi_stat.UndecoratedSmoothedPWDB; }
drivers/staging/rtl8723bs/hal/rtl8723b_cmd.c +27 -27
141 lines not on this page · raw message
drivers/staging/rtl8723bs/include/rtw_mlme.h +3 -3
@@ -495,9 +495,9 @@ extern sint rtw_set_key(struct adapter *adapter, struct security_priv *psecurityextern sint rtw_set_auth (struct adapter *adapter,struct security_priv *psecuritypriv);static inline u8 *get_bssid (struct mlme_priv *pmlmepriv) -{/* if sta_mode:pmlmepriv->cur_network.network.MacAddress => bssid */ -/* if adhoc_mode:pmlmepriv->cur_network.network.MacAddress => ibss mac address */ -return pmlmepriv->cur_network.network.MacAddress; +{/* if sta_mode:pmlmepriv->cur_network.network.mac_address => bssid */ +/* if adhoc_mode:pmlmepriv->cur_network.network.mac_address => ibss mac address */ +return pmlmepriv->cur_network.network.mac_address; }static inline sint check_fwstate (struct mlme_priv *pmlmepriv,sint state)
drivers/staging/rtl8723bs/include/wlan_bssdef.h +15 -15
@@ -75,9 +75,9 @@ struct ndis_80211_var_ie {* sizeof (NDIS_802_11_MAC_ADDRESS) + 2 + * sizeof (struct ndis_802_11_ssid) + sizeof (u32) + * sizeof (long) + sizeof (enum NDIS_802_11_NETWORK_TYPE) + -* sizeof (struct ndis_802_11_conf) + sizeof (NDIS_802_11_RATES_EX) + IELength +* sizeof (struct ndis_802_11_conf) + sizeof (NDIS_802_11_RATES_EX) + ie_length * -* Except for IELength, all other fields are fixed length. Therefore, we can +* Except for ie_length, all other fields are fixed length. Therefore, we can * define a macro to present the partial sum. */ enum NDIS_802_11_AUTHENTICATION_MODE {
@@ -205,24 +205,24 @@ struct wlan_bcn_info {* struct wlan_bssid_ex and get_wlan_bssid_ex_sz() */ struct wlan_bssid_ex { -u32 Length; -NDIS_802_11_MAC_ADDRESS MacAddress; +u32 length; +NDIS_802_11_MAC_ADDRESS mac_address;u8 Reserved[2 ];/* 0]: IS beacon frame */ -struct ndis_802_11_ssid Ssid; -u32 Privacy; -long Rssi;/* in dBM, raw data , get from PHY) */ -enum NDIS_802_11_NETWORK_TYPE NetworkTypeInUse; -struct ndis_802_11_conf Configuration; -enum NDIS_802_11_NETWORK_INFRASTRUCTURE InfrastructureMode; -NDIS_802_11_RATES_EX SupportedRates; -struct wlan_phy_info PhyInfo; -u32 IELength; -u8 IEs[MAX_IE_SZ ];/* timestamp, beacon interval, and capability information) */ +struct ndis_802_11_ssid ssid; +u32 privacy; +long rssi;/* in dBM, raw data , get from PHY) */ +enum NDIS_802_11_NETWORK_TYPE network_type_in_use; +struct ndis_802_11_conf configuration; +enum NDIS_802_11_NETWORK_INFRASTRUCTURE infrastructure_mode; +NDIS_802_11_RATES_EX supported_rates; +struct wlan_phy_info phy_info; +u32 ie_length; +u8 ies[MAX_IE_SZ ];/* timestamp, beacon interval, and capability information) */ } __packed;static inline uint get_wlan_bssid_ex_sz (struct wlan_bssid_ex *bss) { -return (sizeof (struct wlan_bssid_ex ) -MAX_IE_SZ + bss->IELength); +return (sizeof (struct wlan_bssid_ex ) -MAX_IE_SZ + bss->ie_length); }struct wlan_network {
drivers/staging/rtl8723bs/os_dep/ioctl_cfg80211.c +37 -37
212 lines not on this page · raw message
drivers/staging/rtl8723bs/os_dep/ioctl_linux.c +63 -63
237 lines not on this page · raw message
drivers/staging/rtl8723bs/os_dep/os_intfs.c +6 -6
Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
Signature · 1 line
2.53.0
Part of the diff is not shown here. View the raw message.
Sasha Levin
maintainerPATCH 4/10 staging: rtl8723bs: fix camel case in struct wlan_bcn_info
In reply to Sasha LevinFrom: Fabio Aiuto <[email protected]>
[ Upstream commit d7361874468f9b963d0263223c299f0afd7e51a7 ]
fix camel case in struct wlan_bcn_info all over the driver.
Stable-dep-of: 1463ca3ec660 ("staging: rtl8723bs: fix OOB reads in rtw_get_sec_ie(), rtw_get_wapi_ie(), and rtw_get_wps_attr()")
--- .../staging/rtl8723bs/core/rtw_ieee80211.c | 38 +++++++++---------- .../staging/rtl8723bs/core/rtw_wlan_util.c | 22 +++++------ .../staging/rtl8723bs/include/wlan_bssdef.h | 2 +- 3 files changed, 31 insertions(+), 31 deletions(-)
drivers/staging/rtl8723bs/core/rtw_ieee80211.c +19 -19
@@ -1146,11 +1146,11 @@ static int rtw_get_cipher_info(struct wlan_network *pnetwork)if (pbuf && (wpa_ielen >0 )) {RT_TRACE (_module_rtl871x_mlme_c_, _drv_info_, ("rtw_get_cipher_info: wpa_ielen: %d" , wpa_ielen));if (_SUCCESS ==rtw_parse_wpa_ie (pbuf, wpa_ielen+2 , &group_cipher, &pairwise_cipher, &is8021x)) { - pnetwork->BcnInfo.pairwise_cipher = pairwise_cipher; - pnetwork->BcnInfo.group_cipher = group_cipher; - pnetwork->BcnInfo.is_8021x = is8021x; + pnetwork->bcn_info.pairwise_cipher = pairwise_cipher; + pnetwork->bcn_info.group_cipher = group_cipher; + pnetwork->bcn_info.is_8021x = is8021x;RT_TRACE (_module_rtl871x_mlme_c_, _drv_info_, ("%s: pnetwork->pairwise_cipher: %d, is_8021x is %d" , - __func__, pnetwork->BcnInfo.pairwise_cipher, pnetwork->BcnInfo.is_8021x)); + __func__, pnetwork->bcn_info.pairwise_cipher, pnetwork->bcn_info.is_8021x)); ret = _SUCCESS; } }else {
@@ -1160,12 +1160,12 @@ static int rtw_get_cipher_info(struct wlan_network *pnetwork)RT_TRACE (_module_rtl871x_mlme_c_, _drv_info_, ("get RSN IE\n" ));if (_SUCCESS ==rtw_parse_wpa2_ie (pbuf, wpa_ielen+2 , &group_cipher, &pairwise_cipher, &is8021x)) {RT_TRACE (_module_rtl871x_mlme_c_, _drv_info_, ("get RSN IE OK!!!\n" )); - pnetwork->BcnInfo.pairwise_cipher = pairwise_cipher; - pnetwork->BcnInfo.group_cipher = group_cipher; - pnetwork->BcnInfo.is_8021x = is8021x; + pnetwork->bcn_info.pairwise_cipher = pairwise_cipher; + pnetwork->bcn_info.group_cipher = group_cipher; + pnetwork->bcn_info.is_8021x = is8021x;RT_TRACE (_module_rtl871x_mlme_c_, _drv_info_, ("%s: pnetwork->pairwise_cipher: %d," -"pnetwork->group_cipher is %d, is_8021x is %d" , __func__, pnetwork->BcnInfo.pairwise_cipher, - pnetwork->BcnInfo.group_cipher, pnetwork->BcnInfo.is_8021x)); +"pnetwork->group_cipher is %d, is_8021x is %d" , __func__, pnetwork->bcn_info.pairwise_cipher, + pnetwork->bcn_info.group_cipher, pnetwork->bcn_info.is_8021x)); ret = _SUCCESS; } }
@@ -1192,7 +1192,7 @@ void rtw_get_bcn_info(struct wlan_network *pnetwork) bencrypt =1 ; pnetwork->network.privacy =1 ; }else { - pnetwork->BcnInfo.encryp_protocol =ENCRYP_PROTOCOL_OPENSYS ; + pnetwork->bcn_info.encryp_protocol =ENCRYP_PROTOCOL_OPENSYS ; }rtw_get_sec_ie (pnetwork->network.ies, pnetwork->network.ie_length,NULL , &rsn_len,NULL , &wpa_len);RT_TRACE (_module_rtl871x_mlme_c_, _drv_info_, ("rtw_get_bcn_info: ssid =%s\n" , pnetwork->network.ssid.Ssid));
@@ -1201,17 +1201,17 @@ void rtw_get_bcn_info(struct wlan_network *pnetwork)RT_TRACE (_module_rtl871x_mlme_c_, _drv_info_, ("rtw_get_bcn_info: wpa_len =%d rsn_len =%d\n" , wpa_len, rsn_len));if (rsn_len >0 ) { - pnetwork->BcnInfo.encryp_protocol =ENCRYP_PROTOCOL_WPA2 ; + pnetwork->bcn_info.encryp_protocol =ENCRYP_PROTOCOL_WPA2 ; }else if (wpa_len >0 ) { - pnetwork->BcnInfo.encryp_protocol =ENCRYP_PROTOCOL_WPA ; + pnetwork->bcn_info.encryp_protocol =ENCRYP_PROTOCOL_WPA ; }else {if (bencrypt) - pnetwork->BcnInfo.encryp_protocol =ENCRYP_PROTOCOL_WEP ; + pnetwork->bcn_info.encryp_protocol =ENCRYP_PROTOCOL_WEP ; }RT_TRACE (_module_rtl871x_mlme_c_, _drv_info_, ("rtw_get_bcn_info: pnetwork->encryp_protocol is %x\n" , - pnetwork->BcnInfo.encryp_protocol)); + pnetwork->bcn_info.encryp_protocol));RT_TRACE (_module_rtl871x_mlme_c_, _drv_info_, ("rtw_get_bcn_info: pnetwork->encryp_protocol is %x\n" , - pnetwork->BcnInfo.encryp_protocol)); + pnetwork->bcn_info.encryp_protocol));rtw_get_cipher_info (pnetwork);/* get bwmode and ch_offset */
@@ -1219,17 +1219,17 @@ void rtw_get_bcn_info(struct wlan_network *pnetwork) p =rtw_get_ie (pnetwork->network.ies + _FIXED_IE_LENGTH_, _HT_CAPABILITY_IE_, &len, pnetwork->network.ie_length - _FIXED_IE_LENGTH_);if (p && len >0 ) { pht_cap = (struct ieee80211_ht_cap *)(p +2 ); - pnetwork->BcnInfo.ht_cap_info =le16_to_cpu (pht_cap->cap_info); + pnetwork->bcn_info.ht_cap_info =le16_to_cpu (pht_cap->cap_info); }else { - pnetwork->BcnInfo.ht_cap_info =0 ; + pnetwork->bcn_info.ht_cap_info =0 ; }/* parsing HT_INFO_IE */ p =rtw_get_ie (pnetwork->network.ies + _FIXED_IE_LENGTH_, _HT_ADD_INFO_IE_, &len, pnetwork->network.ie_length - _FIXED_IE_LENGTH_);if (p && len >0 ) { pht_info = (struct HT_info_element *)(p +2 ); - pnetwork->BcnInfo.ht_info_infos_0 = pht_info->infos[0 ]; + pnetwork->bcn_info.ht_info_infos_0 = pht_info->infos[0 ]; }else { - pnetwork->BcnInfo.ht_info_infos_0 =0 ; + pnetwork->bcn_info.ht_info_infos_0 =0 ; } }
drivers/staging/rtl8723bs/core/rtw_wlan_util.c +11 -11
@@ -1295,17 +1295,17 @@ int rtw_check_bcn_info(struct adapter *Adapter, u8 *pframe, u32 packet_len) }else { ht_info_infos_0 =0 ; } -if (ht_cap_info != cur_network->BcnInfo.ht_cap_info || - ((ht_info_infos_0&0x03 ) != (cur_network->BcnInfo.ht_info_infos_0&0x03 ))) { +if (ht_cap_info != cur_network->bcn_info.ht_cap_info || + ((ht_info_infos_0&0x03 ) != (cur_network->bcn_info.ht_info_infos_0&0x03 ))) {DBG_871X ("%s bcn now: ht_cap_info:%x ht_info_infos_0:%x\n" , __func__, ht_cap_info, ht_info_infos_0);DBG_871X ("%s bcn link: ht_cap_info:%x ht_info_infos_0:%x\n" , __func__, - cur_network->BcnInfo.ht_cap_info, cur_network->BcnInfo.ht_info_infos_0); + cur_network->bcn_info.ht_cap_info, cur_network->bcn_info.ht_info_infos_0);DBG_871X ("%s bw mode change\n" , __func__); {/* bcn_info_update */ - cur_network->BcnInfo.ht_cap_info = ht_cap_info; - cur_network->BcnInfo.ht_info_infos_0 = ht_info_infos_0; + cur_network->bcn_info.ht_cap_info = ht_cap_info; + cur_network->bcn_info.ht_info_infos_0 = ht_info_infos_0;/* to do : need to check that whether modify related register of BB or not */ }/* goto _mismatch; */
@@ -1381,7 +1381,7 @@ int rtw_check_bcn_info(struct adapter *Adapter, u8 *pframe, u32 packet_len) encryp_protocol =ENCRYP_PROTOCOL_WEP ; } -if (cur_network->BcnInfo.encryp_protocol != encryp_protocol) { +if (cur_network->bcn_info.encryp_protocol != encryp_protocol) {DBG_871X ("%s(): enctyp is not match\n" , __func__); goto _mismatch; }
@@ -1407,15 +1407,15 @@ int rtw_check_bcn_info(struct adapter *Adapter, u8 *pframe, u32 packet_len) }RT_TRACE (_module_rtl871x_mlme_c_, _drv_err_, - ("%s cur_network->group_cipher is %d: %d\n" , __func__, cur_network->BcnInfo.group_cipher, group_cipher)); -if (pairwise_cipher != cur_network->BcnInfo.pairwise_cipher || group_cipher != cur_network->BcnInfo.group_cipher) { + ("%s cur_network->group_cipher is %d: %d\n" , __func__, cur_network->bcn_info.group_cipher, group_cipher)); +if (pairwise_cipher != cur_network->bcn_info.pairwise_cipher || group_cipher != cur_network->bcn_info.group_cipher) {DBG_871X ("%s pairwise_cipher(%x:%x) or group_cipher(%x:%x) is not match\n" , __func__, - pairwise_cipher, cur_network->BcnInfo.pairwise_cipher, - group_cipher, cur_network->BcnInfo.group_cipher); + pairwise_cipher, cur_network->bcn_info.pairwise_cipher, + group_cipher, cur_network->bcn_info.group_cipher); goto _mismatch; } -if (is_8021x != cur_network->BcnInfo.is_8021x) { +if (is_8021x != cur_network->bcn_info.is_8021x) {DBG_871X ("%s authentication is not match\n" , __func__); goto _mismatch; }
drivers/staging/rtl8723bs/include/wlan_bssdef.h +1 -1
@@ -233,7 +233,7 @@ struct wlan_network {int aid;/* will only be valid when a BSS is joinned. */ int join_res;struct wlan_bssid_ex network;/* must be the last item */ -struct wlan_bcn_info BcnInfo; +struct wlan_bcn_info bcn_info; };enum VRTL_CARRIER_SENSE {
Signature · 1 line
2.53.0
Sasha Levin
maintainerPATCH 5/10 staging: rtl8723bs: remove rf type branching (fourth patch)
In reply to Sasha LevinFrom: Fabio Aiuto <[email protected]>
[ Upstream commit 24e65aac94578765c8796511e769c08219d52ed9 ]
remove all function calls to rtw_get_hw_reg made to read HW_VAR_RF_TYPE and get value of rt_type, which is always 1T1R. Clean up code on removal sites, keeping 1T1R code unconditionally.
Stable-dep-of: 1463ca3ec660 ("staging: rtl8723bs: fix OOB reads in rtw_get_sec_ie(), rtw_get_wapi_ie(), and rtw_get_wps_attr()")
--- drivers/staging/rtl8723bs/core/rtw_ap.c | 8 +- drivers/staging/rtl8723bs/core/rtw_debug.c | 28 +++---- .../staging/rtl8723bs/core/rtw_ieee80211.c | 73 +++++-------------- .../staging/rtl8723bs/core/rtw_ioctl_set.c | 12 +-- drivers/staging/rtl8723bs/core/rtw_mlme.c | 50 ++----------- .../staging/rtl8723bs/core/rtw_wlan_util.c | 48 ++---------- drivers/staging/rtl8723bs/hal/hal_com.c | 8 +- drivers/staging/rtl8723bs/include/ieee80211.h | 2 +- .../staging/rtl8723bs/os_dep/ioctl_cfg80211.c | 33 ++------- 9 files changed, 51 insertions(+), 211 deletions(-)
drivers/staging/rtl8723bs/core/rtw_ap.c +2 -6
@@ -1179,7 +1179,6 @@ int rtw_check_beacon_data(struct adapter *padapter, u8 *pbuf, int len) (pbss_network->ie_length - _BEACON_IE_OFFSET_) );if (p && ie_len >0 ) { -u8 rf_type =0 ;u8 max_rx_ampdu_factor =0 ;struct rtw_ieee80211_ht_cap *pht_cap = (struct rtw_ieee80211_ht_cap *)(p +2 );
@@ -1225,11 +1224,8 @@ int rtw_check_beacon_data(struct adapter *padapter, u8 *pbuf, int len)IEEE80211_HT_CAP_AMPDU_FACTOR & max_rx_ampdu_factor ); /* set Max Rx AMPDU size to 64K */ -rtw_hal_get_hwreg (padapter,HW_VAR_RF_TYPE , (u8 *)(&rf_type)); -if (rf_type ==RF_1T1R ) { - pht_cap->supp_mcs_set[0 ] =0xff ; - pht_cap->supp_mcs_set[1 ] =0x0 ; - } + pht_cap->supp_mcs_set[0 ] =0xff ; + pht_cap->supp_mcs_set[1 ] =0x0 ;memcpy (&pmlmepriv->htpriv.ht_cap, p +2 , ie_len); }
drivers/staging/rtl8723bs/core/rtw_debug.c +9 -19
@@ -107,28 +107,18 @@ void bb_reg_dump(void *sel, struct adapter *adapter)void rf_reg_dump (void *sel,struct adapter *adapter) { -int i, j =1 , path; +int i, j =1 , path =0 ;u32 value; -u8 rf_type =0 ; -u8 path_nums =0 ; - -rtw_hal_get_hwreg (adapter,HW_VAR_RF_TYPE , (u8 *)(&rf_type)); -if ((RF_1T2R == rf_type) || (RF_1T1R == rf_type)) - path_nums =1 ; -else - path_nums =2 ;DBG_871X_SEL_NL (sel,"======= RF REG =======\n" ); -for (path =0 ; path < path_nums; path++) { -DBG_871X_SEL_NL (sel,"RF_Path(%x)\n" , path); -for (i =0 ; i <0x100 ; i++) { - value =rtw_hal_read_rfreg (adapter, path, i,0xffffffff ); -if (j%4 ==1 ) -DBG_871X_SEL_NL (sel,"0x%02x " , i); -DBG_871X_SEL (sel," 0x%08x " , value); -if ((j++)%4 ==0 ) -DBG_871X_SEL (sel,"\n" ); - } +DBG_871X_SEL_NL (sel,"RF_Path(%x)\n" , path); +for (i =0 ; i <0x100 ; i++) { + value =rtw_hal_read_rfreg (adapter, path, i,0xffffffff ); +if (j%4 ==1 ) +DBG_871X_SEL_NL (sel,"0x%02x " , i); +DBG_871X_SEL (sel," 0x%08x " , value); +if ((j++)%4 ==0 ) +DBG_871X_SEL (sel,"\n" ); } }
drivers/staging/rtl8723bs/core/rtw_ieee80211.c +18 -55
82 lines not on this page · raw message
drivers/staging/rtl8723bs/core/rtw_ioctl_set.c +3 -9
@@ -642,7 +642,6 @@ u16 rtw_get_cur_max_rate(struct adapter *adapter)struct wlan_bssid_ex *pcur_bss = &pmlmepriv->cur_network.network;struct sta_info *psta =NULL ;u8 short_GI =0 ; -u8 rf_type =0 ;if ((check_fwstate (pmlmepriv, _FW_LINKED) != true) && (check_fwstate (pmlmepriv,WIFI_ADHOC_MASTER_STATE ) != true))
@@ -655,14 +654,9 @@ u16 rtw_get_cur_max_rate(struct adapter *adapter) short_GI =query_ra_short_GI (psta);if (IsSupportedHT (psta->wireless_mode)) { -rtw_hal_get_hwreg (adapter,HW_VAR_RF_TYPE , (u8 *)(&rf_type)); - - max_rate =rtw_mcs_rate ( - rf_type, - ((psta->bw_mode ==CHANNEL_WIDTH_40 )?1 :0 ), - short_GI, - psta->htpriv.ht_cap.supp_mcs_set - ); + max_rate =rtw_mcs_rate (psta->bw_mode ==CHANNEL_WIDTH_40 ?1 :0 , + short_GI, + psta->htpriv.ht_cap.supp_mcs_set); }else {while ((pcur_bss->supported_rates[i] !=0 ) && (pcur_bss->supported_rates[i] !=0xFF )) { rate = pcur_bss->supported_rates[i]&0x7F ;
drivers/staging/rtl8723bs/core/rtw_mlme.c +5 -45
75 lines not on this page · raw message
drivers/staging/rtl8723bs/core/rtw_wlan_util.c +5 -43
83 lines not on this page · raw message
drivers/staging/rtl8723bs/hal/hal_com.c +2 -6
@@ -966,7 +966,7 @@ u8 rtw_get_mgntframe_raid(struct adapter *adapter, unsigned char network_type)void rtw_hal_update_sta_rate_mask (struct adapter *padapter,struct sta_info *psta) { -u8 i, rf_type, limit; +u8 i, limit;u32 tx_ra_bitmap;if (!psta)
@@ -982,11 +982,7 @@ void rtw_hal_update_sta_rate_mask(struct adapter *padapter, struct sta_info *pst/* n mode ra_bitmap */ if (psta->htpriv.ht_option) { -rtw_hal_get_hwreg (padapter,HW_VAR_RF_TYPE , (u8 *)(&rf_type)); -if (rf_type ==RF_2T2R ) - limit =16 ;/* 2R */ -else - limit =8 ;/* 1R */ + limit =8 ;/* 1R */ for (i =0 ; i < limit; i++) {if (psta->htpriv.ht_cap.supp_mcs_set[i/8 ] &BIT (i%8 ))
drivers/staging/rtl8723bs/include/ieee80211.h +1 -1
@@ -1171,7 +1171,7 @@ void rtw_get_bcn_info(struct wlan_network *pnetwork);void rtw_macaddr_cfg (struct device *dev,u8 *mac_addr); -u16 rtw_mcs_rate (u8 rf_type,u8 bw_40MHz,u8 short_GI,unsigned char * MCS_rate); +u16 rtw_mcs_rate (u8 bw_40MHz,u8 short_GI,unsigned char *MCS_rate);int rtw_action_frame_parse (const u8 *frame,u32 frame_len,u8 *category,u8 *action);const char *action_public_str (u8 action);
drivers/staging/rtl8723bs/os_dep/ioctl_cfg80211.c +6 -27
@@ -3196,7 +3196,7 @@ static int cfg80211_rtw_sched_scan_stop(struct wiphy *wiphy, }#endif /* CONFIG_PNO_SUPPORT */ -static void rtw_cfg80211_init_ht_capab (struct ieee80211_sta_ht_cap *ht_cap,enum nl80211_band band,u8 rf_type) +static void rtw_cfg80211_init_ht_capab (struct ieee80211_sta_ht_cap *ht_cap,enum nl80211_band band) {#define MAX_BIT_RATE_40MHZ_MCS15 300/* Mbps */
@@ -3229,44 +3229,23 @@ static void rtw_cfg80211_init_ht_capab(struct ieee80211_sta_ht_cap *ht_cap, enum*if BW_40 rx_mask[4]= 0x01; *highest supported RX rate */ -if (rf_type ==RF_1T1R ) - { - ht_cap->mcs.rx_mask[0 ] =0xFF ; - ht_cap->mcs.rx_mask[1 ] =0x00 ; - ht_cap->mcs.rx_mask[4 ] =0x01 ; - - ht_cap->mcs.rx_highest =cpu_to_le16 (MAX_BIT_RATE_40MHZ_MCS7 ); - } -else if ((rf_type ==RF_1T2R ) || (rf_type ==RF_2T2R )) - { - ht_cap->mcs.rx_mask[0 ] =0xFF ; - ht_cap->mcs.rx_mask[1 ] =0xFF ; - ht_cap->mcs.rx_mask[4 ] =0x01 ; - - ht_cap->mcs.rx_highest =cpu_to_le16 (MAX_BIT_RATE_40MHZ_MCS15 ); - } -else - { -DBG_8192C ("%s, error rf_type =%d\n" , __func__, rf_type); - } + ht_cap->mcs.rx_mask[0 ] =0xFF ; + ht_cap->mcs.rx_mask[1 ] =0x00 ; + ht_cap->mcs.rx_mask[4 ] =0x01 ; + ht_cap->mcs.rx_highest =cpu_to_le16 (MAX_BIT_RATE_40MHZ_MCS7 ); }void rtw_cfg80211_init_wiphy (struct adapter *padapter) { -u8 rf_type;struct ieee80211_supported_band *bands;struct wireless_dev *pwdev = padapter->rtw_wdev;struct wiphy *wiphy = pwdev->wiphy; -rtw_hal_get_hwreg (padapter,HW_VAR_RF_TYPE , (u8 *)(&rf_type)); - -DBG_8192C ("%s:rf_type =%d\n" , __func__, rf_type); - { bands = wiphy->bands[NL80211_BAND_2GHZ ];if (bands) -rtw_cfg80211_init_ht_capab (&bands->ht_cap,NL80211_BAND_2GHZ , rf_type); +rtw_cfg80211_init_ht_capab (&bands->ht_cap,NL80211_BAND_2GHZ ); }/* init regulary domain */
Signature · 1 line
2.53.0
Sasha Levin
maintainerPATCH 6/10 staging: rtl8723bs: Remove redundant else branches.
In reply to Sasha LevinFrom: Sevinj Aghayeva <[email protected]>
[ Upstream commit 4610e57a7d2edeef14aa852cd945f9920e1759da ]
This patch fixes the following checkpatch.pl warning:
WARNING: else is not generally useful after a break or return
Stable-dep-of: 1463ca3ec660 ("staging: rtl8723bs: fix OOB reads in rtw_get_sec_ie(), rtw_get_wapi_ie(), and rtw_get_wps_attr()")
--- .../staging/rtl8723bs/core/rtw_ieee80211.c | 29 ++++++++----------- 1 file changed, 12 insertions(+), 17 deletions(-)
drivers/staging/rtl8723bs/core/rtw_ieee80211.c +12 -17
@@ -98,16 +98,14 @@ int rtw_check_network_type(unsigned char *rate, int ratelen, int channel)if (channel >14 ) {if (rtw_is_cckrates_included (rate))return WIRELESS_INVALID ; -else -return WIRELESS_11A ; - }else {/* could be pure B, pure G, or B/G */ -if (rtw_is_cckratesonly_included (rate)) -return WIRELESS_11B ; -else if (rtw_is_cckrates_included (rate)) -return WIRELESS_11BG ; -else -return WIRELESS_11G ; +return WIRELESS_11A ; } +/* could be pure B, pure G, or B/G */ +if (rtw_is_cckratesonly_included (rate)) +return WIRELESS_11B ; +if (rtw_is_cckrates_included (rate)) +return WIRELESS_11BG ; +return WIRELESS_11G ; } u8 *rtw_set_fixed_ie(unsigned char *pbuf, unsigned int len, unsigned char *source,
@@ -158,11 +156,10 @@ u8 *rtw_get_ie(u8 *pbuf, sint index, sint *len, sint limit)if (*p == index) { *len = *(p +1 );return p; - }else { - tmp = *(p +1 ); - p += (tmp +2 ); - i += (tmp +2 ); } + tmp = *(p +1 ); + p += (tmp +2 ); + i += (tmp +2 );if (i >= limit)break ; }
@@ -768,9 +765,8 @@ u8 *rtw_get_wps_ie(u8 *in_ie, uint in_len, u8 *wps_ie, uint *wps_ielen) cnt += in_ie[cnt+1 ]+2 ;break ; - }else { - cnt += in_ie[cnt+1 ]+2 ;/* goto next */ } + cnt += in_ie[cnt+1 ]+2 ;/* goto next */ }return wpsie_ptr;
@@ -820,9 +816,8 @@ u8 *rtw_get_wps_attr(u8 *wps_ie, uint wps_ielen, u16 target_attr_id, u8 *buf_att *len_attr = attr_len;break ; - }else { - attr_ptr += attr_len;/* goto next */ } + attr_ptr += attr_len;/* goto next */ }return target_attr_ptr;
Signature · 1 line
2.53.0
Sasha Levin
maintainerPATCH 7/10 staging: rtl8723bs: remove redundant braces in if statements
In reply to Sasha LevinFrom: Sevinj Aghayeva <[email protected]>
[ Upstream commit 94579b02720bb63096312c4bc7694fd2f6df7cbb ]
Adhere to Linux kernel coding style.
Reported by checkpatch:
WARNING: braces {} are not necessary for single statement blocks
Stable-dep-of: 1463ca3ec660 ("staging: rtl8723bs: fix OOB reads in rtw_get_sec_ie(), rtw_get_wapi_ie(), and rtw_get_wps_attr()")
--- drivers/staging/rtl8723bs/core/rtw_ieee80211.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-)
drivers/staging/rtl8723bs/core/rtw_ieee80211.c +3 -6
@@ -360,9 +360,8 @@ int rtw_generate_ie(struct registry_priv *pregistrypriv) ie =rtw_set_ie (ie, _IBSS_PARA_IE_,2 , (u8 *)&(pdev_network->configuration.ATIMWindow), &sz); -if (rateLen >8 ) { +if (rateLen >8 ) ie =rtw_set_ie (ie, _EXT_SUPPORTEDRATES_IE_, (rateLen -8 ), (pdev_network->supported_rates +8 ), &sz); - }/* HT Cap. */ if (((pregistrypriv->wireless_mode&WIRELESS_11_5N) || (pregistrypriv->wireless_mode&WIRELESS_11_24N))
@@ -391,9 +390,8 @@ unsigned char *rtw_get_wpa_ie(unsigned char *pie, int *wpa_ie_len, int limit)if (pbuf) {/* check if oui matches... */ -if (memcmp ((pbuf +2 ), wpa_oui_type,sizeof (wpa_oui_type))) { +if (memcmp ((pbuf +2 ), wpa_oui_type,sizeof (wpa_oui_type))) goto check_next_ie; - }/* check version... */ memcpy ((u8 *)&le_tmp, (pbuf +6 ),sizeof (val16));
@@ -548,9 +546,8 @@ int rtw_parse_wpa2_ie(u8 *rsn_ie, int rsn_ie_len, int *group_cipher, int *pairwireturn _FAIL; } -if ((*rsn_ie != _WPA2_IE_ID_) || (*(rsn_ie+1 ) != (u8)(rsn_ie_len -2 ))) { +if ((*rsn_ie != _WPA2_IE_ID_) || (*(rsn_ie+1 ) != (u8)(rsn_ie_len -2 )))return _FAIL; - } pos = rsn_ie; pos +=4 ;
Signature · 1 line
2.53.0
Sasha Levin
maintainerPATCH 8/10 staging: rtl8723bs: core: move constants to right side in comparison
In reply to Sasha LevinFrom: William Hansen-Baird <[email protected]>
[ Upstream commit cf0f2680c30d4b438a5e84b73dc70be405936b54 ]
Move constants to right side in if-statement conditions.
Stable-dep-of: 1463ca3ec660 ("staging: rtl8723bs: fix OOB reads in rtw_get_sec_ie(), rtw_get_wapi_ie(), and rtw_get_wps_attr()")
--- drivers/staging/rtl8723bs/core/rtw_ieee80211.c | 4 ++-- drivers/staging/rtl8723bs/core/rtw_security.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-)
drivers/staging/rtl8723bs/core/rtw_ieee80211.c +2 -2
@@ -1137,7 +1137,7 @@ static int rtw_get_cipher_info(struct wlan_network *pnetwork)if (pbuf && (wpa_ielen >0 )) {RT_TRACE (_module_rtl871x_mlme_c_, _drv_info_, ("rtw_get_cipher_info: wpa_ielen: %d" , wpa_ielen)); -if (_SUCCESS ==rtw_parse_wpa_ie (pbuf, wpa_ielen+2 , &group_cipher, &pairwise_cipher, &is8021x)) { +if (rtw_parse_wpa_ie (pbuf, wpa_ielen+2 , &group_cipher, &pairwise_cipher, &is8021x) == _SUCCESS) { pnetwork->bcn_info.pairwise_cipher = pairwise_cipher; pnetwork->bcn_info.group_cipher = group_cipher; pnetwork->bcn_info.is_8021x = is8021x;
@@ -1150,7 +1150,7 @@ static int rtw_get_cipher_info(struct wlan_network *pnetwork)if (pbuf && (wpa_ielen >0 )) {RT_TRACE (_module_rtl871x_mlme_c_, _drv_info_, ("get RSN IE\n" )); -if (_SUCCESS ==rtw_parse_wpa2_ie (pbuf, wpa_ielen+2 , &group_cipher, &pairwise_cipher, &is8021x)) { +if (rtw_parse_wpa2_ie (pbuf, wpa_ielen+2 , &group_cipher, &pairwise_cipher, &is8021x) == _SUCCESS) {RT_TRACE (_module_rtl871x_mlme_c_, _drv_info_, ("get RSN IE OK!!!\n" )); pnetwork->bcn_info.pairwise_cipher = pairwise_cipher; pnetwork->bcn_info.group_cipher = group_cipher;
drivers/staging/rtl8723bs/core/rtw_security.c +1 -1
@@ -2334,7 +2334,7 @@ void rtw_sec_restore_wep_key(struct adapter *adapter)struct security_priv *securitypriv = &(adapter->securitypriv);sint keyid; -if ((_WEP40_ == securitypriv->dot11PrivacyAlgrthm) || (_WEP104_ == securitypriv->dot11PrivacyAlgrthm)) { +if ((securitypriv->dot11PrivacyAlgrthm == _WEP40_) || (securitypriv->dot11PrivacyAlgrthm == _WEP104_)) {for (keyid =0 ; keyid <4 ; keyid++) {if (securitypriv->key_mask &BIT (keyid)) {if (keyid == securitypriv->dot11PrivacyKeyIndex)
Signature · 1 line
2.53.0
Sasha Levin
maintainerPATCH 9/10 staging: rtl8723bs: fix spaces around binary operators
In reply to Sasha LevinFrom: Nikolay Kulikov <[email protected]>
[ Upstream commit 0c9d1b56f9af0762a5be5118e1bb962f23784dc4 ]
Add missing spaces and fix line length to comply with kernel coding style.
Stable-dep-of: 1463ca3ec660 ("staging: rtl8723bs: fix OOB reads in rtw_get_sec_ie(), rtw_get_wapi_ie(), and rtw_get_wps_attr()")
--- .../staging/rtl8723bs/core/rtw_ieee80211.c | 80 ++++++++++--------- 1 file changed, 43 insertions(+), 37 deletions(-)
drivers/staging/rtl8723bs/core/rtw_ieee80211.c +43 -37
@@ -473,10 +473,10 @@ int rtw_parse_wpa_ie(u8 *wpa_ie, int wpa_ie_len, int *group_cipher, int *pairwisreturn _FAIL; } -if ((*wpa_ie != _WPA_IE_ID_) || (*(wpa_ie+1 ) != (u8)(wpa_ie_len -2 )) || - (memcmp (wpa_ie+2 ,RTW_WPA_OUI_TYPE ,WPA_SELECTOR_LEN ))) { +if ((*wpa_ie != _WPA_IE_ID_) || + (*(wpa_ie +1 ) != (u8)(wpa_ie_len -2 )) || + (memcmp (wpa_ie +2 ,RTW_WPA_OUI_TYPE ,WPA_SELECTOR_LEN )))return _FAIL; - } pos = wpa_ie;
@@ -546,7 +546,7 @@ int rtw_parse_wpa2_ie(u8 *rsn_ie, int rsn_ie_len, int *group_cipher, int *pairwireturn _FAIL; } -if ((*rsn_ie != _WPA2_IE_ID_) || (*(rsn_ie+1 ) != (u8)(rsn_ie_len -2 ))) +if ((*rsn_ie != _WPA2_IE_ID_) || (*(rsn_ie +1 ) != (u8)(rsn_ie_len -2 )))return _FAIL; pos = rsn_ie;
@@ -624,11 +624,11 @@ int rtw_get_wapi_ie(u8 *in_ie, uint in_len, u8 *wapi_ie, u16 *wapi_len)while (cnt < in_len) { authmode = in_ie[cnt]; -/* if (authmode == _WAPI_IE_) */ -if (authmode == _WAPI_IE_ && (!memcmp (&in_ie[cnt+6 ], wapi_oui1,4 ) || - !memcmp (&in_ie[cnt+6 ], wapi_oui2,4 ))) { +if (authmode ==WLAN_EID_BSS_AC_ACCESS_DELAY && + (!memcmp (&in_ie[cnt +6 ], wapi_oui1,4 ) || + !memcmp (&in_ie[cnt +6 ], wapi_oui2,4 ))) {if (wapi_ie) { -memcpy (wapi_ie, &in_ie[cnt], in_ie[cnt+1 ]+2 ); +memcpy (wapi_ie, &in_ie[cnt], in_ie[cnt +1 ] +2 );for (i =0 ; i < (in_ie[cnt+1 ]+2 ); i = i+8 ) { RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_, ("\n %2x,%2x,%2x,%2x,%2x,%2x,%2x,%2x\n",
@@ -638,11 +638,11 @@ int rtw_get_wapi_ie(u8 *in_ie, uint in_len, u8 *wapi_ie, u16 *wapi_len) }if (wapi_len) - *wapi_len = in_ie[cnt+1 ]+2 ; + *wapi_len = in_ie[cnt +1 ] +2 ; - cnt += in_ie[cnt+1 ]+2 ;/* get next */ + cnt += in_ie[cnt +1 ] +2 ;/* get next */ }else { - cnt += in_ie[cnt+1 ]+2 ;/* get next */ + cnt += in_ie[cnt +1 ] +2 ;/* get next */ } }
@@ -668,11 +668,12 @@ void rtw_get_sec_ie(u8 *in_ie, uint in_len, u8 *rsn_ie, u16 *rsn_len, u8 *wpa_iewhile (cnt < in_len) { authmode = in_ie[cnt]; -if ((authmode == _WPA_IE_ID_) && (!memcmp (&in_ie[cnt+2 ], &wpa_oui[0 ],4 ))) { +if ((authmode ==WLAN_EID_VENDOR_SPECIFIC ) && + (!memcmp (&in_ie[cnt +2 ], &wpa_oui[0 ],4 ))) {RT_TRACE (_module_rtl871x_mlme_c_, _drv_info_, ("\n rtw_get_wpa_ie: sec_idx =%d in_ie[cnt+1]+2 =%d\n" , sec_idx, in_ie[cnt+1 ]+2 ));if (wpa_ie) { -memcpy (wpa_ie, &in_ie[cnt], in_ie[cnt+1 ]+2 ); +memcpy (wpa_ie, &in_ie[cnt], in_ie[cnt +1 ] +2 );for (i =0 ; i < (in_ie[cnt+1 ]+2 ); i = i+8 ) { RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_, ("\n %2x,%2x,%2x,%2x,%2x,%2x,%2x,%2x\n",
@@ -697,10 +698,10 @@ void rtw_get_sec_ie(u8 *in_ie, uint in_len, u8 *rsn_ie, u16 *rsn_len, u8 *wpa_ie } } - *rsn_len = in_ie[cnt+1 ]+2 ; - cnt += in_ie[cnt+1 ]+2 ;/* get next */ + *rsn_len = in_ie[cnt +1 ] +2 ; + cnt += in_ie[cnt +1 ] +2 ;/* get next */ }else { - cnt += in_ie[cnt+1 ]+2 ;/* get next */ + cnt += in_ie[cnt +1 ] +2 ;/* get next */ } } }
@@ -750,20 +751,20 @@ u8 *rtw_get_wps_ie(u8 *in_ie, uint in_len, u8 *wps_ie, uint *wps_ielen)while (cnt < in_len) { eid = in_ie[cnt]; -if ((eid == _WPA_IE_ID_) && (!memcmp (&in_ie[cnt+2 ], wps_oui,4 ))) { +if ((eid == _WPA_IE_ID_) && (!memcmp (&in_ie[cnt +2 ], wps_oui,4 ))) { wpsie_ptr = &in_ie[cnt];if (wps_ie) -memcpy (wps_ie, &in_ie[cnt], in_ie[cnt+1 ]+2 ); +memcpy (wps_ie, &in_ie[cnt], in_ie[cnt +1 ] +2 );if (wps_ielen) - *wps_ielen = in_ie[cnt+1 ]+2 ; + *wps_ielen = in_ie[cnt +1 ] +2 ; - cnt += in_ie[cnt+1 ]+2 ; + cnt += in_ie[cnt +1 ] +2 ;break ; } - cnt += in_ie[cnt+1 ]+2 ;/* goto next */ + cnt += in_ie[cnt +1 ] +2 ;/* goto next */ }return wpsie_ptr;
@@ -788,7 +789,7 @@ u8 *rtw_get_wps_attr(u8 *wps_ie, uint wps_ielen, u16 target_attr_id, u8 *buf_attif (len_attr) *len_attr =0 ; -if ((wps_ie[0 ] != _VENDOR_SPECIFIC_IE_) || +if ((wps_ie[0 ] !=WLAN_EID_VENDOR_SPECIFIC ) || (memcmp (wps_ie +2 , wps_oui,4 ))) {return attr_ptr; }
@@ -842,12 +843,12 @@ u8 *rtw_get_wps_attr_content(u8 *wps_ie, uint wps_ielen, u16 target_attr_id, u8if (attr_ptr && attr_len) {if (buf_content) -memcpy (buf_content, attr_ptr+4 , attr_len-4 ); +memcpy (buf_content, attr_ptr +4 , attr_len -4 );if (len_content) - *len_content = attr_len-4 ; + *len_content = attr_len -4 ; -return attr_ptr+4 ; +return attr_ptr +4 ; }return NULL ;
@@ -1133,11 +1134,14 @@ static int rtw_get_cipher_info(struct wlan_network *pnetwork)int group_cipher =0 , pairwise_cipher =0 , is8021x =0 ;int ret = _FAIL; - pbuf =rtw_get_wpa_ie (&pnetwork->network.ies[12 ], &wpa_ielen, pnetwork->network.ie_length-12 ); + pbuf =rtw_get_wpa_ie (&pnetwork->network.ies[12 ], + &wpa_ielen, + pnetwork->network.ie_length -12 );if (pbuf && (wpa_ielen >0 )) {RT_TRACE (_module_rtl871x_mlme_c_, _drv_info_, ("rtw_get_cipher_info: wpa_ielen: %d" , wpa_ielen)); -if (rtw_parse_wpa_ie (pbuf, wpa_ielen+2 , &group_cipher, &pairwise_cipher, &is8021x) == _SUCCESS) { +if (rtw_parse_wpa_ie (pbuf, wpa_ielen +2 , &group_cipher, + &pairwise_cipher, &is8021x) == _SUCCESS) { pnetwork->bcn_info.pairwise_cipher = pairwise_cipher; pnetwork->bcn_info.group_cipher = group_cipher; pnetwork->bcn_info.is_8021x = is8021x;
@@ -1146,11 +1150,13 @@ static int rtw_get_cipher_info(struct wlan_network *pnetwork) ret = _SUCCESS; } }else { - pbuf =rtw_get_wpa2_ie (&pnetwork->network.ies[12 ], &wpa_ielen, pnetwork->network.ie_length-12 ); + pbuf =rtw_get_wpa2_ie (&pnetwork->network.ies[12 ], &wpa_ielen, + pnetwork->network.ie_length -12 );if (pbuf && (wpa_ielen >0 )) {RT_TRACE (_module_rtl871x_mlme_c_, _drv_info_, ("get RSN IE\n" )); -if (rtw_parse_wpa2_ie (pbuf, wpa_ielen+2 , &group_cipher, &pairwise_cipher, &is8021x) == _SUCCESS) { +if (rtw_parse_wpa2_ie (pbuf, wpa_ielen +2 , &group_cipher, + &pairwise_cipher, &is8021x) == _SUCCESS) {RT_TRACE (_module_rtl871x_mlme_c_, _drv_info_, ("get RSN IE OK!!!\n" )); pnetwork->bcn_info.pairwise_cipher = pairwise_cipher; pnetwork->bcn_info.group_cipher = group_cipher;
@@ -1231,21 +1237,21 @@ u16 rtw_mcs_rate(u8 bw_40MHz, u8 short_GI, unsigned char *MCS_rate)u16 max_rate =0 ;if (MCS_rate[0 ] &BIT (7 )) - max_rate = (bw_40MHz) ? ((short_GI)?1500 :1350 ):((short_GI)?722 :650 ); + max_rate = (bw_40MHz) ? ((short_GI) ?1500 :1350 ) : ((short_GI) ?722 :650 );else if (MCS_rate[0 ] &BIT (6 )) - max_rate = (bw_40MHz) ? ((short_GI)?1350 :1215 ):((short_GI)?650 :585 ); + max_rate = (bw_40MHz) ? ((short_GI) ?1350 :1215 ) : ((short_GI) ?650 :585 );else if (MCS_rate[0 ] &BIT (5 )) - max_rate = (bw_40MHz) ? ((short_GI)?1200 :1080 ):((short_GI)?578 :520 ); + max_rate = (bw_40MHz) ? ((short_GI) ?1200 :1080 ) : ((short_GI) ?578 :520 );else if (MCS_rate[0 ] &BIT (4 )) - max_rate = (bw_40MHz) ? ((short_GI)?900 :810 ):((short_GI)?433 :390 ); + max_rate = (bw_40MHz) ? ((short_GI) ?900 :810 ) : ((short_GI) ?433 :390 );else if (MCS_rate[0 ] &BIT (3 )) - max_rate = (bw_40MHz) ? ((short_GI)?600 :540 ):((short_GI)?289 :260 ); + max_rate = (bw_40MHz) ? ((short_GI) ?600 :540 ) : ((short_GI) ?289 :260 );else if (MCS_rate[0 ] &BIT (2 )) - max_rate = (bw_40MHz) ? ((short_GI)?450 :405 ):((short_GI)?217 :195 ); + max_rate = (bw_40MHz) ? ((short_GI) ?450 :405 ) : ((short_GI) ?217 :195 );else if (MCS_rate[0 ] &BIT (1 )) - max_rate = (bw_40MHz) ? ((short_GI)?300 :270 ):((short_GI)?144 :130 ); + max_rate = (bw_40MHz) ? ((short_GI) ?300 :270 ) : ((short_GI) ?144 :130 );else if (MCS_rate[0 ] &BIT (0 )) - max_rate = (bw_40MHz) ? ((short_GI)?150 :135 ):((short_GI)?72 :65 ); + max_rate = (bw_40MHz) ? ((short_GI) ?150 :135 ) : ((short_GI) ?72 :65 );return max_rate; }
Signature · 1 line
2.53.0
Sasha Levin
maintainerPATCH 10/10 staging: rtl8723bs: fix OOB reads in rtw_get_sec_ie(), rtw_get_wapi_ie(), and rtw_get_wps_attr()
In reply to Sasha LevinFrom: Alexandru Hossu <[email protected]>
[ Upstream commit 1463ca3ec6601cbb097d8d87dbf5dcf1cb86a344 ]
Three IE/attribute parsing functions have missing bounds checks.
rtw_get_sec_ie() and rtw_get_wapi_ie() iterate over a raw IE buffer without verifying that the header bytes (tag + length) are within the remaining buffer before reading them. Additionally, rtw_get_sec_ie() compares the 4-byte WPA OUI at cnt+2 without checking that at least 6 bytes remain, and rtw_get_wapi_ie() compares a 4-byte WAPI OUI at cnt+6 without checking that at least 10 bytes remain.
rtw_get_wps_attr() reads wps_ie[0] and wps_ie+2 unconditionally at entry, before verifying that wps_ielen is large enough to contain the 6-byte WPS IE header (element_id + length + 4-byte OUI). Inside the attribute loop, get_unaligned_be16() is called on attr_ptr and attr_ptr+2 without checking that 4 bytes remain in the buffer.
Add a cnt+2 bounds check before each loop body in rtw_get_sec_ie() and rtw_get_wapi_ie(), guard each multi-byte comparison with a minimum IE length requirement, add a wps_ielen < 6 early return in rtw_get_wps_attr(), and add a 4-byte bounds check in its inner loop.
--- drivers/staging/rtl8723bs/core/rtw_ieee80211.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+)
drivers/staging/rtl8723bs/core/rtw_ieee80211.c +15 -0
@@ -622,9 +622,14 @@ int rtw_get_wapi_ie(u8 *in_ie, uint in_len, u8 *wapi_ie, u16 *wapi_len) cnt = (_TIMESTAMP_ + _BEACON_ITERVAL_ + _CAPABILITY_);while (cnt < in_len) { +if (cnt +2 > in_len) +break ; +if (cnt +2 + in_ie[cnt +1 ] > in_len) +break ; authmode = in_ie[cnt];if (authmode ==WLAN_EID_BSS_AC_ACCESS_DELAY && + in_ie[cnt +1 ] >=8 && (!memcmp (&in_ie[cnt +6 ], wapi_oui1,4 ) || !memcmp (&in_ie[cnt +6 ], wapi_oui2,4 ))) {if (wapi_ie) {
@@ -666,9 +671,14 @@ void rtw_get_sec_ie(u8 *in_ie, uint in_len, u8 *rsn_ie, u16 *rsn_len, u8 *wpa_ie sec_idx =0 ;while (cnt < in_len) { +if (cnt +2 > in_len) +break ; +if (cnt +2 + in_ie[cnt +1 ] > in_len) +break ; authmode = in_ie[cnt];if ((authmode ==WLAN_EID_VENDOR_SPECIFIC ) && + in_ie[cnt +1 ] >=4 && (!memcmp (&in_ie[cnt +2 ], &wpa_oui[0 ],4 ))) {RT_TRACE (_module_rtl871x_mlme_c_, _drv_info_, ("\n rtw_get_wpa_ie: sec_idx =%d in_ie[cnt+1]+2 =%d\n" , sec_idx, in_ie[cnt+1 ]+2 ));
@@ -789,6 +799,9 @@ u8 *rtw_get_wps_attr(u8 *wps_ie, uint wps_ielen, u16 target_attr_id, u8 *buf_attif (len_attr) *len_attr =0 ; +if (wps_ielen <6 ) +return attr_ptr; +if ((wps_ie[0 ] !=WLAN_EID_VENDOR_SPECIFIC ) || (memcmp (wps_ie +2 , wps_oui,4 ))) {return attr_ptr;
@@ -799,6 +812,8 @@ u8 *rtw_get_wps_attr(u8 *wps_ie, uint wps_ielen, u16 target_attr_id, u8 *buf_attwhile (attr_ptr - wps_ie < wps_ielen) {/* 4 = 2(Attribute ID) + 2(Length) */ +if (attr_ptr +4 > wps_ie + wps_ielen) +break ;u16 attr_id =get_unaligned_be16 (attr_ptr);u16 attr_data_len =get_unaligned_be16 (attr_ptr +2 );u16 attr_len = attr_data_len +4 ;
Signature · 1 line
2.53.0