diff options
author | Johannes Berg <johannes@sipsolutions.net> | 2007-09-26 09:19:45 -0400 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2007-10-10 19:53:16 -0400 |
commit | 50741ae05a4742cae99361f57d84b5f8d33822a4 (patch) | |
tree | e655586b7d22a9504aaad7aa79401e8ff1c71770 /net/mac80211/wpa.c | |
parent | fb1c1cd6c5a8988b14c5c6c0dfe55542df3a34c6 (diff) |
[PATCH] mac80211: fix TKIP IV update
The TKIP IV should be updated only after MMIC verification,
this patch changes it to be at that spot.
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/mac80211/wpa.c')
-rw-r--r-- | net/mac80211/wpa.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/net/mac80211/wpa.c b/net/mac80211/wpa.c index a07fd7484cdf..6695efba57ec 100644 --- a/net/mac80211/wpa.c +++ b/net/mac80211/wpa.c | |||
@@ -175,6 +175,10 @@ ieee80211_rx_h_michael_mic_verify(struct ieee80211_txrx_data *rx) | |||
175 | /* remove Michael MIC from payload */ | 175 | /* remove Michael MIC from payload */ |
176 | skb_trim(skb, skb->len - MICHAEL_MIC_LEN); | 176 | skb_trim(skb, skb->len - MICHAEL_MIC_LEN); |
177 | 177 | ||
178 | /* update IV in key information to be able to detect replays */ | ||
179 | rx->key->u.tkip.iv32_rx[rx->u.rx.queue] = rx->u.rx.tkip_iv32; | ||
180 | rx->key->u.tkip.iv16_rx[rx->u.rx.queue] = rx->u.rx.tkip_iv16; | ||
181 | |||
178 | return TXRX_CONTINUE; | 182 | return TXRX_CONTINUE; |
179 | } | 183 | } |
180 | 184 | ||
@@ -315,7 +319,9 @@ ieee80211_crypto_tkip_decrypt(struct ieee80211_txrx_data *rx) | |||
315 | res = ieee80211_tkip_decrypt_data(rx->local->wep_rx_tfm, | 319 | res = ieee80211_tkip_decrypt_data(rx->local->wep_rx_tfm, |
316 | key, skb->data + hdrlen, | 320 | key, skb->data + hdrlen, |
317 | skb->len - hdrlen, rx->sta->addr, | 321 | skb->len - hdrlen, rx->sta->addr, |
318 | hwaccel, rx->u.rx.queue); | 322 | hwaccel, rx->u.rx.queue, |
323 | &rx->u.rx.tkip_iv32, | ||
324 | &rx->u.rx.tkip_iv16); | ||
319 | if (res != TKIP_DECRYPT_OK || wpa_test) { | 325 | if (res != TKIP_DECRYPT_OK || wpa_test) { |
320 | printk(KERN_DEBUG "%s: TKIP decrypt failed for RX frame from " | 326 | printk(KERN_DEBUG "%s: TKIP decrypt failed for RX frame from " |
321 | "%s (res=%d)\n", | 327 | "%s (res=%d)\n", |