| From b4e9c3ec67fe430aa0d163e2e76d11360683520a Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Fri, 19 Oct 2018 23:08:43 +0300 |
| Subject: ath9k: Fix a locking bug in ath9k_add_interface() |
| |
| From: Dan Carpenter <dan.carpenter@oracle.com> |
| |
| [ Upstream commit 461cf036057477805a8a391e5fd0f5264a5e56a8 ] |
| |
| We tried to revert commit d9c52fd17cb4 ("ath9k: fix tx99 with monitor |
| mode interface") but accidentally missed part of the locking change. |
| |
| The lock has to be held earlier so that we're holding it when we do |
| "sc->tx99_vif = vif;" and also there in the current code there is a |
| stray unlock before we have taken the lock. |
| |
| Fixes: 6df0580be8bc ("ath9k: add back support for using active monitor interfaces for tx99") |
| Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com> |
| Signed-off-by: Kalle Valo <kvalo@codeaurora.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/net/wireless/ath/ath9k/main.c | 3 +-- |
| 1 file changed, 1 insertion(+), 2 deletions(-) |
| |
| diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c |
| index c85f613e8ceb5..74f98bbaea889 100644 |
| --- a/drivers/net/wireless/ath/ath9k/main.c |
| +++ b/drivers/net/wireless/ath/ath9k/main.c |
| @@ -1251,6 +1251,7 @@ static int ath9k_add_interface(struct ieee80211_hw *hw, |
| struct ath_vif *avp = (void *)vif->drv_priv; |
| struct ath_node *an = &avp->mcast_node; |
| |
| + mutex_lock(&sc->mutex); |
| if (IS_ENABLED(CONFIG_ATH9K_TX99)) { |
| if (sc->cur_chan->nvifs >= 1) { |
| mutex_unlock(&sc->mutex); |
| @@ -1259,8 +1260,6 @@ static int ath9k_add_interface(struct ieee80211_hw *hw, |
| sc->tx99_vif = vif; |
| } |
| |
| - mutex_lock(&sc->mutex); |
| - |
| ath_dbg(common, CONFIG, "Attach a VIF of type: %d\n", vif->type); |
| sc->cur_chan->nvifs++; |
| |
| -- |
| 2.20.1 |
| |