diff options
author | Emmanuel Grumbach <emmanuel.grumbach@intel.com> | 2018-12-03 14:16:07 -0500 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2018-12-05 06:34:49 -0500 |
commit | 990d71846a0b7281bd933c34d734e6afc7408e7e (patch) | |
tree | 2d6d7e5336f8da1035ca3d92fa14dc1d2abb8ba3 /net | |
parent | 9ec1190d065998650fd9260dea8cf3e1f56c0e8c (diff) |
mac80211: ignore NullFunc frames in the duplicate detection
NullFunc packets should never be duplicate just like
QoS-NullFunc packets.
We saw a client that enters / exits power save with
NullFunc frames (and not with QoS-NullFunc) despite the
fact that the association supports HT.
This specific client also re-uses a non-zero sequence number
for different NullFunc frames.
At some point, the client had to send a retransmission of
the NullFunc frame and we dropped it, leading to a
misalignment in the power save state.
Fix this by never consider a NullFunc frame as duplicate,
just like we do for QoS NullFunc frames.
This fixes https://bugzilla.kernel.org/show_bug.cgi?id=201449
CC: <stable@vger.kernel.org>
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net')
-rw-r--r-- | net/mac80211/rx.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c index a69ecfb212ed..428f7ad5f9b5 100644 --- a/net/mac80211/rx.c +++ b/net/mac80211/rx.c | |||
@@ -1403,6 +1403,7 @@ ieee80211_rx_h_check_dup(struct ieee80211_rx_data *rx) | |||
1403 | return RX_CONTINUE; | 1403 | return RX_CONTINUE; |
1404 | 1404 | ||
1405 | if (ieee80211_is_ctl(hdr->frame_control) || | 1405 | if (ieee80211_is_ctl(hdr->frame_control) || |
1406 | ieee80211_is_nullfunc(hdr->frame_control) || | ||
1406 | ieee80211_is_qos_nullfunc(hdr->frame_control) || | 1407 | ieee80211_is_qos_nullfunc(hdr->frame_control) || |
1407 | is_multicast_ether_addr(hdr->addr1)) | 1408 | is_multicast_ether_addr(hdr->addr1)) |
1408 | return RX_CONTINUE; | 1409 | return RX_CONTINUE; |