ath9k: fix another buffer leak in the aggregation code
authorFelix Fietkau <nbd@openwrt.org>
Fri, 23 Jul 2010 01:54:27 +0000 (01:54 +0000)
committerFelix Fietkau <nbd@openwrt.org>
Fri, 23 Jul 2010 01:54:27 +0000 (01:54 +0000)
SVN-Revision: 22360

package/mac80211/patches/520-ath9k_leak_fix.patch [new file with mode: 0644]

diff --git a/package/mac80211/patches/520-ath9k_leak_fix.patch b/package/mac80211/patches/520-ath9k_leak_fix.patch
new file mode 100644 (file)
index 0000000..acf7efd
--- /dev/null
@@ -0,0 +1,32 @@
+--- a/drivers/net/wireless/ath/ath9k/xmit.c
++++ b/drivers/net/wireless/ath/ath9k/xmit.c
+@@ -518,6 +518,14 @@ static void ath_tx_complete_aggr(struct 
+               bf = bf_next;
+       }
++      /* prepend un-acked frames to the beginning of the pending frame queue */
++      if (!list_empty(&bf_pending)) {
++              spin_lock_bh(&txq->axq_lock);
++              list_splice(&bf_pending, &tid->buf_q);
++              ath_tx_queue_tid(txq, tid);
++              spin_unlock_bh(&txq->axq_lock);
++      }
++
+       if (tid->state & AGGR_CLEANUP) {
+               if (tid->baw_head == tid->baw_tail) {
+                       tid->state &= ~AGGR_ADDBA_COMPLETE;
+@@ -530,14 +538,6 @@ static void ath_tx_complete_aggr(struct 
+               return;
+       }
+-      /* prepend un-acked frames to the beginning of the pending frame queue */
+-      if (!list_empty(&bf_pending)) {
+-              spin_lock_bh(&txq->axq_lock);
+-              list_splice(&bf_pending, &tid->buf_q);
+-              ath_tx_queue_tid(txq, tid);
+-              spin_unlock_bh(&txq->axq_lock);
+-      }
+-
+       rcu_read_unlock();
+       if (needreset)