1 /*
2  * lib80211 crypt: host-based TKIP encryption implementation for lib80211
3  *
4  * Copyright (c) 2003-2004, Jouni Malinen <j@w1.fi>
5  * Copyright (c) 2008, John W. Linville <linville@tuxdriver.com>
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License version 2 as
9  * published by the Free Software Foundation. See README and COPYING for
10  * more details.
11  */
12 
13 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
14 
15 #include <linux/err.h>
16 #include <linux/module.h>
17 #include <linux/init.h>
18 #include <linux/slab.h>
19 #include <linux/random.h>
20 #include <linux/scatterlist.h>
21 #include <linux/skbuff.h>
22 #include <linux/netdevice.h>
23 #include <linux/mm.h>
24 #include <linux/if_ether.h>
25 #include <linux/if_arp.h>
26 #include <asm/string.h>
27 
28 #include <linux/wireless.h>
29 #include <linux/ieee80211.h>
30 #include <net/iw_handler.h>
31 
32 #include <crypto/hash.h>
33 #include <crypto/skcipher.h>
34 #include <linux/crc32.h>
35 
36 #include <net/lib80211.h>
37 
38 MODULE_AUTHOR("Jouni Malinen");
39 MODULE_DESCRIPTION("lib80211 crypt: TKIP");
40 MODULE_LICENSE("GPL");
41 
42 #define TKIP_HDR_LEN 8
43 
44 struct lib80211_tkip_data {
45 #define TKIP_KEY_LEN 32
46 	u8 key[TKIP_KEY_LEN];
47 	int key_set;
48 
49 	u32 tx_iv32;
50 	u16 tx_iv16;
51 	u16 tx_ttak[5];
52 	int tx_phase1_done;
53 
54 	u32 rx_iv32;
55 	u16 rx_iv16;
56 	u16 rx_ttak[5];
57 	int rx_phase1_done;
58 	u32 rx_iv32_new;
59 	u16 rx_iv16_new;
60 
61 	u32 dot11RSNAStatsTKIPReplays;
62 	u32 dot11RSNAStatsTKIPICVErrors;
63 	u32 dot11RSNAStatsTKIPLocalMICFailures;
64 
65 	int key_idx;
66 
67 	struct crypto_skcipher *rx_tfm_arc4;
68 	struct crypto_shash *rx_tfm_michael;
69 	struct crypto_skcipher *tx_tfm_arc4;
70 	struct crypto_shash *tx_tfm_michael;
71 
72 	/* scratch buffers for virt_to_page() (crypto API) */
73 	u8 rx_hdr[16], tx_hdr[16];
74 
75 	unsigned long flags;
76 };
77 
lib80211_tkip_set_flags(unsigned long flags,void * priv)78 static unsigned long lib80211_tkip_set_flags(unsigned long flags, void *priv)
79 {
80 	struct lib80211_tkip_data *_priv = priv;
81 	unsigned long old_flags = _priv->flags;
82 	_priv->flags = flags;
83 	return old_flags;
84 }
85 
lib80211_tkip_get_flags(void * priv)86 static unsigned long lib80211_tkip_get_flags(void *priv)
87 {
88 	struct lib80211_tkip_data *_priv = priv;
89 	return _priv->flags;
90 }
91 
lib80211_tkip_init(int key_idx)92 static void *lib80211_tkip_init(int key_idx)
93 {
94 	struct lib80211_tkip_data *priv;
95 
96 	priv = kzalloc(sizeof(*priv), GFP_ATOMIC);
97 	if (priv == NULL)
98 		goto fail;
99 
100 	priv->key_idx = key_idx;
101 
102 	priv->tx_tfm_arc4 = crypto_alloc_skcipher("ecb(arc4)", 0,
103 						  CRYPTO_ALG_ASYNC);
104 	if (IS_ERR(priv->tx_tfm_arc4)) {
105 		priv->tx_tfm_arc4 = NULL;
106 		goto fail;
107 	}
108 
109 	priv->tx_tfm_michael = crypto_alloc_shash("michael_mic", 0, 0);
110 	if (IS_ERR(priv->tx_tfm_michael)) {
111 		priv->tx_tfm_michael = NULL;
112 		goto fail;
113 	}
114 
115 	priv->rx_tfm_arc4 = crypto_alloc_skcipher("ecb(arc4)", 0,
116 						  CRYPTO_ALG_ASYNC);
117 	if (IS_ERR(priv->rx_tfm_arc4)) {
118 		priv->rx_tfm_arc4 = NULL;
119 		goto fail;
120 	}
121 
122 	priv->rx_tfm_michael = crypto_alloc_shash("michael_mic", 0, 0);
123 	if (IS_ERR(priv->rx_tfm_michael)) {
124 		priv->rx_tfm_michael = NULL;
125 		goto fail;
126 	}
127 
128 	return priv;
129 
130       fail:
131 	if (priv) {
132 		crypto_free_shash(priv->tx_tfm_michael);
133 		crypto_free_skcipher(priv->tx_tfm_arc4);
134 		crypto_free_shash(priv->rx_tfm_michael);
135 		crypto_free_skcipher(priv->rx_tfm_arc4);
136 		kfree(priv);
137 	}
138 
139 	return NULL;
140 }
141 
lib80211_tkip_deinit(void * priv)142 static void lib80211_tkip_deinit(void *priv)
143 {
144 	struct lib80211_tkip_data *_priv = priv;
145 	if (_priv) {
146 		crypto_free_shash(_priv->tx_tfm_michael);
147 		crypto_free_skcipher(_priv->tx_tfm_arc4);
148 		crypto_free_shash(_priv->rx_tfm_michael);
149 		crypto_free_skcipher(_priv->rx_tfm_arc4);
150 	}
151 	kfree(priv);
152 }
153 
RotR1(u16 val)154 static inline u16 RotR1(u16 val)
155 {
156 	return (val >> 1) | (val << 15);
157 }
158 
Lo8(u16 val)159 static inline u8 Lo8(u16 val)
160 {
161 	return val & 0xff;
162 }
163 
Hi8(u16 val)164 static inline u8 Hi8(u16 val)
165 {
166 	return val >> 8;
167 }
168 
Lo16(u32 val)169 static inline u16 Lo16(u32 val)
170 {
171 	return val & 0xffff;
172 }
173 
Hi16(u32 val)174 static inline u16 Hi16(u32 val)
175 {
176 	return val >> 16;
177 }
178 
Mk16(u8 hi,u8 lo)179 static inline u16 Mk16(u8 hi, u8 lo)
180 {
181 	return lo | (((u16) hi) << 8);
182 }
183 
Mk16_le(__le16 * v)184 static inline u16 Mk16_le(__le16 * v)
185 {
186 	return le16_to_cpu(*v);
187 }
188 
189 static const u16 Sbox[256] = {
190 	0xC6A5, 0xF884, 0xEE99, 0xF68D, 0xFF0D, 0xD6BD, 0xDEB1, 0x9154,
191 	0x6050, 0x0203, 0xCEA9, 0x567D, 0xE719, 0xB562, 0x4DE6, 0xEC9A,
192 	0x8F45, 0x1F9D, 0x8940, 0xFA87, 0xEF15, 0xB2EB, 0x8EC9, 0xFB0B,
193 	0x41EC, 0xB367, 0x5FFD, 0x45EA, 0x23BF, 0x53F7, 0xE496, 0x9B5B,
194 	0x75C2, 0xE11C, 0x3DAE, 0x4C6A, 0x6C5A, 0x7E41, 0xF502, 0x834F,
195 	0x685C, 0x51F4, 0xD134, 0xF908, 0xE293, 0xAB73, 0x6253, 0x2A3F,
196 	0x080C, 0x9552, 0x4665, 0x9D5E, 0x3028, 0x37A1, 0x0A0F, 0x2FB5,
197 	0x0E09, 0x2436, 0x1B9B, 0xDF3D, 0xCD26, 0x4E69, 0x7FCD, 0xEA9F,
198 	0x121B, 0x1D9E, 0x5874, 0x342E, 0x362D, 0xDCB2, 0xB4EE, 0x5BFB,
199 	0xA4F6, 0x764D, 0xB761, 0x7DCE, 0x527B, 0xDD3E, 0x5E71, 0x1397,
200 	0xA6F5, 0xB968, 0x0000, 0xC12C, 0x4060, 0xE31F, 0x79C8, 0xB6ED,
201 	0xD4BE, 0x8D46, 0x67D9, 0x724B, 0x94DE, 0x98D4, 0xB0E8, 0x854A,
202 	0xBB6B, 0xC52A, 0x4FE5, 0xED16, 0x86C5, 0x9AD7, 0x6655, 0x1194,
203 	0x8ACF, 0xE910, 0x0406, 0xFE81, 0xA0F0, 0x7844, 0x25BA, 0x4BE3,
204 	0xA2F3, 0x5DFE, 0x80C0, 0x058A, 0x3FAD, 0x21BC, 0x7048, 0xF104,
205 	0x63DF, 0x77C1, 0xAF75, 0x4263, 0x2030, 0xE51A, 0xFD0E, 0xBF6D,
206 	0x814C, 0x1814, 0x2635, 0xC32F, 0xBEE1, 0x35A2, 0x88CC, 0x2E39,
207 	0x9357, 0x55F2, 0xFC82, 0x7A47, 0xC8AC, 0xBAE7, 0x322B, 0xE695,
208 	0xC0A0, 0x1998, 0x9ED1, 0xA37F, 0x4466, 0x547E, 0x3BAB, 0x0B83,
209 	0x8CCA, 0xC729, 0x6BD3, 0x283C, 0xA779, 0xBCE2, 0x161D, 0xAD76,
210 	0xDB3B, 0x6456, 0x744E, 0x141E, 0x92DB, 0x0C0A, 0x486C, 0xB8E4,
211 	0x9F5D, 0xBD6E, 0x43EF, 0xC4A6, 0x39A8, 0x31A4, 0xD337, 0xF28B,
212 	0xD532, 0x8B43, 0x6E59, 0xDAB7, 0x018C, 0xB164, 0x9CD2, 0x49E0,
213 	0xD8B4, 0xACFA, 0xF307, 0xCF25, 0xCAAF, 0xF48E, 0x47E9, 0x1018,
214 	0x6FD5, 0xF088, 0x4A6F, 0x5C72, 0x3824, 0x57F1, 0x73C7, 0x9751,
215 	0xCB23, 0xA17C, 0xE89C, 0x3E21, 0x96DD, 0x61DC, 0x0D86, 0x0F85,
216 	0xE090, 0x7C42, 0x71C4, 0xCCAA, 0x90D8, 0x0605, 0xF701, 0x1C12,
217 	0xC2A3, 0x6A5F, 0xAEF9, 0x69D0, 0x1791, 0x9958, 0x3A27, 0x27B9,
218 	0xD938, 0xEB13, 0x2BB3, 0x2233, 0xD2BB, 0xA970, 0x0789, 0x33A7,
219 	0x2DB6, 0x3C22, 0x1592, 0xC920, 0x8749, 0xAAFF, 0x5078, 0xA57A,
220 	0x038F, 0x59F8, 0x0980, 0x1A17, 0x65DA, 0xD731, 0x84C6, 0xD0B8,
221 	0x82C3, 0x29B0, 0x5A77, 0x1E11, 0x7BCB, 0xA8FC, 0x6DD6, 0x2C3A,
222 };
223 
_S_(u16 v)224 static inline u16 _S_(u16 v)
225 {
226 	u16 t = Sbox[Hi8(v)];
227 	return Sbox[Lo8(v)] ^ ((t << 8) | (t >> 8));
228 }
229 
230 #define PHASE1_LOOP_COUNT 8
231 
tkip_mixing_phase1(u16 * TTAK,const u8 * TK,const u8 * TA,u32 IV32)232 static void tkip_mixing_phase1(u16 * TTAK, const u8 * TK, const u8 * TA,
233 			       u32 IV32)
234 {
235 	int i, j;
236 
237 	/* Initialize the 80-bit TTAK from TSC (IV32) and TA[0..5] */
238 	TTAK[0] = Lo16(IV32);
239 	TTAK[1] = Hi16(IV32);
240 	TTAK[2] = Mk16(TA[1], TA[0]);
241 	TTAK[3] = Mk16(TA[3], TA[2]);
242 	TTAK[4] = Mk16(TA[5], TA[4]);
243 
244 	for (i = 0; i < PHASE1_LOOP_COUNT; i++) {
245 		j = 2 * (i & 1);
246 		TTAK[0] += _S_(TTAK[4] ^ Mk16(TK[1 + j], TK[0 + j]));
247 		TTAK[1] += _S_(TTAK[0] ^ Mk16(TK[5 + j], TK[4 + j]));
248 		TTAK[2] += _S_(TTAK[1] ^ Mk16(TK[9 + j], TK[8 + j]));
249 		TTAK[3] += _S_(TTAK[2] ^ Mk16(TK[13 + j], TK[12 + j]));
250 		TTAK[4] += _S_(TTAK[3] ^ Mk16(TK[1 + j], TK[0 + j])) + i;
251 	}
252 }
253 
tkip_mixing_phase2(u8 * WEPSeed,const u8 * TK,const u16 * TTAK,u16 IV16)254 static void tkip_mixing_phase2(u8 * WEPSeed, const u8 * TK, const u16 * TTAK,
255 			       u16 IV16)
256 {
257 	/* Make temporary area overlap WEP seed so that the final copy can be
258 	 * avoided on little endian hosts. */
259 	u16 *PPK = (u16 *) & WEPSeed[4];
260 
261 	/* Step 1 - make copy of TTAK and bring in TSC */
262 	PPK[0] = TTAK[0];
263 	PPK[1] = TTAK[1];
264 	PPK[2] = TTAK[2];
265 	PPK[3] = TTAK[3];
266 	PPK[4] = TTAK[4];
267 	PPK[5] = TTAK[4] + IV16;
268 
269 	/* Step 2 - 96-bit bijective mixing using S-box */
270 	PPK[0] += _S_(PPK[5] ^ Mk16_le((__le16 *) & TK[0]));
271 	PPK[1] += _S_(PPK[0] ^ Mk16_le((__le16 *) & TK[2]));
272 	PPK[2] += _S_(PPK[1] ^ Mk16_le((__le16 *) & TK[4]));
273 	PPK[3] += _S_(PPK[2] ^ Mk16_le((__le16 *) & TK[6]));
274 	PPK[4] += _S_(PPK[3] ^ Mk16_le((__le16 *) & TK[8]));
275 	PPK[5] += _S_(PPK[4] ^ Mk16_le((__le16 *) & TK[10]));
276 
277 	PPK[0] += RotR1(PPK[5] ^ Mk16_le((__le16 *) & TK[12]));
278 	PPK[1] += RotR1(PPK[0] ^ Mk16_le((__le16 *) & TK[14]));
279 	PPK[2] += RotR1(PPK[1]);
280 	PPK[3] += RotR1(PPK[2]);
281 	PPK[4] += RotR1(PPK[3]);
282 	PPK[5] += RotR1(PPK[4]);
283 
284 	/* Step 3 - bring in last of TK bits, assign 24-bit WEP IV value
285 	 * WEPSeed[0..2] is transmitted as WEP IV */
286 	WEPSeed[0] = Hi8(IV16);
287 	WEPSeed[1] = (Hi8(IV16) | 0x20) & 0x7F;
288 	WEPSeed[2] = Lo8(IV16);
289 	WEPSeed[3] = Lo8((PPK[5] ^ Mk16_le((__le16 *) & TK[0])) >> 1);
290 
291 #ifdef __BIG_ENDIAN
292 	{
293 		int i;
294 		for (i = 0; i < 6; i++)
295 			PPK[i] = (PPK[i] << 8) | (PPK[i] >> 8);
296 	}
297 #endif
298 }
299 
lib80211_tkip_hdr(struct sk_buff * skb,int hdr_len,u8 * rc4key,int keylen,void * priv)300 static int lib80211_tkip_hdr(struct sk_buff *skb, int hdr_len,
301 			      u8 * rc4key, int keylen, void *priv)
302 {
303 	struct lib80211_tkip_data *tkey = priv;
304 	u8 *pos;
305 	struct ieee80211_hdr *hdr;
306 
307 	hdr = (struct ieee80211_hdr *)skb->data;
308 
309 	if (skb_headroom(skb) < TKIP_HDR_LEN || skb->len < hdr_len)
310 		return -1;
311 
312 	if (rc4key == NULL || keylen < 16)
313 		return -1;
314 
315 	if (!tkey->tx_phase1_done) {
316 		tkip_mixing_phase1(tkey->tx_ttak, tkey->key, hdr->addr2,
317 				   tkey->tx_iv32);
318 		tkey->tx_phase1_done = 1;
319 	}
320 	tkip_mixing_phase2(rc4key, tkey->key, tkey->tx_ttak, tkey->tx_iv16);
321 
322 	pos = skb_push(skb, TKIP_HDR_LEN);
323 	memmove(pos, pos + TKIP_HDR_LEN, hdr_len);
324 	pos += hdr_len;
325 
326 	*pos++ = *rc4key;
327 	*pos++ = *(rc4key + 1);
328 	*pos++ = *(rc4key + 2);
329 	*pos++ = (tkey->key_idx << 6) | (1 << 5) /* Ext IV included */ ;
330 	*pos++ = tkey->tx_iv32 & 0xff;
331 	*pos++ = (tkey->tx_iv32 >> 8) & 0xff;
332 	*pos++ = (tkey->tx_iv32 >> 16) & 0xff;
333 	*pos++ = (tkey->tx_iv32 >> 24) & 0xff;
334 
335 	tkey->tx_iv16++;
336 	if (tkey->tx_iv16 == 0) {
337 		tkey->tx_phase1_done = 0;
338 		tkey->tx_iv32++;
339 	}
340 
341 	return TKIP_HDR_LEN;
342 }
343 
lib80211_tkip_encrypt(struct sk_buff * skb,int hdr_len,void * priv)344 static int lib80211_tkip_encrypt(struct sk_buff *skb, int hdr_len, void *priv)
345 {
346 	struct lib80211_tkip_data *tkey = priv;
347 	SKCIPHER_REQUEST_ON_STACK(req, tkey->tx_tfm_arc4);
348 	int len;
349 	u8 rc4key[16], *pos, *icv;
350 	u32 crc;
351 	struct scatterlist sg;
352 	int err;
353 
354 	if (tkey->flags & IEEE80211_CRYPTO_TKIP_COUNTERMEASURES) {
355 		struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
356 		net_dbg_ratelimited("TKIP countermeasures: dropped TX packet to %pM\n",
357 				    hdr->addr1);
358 		return -1;
359 	}
360 
361 	if (skb_tailroom(skb) < 4 || skb->len < hdr_len)
362 		return -1;
363 
364 	len = skb->len - hdr_len;
365 	pos = skb->data + hdr_len;
366 
367 	if ((lib80211_tkip_hdr(skb, hdr_len, rc4key, 16, priv)) < 0)
368 		return -1;
369 
370 	crc = ~crc32_le(~0, pos, len);
371 	icv = skb_put(skb, 4);
372 	icv[0] = crc;
373 	icv[1] = crc >> 8;
374 	icv[2] = crc >> 16;
375 	icv[3] = crc >> 24;
376 
377 	crypto_skcipher_setkey(tkey->tx_tfm_arc4, rc4key, 16);
378 	sg_init_one(&sg, pos, len + 4);
379 	skcipher_request_set_tfm(req, tkey->tx_tfm_arc4);
380 	skcipher_request_set_callback(req, 0, NULL, NULL);
381 	skcipher_request_set_crypt(req, &sg, &sg, len + 4, NULL);
382 	err = crypto_skcipher_encrypt(req);
383 	skcipher_request_zero(req);
384 	return err;
385 }
386 
387 /*
388  * deal with seq counter wrapping correctly.
389  * refer to timer_after() for jiffies wrapping handling
390  */
tkip_replay_check(u32 iv32_n,u16 iv16_n,u32 iv32_o,u16 iv16_o)391 static inline int tkip_replay_check(u32 iv32_n, u16 iv16_n,
392 				    u32 iv32_o, u16 iv16_o)
393 {
394 	if ((s32)iv32_n - (s32)iv32_o < 0 ||
395 	    (iv32_n == iv32_o && iv16_n <= iv16_o))
396 		return 1;
397 	return 0;
398 }
399 
lib80211_tkip_decrypt(struct sk_buff * skb,int hdr_len,void * priv)400 static int lib80211_tkip_decrypt(struct sk_buff *skb, int hdr_len, void *priv)
401 {
402 	struct lib80211_tkip_data *tkey = priv;
403 	SKCIPHER_REQUEST_ON_STACK(req, tkey->rx_tfm_arc4);
404 	u8 rc4key[16];
405 	u8 keyidx, *pos;
406 	u32 iv32;
407 	u16 iv16;
408 	struct ieee80211_hdr *hdr;
409 	u8 icv[4];
410 	u32 crc;
411 	struct scatterlist sg;
412 	int plen;
413 	int err;
414 
415 	hdr = (struct ieee80211_hdr *)skb->data;
416 
417 	if (tkey->flags & IEEE80211_CRYPTO_TKIP_COUNTERMEASURES) {
418 		net_dbg_ratelimited("TKIP countermeasures: dropped received packet from %pM\n",
419 				    hdr->addr2);
420 		return -1;
421 	}
422 
423 	if (skb->len < hdr_len + TKIP_HDR_LEN + 4)
424 		return -1;
425 
426 	pos = skb->data + hdr_len;
427 	keyidx = pos[3];
428 	if (!(keyidx & (1 << 5))) {
429 		net_dbg_ratelimited("TKIP: received packet without ExtIV flag from %pM\n",
430 				    hdr->addr2);
431 		return -2;
432 	}
433 	keyidx >>= 6;
434 	if (tkey->key_idx != keyidx) {
435 		net_dbg_ratelimited("TKIP: RX tkey->key_idx=%d frame keyidx=%d\n",
436 				    tkey->key_idx, keyidx);
437 		return -6;
438 	}
439 	if (!tkey->key_set) {
440 		net_dbg_ratelimited("TKIP: received packet from %pM with keyid=%d that does not have a configured key\n",
441 				    hdr->addr2, keyidx);
442 		return -3;
443 	}
444 	iv16 = (pos[0] << 8) | pos[2];
445 	iv32 = pos[4] | (pos[5] << 8) | (pos[6] << 16) | (pos[7] << 24);
446 	pos += TKIP_HDR_LEN;
447 
448 	if (tkip_replay_check(iv32, iv16, tkey->rx_iv32, tkey->rx_iv16)) {
449 #ifdef CONFIG_LIB80211_DEBUG
450 		net_dbg_ratelimited("TKIP: replay detected: STA=%pM previous TSC %08x%04x received TSC %08x%04x\n",
451 				    hdr->addr2, tkey->rx_iv32, tkey->rx_iv16,
452 				    iv32, iv16);
453 #endif
454 		tkey->dot11RSNAStatsTKIPReplays++;
455 		return -4;
456 	}
457 
458 	if (iv32 != tkey->rx_iv32 || !tkey->rx_phase1_done) {
459 		tkip_mixing_phase1(tkey->rx_ttak, tkey->key, hdr->addr2, iv32);
460 		tkey->rx_phase1_done = 1;
461 	}
462 	tkip_mixing_phase2(rc4key, tkey->key, tkey->rx_ttak, iv16);
463 
464 	plen = skb->len - hdr_len - 12;
465 
466 	crypto_skcipher_setkey(tkey->rx_tfm_arc4, rc4key, 16);
467 	sg_init_one(&sg, pos, plen + 4);
468 	skcipher_request_set_tfm(req, tkey->rx_tfm_arc4);
469 	skcipher_request_set_callback(req, 0, NULL, NULL);
470 	skcipher_request_set_crypt(req, &sg, &sg, plen + 4, NULL);
471 	err = crypto_skcipher_decrypt(req);
472 	skcipher_request_zero(req);
473 	if (err) {
474 		net_dbg_ratelimited("TKIP: failed to decrypt received packet from %pM\n",
475 				    hdr->addr2);
476 		return -7;
477 	}
478 
479 	crc = ~crc32_le(~0, pos, plen);
480 	icv[0] = crc;
481 	icv[1] = crc >> 8;
482 	icv[2] = crc >> 16;
483 	icv[3] = crc >> 24;
484 	if (memcmp(icv, pos + plen, 4) != 0) {
485 		if (iv32 != tkey->rx_iv32) {
486 			/* Previously cached Phase1 result was already lost, so
487 			 * it needs to be recalculated for the next packet. */
488 			tkey->rx_phase1_done = 0;
489 		}
490 #ifdef CONFIG_LIB80211_DEBUG
491 		net_dbg_ratelimited("TKIP: ICV error detected: STA=%pM\n",
492 				    hdr->addr2);
493 #endif
494 		tkey->dot11RSNAStatsTKIPICVErrors++;
495 		return -5;
496 	}
497 
498 	/* Update real counters only after Michael MIC verification has
499 	 * completed */
500 	tkey->rx_iv32_new = iv32;
501 	tkey->rx_iv16_new = iv16;
502 
503 	/* Remove IV and ICV */
504 	memmove(skb->data + TKIP_HDR_LEN, skb->data, hdr_len);
505 	skb_pull(skb, TKIP_HDR_LEN);
506 	skb_trim(skb, skb->len - 4);
507 
508 	return keyidx;
509 }
510 
michael_mic(struct crypto_shash * tfm_michael,u8 * key,u8 * hdr,u8 * data,size_t data_len,u8 * mic)511 static int michael_mic(struct crypto_shash *tfm_michael, u8 *key, u8 *hdr,
512 		       u8 *data, size_t data_len, u8 *mic)
513 {
514 	SHASH_DESC_ON_STACK(desc, tfm_michael);
515 	int err;
516 
517 	if (tfm_michael == NULL) {
518 		pr_warn("%s(): tfm_michael == NULL\n", __func__);
519 		return -1;
520 	}
521 
522 	desc->tfm = tfm_michael;
523 	desc->flags = 0;
524 
525 	if (crypto_shash_setkey(tfm_michael, key, 8))
526 		return -1;
527 
528 	err = crypto_shash_init(desc);
529 	if (err)
530 		goto out;
531 	err = crypto_shash_update(desc, hdr, 16);
532 	if (err)
533 		goto out;
534 	err = crypto_shash_update(desc, data, data_len);
535 	if (err)
536 		goto out;
537 	err = crypto_shash_final(desc, mic);
538 
539 out:
540 	shash_desc_zero(desc);
541 	return err;
542 }
543 
michael_mic_hdr(struct sk_buff * skb,u8 * hdr)544 static void michael_mic_hdr(struct sk_buff *skb, u8 * hdr)
545 {
546 	struct ieee80211_hdr *hdr11;
547 
548 	hdr11 = (struct ieee80211_hdr *)skb->data;
549 
550 	switch (le16_to_cpu(hdr11->frame_control) &
551 		(IEEE80211_FCTL_FROMDS | IEEE80211_FCTL_TODS)) {
552 	case IEEE80211_FCTL_TODS:
553 		memcpy(hdr, hdr11->addr3, ETH_ALEN);	/* DA */
554 		memcpy(hdr + ETH_ALEN, hdr11->addr2, ETH_ALEN);	/* SA */
555 		break;
556 	case IEEE80211_FCTL_FROMDS:
557 		memcpy(hdr, hdr11->addr1, ETH_ALEN);	/* DA */
558 		memcpy(hdr + ETH_ALEN, hdr11->addr3, ETH_ALEN);	/* SA */
559 		break;
560 	case IEEE80211_FCTL_FROMDS | IEEE80211_FCTL_TODS:
561 		memcpy(hdr, hdr11->addr3, ETH_ALEN);	/* DA */
562 		memcpy(hdr + ETH_ALEN, hdr11->addr4, ETH_ALEN);	/* SA */
563 		break;
564 	default:
565 		memcpy(hdr, hdr11->addr1, ETH_ALEN);	/* DA */
566 		memcpy(hdr + ETH_ALEN, hdr11->addr2, ETH_ALEN);	/* SA */
567 		break;
568 	}
569 
570 	if (ieee80211_is_data_qos(hdr11->frame_control)) {
571 		hdr[12] = le16_to_cpu(*((__le16 *)ieee80211_get_qos_ctl(hdr11)))
572 			& IEEE80211_QOS_CTL_TID_MASK;
573 	} else
574 		hdr[12] = 0;		/* priority */
575 
576 	hdr[13] = hdr[14] = hdr[15] = 0;	/* reserved */
577 }
578 
lib80211_michael_mic_add(struct sk_buff * skb,int hdr_len,void * priv)579 static int lib80211_michael_mic_add(struct sk_buff *skb, int hdr_len,
580 				     void *priv)
581 {
582 	struct lib80211_tkip_data *tkey = priv;
583 	u8 *pos;
584 
585 	if (skb_tailroom(skb) < 8 || skb->len < hdr_len) {
586 		printk(KERN_DEBUG "Invalid packet for Michael MIC add "
587 		       "(tailroom=%d hdr_len=%d skb->len=%d)\n",
588 		       skb_tailroom(skb), hdr_len, skb->len);
589 		return -1;
590 	}
591 
592 	michael_mic_hdr(skb, tkey->tx_hdr);
593 	pos = skb_put(skb, 8);
594 	if (michael_mic(tkey->tx_tfm_michael, &tkey->key[16], tkey->tx_hdr,
595 			skb->data + hdr_len, skb->len - 8 - hdr_len, pos))
596 		return -1;
597 
598 	return 0;
599 }
600 
lib80211_michael_mic_failure(struct net_device * dev,struct ieee80211_hdr * hdr,int keyidx)601 static void lib80211_michael_mic_failure(struct net_device *dev,
602 					  struct ieee80211_hdr *hdr,
603 					  int keyidx)
604 {
605 	union iwreq_data wrqu;
606 	struct iw_michaelmicfailure ev;
607 
608 	/* TODO: needed parameters: count, keyid, key type, TSC */
609 	memset(&ev, 0, sizeof(ev));
610 	ev.flags = keyidx & IW_MICFAILURE_KEY_ID;
611 	if (hdr->addr1[0] & 0x01)
612 		ev.flags |= IW_MICFAILURE_GROUP;
613 	else
614 		ev.flags |= IW_MICFAILURE_PAIRWISE;
615 	ev.src_addr.sa_family = ARPHRD_ETHER;
616 	memcpy(ev.src_addr.sa_data, hdr->addr2, ETH_ALEN);
617 	memset(&wrqu, 0, sizeof(wrqu));
618 	wrqu.data.length = sizeof(ev);
619 	wireless_send_event(dev, IWEVMICHAELMICFAILURE, &wrqu, (char *)&ev);
620 }
621 
lib80211_michael_mic_verify(struct sk_buff * skb,int keyidx,int hdr_len,void * priv)622 static int lib80211_michael_mic_verify(struct sk_buff *skb, int keyidx,
623 					int hdr_len, void *priv)
624 {
625 	struct lib80211_tkip_data *tkey = priv;
626 	u8 mic[8];
627 
628 	if (!tkey->key_set)
629 		return -1;
630 
631 	michael_mic_hdr(skb, tkey->rx_hdr);
632 	if (michael_mic(tkey->rx_tfm_michael, &tkey->key[24], tkey->rx_hdr,
633 			skb->data + hdr_len, skb->len - 8 - hdr_len, mic))
634 		return -1;
635 	if (memcmp(mic, skb->data + skb->len - 8, 8) != 0) {
636 		struct ieee80211_hdr *hdr;
637 		hdr = (struct ieee80211_hdr *)skb->data;
638 		printk(KERN_DEBUG "%s: Michael MIC verification failed for "
639 		       "MSDU from %pM keyidx=%d\n",
640 		       skb->dev ? skb->dev->name : "N/A", hdr->addr2,
641 		       keyidx);
642 		if (skb->dev)
643 			lib80211_michael_mic_failure(skb->dev, hdr, keyidx);
644 		tkey->dot11RSNAStatsTKIPLocalMICFailures++;
645 		return -1;
646 	}
647 
648 	/* Update TSC counters for RX now that the packet verification has
649 	 * completed. */
650 	tkey->rx_iv32 = tkey->rx_iv32_new;
651 	tkey->rx_iv16 = tkey->rx_iv16_new;
652 
653 	skb_trim(skb, skb->len - 8);
654 
655 	return 0;
656 }
657 
lib80211_tkip_set_key(void * key,int len,u8 * seq,void * priv)658 static int lib80211_tkip_set_key(void *key, int len, u8 * seq, void *priv)
659 {
660 	struct lib80211_tkip_data *tkey = priv;
661 	int keyidx;
662 	struct crypto_shash *tfm = tkey->tx_tfm_michael;
663 	struct crypto_skcipher *tfm2 = tkey->tx_tfm_arc4;
664 	struct crypto_shash *tfm3 = tkey->rx_tfm_michael;
665 	struct crypto_skcipher *tfm4 = tkey->rx_tfm_arc4;
666 
667 	keyidx = tkey->key_idx;
668 	memset(tkey, 0, sizeof(*tkey));
669 	tkey->key_idx = keyidx;
670 	tkey->tx_tfm_michael = tfm;
671 	tkey->tx_tfm_arc4 = tfm2;
672 	tkey->rx_tfm_michael = tfm3;
673 	tkey->rx_tfm_arc4 = tfm4;
674 	if (len == TKIP_KEY_LEN) {
675 		memcpy(tkey->key, key, TKIP_KEY_LEN);
676 		tkey->key_set = 1;
677 		tkey->tx_iv16 = 1;	/* TSC is initialized to 1 */
678 		if (seq) {
679 			tkey->rx_iv32 = (seq[5] << 24) | (seq[4] << 16) |
680 			    (seq[3] << 8) | seq[2];
681 			tkey->rx_iv16 = (seq[1] << 8) | seq[0];
682 		}
683 	} else if (len == 0)
684 		tkey->key_set = 0;
685 	else
686 		return -1;
687 
688 	return 0;
689 }
690 
lib80211_tkip_get_key(void * key,int len,u8 * seq,void * priv)691 static int lib80211_tkip_get_key(void *key, int len, u8 * seq, void *priv)
692 {
693 	struct lib80211_tkip_data *tkey = priv;
694 
695 	if (len < TKIP_KEY_LEN)
696 		return -1;
697 
698 	if (!tkey->key_set)
699 		return 0;
700 	memcpy(key, tkey->key, TKIP_KEY_LEN);
701 
702 	if (seq) {
703 		/* Return the sequence number of the last transmitted frame. */
704 		u16 iv16 = tkey->tx_iv16;
705 		u32 iv32 = tkey->tx_iv32;
706 		if (iv16 == 0)
707 			iv32--;
708 		iv16--;
709 		seq[0] = tkey->tx_iv16;
710 		seq[1] = tkey->tx_iv16 >> 8;
711 		seq[2] = tkey->tx_iv32;
712 		seq[3] = tkey->tx_iv32 >> 8;
713 		seq[4] = tkey->tx_iv32 >> 16;
714 		seq[5] = tkey->tx_iv32 >> 24;
715 	}
716 
717 	return TKIP_KEY_LEN;
718 }
719 
lib80211_tkip_print_stats(struct seq_file * m,void * priv)720 static void lib80211_tkip_print_stats(struct seq_file *m, void *priv)
721 {
722 	struct lib80211_tkip_data *tkip = priv;
723 	seq_printf(m,
724 		   "key[%d] alg=TKIP key_set=%d "
725 		   "tx_pn=%02x%02x%02x%02x%02x%02x "
726 		   "rx_pn=%02x%02x%02x%02x%02x%02x "
727 		   "replays=%d icv_errors=%d local_mic_failures=%d\n",
728 		   tkip->key_idx, tkip->key_set,
729 		   (tkip->tx_iv32 >> 24) & 0xff,
730 		   (tkip->tx_iv32 >> 16) & 0xff,
731 		   (tkip->tx_iv32 >> 8) & 0xff,
732 		   tkip->tx_iv32 & 0xff,
733 		   (tkip->tx_iv16 >> 8) & 0xff,
734 		   tkip->tx_iv16 & 0xff,
735 		   (tkip->rx_iv32 >> 24) & 0xff,
736 		   (tkip->rx_iv32 >> 16) & 0xff,
737 		   (tkip->rx_iv32 >> 8) & 0xff,
738 		   tkip->rx_iv32 & 0xff,
739 		   (tkip->rx_iv16 >> 8) & 0xff,
740 		   tkip->rx_iv16 & 0xff,
741 		   tkip->dot11RSNAStatsTKIPReplays,
742 		   tkip->dot11RSNAStatsTKIPICVErrors,
743 		   tkip->dot11RSNAStatsTKIPLocalMICFailures);
744 }
745 
746 static struct lib80211_crypto_ops lib80211_crypt_tkip = {
747 	.name = "TKIP",
748 	.init = lib80211_tkip_init,
749 	.deinit = lib80211_tkip_deinit,
750 	.encrypt_mpdu = lib80211_tkip_encrypt,
751 	.decrypt_mpdu = lib80211_tkip_decrypt,
752 	.encrypt_msdu = lib80211_michael_mic_add,
753 	.decrypt_msdu = lib80211_michael_mic_verify,
754 	.set_key = lib80211_tkip_set_key,
755 	.get_key = lib80211_tkip_get_key,
756 	.print_stats = lib80211_tkip_print_stats,
757 	.extra_mpdu_prefix_len = 4 + 4,	/* IV + ExtIV */
758 	.extra_mpdu_postfix_len = 4,	/* ICV */
759 	.extra_msdu_postfix_len = 8,	/* MIC */
760 	.get_flags = lib80211_tkip_get_flags,
761 	.set_flags = lib80211_tkip_set_flags,
762 	.owner = THIS_MODULE,
763 };
764 
lib80211_crypto_tkip_init(void)765 static int __init lib80211_crypto_tkip_init(void)
766 {
767 	return lib80211_register_crypto_ops(&lib80211_crypt_tkip);
768 }
769 
lib80211_crypto_tkip_exit(void)770 static void __exit lib80211_crypto_tkip_exit(void)
771 {
772 	lib80211_unregister_crypto_ops(&lib80211_crypt_tkip);
773 }
774 
775 module_init(lib80211_crypto_tkip_init);
776 module_exit(lib80211_crypto_tkip_exit);
777