linux-uconsole/drivers/net/wireless
Brian Norris 4a9c294d7b mwifiex: correct channel stat buffer overflows
commit 4b5dde2d62 upstream.

mwifiex records information about various channels as it receives scan
information. It does this by appending to a buffer that was sized
to the max number of supported channels on any band, but there are
numerous problems:

(a) scans can return info from more than one band (e.g., both 2.4 and 5
    GHz), so the determined "max" is not large enough
(b) some firmware appears to return multiple results for a given
    channel, so the max *really* isn't large enough
(c) there is no bounds checking when stashing these stats, so problems
    (a) and (b) can easily lead to buffer overflows

Let's patch this by setting a slightly-more-correct max (that accounts
for a combination of both 2.4G and 5G bands) and adding a bounds check
when writing to our statistics buffer.

Due to problem (b), we still might not properly report all known survey
information (e.g., with "iw <dev> survey dump"), since duplicate results
(or otherwise "larger than expected" results) will cause some
truncation. But that's a problem for a future bugfix.

(And because of this known deficiency, only log the excess at the WARN
level, since that isn't visible by default in this driver and would
otherwise be a bit too noisy.)

Fixes: bf35443314 ("mwifiex: channel statistics support for mwifiex")
Cc: Avinash Patil <patila@marvell.com>
Cc: Xinming Hu <huxm@marvell.com>
Signed-off-by: Brian Norris <briannorris@chromium.org>
Reviewed-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Reviewed-by: Ganapathi Bhat <gbhat@marvell.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2017-09-13 14:09:45 -07:00
..
ath ath10k: fix memory leak in rx ring buffer allocation 2017-09-13 14:09:44 -07:00
b43 driver core update for 4.4-rc1 2015-11-04 21:50:37 -08:00
b43legacy debugfs: Pass bool pointer to debugfs_create_bool() 2015-10-04 11:36:07 +01:00
brcm80211 brcmfmac: fix possible buffer overflow in brcmf_cfg80211_mgmt_tx() 2017-07-21 07:44:55 +02:00
cw1200 mac80211: pass block ack session timeout to to driver 2017-05-20 14:27:03 +02:00
hostap hostap: avoid uninitialized variable use in hfa384x_get_rid 2017-04-30 05:49:28 +02:00
ipw2x00 drivers/net: get rid of unnecessary initializations in .get_drvinfo() 2015-10-16 00:24:10 -07:00
iwlegacy mac80211: pass block ack session timeout to to driver 2017-05-20 14:27:03 +02:00
iwlwifi mac80211: pass block ack session timeout to to driver 2017-05-20 14:27:03 +02:00
libertas spi: Drop owner assignment from spi_drivers 2015-10-28 10:30:17 +09:00
libertas_tf
mediatek mac80211: pass block ack session timeout to to driver 2017-05-20 14:27:03 +02:00
mwifiex mwifiex: correct channel stat buffer overflows 2017-09-13 14:09:45 -07:00
orinoco orinoco_usb: return error in ezusb_probe when alloc_orinocodev fails 2015-10-28 20:55:47 +02:00
p54 p54: memset(0) whole array 2017-09-02 07:06:51 +02:00
prism54
realtek rtlwifi: rtl_pci_probe: Fix fail path of _rtl_pci_find_adapter 2017-09-13 14:09:45 -07:00
rsi mac80211: pass block ack session timeout to to driver 2017-05-20 14:27:03 +02:00
rt2x00 mac80211: pass block ack session timeout to to driver 2017-05-20 14:27:03 +02:00
ti wl1251: add a missing spin_lock_init() 2017-09-07 08:34:09 +02:00
zd1211rw
adm8211.c
adm8211.h
airo.c airo: fix scan after SIOCSIWAP (airo_set_wap) 2015-10-28 20:54:39 +02:00
airo.h
airo_cs.c
at76c50x-usb.c
at76c50x-usb.h
atmel.c
atmel.h
atmel_cs.c
atmel_pci.c
Kconfig New driver: rtl8xxxu (mac80211) 2015-10-21 10:53:29 +03:00
mac80211_hwsim.c mac80211_hwsim: Replace bogus hrtimer clockid 2017-07-15 11:57:45 +02:00
mac80211_hwsim.h
Makefile rtlwifi: rtl818x: Move drivers into new realtek directory 2015-10-14 13:33:10 +03:00
mwl8k.c mac80211: pass block ack session timeout to to driver 2017-05-20 14:27:03 +02:00
ray_cs.c
ray_cs.h
rayctl.h
rndis_wlan.c rndis_wlan: fix checking for default value 2015-09-22 16:14:32 -07:00
wl3501.h
wl3501_cs.c
zd1201.c
zd1201.h