aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/broadcom
diff options
context:
space:
mode:
authorHante Meuleman <hante.meuleman@broadcom.com>2016-09-19 07:09:58 -0400
committerKalle Valo <kvalo@codeaurora.org>2016-09-26 13:35:55 -0400
commita7ed7828ecda0c2b5e0d7f55dedd4230afd4b583 (patch)
treec54fc83075e4fa6816d93487f5f705007c702598 /drivers/net/wireless/broadcom
parent2b7425f3629b38c438f890c20c5faeca64b144ff (diff)
brcmfmac: fix out of bound access on clearing wowl wake indicator
Clearing the wowl wakeindicator happens with a rather odd construction where the string "clear" is used to set the iovar wowl_wakeind. This was implemented incorrectly as it caused an out of bound access. Use an intermediate variable of correct length and copy string in that. Problem was found using coverity. Reviewed-by: Arend Van Spriel <arend.vanspriel@broadcom.com> Reviewed-by: Franky Lin <franky.lin@broadcom.com> Reviewed-by: Pieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com> Signed-off-by: Hante Meuleman <hante.meuleman@broadcom.com> Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Diffstat (limited to 'drivers/net/wireless/broadcom')
-rw-r--r--drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
index 0f2667e95e81..d97d6b153d6a 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
@@ -3703,6 +3703,7 @@ static void brcmf_configure_wowl(struct brcmf_cfg80211_info *cfg,
3703 struct cfg80211_wowlan *wowl) 3703 struct cfg80211_wowlan *wowl)
3704{ 3704{
3705 u32 wowl_config; 3705 u32 wowl_config;
3706 struct brcmf_wowl_wakeind_le wowl_wakeind;
3706 u32 i; 3707 u32 i;
3707 3708
3708 brcmf_dbg(TRACE, "Suspend, wowl config.\n"); 3709 brcmf_dbg(TRACE, "Suspend, wowl config.\n");
@@ -3744,8 +3745,9 @@ static void brcmf_configure_wowl(struct brcmf_cfg80211_info *cfg,
3744 if (!test_bit(BRCMF_VIF_STATUS_CONNECTED, &ifp->vif->sme_state)) 3745 if (!test_bit(BRCMF_VIF_STATUS_CONNECTED, &ifp->vif->sme_state))
3745 wowl_config |= BRCMF_WOWL_UNASSOC; 3746 wowl_config |= BRCMF_WOWL_UNASSOC;
3746 3747
3747 brcmf_fil_iovar_data_set(ifp, "wowl_wakeind", "clear", 3748 memcpy(&wowl_wakeind, "clear", 6);
3748 sizeof(struct brcmf_wowl_wakeind_le)); 3749 brcmf_fil_iovar_data_set(ifp, "wowl_wakeind", &wowl_wakeind,
3750 sizeof(wowl_wakeind));
3749 brcmf_fil_iovar_int_set(ifp, "wowl", wowl_config); 3751 brcmf_fil_iovar_int_set(ifp, "wowl", wowl_config);
3750 brcmf_fil_iovar_int_set(ifp, "wowl_activate", 1); 3752 brcmf_fil_iovar_int_set(ifp, "wowl_activate", 1);
3751 brcmf_bus_wowl_config(cfg->pub->bus_if, true); 3753 brcmf_bus_wowl_config(cfg->pub->bus_if, true);