aboutsummaryrefslogtreecommitdiffstats
path: root/package/mac80211/patches
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2010-07-23 01:54:27 +0000
committerFelix Fietkau <nbd@openwrt.org>2010-07-23 01:54:27 +0000
commit90a71cd32671a302566d627281e7b4b4f3d4280d (patch)
tree37739cba6b3e0e3ac1fc455a35bb9adb8f90ad53 /package/mac80211/patches
parent52646b63b11bff34d9d7b5208ec81aad5bd7f966 (diff)
downloadupstream-90a71cd32671a302566d627281e7b4b4f3d4280d.tar.gz
upstream-90a71cd32671a302566d627281e7b4b4f3d4280d.tar.bz2
upstream-90a71cd32671a302566d627281e7b4b4f3d4280d.zip
ath9k: fix another buffer leak in the aggregation code
SVN-Revision: 22360
Diffstat (limited to 'package/mac80211/patches')
-rw-r--r--package/mac80211/patches/520-ath9k_leak_fix.patch32
1 files changed, 32 insertions, 0 deletions
diff --git a/package/mac80211/patches/520-ath9k_leak_fix.patch b/package/mac80211/patches/520-ath9k_leak_fix.patch
new file mode 100644
index 0000000000..acf7efd87f
--- /dev/null
+++ b/package/mac80211/patches/520-ath9k_leak_fix.patch
@@ -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)