diff options
author | Johannes Berg <johannes.berg@intel.com> | 2012-06-27 09:38:56 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2012-06-27 14:48:13 -0400 |
commit | 4b5ebccc40843104d980f0714bc86bfcd5568941 (patch) | |
tree | cbc804eae3cba9399a430f70ae63b077c91136d1 /net | |
parent | 7508b657967cf664b5aa0f6367d05016e7e3bc2a (diff) |
mac80211: correct behaviour on unrecognised action frames
When receiving an "individually addressed" action frame, the
receiver is required to return it to the sender. mac80211
gets this wrong as it also returns group addressed (mcast)
frames to the sender. Fix this and update the reference to
the new 802.11 standards version since things were shuffled
around significantly.
Cc: stable@kernel.org
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net')
-rw-r--r-- | net/mac80211/rx.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c index 7bcecf73aafb..965e6ec0adb6 100644 --- a/net/mac80211/rx.c +++ b/net/mac80211/rx.c | |||
@@ -2455,7 +2455,7 @@ ieee80211_rx_h_action_return(struct ieee80211_rx_data *rx) | |||
2455 | * frames that we didn't handle, including returning unknown | 2455 | * frames that we didn't handle, including returning unknown |
2456 | * ones. For all other modes we will return them to the sender, | 2456 | * ones. For all other modes we will return them to the sender, |
2457 | * setting the 0x80 bit in the action category, as required by | 2457 | * setting the 0x80 bit in the action category, as required by |
2458 | * 802.11-2007 7.3.1.11. | 2458 | * 802.11-2012 9.24.4. |
2459 | * Newer versions of hostapd shall also use the management frame | 2459 | * Newer versions of hostapd shall also use the management frame |
2460 | * registration mechanisms, but older ones still use cooked | 2460 | * registration mechanisms, but older ones still use cooked |
2461 | * monitor interfaces so push all frames there. | 2461 | * monitor interfaces so push all frames there. |
@@ -2465,6 +2465,9 @@ ieee80211_rx_h_action_return(struct ieee80211_rx_data *rx) | |||
2465 | sdata->vif.type == NL80211_IFTYPE_AP_VLAN)) | 2465 | sdata->vif.type == NL80211_IFTYPE_AP_VLAN)) |
2466 | return RX_DROP_MONITOR; | 2466 | return RX_DROP_MONITOR; |
2467 | 2467 | ||
2468 | if (is_multicast_ether_addr(mgmt->da)) | ||
2469 | return RX_DROP_MONITOR; | ||
2470 | |||
2468 | /* do not return rejected action frames */ | 2471 | /* do not return rejected action frames */ |
2469 | if (mgmt->u.action.category & 0x80) | 2472 | if (mgmt->u.action.category & 0x80) |
2470 | return RX_DROP_UNUSABLE; | 2473 | return RX_DROP_UNUSABLE; |