ath9k_htc: fix race conditions when stop device
PATCH 1/1 ath9k_htc: fix race conditions when stop device
We do not kill any scheduled tasklets when stopping device, that may cause usage of resources after free. Disable interrupts, kill tasklets and then works in correct order.
Cc stable at kernel.org
Tested-by Sujith <[email protected]>
Signed-off-by Stanislaw Gruszka <[email protected]>
--- drivers/net/wireless/ath/ath9k/htc_drv_init.c | 3 --- drivers/net/wireless/ath/ath9k/htc_drv_main.c | 21 +++++++++++++++------ 2 files changed, 15 insertions(+), 9 deletions(-)
drivers/net/wireless/ath/ath9k/htc_drv_init.c +0 -3
@@ -142,9 +142,6 @@ static void ath9k_deinit_priv(struct ath9k_htc_priv *priv) {ath9k_htc_exit_debug (priv->ah);ath9k_hw_deinit (priv->ah); -tasklet_kill (&priv->swba_tasklet); -tasklet_kill (&priv->rx_tasklet); -tasklet_kill (&priv->tx_tasklet);kfree (priv->ah); priv->ah =NULL ; }
drivers/net/wireless/ath/ath9k/htc_drv_main.c +15 -6
@@ -1026,12 +1026,6 @@ static void ath9k_htc_stop(struct ieee80211_hw *hw)int ret =0 ;u8 cmd_rsp; -/* Cancel all the running timers/work .. */ -cancel_work_sync (&priv->fatal_work); -cancel_work_sync (&priv->ps_work); -cancel_delayed_work_sync (&priv->ath9k_led_blink_work); -ath9k_led_stop_brightness (priv); -mutex_lock (&priv->mutex);if (priv->op_flags &OP_INVALID ) {
@@ -1045,8 +1039,23 @@ static void ath9k_htc_stop(struct ieee80211_hw *hw)WMI_CMD (WMI_DISABLE_INTR_CMDID );WMI_CMD (WMI_DRAIN_TXQ_ALL_CMDID );WMI_CMD (WMI_STOP_RECV_CMDID ); + +tasklet_kill (&priv->swba_tasklet); +tasklet_kill (&priv->rx_tasklet); +tasklet_kill (&priv->tx_tasklet); +skb_queue_purge (&priv->tx_queue); +mutex_unlock (&priv->mutex); + +/* Cancel all the running timers/work .. */ +cancel_work_sync (&priv->fatal_work); +cancel_work_sync (&priv->ps_work); +cancel_delayed_work_sync (&priv->ath9k_led_blink_work); +ath9k_led_stop_brightness (priv); + +mutex_lock (&priv->mutex); +/* Remove monitor interface here */ if (ah->opmode ==NL80211_IFTYPE_MONITOR ) {if (ath9k_htc_remove_monitor_interface (priv))
Signature · 1 line
1.7.1