diff options
-rw-r--r-- | sys/net80211/ieee80211_input.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/sys/net80211/ieee80211_input.c b/sys/net80211/ieee80211_input.c index 2517edd..9c1405f9 100644 --- a/sys/net80211/ieee80211_input.c +++ b/sys/net80211/ieee80211_input.c @@ -2559,6 +2559,11 @@ ieee80211_recv_mgmt(struct ieee80211com *ic, struct mbuf *m0, ic->ic_stats.is_rx_deauth++; IEEE80211_NODE_STAT(ni, rx_deauth); + if (!IEEE80211_ADDR_EQ(wh->i_addr1, ic->ic_myaddr)) { + /* NB: can happen when in promiscuous mode */ + ic->ic_stats.is_rx_mgtdiscard++; + break; + } IEEE80211_DPRINTF(ic, IEEE80211_MSG_AUTH, "[%s] recv deauthenticate (reason %d)\n", ether_sprintf(ni->ni_macaddr), reason); @@ -2596,6 +2601,11 @@ ieee80211_recv_mgmt(struct ieee80211com *ic, struct mbuf *m0, ic->ic_stats.is_rx_disassoc++; IEEE80211_NODE_STAT(ni, rx_disassoc); + if (!IEEE80211_ADDR_EQ(wh->i_addr1, ic->ic_myaddr)) { + /* NB: can happen when in promiscuous mode */ + ic->ic_stats.is_rx_mgtdiscard++; + break; + } IEEE80211_DPRINTF(ic, IEEE80211_MSG_ASSOC, "[%s] recv disassociate (reason %d)\n", ether_sprintf(ni->ni_macaddr), reason); |