1 From ded89912156b1a47d940a0c954c43afbabd0c42c Mon Sep 17 00:00:00 2001
2 From: Arend Van Spriel <arend.vanspriel@broadcom.com>
3 Date: Mon, 5 Sep 2016 10:45:47 +0100
4 Subject: [PATCH] brcmfmac: avoid potential stack overflow in
5 brcmf_cfg80211_start_ap()
7 User-space can choose to omit NL80211_ATTR_SSID and only provide raw
8 IE TLV data. When doing so it can provide SSID IE with length exceeding
9 the allowed size. The driver further processes this IE copying it
10 into a local variable without checking the length. Hence stack can be
11 corrupted and used as exploit.
13 Cc: stable@vger.kernel.org # v4.7
14 Reported-by: Daxing Guo <freener.gdx@gmail.com>
15 Reviewed-by: Hante Meuleman <hante.meuleman@broadcom.com>
16 Reviewed-by: Pieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com>
17 Reviewed-by: Franky Lin <franky.lin@broadcom.com>
18 Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
19 Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
21 drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 2 +-
22 1 file changed, 1 insertion(+), 1 deletion(-)
24 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
25 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
26 @@ -4523,7 +4523,7 @@ brcmf_cfg80211_start_ap(struct wiphy *wi
27 (u8 *)&settings->beacon.head[ie_offset],
28 settings->beacon.head_len - ie_offset,
31 + if (!ssid_ie || ssid_ie->len > IEEE80211_MAX_SSID_LEN)
34 memcpy(ssid_le.SSID, ssid_ie->data, ssid_ie->len);