ieee80211: Fix TKIP MIC calculation for QoS frames
Subsystems (2)
PATCH 1/6 ieee80211: Fix TKIP MIC calculation for QoS frames
Fix TKIP MIC verification failure when receiving QoS frames from AP.
Signed-off-by Hong Liu <[email protected]>
Signed-off-by Zhu Yi <[email protected]>
---
include/net/ieee80211.h | 3 +++ net/ieee80211/ieee80211_crypt_tkip.c | 11 ++++++++++- 2 files changed, 13 insertions(+), 1 deletions(-)
2a0ee963da3c8a125e2af4dec07aca8bf4357d03
include/net/ieee80211.h +3 -0
@@ -104,6 +104,9 @@#define IEEE80211_SCTL_FRAG 0x000F#define IEEE80211_SCTL_SEQ 0xFFF0 +/* QOS control */ +#define IEEE80211_QCTL_TID 0x000F +/* debug macros */ #ifdef CONFIG_IEEE80211_DEBUG
net/ieee80211/ieee80211_crypt_tkip.c +10 -1
@@ -501,8 +501,11 @@ static int michael_mic(struct ieee80211_static void michael_mic_hdr (struct sk_buff *skb,u8 * hdr) {struct ieee80211_hdr_4addr *hdr11; +u16 stype; hdr11 = (struct ieee80211_hdr_4addr *)skb->data; + stype =WLAN_FC_GET_STYPE (le16_to_cpu (hdr11->frame_ctl)); +switch (le16_to_cpu (hdr11->frame_ctl) & (IEEE80211_FCTL_FROMDS |IEEE80211_FCTL_TODS )) {case IEEE80211_FCTL_TODS :
@@ -523,7 +526,13 @@ static void michael_mic_hdr(struct sk_bubreak ; } - hdr[12 ] =0 ;/* priority */ +if (stype &IEEE80211_STYPE_QOS_DATA ) { +const struct ieee80211_hdr_3addrqos *qoshdr = + (struct ieee80211_hdr_3addrqos *)skb->data; + hdr[12 ] =le16_to_cpu (qoshdr->qos_ctl) &IEEE80211_QCTL_TID ; + }else + hdr[12 ] =0 ;/* priority */ + hdr[13 ] = hdr[14 ] = hdr[15 ] =0 ;/* reserved */ }
Signature · 1 line
1.2.6