patch "staging: rtl8188eu: fix potential memory corruption in" added to staging-linus
Subsystems (2)
This is a note to let you know that I've just added the patch titled
staging: rtl8188eu: fix potential memory corruption in
to my staging git tree which can be found at
git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git
in the staging-linus branch.
The patch will show up in the next release of the linux-next tree (usually sometime within the next 24 hours during the week.)
The patch will hopefully also be merged in Linus's tree for the next -rc kernel release.
If you have any questions about this process, please let me know.
From 2b5d923c01cf6abf0ae2768891421612452d2ffa Mon Sep 17 00:00:00 2001
From: Dan Carpenter <[email protected]>
Date: Fri, 5 Mar 2021 11:56:32 +0300
Subject: 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.
--- 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