wireless: move crypto constants to ieee80211.h
mac80211 and the Intel drivers all define crypto constants, move them to ieee80211.h instead. Reviewed-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
		
					parent
					
						
							
								04a161f460
							
						
					
				
			
			
				commit
				
					
						4325f6caad
					
				
			
		
					 10 changed files with 96 additions and 108 deletions
				
			
		| 
						 | 
					@ -1347,14 +1347,6 @@ struct il_rx_mpdu_res_start {
 | 
				
			||||||
#define TX_CMD_SEC_SHIFT	6
 | 
					#define TX_CMD_SEC_SHIFT	6
 | 
				
			||||||
#define TX_CMD_SEC_KEY128	0x08
 | 
					#define TX_CMD_SEC_KEY128	0x08
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * security overhead sizes
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
#define WEP_IV_LEN 4
 | 
					 | 
				
			||||||
#define WEP_ICV_LEN 4
 | 
					 | 
				
			||||||
#define CCMP_MIC_LEN 8
 | 
					 | 
				
			||||||
#define TKIP_ICV_LEN 4
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * C_TX = 0x1c (command)
 | 
					 * C_TX = 0x1c (command)
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1224,14 +1224,6 @@ struct iwl_rx_mpdu_res_start {
 | 
				
			||||||
#define TX_CMD_SEC_SHIFT	6
 | 
					#define TX_CMD_SEC_SHIFT	6
 | 
				
			||||||
#define TX_CMD_SEC_KEY128	0x08
 | 
					#define TX_CMD_SEC_KEY128	0x08
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * security overhead sizes
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
#define WEP_IV_LEN 4
 | 
					 | 
				
			||||||
#define WEP_ICV_LEN 4
 | 
					 | 
				
			||||||
#define CCMP_MIC_LEN 8
 | 
					 | 
				
			||||||
#define TKIP_ICV_LEN 4
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * REPLY_TX = 0x1c (command)
 | 
					 * REPLY_TX = 0x1c (command)
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -224,13 +224,13 @@ static void iwl_pcie_txq_update_byte_cnt_tbl(struct iwl_trans *trans,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	switch (sec_ctl & TX_CMD_SEC_MSK) {
 | 
						switch (sec_ctl & TX_CMD_SEC_MSK) {
 | 
				
			||||||
	case TX_CMD_SEC_CCM:
 | 
						case TX_CMD_SEC_CCM:
 | 
				
			||||||
		len += CCMP_MIC_LEN;
 | 
							len += IEEE80211_CCMP_MIC_LEN;
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	case TX_CMD_SEC_TKIP:
 | 
						case TX_CMD_SEC_TKIP:
 | 
				
			||||||
		len += TKIP_ICV_LEN;
 | 
							len += IEEE80211_TKIP_ICV_LEN;
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	case TX_CMD_SEC_WEP:
 | 
						case TX_CMD_SEC_WEP:
 | 
				
			||||||
		len += WEP_IV_LEN + WEP_ICV_LEN;
 | 
							len += IEEE80211_WEP_IV_LEN + IEEE80211_WEP_ICV_LEN;
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1829,6 +1829,15 @@ enum ieee80211_key_len {
 | 
				
			||||||
	WLAN_KEY_LEN_AES_CMAC = 16,
 | 
						WLAN_KEY_LEN_AES_CMAC = 16,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define IEEE80211_WEP_IV_LEN		4
 | 
				
			||||||
 | 
					#define IEEE80211_WEP_ICV_LEN		4
 | 
				
			||||||
 | 
					#define IEEE80211_CCMP_HDR_LEN		8
 | 
				
			||||||
 | 
					#define IEEE80211_CCMP_MIC_LEN		8
 | 
				
			||||||
 | 
					#define IEEE80211_CCMP_PN_LEN		6
 | 
				
			||||||
 | 
					#define IEEE80211_TKIP_IV_LEN		8
 | 
				
			||||||
 | 
					#define IEEE80211_TKIP_ICV_LEN		4
 | 
				
			||||||
 | 
					#define IEEE80211_CMAC_PN_LEN		6
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Public action codes */
 | 
					/* Public action codes */
 | 
				
			||||||
enum ieee80211_pub_actioncode {
 | 
					enum ieee80211_pub_actioncode {
 | 
				
			||||||
	WLAN_PUB_ACTION_EXT_CHANSW_ANN = 4,
 | 
						WLAN_PUB_ACTION_EXT_CHANSW_ANN = 4,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -85,7 +85,7 @@ void ieee80211_aes_ccm_encrypt(struct crypto_cipher *tfm, u8 *scratch,
 | 
				
			||||||
			*cpos++ = *pos++ ^ e[i];
 | 
								*cpos++ = *pos++ ^ e[i];
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for (i = 0; i < CCMP_MIC_LEN; i++)
 | 
						for (i = 0; i < IEEE80211_CCMP_MIC_LEN; i++)
 | 
				
			||||||
		mic[i] = b[i] ^ s_0[i];
 | 
							mic[i] = b[i] ^ s_0[i];
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -123,7 +123,7 @@ int ieee80211_aes_ccm_decrypt(struct crypto_cipher *tfm, u8 *scratch,
 | 
				
			||||||
		crypto_cipher_encrypt_one(tfm, a, a);
 | 
							crypto_cipher_encrypt_one(tfm, a, a);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for (i = 0; i < CCMP_MIC_LEN; i++) {
 | 
						for (i = 0; i < IEEE80211_CCMP_MIC_LEN; i++) {
 | 
				
			||||||
		if ((mic[i] ^ s_0[i]) != a[i])
 | 
							if ((mic[i] ^ s_0[i]) != a[i])
 | 
				
			||||||
			return -1;
 | 
								return -1;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					@ -138,7 +138,7 @@ struct crypto_cipher *ieee80211_aes_key_setup_encrypt(const u8 key[])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	tfm = crypto_alloc_cipher("aes", 0, CRYPTO_ALG_ASYNC);
 | 
						tfm = crypto_alloc_cipher("aes", 0, CRYPTO_ALG_ASYNC);
 | 
				
			||||||
	if (!IS_ERR(tfm))
 | 
						if (!IS_ERR(tfm))
 | 
				
			||||||
		crypto_cipher_setkey(tfm, key, ALG_CCMP_KEY_LEN);
 | 
							crypto_cipher_setkey(tfm, key, WLAN_KEY_LEN_CCMP);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return tfm;
 | 
						return tfm;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -335,12 +335,12 @@ struct ieee80211_key *ieee80211_key_alloc(u32 cipher, int idx, size_t key_len,
 | 
				
			||||||
	switch (cipher) {
 | 
						switch (cipher) {
 | 
				
			||||||
	case WLAN_CIPHER_SUITE_WEP40:
 | 
						case WLAN_CIPHER_SUITE_WEP40:
 | 
				
			||||||
	case WLAN_CIPHER_SUITE_WEP104:
 | 
						case WLAN_CIPHER_SUITE_WEP104:
 | 
				
			||||||
		key->conf.iv_len = WEP_IV_LEN;
 | 
							key->conf.iv_len = IEEE80211_WEP_IV_LEN;
 | 
				
			||||||
		key->conf.icv_len = WEP_ICV_LEN;
 | 
							key->conf.icv_len = IEEE80211_WEP_ICV_LEN;
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	case WLAN_CIPHER_SUITE_TKIP:
 | 
						case WLAN_CIPHER_SUITE_TKIP:
 | 
				
			||||||
		key->conf.iv_len = TKIP_IV_LEN;
 | 
							key->conf.iv_len = IEEE80211_TKIP_IV_LEN;
 | 
				
			||||||
		key->conf.icv_len = TKIP_ICV_LEN;
 | 
							key->conf.icv_len = IEEE80211_TKIP_ICV_LEN;
 | 
				
			||||||
		if (seq) {
 | 
							if (seq) {
 | 
				
			||||||
			for (i = 0; i < IEEE80211_NUM_TIDS; i++) {
 | 
								for (i = 0; i < IEEE80211_NUM_TIDS; i++) {
 | 
				
			||||||
				key->u.tkip.rx[i].iv32 =
 | 
									key->u.tkip.rx[i].iv32 =
 | 
				
			||||||
| 
						 | 
					@ -352,13 +352,13 @@ struct ieee80211_key *ieee80211_key_alloc(u32 cipher, int idx, size_t key_len,
 | 
				
			||||||
		spin_lock_init(&key->u.tkip.txlock);
 | 
							spin_lock_init(&key->u.tkip.txlock);
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	case WLAN_CIPHER_SUITE_CCMP:
 | 
						case WLAN_CIPHER_SUITE_CCMP:
 | 
				
			||||||
		key->conf.iv_len = CCMP_HDR_LEN;
 | 
							key->conf.iv_len = IEEE80211_CCMP_HDR_LEN;
 | 
				
			||||||
		key->conf.icv_len = CCMP_MIC_LEN;
 | 
							key->conf.icv_len = IEEE80211_CCMP_MIC_LEN;
 | 
				
			||||||
		if (seq) {
 | 
							if (seq) {
 | 
				
			||||||
			for (i = 0; i < IEEE80211_NUM_TIDS + 1; i++)
 | 
								for (i = 0; i < IEEE80211_NUM_TIDS + 1; i++)
 | 
				
			||||||
				for (j = 0; j < CCMP_PN_LEN; j++)
 | 
									for (j = 0; j < IEEE80211_CCMP_PN_LEN; j++)
 | 
				
			||||||
					key->u.ccmp.rx_pn[i][j] =
 | 
										key->u.ccmp.rx_pn[i][j] =
 | 
				
			||||||
						seq[CCMP_PN_LEN - j - 1];
 | 
											seq[IEEE80211_CCMP_PN_LEN - j - 1];
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		/*
 | 
							/*
 | 
				
			||||||
		 * Initialize AES key state here as an optimization so that
 | 
							 * Initialize AES key state here as an optimization so that
 | 
				
			||||||
| 
						 | 
					@ -375,9 +375,9 @@ struct ieee80211_key *ieee80211_key_alloc(u32 cipher, int idx, size_t key_len,
 | 
				
			||||||
		key->conf.iv_len = 0;
 | 
							key->conf.iv_len = 0;
 | 
				
			||||||
		key->conf.icv_len = sizeof(struct ieee80211_mmie);
 | 
							key->conf.icv_len = sizeof(struct ieee80211_mmie);
 | 
				
			||||||
		if (seq)
 | 
							if (seq)
 | 
				
			||||||
			for (j = 0; j < CMAC_PN_LEN; j++)
 | 
								for (j = 0; j < IEEE80211_CMAC_PN_LEN; j++)
 | 
				
			||||||
				key->u.aes_cmac.rx_pn[j] =
 | 
									key->u.aes_cmac.rx_pn[j] =
 | 
				
			||||||
					seq[CMAC_PN_LEN - j - 1];
 | 
										seq[IEEE80211_CMAC_PN_LEN - j - 1];
 | 
				
			||||||
		/*
 | 
							/*
 | 
				
			||||||
		 * Initialize AES key state here as an optimization so that
 | 
							 * Initialize AES key state here as an optimization so that
 | 
				
			||||||
		 * it does not need to be initialized for every packet.
 | 
							 * it does not need to be initialized for every packet.
 | 
				
			||||||
| 
						 | 
					@ -740,13 +740,13 @@ void ieee80211_get_key_rx_seq(struct ieee80211_key_conf *keyconf,
 | 
				
			||||||
			pn = key->u.ccmp.rx_pn[IEEE80211_NUM_TIDS];
 | 
								pn = key->u.ccmp.rx_pn[IEEE80211_NUM_TIDS];
 | 
				
			||||||
		else
 | 
							else
 | 
				
			||||||
			pn = key->u.ccmp.rx_pn[tid];
 | 
								pn = key->u.ccmp.rx_pn[tid];
 | 
				
			||||||
		memcpy(seq->ccmp.pn, pn, CCMP_PN_LEN);
 | 
							memcpy(seq->ccmp.pn, pn, IEEE80211_CCMP_PN_LEN);
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	case WLAN_CIPHER_SUITE_AES_CMAC:
 | 
						case WLAN_CIPHER_SUITE_AES_CMAC:
 | 
				
			||||||
		if (WARN_ON(tid != 0))
 | 
							if (WARN_ON(tid != 0))
 | 
				
			||||||
			return;
 | 
								return;
 | 
				
			||||||
		pn = key->u.aes_cmac.rx_pn;
 | 
							pn = key->u.aes_cmac.rx_pn;
 | 
				
			||||||
		memcpy(seq->aes_cmac.pn, pn, CMAC_PN_LEN);
 | 
							memcpy(seq->aes_cmac.pn, pn, IEEE80211_CMAC_PN_LEN);
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -19,17 +19,6 @@
 | 
				
			||||||
#define NUM_DEFAULT_KEYS 4
 | 
					#define NUM_DEFAULT_KEYS 4
 | 
				
			||||||
#define NUM_DEFAULT_MGMT_KEYS 2
 | 
					#define NUM_DEFAULT_MGMT_KEYS 2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define WEP_IV_LEN		4
 | 
					 | 
				
			||||||
#define WEP_ICV_LEN		4
 | 
					 | 
				
			||||||
#define ALG_CCMP_KEY_LEN	16
 | 
					 | 
				
			||||||
#define CCMP_HDR_LEN		8
 | 
					 | 
				
			||||||
#define CCMP_MIC_LEN		8
 | 
					 | 
				
			||||||
#define CCMP_TK_LEN		16
 | 
					 | 
				
			||||||
#define CCMP_PN_LEN		6
 | 
					 | 
				
			||||||
#define TKIP_IV_LEN		8
 | 
					 | 
				
			||||||
#define TKIP_ICV_LEN		4
 | 
					 | 
				
			||||||
#define CMAC_PN_LEN		6
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
struct ieee80211_local;
 | 
					struct ieee80211_local;
 | 
				
			||||||
struct ieee80211_sub_if_data;
 | 
					struct ieee80211_sub_if_data;
 | 
				
			||||||
struct sta_info;
 | 
					struct sta_info;
 | 
				
			||||||
| 
						 | 
					@ -93,13 +82,13 @@ struct ieee80211_key {
 | 
				
			||||||
			 * frames and the last counter is used with Robust
 | 
								 * frames and the last counter is used with Robust
 | 
				
			||||||
			 * Management frames.
 | 
								 * Management frames.
 | 
				
			||||||
			 */
 | 
								 */
 | 
				
			||||||
			u8 rx_pn[IEEE80211_NUM_TIDS + 1][CCMP_PN_LEN];
 | 
								u8 rx_pn[IEEE80211_NUM_TIDS + 1][IEEE80211_CCMP_PN_LEN];
 | 
				
			||||||
			struct crypto_cipher *tfm;
 | 
								struct crypto_cipher *tfm;
 | 
				
			||||||
			u32 replays; /* dot11RSNAStatsCCMPReplays */
 | 
								u32 replays; /* dot11RSNAStatsCCMPReplays */
 | 
				
			||||||
		} ccmp;
 | 
							} ccmp;
 | 
				
			||||||
		struct {
 | 
							struct {
 | 
				
			||||||
			atomic64_t tx_pn;
 | 
								atomic64_t tx_pn;
 | 
				
			||||||
			u8 rx_pn[CMAC_PN_LEN];
 | 
								u8 rx_pn[IEEE80211_CMAC_PN_LEN];
 | 
				
			||||||
			struct crypto_cipher *tfm;
 | 
								struct crypto_cipher *tfm;
 | 
				
			||||||
			u32 replays; /* dot11RSNAStatsCMACReplays */
 | 
								u32 replays; /* dot11RSNAStatsCMACReplays */
 | 
				
			||||||
			u32 icverrors; /* dot11RSNAStatsCMACICVErrors */
 | 
								u32 icverrors; /* dot11RSNAStatsCMACICVErrors */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1622,7 +1622,7 @@ ieee80211_rx_h_defragment(struct ieee80211_rx_data *rx)
 | 
				
			||||||
			entry->ccmp = 1;
 | 
								entry->ccmp = 1;
 | 
				
			||||||
			memcpy(entry->last_pn,
 | 
								memcpy(entry->last_pn,
 | 
				
			||||||
			       rx->key->u.ccmp.rx_pn[queue],
 | 
								       rx->key->u.ccmp.rx_pn[queue],
 | 
				
			||||||
			       CCMP_PN_LEN);
 | 
								       IEEE80211_CCMP_PN_LEN);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		return RX_QUEUED;
 | 
							return RX_QUEUED;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					@ -1641,21 +1641,21 @@ ieee80211_rx_h_defragment(struct ieee80211_rx_data *rx)
 | 
				
			||||||
	 * (IEEE 802.11i, 8.3.3.4.5) */
 | 
						 * (IEEE 802.11i, 8.3.3.4.5) */
 | 
				
			||||||
	if (entry->ccmp) {
 | 
						if (entry->ccmp) {
 | 
				
			||||||
		int i;
 | 
							int i;
 | 
				
			||||||
		u8 pn[CCMP_PN_LEN], *rpn;
 | 
							u8 pn[IEEE80211_CCMP_PN_LEN], *rpn;
 | 
				
			||||||
		int queue;
 | 
							int queue;
 | 
				
			||||||
		if (!rx->key || rx->key->conf.cipher != WLAN_CIPHER_SUITE_CCMP)
 | 
							if (!rx->key || rx->key->conf.cipher != WLAN_CIPHER_SUITE_CCMP)
 | 
				
			||||||
			return RX_DROP_UNUSABLE;
 | 
								return RX_DROP_UNUSABLE;
 | 
				
			||||||
		memcpy(pn, entry->last_pn, CCMP_PN_LEN);
 | 
							memcpy(pn, entry->last_pn, IEEE80211_CCMP_PN_LEN);
 | 
				
			||||||
		for (i = CCMP_PN_LEN - 1; i >= 0; i--) {
 | 
							for (i = IEEE80211_CCMP_PN_LEN - 1; i >= 0; i--) {
 | 
				
			||||||
			pn[i]++;
 | 
								pn[i]++;
 | 
				
			||||||
			if (pn[i])
 | 
								if (pn[i])
 | 
				
			||||||
				break;
 | 
									break;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		queue = rx->security_idx;
 | 
							queue = rx->security_idx;
 | 
				
			||||||
		rpn = rx->key->u.ccmp.rx_pn[queue];
 | 
							rpn = rx->key->u.ccmp.rx_pn[queue];
 | 
				
			||||||
		if (memcmp(pn, rpn, CCMP_PN_LEN))
 | 
							if (memcmp(pn, rpn, IEEE80211_CCMP_PN_LEN))
 | 
				
			||||||
			return RX_DROP_UNUSABLE;
 | 
								return RX_DROP_UNUSABLE;
 | 
				
			||||||
		memcpy(entry->last_pn, pn, CCMP_PN_LEN);
 | 
							memcpy(entry->last_pn, pn, IEEE80211_CCMP_PN_LEN);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	skb_pull(rx->skb, ieee80211_hdrlen(fc));
 | 
						skb_pull(rx->skb, ieee80211_hdrlen(fc));
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -28,7 +28,7 @@
 | 
				
			||||||
int ieee80211_wep_init(struct ieee80211_local *local)
 | 
					int ieee80211_wep_init(struct ieee80211_local *local)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	/* start WEP IV from a random value */
 | 
						/* start WEP IV from a random value */
 | 
				
			||||||
	get_random_bytes(&local->wep_iv, WEP_IV_LEN);
 | 
						get_random_bytes(&local->wep_iv, IEEE80211_WEP_IV_LEN);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	local->wep_tx_tfm = crypto_alloc_cipher("arc4", 0, CRYPTO_ALG_ASYNC);
 | 
						local->wep_tx_tfm = crypto_alloc_cipher("arc4", 0, CRYPTO_ALG_ASYNC);
 | 
				
			||||||
	if (IS_ERR(local->wep_tx_tfm)) {
 | 
						if (IS_ERR(local->wep_tx_tfm)) {
 | 
				
			||||||
| 
						 | 
					@ -98,20 +98,21 @@ static u8 *ieee80211_wep_add_iv(struct ieee80211_local *local,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	hdr->frame_control |= cpu_to_le16(IEEE80211_FCTL_PROTECTED);
 | 
						hdr->frame_control |= cpu_to_le16(IEEE80211_FCTL_PROTECTED);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (WARN_ON(skb_tailroom(skb) < WEP_ICV_LEN ||
 | 
						if (WARN_ON(skb_tailroom(skb) < IEEE80211_WEP_ICV_LEN ||
 | 
				
			||||||
		    skb_headroom(skb) < WEP_IV_LEN))
 | 
							    skb_headroom(skb) < IEEE80211_WEP_IV_LEN))
 | 
				
			||||||
		return NULL;
 | 
							return NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	hdrlen = ieee80211_hdrlen(hdr->frame_control);
 | 
						hdrlen = ieee80211_hdrlen(hdr->frame_control);
 | 
				
			||||||
	newhdr = skb_push(skb, WEP_IV_LEN);
 | 
						newhdr = skb_push(skb, IEEE80211_WEP_IV_LEN);
 | 
				
			||||||
	memmove(newhdr, newhdr + WEP_IV_LEN, hdrlen);
 | 
						memmove(newhdr, newhdr + IEEE80211_WEP_IV_LEN, hdrlen);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* the HW only needs room for the IV, but not the actual IV */
 | 
						/* the HW only needs room for the IV, but not the actual IV */
 | 
				
			||||||
	if (info->control.hw_key &&
 | 
						if (info->control.hw_key &&
 | 
				
			||||||
	    (info->control.hw_key->flags & IEEE80211_KEY_FLAG_PUT_IV_SPACE))
 | 
						    (info->control.hw_key->flags & IEEE80211_KEY_FLAG_PUT_IV_SPACE))
 | 
				
			||||||
		return newhdr + hdrlen;
 | 
							return newhdr + hdrlen;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	skb_set_network_header(skb, skb_network_offset(skb) + WEP_IV_LEN);
 | 
						skb_set_network_header(skb, skb_network_offset(skb) +
 | 
				
			||||||
 | 
									    IEEE80211_WEP_IV_LEN);
 | 
				
			||||||
	ieee80211_wep_get_iv(local, keylen, keyidx, newhdr + hdrlen);
 | 
						ieee80211_wep_get_iv(local, keylen, keyidx, newhdr + hdrlen);
 | 
				
			||||||
	return newhdr + hdrlen;
 | 
						return newhdr + hdrlen;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -125,8 +126,8 @@ static void ieee80211_wep_remove_iv(struct ieee80211_local *local,
 | 
				
			||||||
	unsigned int hdrlen;
 | 
						unsigned int hdrlen;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	hdrlen = ieee80211_hdrlen(hdr->frame_control);
 | 
						hdrlen = ieee80211_hdrlen(hdr->frame_control);
 | 
				
			||||||
	memmove(skb->data + WEP_IV_LEN, skb->data, hdrlen);
 | 
						memmove(skb->data + IEEE80211_WEP_IV_LEN, skb->data, hdrlen);
 | 
				
			||||||
	skb_pull(skb, WEP_IV_LEN);
 | 
						skb_pull(skb, IEEE80211_WEP_IV_LEN);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -146,7 +147,7 @@ int ieee80211_wep_encrypt_data(struct crypto_cipher *tfm, u8 *rc4key,
 | 
				
			||||||
	put_unaligned(icv, (__le32 *)(data + data_len));
 | 
						put_unaligned(icv, (__le32 *)(data + data_len));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	crypto_cipher_setkey(tfm, rc4key, klen);
 | 
						crypto_cipher_setkey(tfm, rc4key, klen);
 | 
				
			||||||
	for (i = 0; i < data_len + WEP_ICV_LEN; i++)
 | 
						for (i = 0; i < data_len + IEEE80211_WEP_ICV_LEN; i++)
 | 
				
			||||||
		crypto_cipher_encrypt_one(tfm, data + i, data + i);
 | 
							crypto_cipher_encrypt_one(tfm, data + i, data + i);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
| 
						 | 
					@ -172,7 +173,7 @@ int ieee80211_wep_encrypt(struct ieee80211_local *local,
 | 
				
			||||||
	if (!iv)
 | 
						if (!iv)
 | 
				
			||||||
		return -1;
 | 
							return -1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	len = skb->len - (iv + WEP_IV_LEN - skb->data);
 | 
						len = skb->len - (iv + IEEE80211_WEP_IV_LEN - skb->data);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Prepend 24-bit IV to RC4 key */
 | 
						/* Prepend 24-bit IV to RC4 key */
 | 
				
			||||||
	memcpy(rc4key, iv, 3);
 | 
						memcpy(rc4key, iv, 3);
 | 
				
			||||||
| 
						 | 
					@ -181,10 +182,10 @@ int ieee80211_wep_encrypt(struct ieee80211_local *local,
 | 
				
			||||||
	memcpy(rc4key + 3, key, keylen);
 | 
						memcpy(rc4key + 3, key, keylen);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Add room for ICV */
 | 
						/* Add room for ICV */
 | 
				
			||||||
	skb_put(skb, WEP_ICV_LEN);
 | 
						skb_put(skb, IEEE80211_WEP_ICV_LEN);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return ieee80211_wep_encrypt_data(local->wep_tx_tfm, rc4key, keylen + 3,
 | 
						return ieee80211_wep_encrypt_data(local->wep_tx_tfm, rc4key, keylen + 3,
 | 
				
			||||||
					  iv + WEP_IV_LEN, len);
 | 
										  iv + IEEE80211_WEP_IV_LEN, len);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -201,11 +202,11 @@ int ieee80211_wep_decrypt_data(struct crypto_cipher *tfm, u8 *rc4key,
 | 
				
			||||||
		return -1;
 | 
							return -1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	crypto_cipher_setkey(tfm, rc4key, klen);
 | 
						crypto_cipher_setkey(tfm, rc4key, klen);
 | 
				
			||||||
	for (i = 0; i < data_len + WEP_ICV_LEN; i++)
 | 
						for (i = 0; i < data_len + IEEE80211_WEP_ICV_LEN; i++)
 | 
				
			||||||
		crypto_cipher_decrypt_one(tfm, data + i, data + i);
 | 
							crypto_cipher_decrypt_one(tfm, data + i, data + i);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	crc = cpu_to_le32(~crc32_le(~0, data, data_len));
 | 
						crc = cpu_to_le32(~crc32_le(~0, data, data_len));
 | 
				
			||||||
	if (memcmp(&crc, data + data_len, WEP_ICV_LEN) != 0)
 | 
						if (memcmp(&crc, data + data_len, IEEE80211_WEP_ICV_LEN) != 0)
 | 
				
			||||||
		/* ICV mismatch */
 | 
							/* ICV mismatch */
 | 
				
			||||||
		return -1;
 | 
							return -1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -237,10 +238,10 @@ static int ieee80211_wep_decrypt(struct ieee80211_local *local,
 | 
				
			||||||
		return -1;
 | 
							return -1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	hdrlen = ieee80211_hdrlen(hdr->frame_control);
 | 
						hdrlen = ieee80211_hdrlen(hdr->frame_control);
 | 
				
			||||||
	if (skb->len < hdrlen + WEP_IV_LEN + WEP_ICV_LEN)
 | 
						if (skb->len < hdrlen + IEEE80211_WEP_IV_LEN + IEEE80211_WEP_ICV_LEN)
 | 
				
			||||||
		return -1;
 | 
							return -1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	len = skb->len - hdrlen - WEP_IV_LEN - WEP_ICV_LEN;
 | 
						len = skb->len - hdrlen - IEEE80211_WEP_IV_LEN - IEEE80211_WEP_ICV_LEN;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	keyidx = skb->data[hdrlen + 3] >> 6;
 | 
						keyidx = skb->data[hdrlen + 3] >> 6;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -256,16 +257,16 @@ static int ieee80211_wep_decrypt(struct ieee80211_local *local,
 | 
				
			||||||
	memcpy(rc4key + 3, key->conf.key, key->conf.keylen);
 | 
						memcpy(rc4key + 3, key->conf.key, key->conf.keylen);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (ieee80211_wep_decrypt_data(local->wep_rx_tfm, rc4key, klen,
 | 
						if (ieee80211_wep_decrypt_data(local->wep_rx_tfm, rc4key, klen,
 | 
				
			||||||
				       skb->data + hdrlen + WEP_IV_LEN,
 | 
									       skb->data + hdrlen +
 | 
				
			||||||
				       len))
 | 
									       IEEE80211_WEP_IV_LEN, len))
 | 
				
			||||||
		ret = -1;
 | 
							ret = -1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Trim ICV */
 | 
						/* Trim ICV */
 | 
				
			||||||
	skb_trim(skb, skb->len - WEP_ICV_LEN);
 | 
						skb_trim(skb, skb->len - IEEE80211_WEP_ICV_LEN);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Remove IV */
 | 
						/* Remove IV */
 | 
				
			||||||
	memmove(skb->data + WEP_IV_LEN, skb->data, hdrlen);
 | 
						memmove(skb->data + IEEE80211_WEP_IV_LEN, skb->data, hdrlen);
 | 
				
			||||||
	skb_pull(skb, WEP_IV_LEN);
 | 
						skb_pull(skb, IEEE80211_WEP_IV_LEN);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return ret;
 | 
						return ret;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -305,13 +306,14 @@ ieee80211_crypto_wep_decrypt(struct ieee80211_rx_data *rx)
 | 
				
			||||||
		if (ieee80211_wep_decrypt(rx->local, rx->skb, rx->key))
 | 
							if (ieee80211_wep_decrypt(rx->local, rx->skb, rx->key))
 | 
				
			||||||
			return RX_DROP_UNUSABLE;
 | 
								return RX_DROP_UNUSABLE;
 | 
				
			||||||
	} else if (!(status->flag & RX_FLAG_IV_STRIPPED)) {
 | 
						} else if (!(status->flag & RX_FLAG_IV_STRIPPED)) {
 | 
				
			||||||
		if (!pskb_may_pull(rx->skb, ieee80211_hdrlen(fc) + WEP_IV_LEN))
 | 
							if (!pskb_may_pull(rx->skb, ieee80211_hdrlen(fc) +
 | 
				
			||||||
 | 
										    IEEE80211_WEP_IV_LEN))
 | 
				
			||||||
			return RX_DROP_UNUSABLE;
 | 
								return RX_DROP_UNUSABLE;
 | 
				
			||||||
		if (rx->sta && ieee80211_wep_is_weak_iv(rx->skb, rx->key))
 | 
							if (rx->sta && ieee80211_wep_is_weak_iv(rx->skb, rx->key))
 | 
				
			||||||
			rx->sta->wep_weak_iv_count++;
 | 
								rx->sta->wep_weak_iv_count++;
 | 
				
			||||||
		ieee80211_wep_remove_iv(rx->local, rx->skb, rx->key);
 | 
							ieee80211_wep_remove_iv(rx->local, rx->skb, rx->key);
 | 
				
			||||||
		/* remove ICV */
 | 
							/* remove ICV */
 | 
				
			||||||
		if (pskb_trim(rx->skb, rx->skb->len - WEP_ICV_LEN))
 | 
							if (pskb_trim(rx->skb, rx->skb->len - IEEE80211_WEP_ICV_LEN))
 | 
				
			||||||
			return RX_DROP_UNUSABLE;
 | 
								return RX_DROP_UNUSABLE;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -62,10 +62,10 @@ ieee80211_tx_h_michael_mic_add(struct ieee80211_tx_data *tx)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	tail = MICHAEL_MIC_LEN;
 | 
						tail = MICHAEL_MIC_LEN;
 | 
				
			||||||
	if (!info->control.hw_key)
 | 
						if (!info->control.hw_key)
 | 
				
			||||||
		tail += TKIP_ICV_LEN;
 | 
							tail += IEEE80211_TKIP_ICV_LEN;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (WARN_ON(skb_tailroom(skb) < tail ||
 | 
						if (WARN_ON(skb_tailroom(skb) < tail ||
 | 
				
			||||||
		    skb_headroom(skb) < TKIP_IV_LEN))
 | 
							    skb_headroom(skb) < IEEE80211_TKIP_IV_LEN))
 | 
				
			||||||
		return TX_DROP;
 | 
							return TX_DROP;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	key = &tx->key->conf.key[NL80211_TKIP_DATA_OFFSET_TX_MIC_KEY];
 | 
						key = &tx->key->conf.key[NL80211_TKIP_DATA_OFFSET_TX_MIC_KEY];
 | 
				
			||||||
| 
						 | 
					@ -198,15 +198,16 @@ static int tkip_encrypt_skb(struct ieee80211_tx_data *tx, struct sk_buff *skb)
 | 
				
			||||||
	if (info->control.hw_key)
 | 
						if (info->control.hw_key)
 | 
				
			||||||
		tail = 0;
 | 
							tail = 0;
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
		tail = TKIP_ICV_LEN;
 | 
							tail = IEEE80211_TKIP_ICV_LEN;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (WARN_ON(skb_tailroom(skb) < tail ||
 | 
						if (WARN_ON(skb_tailroom(skb) < tail ||
 | 
				
			||||||
		    skb_headroom(skb) < TKIP_IV_LEN))
 | 
							    skb_headroom(skb) < IEEE80211_TKIP_IV_LEN))
 | 
				
			||||||
		return -1;
 | 
							return -1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	pos = skb_push(skb, TKIP_IV_LEN);
 | 
						pos = skb_push(skb, IEEE80211_TKIP_IV_LEN);
 | 
				
			||||||
	memmove(pos, pos + TKIP_IV_LEN, hdrlen);
 | 
						memmove(pos, pos + IEEE80211_TKIP_IV_LEN, hdrlen);
 | 
				
			||||||
	skb_set_network_header(skb, skb_network_offset(skb) + TKIP_IV_LEN);
 | 
						skb_set_network_header(skb, skb_network_offset(skb) +
 | 
				
			||||||
 | 
									    IEEE80211_TKIP_IV_LEN);
 | 
				
			||||||
	pos += hdrlen;
 | 
						pos += hdrlen;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* the HW only needs room for the IV, but not the actual IV */
 | 
						/* the HW only needs room for the IV, but not the actual IV */
 | 
				
			||||||
| 
						 | 
					@ -227,7 +228,7 @@ static int tkip_encrypt_skb(struct ieee80211_tx_data *tx, struct sk_buff *skb)
 | 
				
			||||||
		return 0;
 | 
							return 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Add room for ICV */
 | 
						/* Add room for ICV */
 | 
				
			||||||
	skb_put(skb, TKIP_ICV_LEN);
 | 
						skb_put(skb, IEEE80211_TKIP_ICV_LEN);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return ieee80211_tkip_encrypt_data(tx->local->wep_tx_tfm,
 | 
						return ieee80211_tkip_encrypt_data(tx->local->wep_tx_tfm,
 | 
				
			||||||
					   key, skb, pos, len);
 | 
										   key, skb, pos, len);
 | 
				
			||||||
| 
						 | 
					@ -290,11 +291,11 @@ ieee80211_crypto_tkip_decrypt(struct ieee80211_rx_data *rx)
 | 
				
			||||||
		return RX_DROP_UNUSABLE;
 | 
							return RX_DROP_UNUSABLE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Trim ICV */
 | 
						/* Trim ICV */
 | 
				
			||||||
	skb_trim(skb, skb->len - TKIP_ICV_LEN);
 | 
						skb_trim(skb, skb->len - IEEE80211_TKIP_ICV_LEN);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Remove IV */
 | 
						/* Remove IV */
 | 
				
			||||||
	memmove(skb->data + TKIP_IV_LEN, skb->data, hdrlen);
 | 
						memmove(skb->data + IEEE80211_TKIP_IV_LEN, skb->data, hdrlen);
 | 
				
			||||||
	skb_pull(skb, TKIP_IV_LEN);
 | 
						skb_pull(skb, IEEE80211_TKIP_IV_LEN);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return RX_CONTINUE;
 | 
						return RX_CONTINUE;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -337,9 +338,9 @@ static void ccmp_special_blocks(struct sk_buff *skb, u8 *pn, u8 *scratch,
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
		qos_tid = 0;
 | 
							qos_tid = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	data_len = skb->len - hdrlen - CCMP_HDR_LEN;
 | 
						data_len = skb->len - hdrlen - IEEE80211_CCMP_HDR_LEN;
 | 
				
			||||||
	if (encrypted)
 | 
						if (encrypted)
 | 
				
			||||||
		data_len -= CCMP_MIC_LEN;
 | 
							data_len -= IEEE80211_CCMP_MIC_LEN;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* First block, b_0 */
 | 
						/* First block, b_0 */
 | 
				
			||||||
	b_0[0] = 0x59; /* flags: Adata: 1, M: 011, L: 001 */
 | 
						b_0[0] = 0x59; /* flags: Adata: 1, M: 011, L: 001 */
 | 
				
			||||||
| 
						 | 
					@ -348,7 +349,7 @@ static void ccmp_special_blocks(struct sk_buff *skb, u8 *pn, u8 *scratch,
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	b_0[1] = qos_tid | (mgmt << 4);
 | 
						b_0[1] = qos_tid | (mgmt << 4);
 | 
				
			||||||
	memcpy(&b_0[2], hdr->addr2, ETH_ALEN);
 | 
						memcpy(&b_0[2], hdr->addr2, ETH_ALEN);
 | 
				
			||||||
	memcpy(&b_0[8], pn, CCMP_PN_LEN);
 | 
						memcpy(&b_0[8], pn, IEEE80211_CCMP_PN_LEN);
 | 
				
			||||||
	/* l(m) */
 | 
						/* l(m) */
 | 
				
			||||||
	put_unaligned_be16(data_len, &b_0[14]);
 | 
						put_unaligned_be16(data_len, &b_0[14]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -424,15 +425,16 @@ static int ccmp_encrypt_skb(struct ieee80211_tx_data *tx, struct sk_buff *skb)
 | 
				
			||||||
	if (info->control.hw_key)
 | 
						if (info->control.hw_key)
 | 
				
			||||||
		tail = 0;
 | 
							tail = 0;
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
		tail = CCMP_MIC_LEN;
 | 
							tail = IEEE80211_CCMP_MIC_LEN;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (WARN_ON(skb_tailroom(skb) < tail ||
 | 
						if (WARN_ON(skb_tailroom(skb) < tail ||
 | 
				
			||||||
		    skb_headroom(skb) < CCMP_HDR_LEN))
 | 
							    skb_headroom(skb) < IEEE80211_CCMP_HDR_LEN))
 | 
				
			||||||
		return -1;
 | 
							return -1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	pos = skb_push(skb, CCMP_HDR_LEN);
 | 
						pos = skb_push(skb, IEEE80211_CCMP_HDR_LEN);
 | 
				
			||||||
	memmove(pos, pos + CCMP_HDR_LEN, hdrlen);
 | 
						memmove(pos, pos + IEEE80211_CCMP_HDR_LEN, hdrlen);
 | 
				
			||||||
	skb_set_network_header(skb, skb_network_offset(skb) + CCMP_HDR_LEN);
 | 
						skb_set_network_header(skb, skb_network_offset(skb) +
 | 
				
			||||||
 | 
									    IEEE80211_CCMP_HDR_LEN);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* the HW only needs room for the IV, but not the actual IV */
 | 
						/* the HW only needs room for the IV, but not the actual IV */
 | 
				
			||||||
	if (info->control.hw_key &&
 | 
						if (info->control.hw_key &&
 | 
				
			||||||
| 
						 | 
					@ -457,10 +459,10 @@ static int ccmp_encrypt_skb(struct ieee80211_tx_data *tx, struct sk_buff *skb)
 | 
				
			||||||
	if (info->control.hw_key)
 | 
						if (info->control.hw_key)
 | 
				
			||||||
		return 0;
 | 
							return 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	pos += CCMP_HDR_LEN;
 | 
						pos += IEEE80211_CCMP_HDR_LEN;
 | 
				
			||||||
	ccmp_special_blocks(skb, pn, scratch, 0);
 | 
						ccmp_special_blocks(skb, pn, scratch, 0);
 | 
				
			||||||
	ieee80211_aes_ccm_encrypt(key->u.ccmp.tfm, scratch, pos, len,
 | 
						ieee80211_aes_ccm_encrypt(key->u.ccmp.tfm, scratch, pos, len,
 | 
				
			||||||
				  pos, skb_put(skb, CCMP_MIC_LEN));
 | 
									  pos, skb_put(skb, IEEE80211_CCMP_MIC_LEN));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -490,7 +492,7 @@ ieee80211_crypto_ccmp_decrypt(struct ieee80211_rx_data *rx)
 | 
				
			||||||
	struct ieee80211_key *key = rx->key;
 | 
						struct ieee80211_key *key = rx->key;
 | 
				
			||||||
	struct sk_buff *skb = rx->skb;
 | 
						struct sk_buff *skb = rx->skb;
 | 
				
			||||||
	struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
 | 
						struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
 | 
				
			||||||
	u8 pn[CCMP_PN_LEN];
 | 
						u8 pn[IEEE80211_CCMP_PN_LEN];
 | 
				
			||||||
	int data_len;
 | 
						int data_len;
 | 
				
			||||||
	int queue;
 | 
						int queue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -500,12 +502,13 @@ ieee80211_crypto_ccmp_decrypt(struct ieee80211_rx_data *rx)
 | 
				
			||||||
	    !ieee80211_is_robust_mgmt_frame(hdr))
 | 
						    !ieee80211_is_robust_mgmt_frame(hdr))
 | 
				
			||||||
		return RX_CONTINUE;
 | 
							return RX_CONTINUE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	data_len = skb->len - hdrlen - CCMP_HDR_LEN - CCMP_MIC_LEN;
 | 
						data_len = skb->len - hdrlen - IEEE80211_CCMP_HDR_LEN -
 | 
				
			||||||
 | 
							   IEEE80211_CCMP_MIC_LEN;
 | 
				
			||||||
	if (!rx->sta || data_len < 0)
 | 
						if (!rx->sta || data_len < 0)
 | 
				
			||||||
		return RX_DROP_UNUSABLE;
 | 
							return RX_DROP_UNUSABLE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (status->flag & RX_FLAG_DECRYPTED) {
 | 
						if (status->flag & RX_FLAG_DECRYPTED) {
 | 
				
			||||||
		if (!pskb_may_pull(rx->skb, hdrlen + CCMP_HDR_LEN))
 | 
							if (!pskb_may_pull(rx->skb, hdrlen + IEEE80211_CCMP_HDR_LEN))
 | 
				
			||||||
			return RX_DROP_UNUSABLE;
 | 
								return RX_DROP_UNUSABLE;
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		if (skb_linearize(rx->skb))
 | 
							if (skb_linearize(rx->skb))
 | 
				
			||||||
| 
						 | 
					@ -516,7 +519,7 @@ ieee80211_crypto_ccmp_decrypt(struct ieee80211_rx_data *rx)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	queue = rx->security_idx;
 | 
						queue = rx->security_idx;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (memcmp(pn, key->u.ccmp.rx_pn[queue], CCMP_PN_LEN) <= 0) {
 | 
						if (memcmp(pn, key->u.ccmp.rx_pn[queue], IEEE80211_CCMP_PN_LEN) <= 0) {
 | 
				
			||||||
		key->u.ccmp.replays++;
 | 
							key->u.ccmp.replays++;
 | 
				
			||||||
		return RX_DROP_UNUSABLE;
 | 
							return RX_DROP_UNUSABLE;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					@ -528,19 +531,20 @@ ieee80211_crypto_ccmp_decrypt(struct ieee80211_rx_data *rx)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (ieee80211_aes_ccm_decrypt(
 | 
							if (ieee80211_aes_ccm_decrypt(
 | 
				
			||||||
			    key->u.ccmp.tfm, scratch,
 | 
								    key->u.ccmp.tfm, scratch,
 | 
				
			||||||
			    skb->data + hdrlen + CCMP_HDR_LEN, data_len,
 | 
								    skb->data + hdrlen + IEEE80211_CCMP_HDR_LEN,
 | 
				
			||||||
			    skb->data + skb->len - CCMP_MIC_LEN,
 | 
								    data_len,
 | 
				
			||||||
			    skb->data + hdrlen + CCMP_HDR_LEN))
 | 
								    skb->data + skb->len - IEEE80211_CCMP_MIC_LEN,
 | 
				
			||||||
 | 
								    skb->data + hdrlen + IEEE80211_CCMP_HDR_LEN))
 | 
				
			||||||
			return RX_DROP_UNUSABLE;
 | 
								return RX_DROP_UNUSABLE;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	memcpy(key->u.ccmp.rx_pn[queue], pn, CCMP_PN_LEN);
 | 
						memcpy(key->u.ccmp.rx_pn[queue], pn, IEEE80211_CCMP_PN_LEN);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Remove CCMP header and MIC */
 | 
						/* Remove CCMP header and MIC */
 | 
				
			||||||
	if (pskb_trim(skb, skb->len - CCMP_MIC_LEN))
 | 
						if (pskb_trim(skb, skb->len - IEEE80211_CCMP_MIC_LEN))
 | 
				
			||||||
		return RX_DROP_UNUSABLE;
 | 
							return RX_DROP_UNUSABLE;
 | 
				
			||||||
	memmove(skb->data + CCMP_HDR_LEN, skb->data, hdrlen);
 | 
						memmove(skb->data + IEEE80211_CCMP_HDR_LEN, skb->data, hdrlen);
 | 
				
			||||||
	skb_pull(skb, CCMP_HDR_LEN);
 | 
						skb_pull(skb, IEEE80211_CCMP_HDR_LEN);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return RX_CONTINUE;
 | 
						return RX_CONTINUE;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue