From 3e25da3cdf3779e1bd3d46b91d9f99aaa0cf349c Mon Sep 17 00:00:00 2001 From: Masashi Honma Date: Wed, 22 Jun 2016 19:55:20 +0900 Subject: [PATCH] mac80211: Encrypt "Group addressed privacy" action frames Previously, the action frames to group address was not encrypted. But [1] "Table 8-38 Category values" indicates "Mesh" and "Multihop" category action frames should be encrypted (Group addressed privacy == yes). And the encyption key should be MGTK ([1] 10.13 Group addressed robust management frame procedures). So this patch modifies the code to make it suitable for spec. [1] IEEE Std 802.11-2012 Signed-off-by: Masashi Honma Signed-off-by: Johannes Berg Signed-off-by: Christian Lamparter --- include/linux/ieee80211.h | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/include/linux/ieee80211.h b/include/linux/ieee80211.h index 4550eb7..a004aca 100644 --- a/include/linux/ieee80211.h +++ b/include/linux/ieee80211.h @@ -2491,12 +2491,17 @@ static inline bool ieee80211_is_public_action(struct ieee80211_hdr *hdr, return mgmt->u.action.category == WLAN_CATEGORY_PUBLIC; } +static inline bool is_multicast_ether_addr(const u8 *a) +{ + return 0x01 & a[0]; +} + /** * _ieee80211_is_group_privacy_action - check if frame is a group addressed * privacy action frame * @hdr: the frame */ -static inline bool _ieee80211_is_group_privacy_action(struct ieee80211_hdr *hdr) +static inline bool ieee80211_is_group_privacy_action(struct ieee80211_hdr *hdr) { struct ieee80211_mgmt *mgmt = (void *)hdr; @@ -2508,18 +2513,6 @@ static inline bool _ieee80211_is_group_privacy_action(struct ieee80211_hdr *hdr) mgmt->u.action.category == WLAN_CATEGORY_MULTIHOP_ACTION; } -/** - * ieee80211_is_group_privacy_action - check if frame is a group addressed - * privacy action frame - * @skb: the skb containing the frame, length will be checked - */ -static inline bool ieee80211_is_group_privacy_action(struct sk_buff *skb) -{ - if (skb->len < IEEE80211_MIN_ACTION_SIZE) - return false; - return _ieee80211_is_group_privacy_action((void *)skb->data); -} - /** * ieee80211_tu_to_usec - convert time units (TU) to microseconds * @tu: the TUs -- 2.31.1