ath9k_hif_usb_probe() requests firmware asynchronically and there is some initialization postponed till firmware is ready. In particular, ath9k_hif_usb_firmware_cb() callback initializes hif_dev->tx.tx_buf and hif_dev->tx.tx_pending lists. At the same time, ath9k_hif_usb_suspend() iterates that lists through ath9k_hif_usb_dealloc_urbs(). If suspend happens before request_firmware_nowait() callback is called, it can lead to oops. Similar issue could be in ath9k_hif_usb_disconnect(), but it is prevented using hif_dev->fw_done completion and HIF_USB_READY flag. The patch extends this approach to suspend() as well. Found by Linux Driver Verification project (linuxtesting.org). Signed-off-by: Alexey Khoroshilov <khoroshilov@ispras.ru> Signed-off-by: John W. Linville <linville@tuxdriver.com> |
||
|---|---|---|
| .. | ||
| ath | ||
| b43 | ||
| b43legacy | ||
| brcm80211 | ||
| cw1200 | ||
| hostap | ||
| ipw2x00 | ||
| iwlegacy | ||
| iwlwifi | ||
| libertas | ||
| libertas_tf | ||
| mwifiex | ||
| orinoco | ||
| p54 | ||
| prism54 | ||
| rt2x00 | ||
| rtl818x | ||
| rtlwifi | ||
| ti | ||
| zd1211rw | ||
| adm8211.c | ||
| adm8211.h | ||
| airo_cs.c | ||
| airo.c | ||
| airo.h | ||
| at76c50x-usb.c | ||
| at76c50x-usb.h | ||
| atmel_cs.c | ||
| atmel_pci.c | ||
| atmel.c | ||
| atmel.h | ||
| Kconfig | ||
| mac80211_hwsim.c | ||
| mac80211_hwsim.h | ||
| Makefile | ||
| mwl8k.c | ||
| ray_cs.c | ||
| ray_cs.h | ||
| rayctl.h | ||
| rndis_wlan.c | ||
| wl3501_cs.c | ||
| wl3501.h | ||
| zd1201.c | ||
| zd1201.h | ||