diff options
Diffstat (limited to 'net/mac80211/rx.c')
-rw-r--r-- | net/mac80211/rx.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c index d83334bbb245..6289525c0998 100644 --- a/net/mac80211/rx.c +++ b/net/mac80211/rx.c | |||
@@ -2254,6 +2254,10 @@ ieee80211_rx_h_mgmt(struct ieee80211_rx_data *rx) | |||
2254 | break; | 2254 | break; |
2255 | case cpu_to_le16(IEEE80211_STYPE_DEAUTH): | 2255 | case cpu_to_le16(IEEE80211_STYPE_DEAUTH): |
2256 | case cpu_to_le16(IEEE80211_STYPE_DISASSOC): | 2256 | case cpu_to_le16(IEEE80211_STYPE_DISASSOC): |
2257 | if (is_multicast_ether_addr(mgmt->da) && | ||
2258 | !is_broadcast_ether_addr(mgmt->da)) | ||
2259 | return RX_DROP_MONITOR; | ||
2260 | |||
2257 | /* process only for station */ | 2261 | /* process only for station */ |
2258 | if (sdata->vif.type != NL80211_IFTYPE_STATION) | 2262 | if (sdata->vif.type != NL80211_IFTYPE_STATION) |
2259 | return RX_DROP_MONITOR; | 2263 | return RX_DROP_MONITOR; |
@@ -2747,6 +2751,7 @@ static void __ieee80211_rx_handle_packet(struct ieee80211_hw *hw, | |||
2747 | 2751 | ||
2748 | if (ieee80211_prepare_and_rx_handle(&rx, skb, true)) | 2752 | if (ieee80211_prepare_and_rx_handle(&rx, skb, true)) |
2749 | return; | 2753 | return; |
2754 | goto out; | ||
2750 | } | 2755 | } |
2751 | } | 2756 | } |
2752 | 2757 | ||
@@ -2786,6 +2791,7 @@ static void __ieee80211_rx_handle_packet(struct ieee80211_hw *hw, | |||
2786 | return; | 2791 | return; |
2787 | } | 2792 | } |
2788 | 2793 | ||
2794 | out: | ||
2789 | dev_kfree_skb(skb); | 2795 | dev_kfree_skb(skb); |
2790 | } | 2796 | } |
2791 | 2797 | ||