|
@@ -4,7 +4,7 @@
|
|
* Copyright 2006-2007 Jiri Benc <jbenc@suse.cz>
|
|
* Copyright 2006-2007 Jiri Benc <jbenc@suse.cz>
|
|
* Copyright 2007-2010 Johannes Berg <johannes@sipsolutions.net>
|
|
* Copyright 2007-2010 Johannes Berg <johannes@sipsolutions.net>
|
|
* Copyright 2013-2014 Intel Mobile Communications GmbH
|
|
* Copyright 2013-2014 Intel Mobile Communications GmbH
|
|
- * Copyright(c) 2015 - 2016 Intel Deutschland GmbH
|
|
|
|
|
|
+ * Copyright(c) 2015 - 2017 Intel Deutschland GmbH
|
|
*
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2 as
|
|
* it under the terms of the GNU General Public License version 2 as
|
|
@@ -1034,6 +1034,18 @@ static bool ieee80211_sta_manage_reorder_buf(struct ieee80211_sub_if_data *sdata
|
|
buf_size = tid_agg_rx->buf_size;
|
|
buf_size = tid_agg_rx->buf_size;
|
|
head_seq_num = tid_agg_rx->head_seq_num;
|
|
head_seq_num = tid_agg_rx->head_seq_num;
|
|
|
|
|
|
|
|
+ /*
|
|
|
|
+ * If the current MPDU's SN is smaller than the SSN, it shouldn't
|
|
|
|
+ * be reordered.
|
|
|
|
+ */
|
|
|
|
+ if (unlikely(!tid_agg_rx->started)) {
|
|
|
|
+ if (ieee80211_sn_less(mpdu_seq_num, head_seq_num)) {
|
|
|
|
+ ret = false;
|
|
|
|
+ goto out;
|
|
|
|
+ }
|
|
|
|
+ tid_agg_rx->started = true;
|
|
|
|
+ }
|
|
|
|
+
|
|
/* frame with out of date sequence number */
|
|
/* frame with out of date sequence number */
|
|
if (ieee80211_sn_less(mpdu_seq_num, head_seq_num)) {
|
|
if (ieee80211_sn_less(mpdu_seq_num, head_seq_num)) {
|
|
dev_kfree_skb(skb);
|
|
dev_kfree_skb(skb);
|