diff options
Diffstat (limited to 'net')
-rw-r--r-- | net/mac80211/rx.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c index 2a85fdfebde2..7d226417ef46 100644 --- a/net/mac80211/rx.c +++ b/net/mac80211/rx.c | |||
@@ -2797,10 +2797,17 @@ static int prepare_for_handlers(struct ieee80211_rx_data *rx, | |||
2797 | return 0; | 2797 | return 0; |
2798 | } else if (!ieee80211_bssid_match(bssid, | 2798 | } else if (!ieee80211_bssid_match(bssid, |
2799 | sdata->vif.addr)) { | 2799 | sdata->vif.addr)) { |
2800 | /* | ||
2801 | * Accept public action frames even when the | ||
2802 | * BSSID doesn't match, this is used for P2P | ||
2803 | * and location updates. Note that mac80211 | ||
2804 | * itself never looks at these frames. | ||
2805 | */ | ||
2806 | if (!(status->rx_flags & IEEE80211_RX_IN_SCAN) && | ||
2807 | ieee80211_is_public_action(hdr, skb->len)) | ||
2808 | return 1; | ||
2800 | if (!(status->rx_flags & IEEE80211_RX_IN_SCAN) && | 2809 | if (!(status->rx_flags & IEEE80211_RX_IN_SCAN) && |
2801 | !ieee80211_is_beacon(hdr->frame_control) && | 2810 | !ieee80211_is_beacon(hdr->frame_control)) |
2802 | !(ieee80211_is_action(hdr->frame_control) && | ||
2803 | sdata->vif.p2p)) | ||
2804 | return 0; | 2811 | return 0; |
2805 | status->rx_flags &= ~IEEE80211_RX_RA_MATCH; | 2812 | status->rx_flags &= ~IEEE80211_RX_RA_MATCH; |
2806 | } | 2813 | } |