From: Reto Schneider Date: Mon, 22 Jun 2020 13:21:11 +0000 (+0200) Subject: rtlwifi: rtl8192cu: Fix deadlock X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=ec89032cd148f8805c5adf5d38f1f382036f5a5c;p=linux.git rtlwifi: rtl8192cu: Fix deadlock Prevent code from calling itself indirectly, causing the driver to hang and consume 100% CPU. Without this fix, the following script can bring down a single CPU system: ``` while true; do rmmod rtl8192cu modprobe rtl8192cu done ``` Signed-off-by: Reto Schneider ACKed-by: Larry Finger Signed-off-by: Kalle Valo Link: https://lore.kernel.org/r/20200622132113.14508-2-code@reto-schneider.ch --- diff --git a/drivers/net/wireless/realtek/rtlwifi/usb.c b/drivers/net/wireless/realtek/rtlwifi/usb.c index c66c6dc003783..d3bbfc0171f69 100644 --- a/drivers/net/wireless/realtek/rtlwifi/usb.c +++ b/drivers/net/wireless/realtek/rtlwifi/usb.c @@ -680,8 +680,10 @@ static void _rtl_usb_cleanup_rx(struct ieee80211_hw *hw) tasklet_kill(&rtlusb->rx_work_tasklet); cancel_work_sync(&rtlpriv->works.lps_change_work); - flush_workqueue(rtlpriv->works.rtl_wq); - destroy_workqueue(rtlpriv->works.rtl_wq); + if (rtlpriv->works.rtl_wq) { + destroy_workqueue(rtlpriv->works.rtl_wq); + rtlpriv->works.rtl_wq = NULL; + } skb_queue_purge(&rtlusb->rx_queue);