]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
mac80211: Fix Public Action frame RX in AP mode
authorJouni Malinen <jouni@qca.qualcomm.com>
Mon, 29 Feb 2016 22:29:00 +0000 (00:29 +0200)
committerSasha Levin <sasha.levin@oracle.com>
Tue, 22 Mar 2016 15:10:26 +0000 (11:10 -0400)
[ 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>
net/mac80211/rx.c

index 3244a0074d60ad93e64390a5755c29f8dc655f5f..d4b08d87537c5996c99879e5b4b00a9976f275b0 100644 (file)
@@ -3377,6 +3377,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;
                }