2017-12-11 07:38:36

by Wright Feng

[permalink] [raw]
Subject: [PATCH] brcmfmac: enlarge buffer size of caps to 512 bytes

The buffer size of return of cap iovar is greater than 256 bytes in some
firmwares. For instance, the return size of cap iovar is 271 bytes in 4373
13.10.246.79 firmare. It makes feature capability parsing failed because
caps buffer is default value.
So we enlarge caps buffer size to 512 bytes and add the error print for
cap iovar error.

Signed-off-by: Wright Feng <[email protected]>
---
drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.c | 12 +++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.c
index 53ae302..47de35a 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.c
@@ -130,13 +130,19 @@ static void brcmf_feat_iovar_data_set(struct brcmf_if *ifp,
}
}

+#define MAX_CAPS_BUFFER_SIZE 512
static void brcmf_feat_firmware_capabilities(struct brcmf_if *ifp)
{
- char caps[256];
+ char caps[MAX_CAPS_BUFFER_SIZE];
enum brcmf_feat_id id;
- int i;
+ int i, err;
+
+ err = brcmf_fil_iovar_data_get(ifp, "cap", caps, sizeof(caps));
+ if (err) {
+ brcmf_err("could not get firmware cap (%d)\n", err);
+ return;
+ }

- brcmf_fil_iovar_data_get(ifp, "cap", caps, sizeof(caps));
brcmf_dbg(INFO, "[ %s]\n", caps);

for (i = 0; i < ARRAY_SIZE(brcmf_fwcap_map); i++) {
--
1.9.1


2017-12-11 09:10:55

by Arend van Spriel

[permalink] [raw]
Subject: Re: [PATCH] brcmfmac: enlarge buffer size of caps to 512 bytes

On 12/11/2017 8:38 AM, Wright Feng wrote:
> The buffer size of return of cap iovar is greater than 256 bytes in some
> firmwares. For instance, the return size of cap iovar is 271 bytes in 4373
> 13.10.246.79 firmare. It makes feature capability parsing failed because
> caps buffer is default value.
> So we enlarge caps buffer size to 512 bytes and add the error print for
> cap iovar error.

Looks fine to me. However, firmware side is also broken for some chips
where released firmware uses 256 bytes (= WLC_IOCTL_SMLEN) but the
capability tokens do no longer fit that size and we get a cut-off
capability string.

Anyway...

Acked-by: Arend van Spriel <[email protected]>
> Signed-off-by: Wright Feng <[email protected]>
> ---
> drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.c | 12 +++++++++---
> 1 file changed, 9 insertions(+), 3 deletions(-)

2017-12-14 12:42:39

by Kalle Valo

[permalink] [raw]
Subject: Re: brcmfmac: enlarge buffer size of caps to 512 bytes

Wright Feng <[email protected]> wrote:

> The buffer size of return of cap iovar is greater than 256 bytes in some
> firmwares. For instance, the return size of cap iovar is 271 bytes in 4373
> 13.10.246.79 firmare. It makes feature capability parsing failed because
> caps buffer is default value.
> So we enlarge caps buffer size to 512 bytes and add the error print for
> cap iovar error.
>
> Signed-off-by: Wright Feng <[email protected]>
> Acked-by: Arend van Spriel <[email protected]>

Patch applied to wireless-drivers-next.git, thanks.

7762bb134e3b brcmfmac: enlarge buffer size of caps to 512 bytes

--
https://patchwork.kernel.org/patch/10104357/

https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches