]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
staging: rtl8723bs: fix stack buffer overflow in OnAssocReq IE parsing
authorNavaneeth K <knavaneeth786@gmail.com>
Thu, 20 Nov 2025 16:33:08 +0000 (16:33 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 12 Dec 2025 17:40:23 +0000 (18:40 +0100)
commit 6ef0e1c10455927867cac8f0ed6b49f328f8cf95 upstream.

The Supported Rates IE length from an incoming Association Request frame
was used directly as the memcpy() length when copying into a fixed-size
16-byte stack buffer (supportRate). A malicious station can advertise an
IE length larger than 16 bytes, causing a stack buffer overflow.

Clamp ie_len to the buffer size before copying the Supported Rates IE,
and correct the bounds check when merging Extended Supported Rates to
prevent a second potential overflow.

This prevents kernel stack corruption triggered by malformed association
requests.

Signed-off-by: Navaneeth K <knavaneeth786@gmail.com>
Cc: stable <stable@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/rtl8723bs/core/rtw_mlme_ext.c

index bc980d21d50e245cf6edf81fda771e0d3dc2ef8c..7d451cd5835a20330cdbec90556264c287626e79 100644 (file)
@@ -1033,6 +1033,9 @@ unsigned int OnAssocReq(struct adapter *padapter, union recv_frame *precv_frame)
                status = WLAN_STATUS_CHALLENGE_FAIL;
                goto OnAssocReqFail;
        } else {
+               if (ie_len > sizeof(supportRate))
+                       ie_len = sizeof(supportRate);
+
                memcpy(supportRate, p+2, ie_len);
                supportRateNum = ie_len;
 
@@ -1040,7 +1043,7 @@ unsigned int OnAssocReq(struct adapter *padapter, union recv_frame *precv_frame)
                                pkt_len - WLAN_HDR_A3_LEN - ie_offset);
                if (p) {
 
-                       if (supportRateNum <= sizeof(supportRate)) {
+                       if (supportRateNum + ie_len <= sizeof(supportRate)) {
                                memcpy(supportRate+supportRateNum, p+2, ie_len);
                                supportRateNum += ie_len;
                        }