diff options
Diffstat (limited to 'net/mac80211/cfg.c')
-rw-r--r-- | net/mac80211/cfg.c | 59 |
1 files changed, 9 insertions, 50 deletions
diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c index bb9f83640b46..02f48c848ef5 100644 --- a/net/mac80211/cfg.c +++ b/net/mac80211/cfg.c | |||
@@ -361,66 +361,25 @@ static int ieee80211_get_key(struct wiphy *wiphy, struct net_device *dev, | |||
361 | break; | 361 | break; |
362 | case WLAN_CIPHER_SUITE_CCMP: | 362 | case WLAN_CIPHER_SUITE_CCMP: |
363 | case WLAN_CIPHER_SUITE_CCMP_256: | 363 | case WLAN_CIPHER_SUITE_CCMP_256: |
364 | if (key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE && | ||
365 | !(key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_IV)) { | ||
366 | drv_get_key_seq(sdata->local, key, &kseq); | ||
367 | memcpy(seq, kseq.ccmp.pn, 6); | ||
368 | } else { | ||
369 | pn64 = atomic64_read(&key->u.ccmp.tx_pn); | ||
370 | seq[0] = pn64; | ||
371 | seq[1] = pn64 >> 8; | ||
372 | seq[2] = pn64 >> 16; | ||
373 | seq[3] = pn64 >> 24; | ||
374 | seq[4] = pn64 >> 32; | ||
375 | seq[5] = pn64 >> 40; | ||
376 | } | ||
377 | params.seq = seq; | ||
378 | params.seq_len = 6; | ||
379 | break; | ||
380 | case WLAN_CIPHER_SUITE_AES_CMAC: | 364 | case WLAN_CIPHER_SUITE_AES_CMAC: |
381 | case WLAN_CIPHER_SUITE_BIP_CMAC_256: | 365 | case WLAN_CIPHER_SUITE_BIP_CMAC_256: |
382 | if (key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE && | 366 | BUILD_BUG_ON(offsetof(typeof(kseq), ccmp) != |
383 | !(key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_IV)) { | 367 | offsetof(typeof(kseq), aes_cmac)); |
384 | drv_get_key_seq(sdata->local, key, &kseq); | ||
385 | memcpy(seq, kseq.aes_cmac.pn, 6); | ||
386 | } else { | ||
387 | pn64 = atomic64_read(&key->u.aes_cmac.tx_pn); | ||
388 | seq[0] = pn64; | ||
389 | seq[1] = pn64 >> 8; | ||
390 | seq[2] = pn64 >> 16; | ||
391 | seq[3] = pn64 >> 24; | ||
392 | seq[4] = pn64 >> 32; | ||
393 | seq[5] = pn64 >> 40; | ||
394 | } | ||
395 | params.seq = seq; | ||
396 | params.seq_len = 6; | ||
397 | break; | ||
398 | case WLAN_CIPHER_SUITE_BIP_GMAC_128: | 368 | case WLAN_CIPHER_SUITE_BIP_GMAC_128: |
399 | case WLAN_CIPHER_SUITE_BIP_GMAC_256: | 369 | case WLAN_CIPHER_SUITE_BIP_GMAC_256: |
400 | if (key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE && | 370 | BUILD_BUG_ON(offsetof(typeof(kseq), ccmp) != |
401 | !(key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_IV)) { | 371 | offsetof(typeof(kseq), aes_gmac)); |
402 | drv_get_key_seq(sdata->local, key, &kseq); | ||
403 | memcpy(seq, kseq.aes_gmac.pn, 6); | ||
404 | } else { | ||
405 | pn64 = atomic64_read(&key->u.aes_gmac.tx_pn); | ||
406 | seq[0] = pn64; | ||
407 | seq[1] = pn64 >> 8; | ||
408 | seq[2] = pn64 >> 16; | ||
409 | seq[3] = pn64 >> 24; | ||
410 | seq[4] = pn64 >> 32; | ||
411 | seq[5] = pn64 >> 40; | ||
412 | } | ||
413 | params.seq = seq; | ||
414 | params.seq_len = 6; | ||
415 | break; | ||
416 | case WLAN_CIPHER_SUITE_GCMP: | 372 | case WLAN_CIPHER_SUITE_GCMP: |
417 | case WLAN_CIPHER_SUITE_GCMP_256: | 373 | case WLAN_CIPHER_SUITE_GCMP_256: |
374 | BUILD_BUG_ON(offsetof(typeof(kseq), ccmp) != | ||
375 | offsetof(typeof(kseq), gcmp)); | ||
376 | |||
418 | if (key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE && | 377 | if (key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE && |
419 | !(key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_IV)) { | 378 | !(key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_IV)) { |
420 | drv_get_key_seq(sdata->local, key, &kseq); | 379 | drv_get_key_seq(sdata->local, key, &kseq); |
421 | memcpy(seq, kseq.gcmp.pn, 6); | 380 | memcpy(seq, kseq.ccmp.pn, 6); |
422 | } else { | 381 | } else { |
423 | pn64 = atomic64_read(&key->u.gcmp.tx_pn); | 382 | pn64 = atomic64_read(&key->conf.tx_pn); |
424 | seq[0] = pn64; | 383 | seq[0] = pn64; |
425 | seq[1] = pn64 >> 8; | 384 | seq[1] = pn64 >> 8; |
426 | seq[2] = pn64 >> 16; | 385 | seq[2] = pn64 >> 16; |