diff options
Diffstat (limited to 'net/mac80211/wpa.c')
-rw-r--r-- | net/mac80211/wpa.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/net/mac80211/wpa.c b/net/mac80211/wpa.c index 53e11e6ff66e..9101b48ec2ae 100644 --- a/net/mac80211/wpa.c +++ b/net/mac80211/wpa.c | |||
@@ -367,9 +367,14 @@ static int ccmp_encrypt_skb(struct ieee80211_tx_data *tx, struct sk_buff *skb) | |||
367 | int hdrlen, len, tail; | 367 | int hdrlen, len, tail; |
368 | u8 *pos, *pn; | 368 | u8 *pos, *pn; |
369 | int i; | 369 | int i; |
370 | bool skip_hw; | ||
371 | |||
372 | skip_hw = (tx->key->conf.flags & IEEE80211_KEY_FLAG_SW_MGMT) && | ||
373 | ieee80211_is_mgmt(hdr->frame_control); | ||
370 | 374 | ||
371 | if ((tx->key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE) && | 375 | if ((tx->key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE) && |
372 | !(tx->key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_IV)) { | 376 | !(tx->key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_IV) && |
377 | !skip_hw) { | ||
373 | /* hwaccel - with no need for preallocated room for CCMP | 378 | /* hwaccel - with no need for preallocated room for CCMP |
374 | * header or MIC fields */ | 379 | * header or MIC fields */ |
375 | info->control.hw_key = &tx->key->conf; | 380 | info->control.hw_key = &tx->key->conf; |
@@ -404,7 +409,7 @@ static int ccmp_encrypt_skb(struct ieee80211_tx_data *tx, struct sk_buff *skb) | |||
404 | 409 | ||
405 | ccmp_pn2hdr(pos, pn, key->conf.keyidx); | 410 | ccmp_pn2hdr(pos, pn, key->conf.keyidx); |
406 | 411 | ||
407 | if (key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE) { | 412 | if ((key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE) && !skip_hw) { |
408 | /* hwaccel - with preallocated room for CCMP header */ | 413 | /* hwaccel - with preallocated room for CCMP header */ |
409 | info->control.hw_key = &tx->key->conf; | 414 | info->control.hw_key = &tx->key->conf; |
410 | return 0; | 415 | return 0; |