Skip to contentSkip to conversation

iwlwifi: add missing rcu_read_lock

PATCH In review Johannes Berg 3 participants 5 messages Jun 7, 2010 – Jun 8, 2010 Networking drivers (wireless)

lore
Share & tools
lore

Johannes Berg

author maintainer
#0 lore raw

PATCH 1/1 iwlwifi: add missing rcu_read_lock

From: Johannes Berg <[email protected]>

Using ieee80211_find_sta() needs to be under
RCU read lock, which iwlwifi currently misses,
so fix it.

---
 drivers/net/wireless/iwlwifi/iwl-agn-tx.c |    2 ++
 1 file changed, 2 insertions(+)
drivers/net/wireless/iwlwifi/iwl-agn-tx.c +2 -0
@@ -1146,6 +1146,7 @@ static void iwlagn_tx_status(struct iwl_
 	struct ieee80211_sta *sta;
 	struct iwl_station_priv *sta_priv;
 
+	rcu_read_lock();
 	sta = ieee80211_find_sta(priv->vif, hdr->addr1);
 	if (sta) {
 		sta_priv = (void *)sta->drv_priv;
@@ -1154,6 +1155,7 @@ static void iwlagn_tx_status(struct iwl_
 		    atomic_dec_return(&sta_priv->pending_frames) == 0)
 			ieee80211_sta_block_awake(priv->hw, sta, false);
 	}
+	rcu_read_unlock();
 
 	ieee80211_tx_status_irqsafe(priv->hw, skb);
 }
#1 lore raw
Quoted 27 lines · Johannes Berg

From: Johannes Berg <[email protected]>

Using ieee80211_find_sta() needs to be under
RCU read lock, which iwlwifi currently misses,
so fix it.

---
 drivers/net/wireless/iwlwifi/iwl-agn-tx.c |    2 ++

 1 file changed, 2 insertions(+)
drivers/net/wireless/iwlwifi/iwl-agn-tx.c  2010-06-07 21:18:04.000000000 +0200 renamed from drivers/net/wireless/iwlwifi/iwl-agn-tx.c     2010-06-07 21:17:56.000000000 +0200 +1 -0
@@ -1146,6 +1146,7 @@ static void iwlagn_tx_status(struct iwl_
        struct ieee80211_sta *sta;
        struct iwl_station_priv *sta_priv;
 
+       rcu_read_lock();
        sta = ieee80211_find_sta(priv->vif, hdr->addr1);
        if (sta) {
                sta_priv = (void *)sta->drv_priv;

drivers/net/wireless/iwlwifi/iwl-agn-tx.c  2010-06-07 21:18:04.000000000 +0200 static void iwlagn_tx_status(struct iwl_ · line 1161

Quoted 7 lines
drivers/net/wireless/iwlwifi/iwl-agn-tx.c  2010-06-07 21:18:04.000000000 +0200 renamed from drivers/net/wireless/iwlwifi/iwl-agn-tx.c     2010-06-07 21:17:56.000000000 +0200 +1 -0
@@ -1154,6 +1155,7 @@ static void iwlagn_tx_status(struct iwl_
                    atomic_dec_return(&sta_priv->pending_frames) == 0)
                        ieee80211_sta_block_awake(priv->hw, sta, false);
        }
+       rcu_read_unlock();
 
        ieee80211_tx_status_irqsafe(priv->hw, skb);
  }

Unclean patch application - is this to be expected?

patching file drivers/net/wireless/iwlwifi/iwl-agn-tx.c Hunk #1 succeeded at 1125 (offset -21 lines). Hunk #2 succeeded at 1134 (offset -21 lines).

author maintainer
#2 lore raw
Quoted 24 lines · Miles Lane
Quoted 14 lines
drivers/net/wireless/iwlwifi/iwl-agn-tx.c 2010-06-07 21:18:04.000000000 +0200 renamed from drivers/net/wireless/iwlwifi/iwl-agn-tx.c 2010-06-07 21:17:56.000000000 +0200 +1 -0
@@ -1146,6 +1146,7 @@ static void iwlagn_tx_status(struct iwl_
       struct ieee80211_sta *sta;
       struct iwl_station_priv *sta_priv;
 
+       rcu_read_lock();
       sta = ieee80211_find_sta(priv->vif, hdr->addr1);
       if (sta) {
               sta_priv = (void *)sta->drv_priv;

drivers/net/wireless/iwlwifi/iwl-agn-tx.c 2010-06-07 21:18:04.000000000 +0200 static void iwlagn_tx_status(struct iwl_ · line 1161

Quoted 7 lines
drivers/net/wireless/iwlwifi/iwl-agn-tx.c 2010-06-07 21:18:04.000000000 +0200 renamed from drivers/net/wireless/iwlwifi/iwl-agn-tx.c 2010-06-07 21:17:56.000000000 +0200 +1 -0
@@ -1154,6 +1155,7 @@ static void iwlagn_tx_status(struct iwl_
                   atomic_dec_return(&sta_priv->pending_frames) == 0)
                       ieee80211_sta_block_awake(priv->hw, sta, false);
       }
+       rcu_read_unlock();
 
       ieee80211_tx_status_irqsafe(priv->hw, skb);
 }

Unclean patch application - is this to be expected?

Quoted 3 lines

patching file drivers/net/wireless/iwlwifi/iwl-agn-tx.c Hunk #1 succeeded at 1125 (offset -21 lines). Hunk #2 succeeded at 1134 (offset -21 lines).

Didn't pay much attention what tree I generated it against since I knew this code hasn't changed in a while ... so the offset looks perfectly fine. Fuzz I'd have been surprised about :)

johannes