diff options
author | Rusty Russell <rusty@rustcorp.com.au> | 2013-08-09 13:00:39 +0930 |
---|---|---|
committer | Rusty Russell <rusty@rustcorp.com.au> | 2013-08-09 13:00:39 +0930 |
commit | 11489736177c5930514482b4db7af862d945335d (patch) | |
tree | 8590ec4ba037b79c94982e15922fe50a1f0193a3 /net/mac80211/rx.c | |
parent | 3f0d0c9b47e09d47fcb755fed786a1ee88e110b5 (diff) | |
parent | 6c2580c501c660fdfb506061e016d84570fceba1 (diff) | |
download | talos-op-linux-11489736177c5930514482b4db7af862d945335d.tar.gz talos-op-linux-11489736177c5930514482b4db7af862d945335d.zip |
Merge branch 'master' into virtio-next
The next commit gets conflicts because it relies on patches which were
cc:stable and thus had to be merged into Linus' tree before the coming
merge window. So pull in master now.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Diffstat (limited to 'net/mac80211/rx.c')
-rw-r--r-- | net/mac80211/rx.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c index 23dbcfc69b3b..2c5a79bd3777 100644 --- a/net/mac80211/rx.c +++ b/net/mac80211/rx.c @@ -936,8 +936,14 @@ ieee80211_rx_h_check(struct ieee80211_rx_data *rx) struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data; struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb); - /* Drop duplicate 802.11 retransmissions (IEEE 802.11 Chap. 9.2.9) */ - if (rx->sta && !is_multicast_ether_addr(hdr->addr1)) { + /* + * Drop duplicate 802.11 retransmissions + * (IEEE 802.11-2012: 9.3.2.10 "Duplicate detection and recovery") + */ + if (rx->skb->len >= 24 && rx->sta && + !ieee80211_is_ctl(hdr->frame_control) && + !ieee80211_is_qos_nullfunc(hdr->frame_control) && + !is_multicast_ether_addr(hdr->addr1)) { if (unlikely(ieee80211_has_retry(hdr->frame_control) && rx->sta->last_seq_ctrl[rx->seqno_idx] == hdr->seq_ctrl)) { |