linux/drivers/net/wireless
Brian Norris 4a79aa17d5 mwifiex: resolve races between async FW init (failure) and device removal
It's possible for the FW init sequence to fail, which will trigger a
device cleanup sequence in mwifiex_fw_dpc(). This sequence can race with
device suspend() or remove() (e.g., reboot or unbind), and can trigger
use-after-free issues. Currently, this driver attempts (poorly) to
synchronize remove() using a semaphore, but it doesn't protect some of
the critical sections properly. Particularly, we grab a pointer to the
adapter struct (card->adapter) without checking if it's being freed or
not. We later do a NULL check on the adapter, but that doesn't work if
the adapter was freed.

Also note that the PCIe interface driver doesn't ever set card->adapter
to NULL, so even if we get the synchronization right, we still might try
to redo the cleanup in ->remove(), even if the FW init failure sequence
already did it.

This patch replaces the static semaphore with a per-device completion
struct, and uses that completion to synchronize the remove() thread with
the mwifiex_fw_dpc(). A future patch will utilize this completion to
synchronize the suspend() thread as well.

Signed-off-by: Brian Norris <briannorris@chromium.org>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
2016-11-19 09:18:48 +02:00
..
admtek cfg80211: remove enum ieee80211_band 2016-04-12 15:56:15 +02:00
ath wireless: fix bogus maybe-uninitialized warning 2016-11-17 08:46:38 +02:00
atmel net: use core MTU range checking in wireless drivers 2016-10-20 14:51:08 -04:00
broadcom brcmfmac: print name of connect status event 2016-11-17 08:44:35 +02:00
cisco net: use core MTU range checking in wireless drivers 2016-10-20 14:51:08 -04:00
intel wireless: fix bogus maybe-uninitialized warning 2016-11-17 08:46:38 +02:00
intersil wireless: fix bogus maybe-uninitialized warning 2016-11-17 08:46:38 +02:00
marvell mwifiex: resolve races between async FW init (failure) and device removal 2016-11-19 09:18:48 +02:00
mediatek mt7601u: use linux/bitfield.h 2016-09-09 12:09:25 +03:00
ralink rt2x00: add support for mac addr from device tree 2016-11-09 03:28:31 +02:00
realtek rtlwifi: Use dev_kfree_skb_irq instead of kfree_skb 2016-11-17 08:48:33 +02:00
rsi rsi: Host to device command frame vap_capabilites modified with new field vap status 2016-11-17 08:43:52 +02:00
st cw1200: fix bogus maybe-uninitialized warning 2016-11-17 08:47:58 +02:00
ti wlcore: Allow scans when in AP mode 2016-11-17 08:43:05 +02:00
zydas net: deprecate eth_change_mtu, remove usage 2016-10-13 09:36:57 -04:00
Kconfig
mac80211_hwsim.c net: deprecate eth_change_mtu, remove usage 2016-10-13 09:36:57 -04:00
mac80211_hwsim.h drivers/wireless: use nla_put_u64_64bit() 2016-04-26 12:00:48 -04:00
Makefile
ray_cs.c net: deprecate eth_change_mtu, remove usage 2016-10-13 09:36:57 -04:00
ray_cs.h
rayctl.h
rndis_wlan.c nl80211: support beacon report scanning 2016-07-06 14:51:31 +02:00
wl3501_cs.c net: deprecate eth_change_mtu, remove usage 2016-10-13 09:36:57 -04:00
wl3501.h