diff options
author | Felix Fietkau <nbd@openwrt.org> | 2010-07-23 01:54:27 +0000 |
---|---|---|
committer | Felix Fietkau <nbd@openwrt.org> | 2010-07-23 01:54:27 +0000 |
commit | 90a71cd32671a302566d627281e7b4b4f3d4280d (patch) | |
tree | 37739cba6b3e0e3ac1fc455a35bb9adb8f90ad53 /package/mac80211/patches | |
parent | 52646b63b11bff34d9d7b5208ec81aad5bd7f966 (diff) | |
download | upstream-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.patch | 32 |
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) |