diff options
Diffstat (limited to 'net/mac80211/wpa.c')
| -rw-r--r-- | net/mac80211/wpa.c | 13 | 
1 files changed, 8 insertions, 5 deletions
diff --git a/net/mac80211/wpa.c b/net/mac80211/wpa.c index 0adbcc941ac..8d59d27d887 100644 --- a/net/mac80211/wpa.c +++ b/net/mac80211/wpa.c @@ -183,9 +183,8 @@ static int tkip_encrypt_skb(struct ieee80211_tx_data *tx, struct sk_buff *skb)  	skb_put(skb, TKIP_ICV_LEN);  	hdr = (struct ieee80211_hdr *) skb->data; -	ieee80211_tkip_encrypt_data(tx->local->wep_tx_tfm, -				    key, pos, len, hdr->addr2); -	return 0; +	return ieee80211_tkip_encrypt_data(tx->local->wep_tx_tfm, +					   key, pos, len, hdr->addr2);  } @@ -436,6 +435,7 @@ ieee80211_crypto_ccmp_decrypt(struct ieee80211_rx_data *rx)  	struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);  	u8 pn[CCMP_PN_LEN];  	int data_len; +	int queue;  	hdrlen = ieee80211_hdrlen(hdr->frame_control); @@ -453,7 +453,10 @@ ieee80211_crypto_ccmp_decrypt(struct ieee80211_rx_data *rx)  	ccmp_hdr2pn(pn, skb->data + hdrlen); -	if (memcmp(pn, key->u.ccmp.rx_pn[rx->queue], CCMP_PN_LEN) <= 0) { +	queue = ieee80211_is_mgmt(hdr->frame_control) ? +		NUM_RX_DATA_QUEUES : rx->queue; + +	if (memcmp(pn, key->u.ccmp.rx_pn[queue], CCMP_PN_LEN) <= 0) {  		key->u.ccmp.replays++;  		return RX_DROP_UNUSABLE;  	} @@ -470,7 +473,7 @@ ieee80211_crypto_ccmp_decrypt(struct ieee80211_rx_data *rx)  			return RX_DROP_UNUSABLE;  	} -	memcpy(key->u.ccmp.rx_pn[rx->queue], pn, CCMP_PN_LEN); +	memcpy(key->u.ccmp.rx_pn[queue], pn, CCMP_PN_LEN);  	/* Remove CCMP header and MIC */  	skb_trim(skb, skb->len - CCMP_MIC_LEN);  |