ath9k: fix another buffer leak in the aggregation code
[openwrt/svn-archive/archive.git] / package / mac80211 / patches / 520-ath9k_leak_fix.patch
1 --- a/drivers/net/wireless/ath/ath9k/xmit.c
2 +++ b/drivers/net/wireless/ath/ath9k/xmit.c
3 @@ -518,6 +518,14 @@ static void ath_tx_complete_aggr(struct
4 bf = bf_next;
5 }
6
7 + /* prepend un-acked frames to the beginning of the pending frame queue */
8 + if (!list_empty(&bf_pending)) {
9 + spin_lock_bh(&txq->axq_lock);
10 + list_splice(&bf_pending, &tid->buf_q);
11 + ath_tx_queue_tid(txq, tid);
12 + spin_unlock_bh(&txq->axq_lock);
13 + }
14 +
15 if (tid->state & AGGR_CLEANUP) {
16 if (tid->baw_head == tid->baw_tail) {
17 tid->state &= ~AGGR_ADDBA_COMPLETE;
18 @@ -530,14 +538,6 @@ static void ath_tx_complete_aggr(struct
19 return;
20 }
21
22 - /* prepend un-acked frames to the beginning of the pending frame queue */
23 - if (!list_empty(&bf_pending)) {
24 - spin_lock_bh(&txq->axq_lock);
25 - list_splice(&bf_pending, &tid->buf_q);
26 - ath_tx_queue_tid(txq, tid);
27 - spin_unlock_bh(&txq->axq_lock);
28 - }
29 -
30 rcu_read_unlock();
31
32 if (needreset)