summaryrefslogtreecommitdiffstats
path: root/net/mac80211/cfg.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/mac80211/cfg.c')
-rw-r--r--net/mac80211/cfg.c59
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;