staging: rtl8712: rtl871x_mp_ioctl: Move a large data struct onto the heap
authorLee Jones <lee.jones@linaro.org>
Wed, 14 Apr 2021 18:10:52 +0000 (19:10 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 10 May 2021 09:19:24 +0000 (11:19 +0200)
Fixes the following W=1 kernel build warning(s):

 drivers/staging/rtl8712/rtl871x_mp_ioctl.c: In function ‘mp_start_test’:
 drivers/staging/rtl8712/rtl871x_mp_ioctl.c:204:1: warning: the frame size of 1136 bytes is larger than 1024 bytes [-Wframe-larger-than=]

Cc: Larry Finger <Larry.Finger@lwfinger.net>
Cc: Florian Schilhabel <florian.c.schilhabel@googlemail.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Zhansaya Bagdauletkyzy <zhansayabagdaulet@gmail.com>
Cc: Michael Straube <straube.linux@gmail.com>
Cc: WLAN FAE <wlanfae@realtek.com>
Cc: linux-staging@lists.linux.dev
Signed-off-by: Lee Jones <lee.jones@linaro.org>
Link: https://lore.kernel.org/r/20210414181129.1628598-21-lee.jones@linaro.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/rtl8712/rtl871x_mp_ioctl.c

index 31414a9..adbeb46 100644 (file)
@@ -149,26 +149,30 @@ static int mp_start_test(struct _adapter *padapter)
        struct mp_priv *pmppriv = &padapter->mppriv;
        struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
        struct wlan_network *tgt_network = &pmlmepriv->cur_network;
-       struct wlan_bssid_ex bssid;
+       struct wlan_bssid_ex *bssid;
        struct sta_info *psta;
        unsigned long length;
        unsigned long irqL;
        int res = 0;
 
+       bssid = kzalloc(sizeof(*bssid), GFP_KERNEL);
+       if (!bssid)
+               return -ENOMEM;
+
        /* 3 1. initialize a new struct wlan_bssid_ex */
-       memcpy(bssid.MacAddress, pmppriv->network_macaddr, ETH_ALEN);
-       bssid.Ssid.SsidLength = 16;
-       memcpy(bssid.Ssid.Ssid, (unsigned char *)"mp_pseudo_adhoc",
-               bssid.Ssid.SsidLength);
-       bssid.InfrastructureMode = Ndis802_11IBSS;
-       bssid.NetworkTypeInUse = Ndis802_11DS;
-       bssid.IELength = 0;
-       length = r8712_get_wlan_bssid_ex_sz(&bssid);
+       memcpy(bssid->MacAddress, pmppriv->network_macaddr, ETH_ALEN);
+       bssid->Ssid.SsidLength = 16;
+       memcpy(bssid->Ssid.Ssid, (unsigned char *)"mp_pseudo_adhoc",
+               bssid->Ssid.SsidLength);
+       bssid->InfrastructureMode = Ndis802_11IBSS;
+       bssid->NetworkTypeInUse = Ndis802_11DS;
+       bssid->IELength = 0;
+       length = r8712_get_wlan_bssid_ex_sz(bssid);
        if (length % 4) {
                /*round up to multiple of 4 bytes.*/
-               bssid.Length = ((length >> 2) + 1) << 2;
+               bssid->Length = ((length >> 2) + 1) << 2;
        } else {
-               bssid.Length = length;
+               bssid->Length = length;
        }
        spin_lock_irqsave(&pmlmepriv->lock, irqL);
        if (check_fwstate(pmlmepriv, WIFI_MP_STATE))
@@ -185,7 +189,7 @@ static int mp_start_test(struct _adapter *padapter)
                                 tgt_network->network.MacAddress);
        if (psta)
                r8712_free_stainfo(padapter, psta);
-       psta = r8712_alloc_stainfo(&padapter->stapriv, bssid.MacAddress);
+       psta = r8712_alloc_stainfo(&padapter->stapriv, bssid->MacAddress);
        if (!psta) {
                res = -ENOMEM;
                goto end_of_mp_start_test;
@@ -200,6 +204,7 @@ static int mp_start_test(struct _adapter *padapter)
        set_fwstate(pmlmepriv, _FW_LINKED);
 end_of_mp_start_test:
        spin_unlock_irqrestore(&pmlmepriv->lock, irqL);
+       kfree(bssid);
        return res;
 }