1 From 4835f37e3bafc138f8bfa3cbed2920dd56fed283 Mon Sep 17 00:00:00 2001
2 From: Arend Van Spriel <arend.vanspriel@broadcom.com>
3 Date: Thu, 6 Apr 2017 13:14:40 +0100
4 Subject: [PATCH] brcmfmac: add length checks in scheduled scan result handler
6 Assure the event data buffer is long enough to hold the array
7 of netinfo items and that SSID length does not exceed the maximum
8 of 32 characters as per 802.11 spec.
10 Reviewed-by: Hante Meuleman <hante.meuleman@broadcom.com>
11 Reviewed-by: Pieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com>
12 Reviewed-by: Franky Lin <franky.lin@broadcom.com>
13 Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
14 Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
16 drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 13 +++++++++++--
17 1 file changed, 11 insertions(+), 2 deletions(-)
19 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
20 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
21 @@ -3300,6 +3300,7 @@ brcmf_notify_sched_scan_results(struct b
22 struct brcmf_pno_scanresults_le *pfn_result;
27 brcmf_dbg(SCAN, "Enter\n");
29 @@ -3326,6 +3327,14 @@ brcmf_notify_sched_scan_results(struct b
30 brcmf_err("FALSE PNO Event. (pfn_count == 0)\n");
34 + netinfo_start = brcmf_get_netinfo_array(pfn_result);
35 + datalen = e->datalen - ((void *)netinfo_start - (void *)pfn_result);
36 + if (datalen < result_count * sizeof(*netinfo)) {
37 + brcmf_err("insufficient event data\n");
41 request = brcmf_alloc_internal_escan_request(wiphy,
44 @@ -3333,8 +3342,6 @@ brcmf_notify_sched_scan_results(struct b
48 - netinfo_start = brcmf_get_netinfo_array(pfn_result);
50 for (i = 0; i < result_count; i++) {
51 netinfo = &netinfo_start[i];
53 @@ -3344,6 +3351,8 @@ brcmf_notify_sched_scan_results(struct b
57 + if (netinfo->SSID_len > IEEE80211_MAX_SSID_LEN)
58 + netinfo->SSID_len = IEEE80211_MAX_SSID_LEN;
59 brcmf_dbg(SCAN, "SSID:%.32s Channel:%d\n",
60 netinfo->SSID, netinfo->channel);
61 err = brcmf_internal_escan_add_info(request,