Staging: wlan-ng: fix sparse warning in prism2fw.c
authorA Raghavendra Rao <raghav3276@gmail.com>
Thu, 7 Aug 2014 08:40:39 +0000 (14:10 +0530)
committerBen Hutchings <ben@decadent.org.uk>
Sat, 11 Nov 2017 13:34:51 +0000 (13:34 +0000)
commit 41cb65c4854e14f12b1cbb8215e509d8ad4d0c88 upstream.

Fix the following sparse warning :

In file included from drivers/staging/wlan-ng/prism2usb.c:5:0:
drivers/staging/wlan-ng/prism2fw.c: In function
‘read_cardpda.constprop.43’:
drivers/staging/wlan-ng/prism2fw.c:792:1: warning: the frame size of
1068 bytes is larger than 1024 bytes [-Wframe-larger-than=]

The variable to 'struct p80211msg_p2req_readpda' was previously being created
on the stack, which inturn exeeded the frame size limit, resulting in a
sparse warning. This patch alloctes the memory to the structure dynamically
and the operations are left unchanged.

Signed-off-by: A Raghavendra Rao <arrao@cdac.in>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
drivers/staging/wlan-ng/prism2fw.c

index 87359af..80e959d 100644 (file)
@@ -765,30 +765,35 @@ int plugimage(struct imgchunk *fchunk, unsigned int nfchunks,
 int read_cardpda(struct pda *pda, wlandevice_t *wlandev)
 {
        int result = 0;
-       struct p80211msg_p2req_readpda msg;
+       struct p80211msg_p2req_readpda *msg;
+
+       msg = kzalloc(sizeof(*msg), GFP_KERNEL);
+       if (!msg)
+               return -ENOMEM;
 
        /* set up the msg */
-       msg.msgcode = DIDmsg_p2req_readpda;
-       msg.msglen = sizeof(msg);
-       strcpy(msg.devname, wlandev->name);
-       msg.pda.did = DIDmsg_p2req_readpda_pda;
-       msg.pda.len = HFA384x_PDA_LEN_MAX;
-       msg.pda.status = P80211ENUM_msgitem_status_no_value;
-       msg.resultcode.did = DIDmsg_p2req_readpda_resultcode;
-       msg.resultcode.len = sizeof(u32);
-       msg.resultcode.status = P80211ENUM_msgitem_status_no_value;
-
-       if (prism2mgmt_readpda(wlandev, &msg) != 0) {
+       msg->msgcode = DIDmsg_p2req_readpda;
+       msg->msglen = sizeof(msg);
+       strcpy(msg->devname, wlandev->name);
+       msg->pda.did = DIDmsg_p2req_readpda_pda;
+       msg->pda.len = HFA384x_PDA_LEN_MAX;
+       msg->pda.status = P80211ENUM_msgitem_status_no_value;
+       msg->resultcode.did = DIDmsg_p2req_readpda_resultcode;
+       msg->resultcode.len = sizeof(u32);
+       msg->resultcode.status = P80211ENUM_msgitem_status_no_value;
+
+       if (prism2mgmt_readpda(wlandev, msg) != 0) {
                /* prism2mgmt_readpda prints an errno if appropriate */
                result = -1;
-       } else if (msg.resultcode.data == P80211ENUM_resultcode_success) {
-               memcpy(pda->buf, msg.pda.data, HFA384x_PDA_LEN_MAX);
+       } else if (msg->resultcode.data == P80211ENUM_resultcode_success) {
+               memcpy(pda->buf, msg->pda.data, HFA384x_PDA_LEN_MAX);
                result = mkpdrlist(pda);
        } else {
                /* resultcode must've been something other than success */
                result = -1;
        }
 
+       kfree(msg);
        return result;
 }