731b7eda1b12a13e20942ad15323b6822a73ea01
[oweals/openwrt.git] /
1 From 7762bb134e3b40e8ee2611365775b7432190a9c7 Mon Sep 17 00:00:00 2001
2 From: Wright Feng <wright.feng@cypress.com>
3 Date: Mon, 11 Dec 2017 15:38:21 +0800
4 Subject: [PATCH] brcmfmac: enlarge buffer size of caps to 512 bytes
5
6 The buffer size of return of cap iovar is greater than 256 bytes in some
7 firmwares. For instance, the return size of cap iovar is 271 bytes in 4373
8 13.10.246.79 firmare. It makes feature capability parsing failed because
9 caps buffer is default value.
10 So we enlarge caps buffer size to 512 bytes and add the error print for
11 cap iovar error.
12
13 Signed-off-by: Wright Feng <wright.feng@cypress.com>
14 Acked-by: Arend van Spriel <arend.vanspriel@broadcom.com>
15 Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
16 ---
17  drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.c | 12 +++++++++---
18  1 file changed, 9 insertions(+), 3 deletions(-)
19
20 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.c
21 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.c
22 @@ -130,13 +130,19 @@ static void brcmf_feat_iovar_data_set(st
23         }
24  }
25  
26 +#define MAX_CAPS_BUFFER_SIZE   512
27  static void brcmf_feat_firmware_capabilities(struct brcmf_if *ifp)
28  {
29 -       char caps[256];
30 +       char caps[MAX_CAPS_BUFFER_SIZE];
31         enum brcmf_feat_id id;
32 -       int i;
33 +       int i, err;
34 +
35 +       err = brcmf_fil_iovar_data_get(ifp, "cap", caps, sizeof(caps));
36 +       if (err) {
37 +               brcmf_err("could not get firmware cap (%d)\n", err);
38 +               return;
39 +       }
40  
41 -       brcmf_fil_iovar_data_get(ifp, "cap", caps, sizeof(caps));
42         brcmf_dbg(INFO, "[ %s]\n", caps);
43  
44         for (i = 0; i < ARRAY_SIZE(brcmf_fwcap_map); i++) {