Skip to content

Commit

Permalink
iwlwifi: fix possible recursive locking deadlock
Browse files Browse the repository at this point in the history
commit f84b29e
Author: Johannes Berg <johannes.berg@intel.com>
Date:   Tue May 18 02:29:13 2010 -0700

    iwlwifi: queue user-initiated scan when doing internal scan

introduced a potential deadlock because it calls
ieee80211_scan_completed() with the priv->mutex
held, but mac80211 may call back into iwlwifi
which would lead to recursive locking. Move this
out from under the mutex.

Cc: stable@kernel.org
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
  • Loading branch information
Johannes Berg authored and John W. Linville committed Aug 4, 2010
1 parent 3ff1c25 commit 02f5ba5
Showing 1 changed file with 5 additions and 1 deletion.
6 changes: 5 additions & 1 deletion drivers/net/wireless/iwlwifi/iwl-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -2000,6 +2000,7 @@ void iwl_mac_remove_interface(struct ieee80211_hw *hw,
struct ieee80211_vif *vif)
{
struct iwl_priv *priv = hw->priv;
bool scan_completed = false;

IWL_DEBUG_MAC80211(priv, "enter\n");

Expand All @@ -2013,14 +2014,17 @@ void iwl_mac_remove_interface(struct ieee80211_hw *hw,
if (priv->vif == vif) {
priv->vif = NULL;
if (priv->scan_vif == vif) {
ieee80211_scan_completed(priv->hw, true);
scan_completed = true;
priv->scan_vif = NULL;
priv->scan_request = NULL;
}
memset(priv->bssid, 0, ETH_ALEN);
}
mutex_unlock(&priv->mutex);

if (scan_completed)
ieee80211_scan_completed(priv->hw, true);

IWL_DEBUG_MAC80211(priv, "leave\n");

}
Expand Down

0 comments on commit 02f5ba5

Please sign in to comment.