clean up wlan_bssdef.h
v2 cover clean up wlan_bssdef.h
The main goal of this series is to get rid of a needless typedef in the rtl8712 wlan driver.
In the course of fixing that, I found a bug that can (at least in theory) lead to a overrun during a memcpy, as well as an identical struct with a different name, which use the typedef.
Finally after cleaning up the typedef, change the name of the primary variable that used the typedef from "SupportedRates" to "rates", to conform to kernel coding style.
Changes since V1:
Do not make other logic changes while Changing the name of SupportedRates New patch 3/6 fixes a buggy comment that referred to the typedef
Joshua Clayton (6):
staging: rtl8712: fix buggy size calculation
staging: rtl8712: simplify size calculation
staging: rtl8712: fix comment
staging: rtl8712: remove duplicate struct
staging: rtl8712: remove typedefs
staging: rtl8712: change SupportedRates to rates
drivers/staging/rtl8712/ieee80211.c | 22 ++++++------- drivers/staging/rtl8712/rtl871x_cmd.c | 28 +++++----------- drivers/staging/rtl8712/rtl871x_cmd.h | 4 +-- drivers/staging/rtl8712/rtl871x_event.h | 2 +- drivers/staging/rtl8712/rtl871x_ioctl_linux.c | 36 ++++++++++---------- drivers/staging/rtl8712/rtl871x_mlme.c | 47 ++++++++++----------------- drivers/staging/rtl8712/rtl871x_mlme.h | 2 +- drivers/staging/rtl8712/rtl871x_mp_ioctl.c | 6 ++-- drivers/staging/rtl8712/wlan_bssdef.h | 42 +++--------------------- 9 files changed, 66 insertions(+), 123 deletions(-)
Signature · 1 line
2.4.6
PATCH v2 1/6 staging: rtl8712: fix buggy size calculation
r8712_get_ndis_wlan_bssid_ex_sz has a "6 * sizeof(unsigned long)" where the underlying struct has a 6 * unsigned char. Simplify the calculation by just subtracting the variable part from the size of the struct.
This also gets rid of a use of typedef NDIS_802_11_RATES_EX
drivers/staging/rtl8712/rtl871x_mlme.c +1 -11
@@ -210,17 +210,7 @@ void r8712_generate_random_ibss(u8 *pibss)uint r8712_get_ndis_wlan_bssid_ex_sz (struct ndis_wlan_bssid_ex *bss) { -uint t_len; - - t_len =sizeof (u32) +6 *sizeof (unsigned long ) +2 + -sizeof (struct ndis_802_11_ssid ) +sizeof (u32) + -sizeof (s32) + -sizeof (enum NDIS_802_11_NETWORK_TYPE ) + -sizeof (struct NDIS_802_11_CONFIGURATION ) + -sizeof (enum NDIS_802_11_NETWORK_INFRASTRUCTURE ) + -sizeof (NDIS_802_11_RATES_EX ) + -sizeof (u32) + bss->IELength; -return t_len; +return sizeof (*bss) + bss->IELength -MAX_IE_SZ ; }u8 *r8712_get_capability_from_ie (u8 *ie)
Signature · 1 line
2.4.6
PATCH v2 2/6 staging: rtl8712: simplify size calculation
In reply to Joshua Claytonreplace item-by-item size calculation of a struct with the size of the struct.
This gets rid of a use of typedef NDIS_802_11_RATES_EX
drivers/staging/rtl8712/rtl871x_cmd.c +1 -10
@@ -471,7 +471,6 @@ u8 r8712_createbss_cmd(struct _adapter *padapter)u8 r8712_joinbss_cmd (struct _adapter *padapter,struct wlan_network *pnetwork) { -uint t_len =0 ;struct ndis_wlan_bssid_ex *psecnetwork;struct cmd_obj *pcmd;struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
@@ -486,14 +485,6 @@ u8 r8712_joinbss_cmd(struct _adapter *padapter, struct wlan_network *pnetwork) pcmd =kmalloc (sizeof (*pcmd),GFP_ATOMIC );if (pcmd ==NULL )return _FAIL; - t_len =sizeof (u32) +6 *sizeof (unsigned char ) +2 + -sizeof (struct ndis_802_11_ssid ) +sizeof (u32) + -sizeof (s32) + -sizeof (enum NDIS_802_11_NETWORK_TYPE ) + -sizeof (struct NDIS_802_11_CONFIGURATION ) + -sizeof (enum NDIS_802_11_NETWORK_INFRASTRUCTURE ) + -sizeof (NDIS_802_11_RATES_EX ) + -sizeof (u32) +MAX_IE_SZ ;/* for hidden ap to set fw_state here */ if (check_fwstate(pmlmepriv, WIFI_STATION_STATE|WIFI_ADHOC_STATE) !=
@@ -516,7 +507,7 @@ u8 r8712_joinbss_cmd(struct _adapter *padapter, struct wlan_network *pnetwork)kfree (pcmd);return _FAIL; } -memcpy (psecnetwork, &pnetwork->network, t_len); +memcpy (psecnetwork, &pnetwork->network,sizeof (*psecnetwork)); psecuritypriv->authenticator_ie[0 ] = (unsigned char ) psecnetwork->IELength;if ((psecnetwork->IELength-12 ) < (256 -1 ))
Signature · 1 line
2.4.6
PATCH v2 3/6 staging: rtl8712: fix comment
In reply to Joshua ClaytonThe old comment refers to a typedef name which is being removed, and to a style of calculation which is no longer being used. It falsely states that IELength is variable length, instead of IEs.
Change comment to simply state that the IEs field is a buffer of variable size and that IELength refers to the current size.
drivers/staging/rtl8712/wlan_bssdef.h +1 -11
@@ -83,17 +83,6 @@ struct NDIS_802_11_FIXED_IEs {u16 Capabilities; }; -/* -* Length is the 4 bytes multiples of the sume of -* 6 * sizeof (unsigned char) + 2 + sizeof (ndis_802_11_ssid) + sizeof (u32) -* + sizeof (s32) + sizeof (NDIS_802_11_NETWORK_TYPE) -* + sizeof (struct NDIS_802_11_CONFIGURATION) -* + sizeof (NDIS_802_11_RATES_EX) + IELength - -* Except the IELength, all other fields are fixed length. Therefore, we can -* define a macro to present the partial sum. -*/ -struct ndis_wlan_bssid_ex {u32 Length;unsigned char MacAddress[6 ];
@@ -105,6 +94,7 @@ struct ndis_wlan_bssid_ex {struct NDIS_802_11_CONFIGURATION Configuration;enum NDIS_802_11_NETWORK_INFRASTRUCTURE InfrastructureMode;NDIS_802_11_RATES_EX SupportedRates; +/* number of content bytes in EIs, which varies */ u32 IELength;/*(timestamp, beacon interval, and capability information) */ u8 IEs[MAX_IE_SZ ];
Signature · 1 line
2.4.6