aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211/rx.c
diff options
context:
space:
mode:
authorThomas Pedersen <thomas@cozybit.com>2011-11-04 00:11:12 -0400
committerJohn W. Linville <linville@tuxdriver.com>2011-11-09 16:05:48 -0500
commit660c6a449a714cf770641134124f2aae49ed8ab0 (patch)
tree63db5096b73dc8826a51b40b6696c2ffbf633306 /net/mac80211/rx.c
parent6cc00d545a21ed26696f3bda865ebf11eccbf2b5 (diff)
mac80211: check if frame is really part of this BA
There was an an implicit assumption that any QoS data frame received from a STA/TID with an active BA session was sent to this vif as part of a BA. This is not true if IFF_PROMISC is enabled and the frame was destined for a different peer, for example. Don't treat these frames as part of a BA from the sending STA. Signed-off-by: Thomas Pedersen <thomas@cozybit.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/mac80211/rx.c')
-rw-r--r--net/mac80211/rx.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
index 72c1eb4eb451..04c1b05ba339 100644
--- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c
@@ -744,6 +744,7 @@ static void ieee80211_rx_reorder_ampdu(struct ieee80211_rx_data *rx)
744 struct ieee80211_local *local = rx->local; 744 struct ieee80211_local *local = rx->local;
745 struct ieee80211_hw *hw = &local->hw; 745 struct ieee80211_hw *hw = &local->hw;
746 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data; 746 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
747 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
747 struct sta_info *sta = rx->sta; 748 struct sta_info *sta = rx->sta;
748 struct tid_ampdu_rx *tid_agg_rx; 749 struct tid_ampdu_rx *tid_agg_rx;
749 u16 sc; 750 u16 sc;
@@ -777,6 +778,10 @@ static void ieee80211_rx_reorder_ampdu(struct ieee80211_rx_data *rx)
777 ack_policy != IEEE80211_QOS_CTL_ACK_POLICY_NORMAL) 778 ack_policy != IEEE80211_QOS_CTL_ACK_POLICY_NORMAL)
778 goto dont_reorder; 779 goto dont_reorder;
779 780
781 /* not actually part of this BA session */
782 if (!(status->rx_flags & IEEE80211_RX_RA_MATCH))
783 goto dont_reorder;
784
780 /* new, potentially un-ordered, ampdu frame - process it */ 785 /* new, potentially un-ordered, ampdu frame - process it */
781 786
782 /* reset session timer */ 787 /* reset session timer */