| From 1ec7bae8bec9b72e347e01330c745ab5cdd66f0e Mon Sep 17 00:00:00 2001 |
| From: Jouni Malinen <jouni@qca.qualcomm.com> |
| Date: Tue, 1 Mar 2016 00:29:00 +0200 |
| Subject: mac80211: Fix Public Action frame RX in AP mode |
| |
| From: Jouni Malinen <jouni@qca.qualcomm.com> |
| |
| commit 1ec7bae8bec9b72e347e01330c745ab5cdd66f0e upstream. |
| |
| 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") |
| Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com> |
| Signed-off-by: Johannes Berg <johannes.berg@intel.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| net/mac80211/rx.c | 1 + |
| 1 file changed, 1 insertion(+) |
| |
| --- a/net/mac80211/rx.c |
| +++ b/net/mac80211/rx.c |
| @@ -3385,6 +3385,7 @@ static bool ieee80211_accept_frame(struc |
| 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; |
| } |