Fixes the following W=1 kernel build warning(s): drivers/staging/wlan-ng/cfg80211.c: In function ‘prism2_scan’: drivers/staging/wlan-ng/cfg80211.c:388:1: warning: the frame size of 1296 bytes is larger than 1024 bytes [-Wframe-larger-than=] Cc: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> Cc: Sumera Priyadarsini <sylphrenadin@xxxxxxxxx> Cc: linux-staging@xxxxxxxxxxxxxxx Signed-off-by: Lee Jones <lee.jones@xxxxxxxxxx> --- drivers/staging/wlan-ng/cfg80211.c | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/drivers/staging/wlan-ng/cfg80211.c b/drivers/staging/wlan-ng/cfg80211.c index 759e475e303c0..7951bd63816ff 100644 --- a/drivers/staging/wlan-ng/cfg80211.c +++ b/drivers/staging/wlan-ng/cfg80211.c @@ -276,7 +276,7 @@ static int prism2_scan(struct wiphy *wiphy, struct prism2_wiphy_private *priv = wiphy_priv(wiphy); struct wlandevice *wlandev; struct p80211msg_dot11req_scan msg1; - struct p80211msg_dot11req_scan_results msg2; + struct p80211msg_dot11req_scan_results *msg2; struct cfg80211_bss *bss; struct cfg80211_scan_info info = {}; @@ -301,6 +301,10 @@ static int prism2_scan(struct wiphy *wiphy, return -EOPNOTSUPP; } + msg2 = kzalloc(sizeof(*msg2), GFP_KERNEL); + if (!msg2) + return -ENOMEM; + priv->scan_request = request; memset(&msg1, 0x00, sizeof(msg1)); @@ -342,31 +346,30 @@ static int prism2_scan(struct wiphy *wiphy, for (i = 0; i < numbss; i++) { int freq; - memset(&msg2, 0, sizeof(msg2)); - msg2.msgcode = DIDMSG_DOT11REQ_SCAN_RESULTS; - msg2.bssindex.data = i; + msg2->msgcode = DIDMSG_DOT11REQ_SCAN_RESULTS; + msg2->bssindex.data = i; result = p80211req_dorequest(wlandev, (u8 *)&msg2); if ((result != 0) || - (msg2.resultcode.data != P80211ENUM_resultcode_success)) { + (msg2->resultcode.data != P80211ENUM_resultcode_success)) { break; } ie_buf[0] = WLAN_EID_SSID; - ie_buf[1] = msg2.ssid.data.len; + ie_buf[1] = msg2->ssid.data.len; ie_len = ie_buf[1] + 2; - memcpy(&ie_buf[2], &msg2.ssid.data.data, msg2.ssid.data.len); - freq = ieee80211_channel_to_frequency(msg2.dschannel.data, + memcpy(&ie_buf[2], &msg2->ssid.data.data, msg2->ssid.data.len); + freq = ieee80211_channel_to_frequency(msg2->dschannel.data, NL80211_BAND_2GHZ); bss = cfg80211_inform_bss(wiphy, ieee80211_get_channel(wiphy, freq), CFG80211_BSS_FTYPE_UNKNOWN, - (const u8 *)&msg2.bssid.data.data, - msg2.timestamp.data, msg2.capinfo.data, - msg2.beaconperiod.data, + (const u8 *)&msg2->bssid.data.data, + msg2->timestamp.data, msg2->capinfo.data, + msg2->beaconperiod.data, ie_buf, ie_len, - (msg2.signal.data - 65536) * 100, /* Conversion to signed type */ + (msg2->signal.data - 65536) * 100, /* Conversion to signed type */ GFP_KERNEL); if (!bss) { @@ -378,12 +381,13 @@ static int prism2_scan(struct wiphy *wiphy, } if (result) - err = prism2_result2err(msg2.resultcode.data); + err = prism2_result2err(msg2->resultcode.data); exit: info.aborted = !!(err); cfg80211_scan_done(request, &info); priv->scan_request = NULL; + kfree(msg2); return err; } -- 2.27.0