diff options
author | Franky Lin <frankyl@broadcom.com> | 2013-09-25 07:05:42 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2013-10-03 16:24:24 -0400 |
commit | 7434785652457482a4b22c280a83776c3873940d (patch) | |
tree | 31d662d1677790d22c3114cbd24de04156c24fb1 | |
parent | fe0401582ed4f4ba385b191a7aa1d5984fed81ed (diff) |
brcmfmac: add valid core index check in related functions
Perform a valid check for core index to avoid illegal address access.
Reviewed-by: Hante Meuleman <meuleman@broadcom.com>
Reviewed-by: Pieter-Paul Giesberts <pieterpg@broadcom.com>
Reviewed-by: Arend van Spriel <arend@broadcom.com>
Signed-off-by: Franky Lin <frankyl@broadcom.com>
Signed-off-by: Arend van Spriel <arend@broadcom.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r-- | drivers/net/wireless/brcm80211/brcmfmac/sdio_chip.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/sdio_chip.c b/drivers/net/wireless/brcm80211/brcmfmac/sdio_chip.c index 023ddcb885de..2096a14ef1fb 100644 --- a/drivers/net/wireless/brcm80211/brcmfmac/sdio_chip.c +++ b/drivers/net/wireless/brcm80211/brcmfmac/sdio_chip.c | |||
@@ -137,6 +137,8 @@ brcmf_sdio_sb_iscoreup(struct brcmf_sdio_dev *sdiodev, | |||
137 | u8 idx; | 137 | u8 idx; |
138 | 138 | ||
139 | idx = brcmf_sdio_chip_getinfidx(ci, coreid); | 139 | idx = brcmf_sdio_chip_getinfidx(ci, coreid); |
140 | if (idx == BRCMF_MAX_CORENUM) | ||
141 | return false; | ||
140 | 142 | ||
141 | regdata = brcmf_sdio_regrl(sdiodev, | 143 | regdata = brcmf_sdio_regrl(sdiodev, |
142 | CORE_SB(ci->c_inf[idx].base, sbtmstatelow), | 144 | CORE_SB(ci->c_inf[idx].base, sbtmstatelow), |
@@ -155,6 +157,8 @@ brcmf_sdio_ai_iscoreup(struct brcmf_sdio_dev *sdiodev, | |||
155 | bool ret; | 157 | bool ret; |
156 | 158 | ||
157 | idx = brcmf_sdio_chip_getinfidx(ci, coreid); | 159 | idx = brcmf_sdio_chip_getinfidx(ci, coreid); |
160 | if (idx == BRCMF_MAX_CORENUM) | ||
161 | return false; | ||
158 | 162 | ||
159 | regdata = brcmf_sdio_regrl(sdiodev, ci->c_inf[idx].wrapbase+BCMA_IOCTL, | 163 | regdata = brcmf_sdio_regrl(sdiodev, ci->c_inf[idx].wrapbase+BCMA_IOCTL, |
160 | NULL); | 164 | NULL); |
@@ -262,6 +266,8 @@ brcmf_sdio_ai_coredisable(struct brcmf_sdio_dev *sdiodev, | |||
262 | u32 regdata; | 266 | u32 regdata; |
263 | 267 | ||
264 | idx = brcmf_sdio_chip_getinfidx(ci, coreid); | 268 | idx = brcmf_sdio_chip_getinfidx(ci, coreid); |
269 | if (idx == BRCMF_MAX_CORENUM) | ||
270 | return; | ||
265 | 271 | ||
266 | /* if core is already in reset, just return */ | 272 | /* if core is already in reset, just return */ |
267 | regdata = brcmf_sdio_regrl(sdiodev, | 273 | regdata = brcmf_sdio_regrl(sdiodev, |
@@ -305,6 +311,8 @@ brcmf_sdio_sb_resetcore(struct brcmf_sdio_dev *sdiodev, | |||
305 | u8 idx; | 311 | u8 idx; |
306 | 312 | ||
307 | idx = brcmf_sdio_chip_getinfidx(ci, coreid); | 313 | idx = brcmf_sdio_chip_getinfidx(ci, coreid); |
314 | if (idx == BRCMF_MAX_CORENUM) | ||
315 | return; | ||
308 | 316 | ||
309 | /* | 317 | /* |
310 | * Must do the disable sequence first to work for | 318 | * Must do the disable sequence first to work for |
@@ -369,6 +377,8 @@ brcmf_sdio_ai_resetcore(struct brcmf_sdio_dev *sdiodev, | |||
369 | u32 regdata; | 377 | u32 regdata; |
370 | 378 | ||
371 | idx = brcmf_sdio_chip_getinfidx(ci, coreid); | 379 | idx = brcmf_sdio_chip_getinfidx(ci, coreid); |
380 | if (idx == BRCMF_MAX_CORENUM) | ||
381 | return; | ||
372 | 382 | ||
373 | /* must disable first to work for arbitrary current core state */ | 383 | /* must disable first to work for arbitrary current core state */ |
374 | brcmf_sdio_ai_coredisable(sdiodev, ci, coreid, core_bits); | 384 | brcmf_sdio_ai_coredisable(sdiodev, ci, coreid, core_bits); |