]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
staging: rtl8723bs: fix buffer over-read in rtw_update_protection
authorSalman Alghamdi <me@cipherat.com>
Fri, 8 May 2026 22:26:14 +0000 (01:26 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 11 May 2026 12:43:49 +0000 (14:43 +0200)
rtw_update_protection() is called with a pointer offset into the
ies buffer but the full ie_length is passed, causing a potential
buffer over-read.

Fixes: e945c43df60b ("Staging: rtl8723bs: Delete dead code from update_current_network()")
Fixes: d3fcee1b78a5 ("staging: rtl8723bs: fix camel case in struct wlan_bssid_ex")
Reported-by: Luka Gejak <luka.gejak@linux.dev>
Closes: https://lore.kernel.org/linux-staging/DI2H39EAAFBZ.3KI5NWN02AQ2S@linux.dev
Cc: stable@vger.kernel.org
Signed-off-by: Salman Alghamdi <me@cipherat.com>
Reviewed-by: Luka Gejak <luka.gejak@linux.dev>
Link: https://patch.msgid.link/20260508222649.23989-1-me@cipherat.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/rtl8723bs/core/rtw_mlme.c

index ddfc56f0253dfdffaac72ecc655bd88a0d56ac98..268f294528e6a95ff484aa3256977ba9f230af29 100644 (file)
@@ -464,8 +464,11 @@ static void update_current_network(struct adapter *adapter, struct wlan_bssid_ex
 
        if (check_fwstate(pmlmepriv, _FW_LINKED) && (is_same_network(&pmlmepriv->cur_network.network, pnetwork, 0))) {
                update_network(&pmlmepriv->cur_network.network, pnetwork, adapter, true);
+               if (pmlmepriv->cur_network.network.ie_length < sizeof(struct ndis_802_11_fix_ie))
+                       return;
+
                rtw_update_protection(adapter, (pmlmepriv->cur_network.network.ies) + sizeof(struct ndis_802_11_fix_ie),
-                                                               pmlmepriv->cur_network.network.ie_length);
+                                                               pmlmepriv->cur_network.network.ie_length - sizeof(struct ndis_802_11_fix_ie));
        }
 }
 
@@ -1072,8 +1075,11 @@ static void rtw_joinbss_update_network(struct adapter *padapter, struct wlan_net
                        break;
        }
 
+       if (cur_network->network.ie_length < sizeof(struct ndis_802_11_fix_ie))
+               return;
+
        rtw_update_protection(padapter, (cur_network->network.ies) + sizeof(struct ndis_802_11_fix_ie),
-                                                                       (cur_network->network.ie_length));
+                                                                       (cur_network->network.ie_length - sizeof(struct ndis_802_11_fix_ie)));
 
        rtw_update_ht_cap(padapter, cur_network->network.ies, cur_network->network.ie_length, (u8) cur_network->network.configuration.ds_config);
 }