staging: rtl8188eu: fix potential memory corruption in rtw_check_beacon_data()
Subsystems (2)
PATCH 1/1 staging: rtl8188eu: fix potential memory corruption in rtw_check_beacon_data()
The "ie_len" is a value in the 1-255 range that comes from the user. We have to cap it to ensure that it's not too large or it could lead to memory corruption.
Fixes 9a7fe54ddc3a ("staging: r8188eu: Add source files for new driver - part 1")
Signed-off-by Dan Carpenter <[email protected]>
--- drivers/staging/rtl8188eu/core/rtw_ap.c | 5 +++++ 1 file changed, 5 insertions(+)
drivers/staging/rtl8188eu/core/rtw_ap.c +5 -0
@@ -791,6 +791,7 @@ int rtw_check_beacon_data(struct adapter *padapter, u8 *pbuf, int len) p =rtw_get_ie (ie + _BEACON_IE_OFFSET_,WLAN_EID_SSID , &ie_len, pbss_network->ie_length - _BEACON_IE_OFFSET_);if (p && ie_len >0 ) { + ie_len =min_t (int, ie_len,sizeof (pbss_network->ssid.ssid));memset (&pbss_network->ssid,0 ,sizeof (struct ndis_802_11_ssid ));memcpy (pbss_network->ssid.ssid, p +2 , ie_len); pbss_network->ssid.ssid_length = ie_len;
@@ -811,6 +812,7 @@ int rtw_check_beacon_data(struct adapter *padapter, u8 *pbuf, int len) p =rtw_get_ie (ie + _BEACON_IE_OFFSET_,WLAN_EID_SUPP_RATES , &ie_len, pbss_network->ie_length - _BEACON_IE_OFFSET_);if (p) { + ie_len =min_t (int, ie_len,NDIS_802_11_LENGTH_RATES_EX );memcpy (supportRate, p +2 , ie_len); supportRateNum = ie_len; }
@@ -819,6 +821,8 @@ int rtw_check_beacon_data(struct adapter *padapter, u8 *pbuf, int len) p =rtw_get_ie (ie + _BEACON_IE_OFFSET_,WLAN_EID_EXT_SUPP_RATES , &ie_len, pbss_network->ie_length - _BEACON_IE_OFFSET_);if (p) { + ie_len =min_t (int, ie_len, +NDIS_802_11_LENGTH_RATES_EX - supportRateNum);memcpy (supportRate + supportRateNum, p +2 , ie_len); supportRateNum += ie_len; }
@@ -934,6 +938,7 @@ int rtw_check_beacon_data(struct adapter *padapter, u8 *pbuf, int len) pht_cap->mcs.rx_mask[0 ] =0xff ; pht_cap->mcs.rx_mask[1 ] =0x0 ; + ie_len =min_t (int, ie_len,sizeof (pmlmepriv->htpriv.ht_cap));memcpy (&pmlmepriv->htpriv.ht_cap, p +2 , ie_len); }
Signature · 1 line
2.30.1