diff options
author | sam <sam@FreeBSD.org> | 2007-03-11 06:35:27 +0000 |
---|---|---|
committer | sam <sam@FreeBSD.org> | 2007-03-11 06:35:27 +0000 |
commit | 679daf849749d409c8c49c8cc5e58093b228968f (patch) | |
tree | c09995cd379208f858f56ec1ff6065ed3ceb5a53 /sys/net80211 | |
parent | 0ea08cfa346654243d5c3ea9e5907f58342aed0d (diff) | |
download | FreeBSD-src-679daf849749d409c8c49c8cc5e58093b228968f.zip FreeBSD-src-679daf849749d409c8c49c8cc5e58093b228968f.tar.gz |
discard deauth+disassoc frames that are not destined for us; these
can be received when the interface is in promisc mode
Reviewed by: sephe
Obtained from: netbsd
Diffstat (limited to 'sys/net80211')
-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); |