| From de71dc9d0948031595155d11cfefe90086d47350 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Fri, 4 Oct 2019 15:37:05 +0300 |
| Subject: mac80211: accept deauth frames in IBSS mode |
| |
| From: Johannes Berg <johannes.berg@intel.com> |
| |
| [ Upstream commit 95697f9907bfe3eab0ef20265a766b22e27dde64 ] |
| |
| We can process deauth frames and all, but we drop them very |
| early in the RX path today - this could never have worked. |
| |
| Fixes: 2cc59e784b54 ("mac80211: reply to AUTH with DEAUTH if sta allocation fails in IBSS") |
| Signed-off-by: Johannes Berg <johannes.berg@intel.com> |
| Signed-off-by: Luca Coelho <luciano.coelho@intel.com> |
| Link: https://lore.kernel.org/r/20191004123706.15768-2-luca@coelho.fi |
| Signed-off-by: Johannes Berg <johannes.berg@intel.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| net/mac80211/rx.c | 11 ++++++++++- |
| 1 file changed, 10 insertions(+), 1 deletion(-) |
| |
| diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c |
| index 3b423c50ec8fa..74652eb2f90fd 100644 |
| --- a/net/mac80211/rx.c |
| +++ b/net/mac80211/rx.c |
| @@ -3205,9 +3205,18 @@ ieee80211_rx_h_mgmt(struct ieee80211_rx_data *rx) |
| case cpu_to_le16(IEEE80211_STYPE_PROBE_RESP): |
| /* process for all: mesh, mlme, ibss */ |
| break; |
| + case cpu_to_le16(IEEE80211_STYPE_DEAUTH): |
| + if (is_multicast_ether_addr(mgmt->da) && |
| + !is_broadcast_ether_addr(mgmt->da)) |
| + return RX_DROP_MONITOR; |
| + |
| + /* process only for station/IBSS */ |
| + if (sdata->vif.type != NL80211_IFTYPE_STATION && |
| + sdata->vif.type != NL80211_IFTYPE_ADHOC) |
| + return RX_DROP_MONITOR; |
| + break; |
| case cpu_to_le16(IEEE80211_STYPE_ASSOC_RESP): |
| case cpu_to_le16(IEEE80211_STYPE_REASSOC_RESP): |
| - case cpu_to_le16(IEEE80211_STYPE_DEAUTH): |
| case cpu_to_le16(IEEE80211_STYPE_DISASSOC): |
| if (is_multicast_ether_addr(mgmt->da) && |
| !is_broadcast_ether_addr(mgmt->da)) |
| -- |
| 2.20.1 |
| |