diff options
author | Emmanuel Grumbach <emmanuel.grumbach@intel.com> | 2017-06-08 14:00:49 +0300 |
---|---|---|
committer | Sasha Levin <alexander.levin@verizon.com> | 2017-06-26 05:02:21 +0300 |
commit | 1a8dacfbbbe76969e766e20f8d2bfe9810471781 (patch) | |
tree | a6701e141854374596497a709280daf130877253 | |
parent | 61df07cce8eba07e3b40c09d16a51e2204f7536f (diff) | |
download | linux-1a8dacfbbbe76969e766e20f8d2bfe9810471781.tar.xz |
mac80211: don't look at the PM bit of BAR frames
[ Upstream commit 769dc04db3ed8484798aceb015b94deacc2ba557 ]
When a peer sends a BAR frame with PM bit clear, we should
not modify its PM state as madated by the spec in
802.11-20012 10.2.1.2.
Cc: stable@vger.kernel.org
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
-rw-r--r-- | net/mac80211/rx.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c index 06d1732e2094..0d58ee4a39e7 100644 --- a/net/mac80211/rx.c +++ b/net/mac80211/rx.c @@ -1418,12 +1418,16 @@ ieee80211_rx_h_sta_process(struct ieee80211_rx_data *rx) */ if (!(sta->local->hw.flags & IEEE80211_HW_AP_LINK_PS) && !ieee80211_has_morefrags(hdr->frame_control) && + !ieee80211_is_back_req(hdr->frame_control) && !(status->rx_flags & IEEE80211_RX_DEFERRED_RELEASE) && (rx->sdata->vif.type == NL80211_IFTYPE_AP || rx->sdata->vif.type == NL80211_IFTYPE_AP_VLAN) && - /* PM bit is only checked in frames where it isn't reserved, + /* + * PM bit is only checked in frames where it isn't reserved, * in AP mode it's reserved in non-bufferable management frames * (cf. IEEE 802.11-2012 8.2.4.1.7 Power Management field) + * BAR frames should be ignored as specified in + * IEEE 802.11-2012 10.2.1.2. */ (!ieee80211_is_mgmt(hdr->frame_control) || ieee80211_is_bufferable_mmpdu(hdr->frame_control))) { |