diff options
Diffstat (limited to 'net/mac80211/wpa.c')
| -rw-r--r-- | net/mac80211/wpa.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/net/mac80211/wpa.c b/net/mac80211/wpa.c index bdb53aba888e..8bd2f5c6a56e 100644 --- a/net/mac80211/wpa.c +++ b/net/mac80211/wpa.c | |||
| @@ -106,7 +106,8 @@ ieee80211_rx_h_michael_mic_verify(struct ieee80211_rx_data *rx) | |||
| 106 | if (status->flag & RX_FLAG_MMIC_ERROR) | 106 | if (status->flag & RX_FLAG_MMIC_ERROR) |
| 107 | goto mic_fail; | 107 | goto mic_fail; |
| 108 | 108 | ||
| 109 | if (!(status->flag & RX_FLAG_IV_STRIPPED) && rx->key) | 109 | if (!(status->flag & RX_FLAG_IV_STRIPPED) && rx->key && |
| 110 | rx->key->conf.cipher == WLAN_CIPHER_SUITE_TKIP) | ||
| 110 | goto update_iv; | 111 | goto update_iv; |
| 111 | 112 | ||
| 112 | return RX_CONTINUE; | 113 | return RX_CONTINUE; |
| @@ -545,14 +546,19 @@ ieee80211_crypto_ccmp_decrypt(struct ieee80211_rx_data *rx) | |||
| 545 | 546 | ||
| 546 | static void bip_aad(struct sk_buff *skb, u8 *aad) | 547 | static void bip_aad(struct sk_buff *skb, u8 *aad) |
| 547 | { | 548 | { |
| 549 | __le16 mask_fc; | ||
| 550 | struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data; | ||
| 551 | |||
| 548 | /* BIP AAD: FC(masked) || A1 || A2 || A3 */ | 552 | /* BIP AAD: FC(masked) || A1 || A2 || A3 */ |
| 549 | 553 | ||
| 550 | /* FC type/subtype */ | 554 | /* FC type/subtype */ |
| 551 | aad[0] = skb->data[0]; | ||
| 552 | /* Mask FC Retry, PwrMgt, MoreData flags to zero */ | 555 | /* Mask FC Retry, PwrMgt, MoreData flags to zero */ |
| 553 | aad[1] = skb->data[1] & ~(BIT(4) | BIT(5) | BIT(6)); | 556 | mask_fc = hdr->frame_control; |
| 557 | mask_fc &= ~cpu_to_le16(IEEE80211_FCTL_RETRY | IEEE80211_FCTL_PM | | ||
| 558 | IEEE80211_FCTL_MOREDATA); | ||
| 559 | put_unaligned(mask_fc, (__le16 *) &aad[0]); | ||
| 554 | /* A1 || A2 || A3 */ | 560 | /* A1 || A2 || A3 */ |
| 555 | memcpy(aad + 2, skb->data + 4, 3 * ETH_ALEN); | 561 | memcpy(aad + 2, &hdr->addr1, 3 * ETH_ALEN); |
| 556 | } | 562 | } |
| 557 | 563 | ||
| 558 | 564 | ||
