Commit 0b18e5fe authored by Lee Jones's avatar Lee Jones Committed by Greg Kroah-Hartman
Browse files

staging: rtl8712: rtl871x_mp_ioctl: Move a large data struct onto the heap



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: default avatarLee Jones <lee.jones@linaro.org>
Link: https://lore.kernel.org/r/20210414181129.1628598-21-lee.jones@linaro.org


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent c337ee00
Loading
Loading
Loading
Loading
+17 −12
Original line number Diff line number Diff line
@@ -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;
}