summaryrefslogtreecommitdiff
path: root/net/mac80211
diff options
context:
space:
mode:
authorJouni Malinen <jouni@qca.qualcomm.com>2016-03-01 01:29:00 +0300
committerSasha Levin <sasha.levin@oracle.com>2016-03-22 18:11:07 +0300
commit1c767580d56097105f1e45bc9b71582599ea5638 (patch)
tree33f7b0de02197ce67fd72a4fd5fd50eaefe6fcf3 /net/mac80211
parent0e774b0d3d6c8f2c85b7e66bb7fdacdf065da7ee (diff)
downloadlinux-1c767580d56097105f1e45bc9b71582599ea5638.tar.xz
mac80211: Fix Public Action frame RX in AP mode
[ Upstream commit 1ec7bae8bec9b72e347e01330c745ab5cdd66f0e ] Public Action frames use special rules for how the BSSID field (Address 3) is set. A wildcard BSSID is used in cases where the transmitter and recipient are not members of the same BSS. As such, we need to accept Public Action frames with wildcard BSSID. Commit db8e17324553 ("mac80211: ignore frames between TDLS peers when operating as AP") added a rule that drops Action frames to TDLS-peers based on an Action frame having different DA (Address 1) and BSSID (Address 3) values. This is not correct since it misses the possibility of BSSID being a wildcard BSSID in which case the Address 1 would not necessarily match. Fix this by allowing mac80211 to accept wildcard BSSID in an Action frame when in AP mode. Fixes: db8e17324553 ("mac80211: ignore frames between TDLS peers when operating as AP") Cc: stable@vger.kernel.org Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: Sasha Levin <sasha.levin@oracle.com>
Diffstat (limited to 'net/mac80211')
-rw-r--r--net/mac80211/rx.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
index a578c5717112..074cdfa04cc4 100644
--- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c
@@ -3171,6 +3171,7 @@ static bool prepare_for_handlers(struct ieee80211_rx_data *rx,
return false;
/* ignore action frames to TDLS-peers */
if (ieee80211_is_action(hdr->frame_control) &&
+ !is_broadcast_ether_addr(bssid) &&
!ether_addr_equal(bssid, hdr->addr1))
return false;
}