xref: /openbmc/linux/net/bluetooth/smp.c (revision 3805e6a1)
1 /*
2    BlueZ - Bluetooth protocol stack for Linux
3    Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
4 
5    This program is free software; you can redistribute it and/or modify
6    it under the terms of the GNU General Public License version 2 as
7    published by the Free Software Foundation;
8 
9    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
10    OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
11    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
12    IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
13    CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
14    WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15    ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16    OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 
18    ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
19    COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
20    SOFTWARE IS DISCLAIMED.
21 */
22 
23 #include <linux/debugfs.h>
24 #include <linux/scatterlist.h>
25 #include <crypto/b128ops.h>
26 #include <crypto/hash.h>
27 #include <crypto/skcipher.h>
28 
29 #include <net/bluetooth/bluetooth.h>
30 #include <net/bluetooth/hci_core.h>
31 #include <net/bluetooth/l2cap.h>
32 #include <net/bluetooth/mgmt.h>
33 
34 #include "ecc.h"
35 #include "smp.h"
36 
37 #define SMP_DEV(hdev) \
38 	((struct smp_dev *)((struct l2cap_chan *)((hdev)->smp_data))->data)
39 
40 /* Low-level debug macros to be used for stuff that we don't want
41  * accidentially in dmesg, i.e. the values of the various crypto keys
42  * and the inputs & outputs of crypto functions.
43  */
44 #ifdef DEBUG
45 #define SMP_DBG(fmt, ...) printk(KERN_DEBUG "%s: " fmt, __func__, \
46 				 ##__VA_ARGS__)
47 #else
48 #define SMP_DBG(fmt, ...) no_printk(KERN_DEBUG "%s: " fmt, __func__, \
49 				    ##__VA_ARGS__)
50 #endif
51 
52 #define SMP_ALLOW_CMD(smp, code)	set_bit(code, &smp->allow_cmd)
53 
54 /* Keys which are not distributed with Secure Connections */
55 #define SMP_SC_NO_DIST (SMP_DIST_ENC_KEY | SMP_DIST_LINK_KEY);
56 
57 #define SMP_TIMEOUT	msecs_to_jiffies(30000)
58 
59 #define AUTH_REQ_MASK(dev)	(hci_dev_test_flag(dev, HCI_SC_ENABLED) ? \
60 				 0x1f : 0x07)
61 #define KEY_DIST_MASK		0x07
62 
63 /* Maximum message length that can be passed to aes_cmac */
64 #define CMAC_MSG_MAX	80
65 
66 enum {
67 	SMP_FLAG_TK_VALID,
68 	SMP_FLAG_CFM_PENDING,
69 	SMP_FLAG_MITM_AUTH,
70 	SMP_FLAG_COMPLETE,
71 	SMP_FLAG_INITIATOR,
72 	SMP_FLAG_SC,
73 	SMP_FLAG_REMOTE_PK,
74 	SMP_FLAG_DEBUG_KEY,
75 	SMP_FLAG_WAIT_USER,
76 	SMP_FLAG_DHKEY_PENDING,
77 	SMP_FLAG_REMOTE_OOB,
78 	SMP_FLAG_LOCAL_OOB,
79 };
80 
81 struct smp_dev {
82 	/* Secure Connections OOB data */
83 	u8			local_pk[64];
84 	u8			local_sk[32];
85 	u8			local_rand[16];
86 	bool			debug_key;
87 
88 	u8			min_key_size;
89 	u8			max_key_size;
90 
91 	struct crypto_skcipher	*tfm_aes;
92 	struct crypto_shash	*tfm_cmac;
93 };
94 
95 struct smp_chan {
96 	struct l2cap_conn	*conn;
97 	struct delayed_work	security_timer;
98 	unsigned long           allow_cmd; /* Bitmask of allowed commands */
99 
100 	u8		preq[7]; /* SMP Pairing Request */
101 	u8		prsp[7]; /* SMP Pairing Response */
102 	u8		prnd[16]; /* SMP Pairing Random (local) */
103 	u8		rrnd[16]; /* SMP Pairing Random (remote) */
104 	u8		pcnf[16]; /* SMP Pairing Confirm */
105 	u8		tk[16]; /* SMP Temporary Key */
106 	u8		rr[16]; /* Remote OOB ra/rb value */
107 	u8		lr[16]; /* Local OOB ra/rb value */
108 	u8		enc_key_size;
109 	u8		remote_key_dist;
110 	bdaddr_t	id_addr;
111 	u8		id_addr_type;
112 	u8		irk[16];
113 	struct smp_csrk	*csrk;
114 	struct smp_csrk	*slave_csrk;
115 	struct smp_ltk	*ltk;
116 	struct smp_ltk	*slave_ltk;
117 	struct smp_irk	*remote_irk;
118 	u8		*link_key;
119 	unsigned long	flags;
120 	u8		method;
121 	u8		passkey_round;
122 
123 	/* Secure Connections variables */
124 	u8			local_pk[64];
125 	u8			local_sk[32];
126 	u8			remote_pk[64];
127 	u8			dhkey[32];
128 	u8			mackey[16];
129 
130 	struct crypto_skcipher	*tfm_aes;
131 	struct crypto_shash	*tfm_cmac;
132 };
133 
134 /* These debug key values are defined in the SMP section of the core
135  * specification. debug_pk is the public debug key and debug_sk the
136  * private debug key.
137  */
138 static const u8 debug_pk[64] = {
139 		0xe6, 0x9d, 0x35, 0x0e, 0x48, 0x01, 0x03, 0xcc,
140 		0xdb, 0xfd, 0xf4, 0xac, 0x11, 0x91, 0xf4, 0xef,
141 		0xb9, 0xa5, 0xf9, 0xe9, 0xa7, 0x83, 0x2c, 0x5e,
142 		0x2c, 0xbe, 0x97, 0xf2, 0xd2, 0x03, 0xb0, 0x20,
143 
144 		0x8b, 0xd2, 0x89, 0x15, 0xd0, 0x8e, 0x1c, 0x74,
145 		0x24, 0x30, 0xed, 0x8f, 0xc2, 0x45, 0x63, 0x76,
146 		0x5c, 0x15, 0x52, 0x5a, 0xbf, 0x9a, 0x32, 0x63,
147 		0x6d, 0xeb, 0x2a, 0x65, 0x49, 0x9c, 0x80, 0xdc,
148 };
149 
150 static const u8 debug_sk[32] = {
151 		0xbd, 0x1a, 0x3c, 0xcd, 0xa6, 0xb8, 0x99, 0x58,
152 		0x99, 0xb7, 0x40, 0xeb, 0x7b, 0x60, 0xff, 0x4a,
153 		0x50, 0x3f, 0x10, 0xd2, 0xe3, 0xb3, 0xc9, 0x74,
154 		0x38, 0x5f, 0xc5, 0xa3, 0xd4, 0xf6, 0x49, 0x3f,
155 };
156 
157 static inline void swap_buf(const u8 *src, u8 *dst, size_t len)
158 {
159 	size_t i;
160 
161 	for (i = 0; i < len; i++)
162 		dst[len - 1 - i] = src[i];
163 }
164 
165 /* The following functions map to the LE SC SMP crypto functions
166  * AES-CMAC, f4, f5, f6, g2 and h6.
167  */
168 
169 static int aes_cmac(struct crypto_shash *tfm, const u8 k[16], const u8 *m,
170 		    size_t len, u8 mac[16])
171 {
172 	uint8_t tmp[16], mac_msb[16], msg_msb[CMAC_MSG_MAX];
173 	SHASH_DESC_ON_STACK(desc, tfm);
174 	int err;
175 
176 	if (len > CMAC_MSG_MAX)
177 		return -EFBIG;
178 
179 	if (!tfm) {
180 		BT_ERR("tfm %p", tfm);
181 		return -EINVAL;
182 	}
183 
184 	desc->tfm = tfm;
185 	desc->flags = 0;
186 
187 	/* Swap key and message from LSB to MSB */
188 	swap_buf(k, tmp, 16);
189 	swap_buf(m, msg_msb, len);
190 
191 	SMP_DBG("msg (len %zu) %*phN", len, (int) len, m);
192 	SMP_DBG("key %16phN", k);
193 
194 	err = crypto_shash_setkey(tfm, tmp, 16);
195 	if (err) {
196 		BT_ERR("cipher setkey failed: %d", err);
197 		return err;
198 	}
199 
200 	err = crypto_shash_digest(desc, msg_msb, len, mac_msb);
201 	shash_desc_zero(desc);
202 	if (err) {
203 		BT_ERR("Hash computation error %d", err);
204 		return err;
205 	}
206 
207 	swap_buf(mac_msb, mac, 16);
208 
209 	SMP_DBG("mac %16phN", mac);
210 
211 	return 0;
212 }
213 
214 static int smp_f4(struct crypto_shash *tfm_cmac, const u8 u[32],
215 		  const u8 v[32], const u8 x[16], u8 z, u8 res[16])
216 {
217 	u8 m[65];
218 	int err;
219 
220 	SMP_DBG("u %32phN", u);
221 	SMP_DBG("v %32phN", v);
222 	SMP_DBG("x %16phN z %02x", x, z);
223 
224 	m[0] = z;
225 	memcpy(m + 1, v, 32);
226 	memcpy(m + 33, u, 32);
227 
228 	err = aes_cmac(tfm_cmac, x, m, sizeof(m), res);
229 	if (err)
230 		return err;
231 
232 	SMP_DBG("res %16phN", res);
233 
234 	return err;
235 }
236 
237 static int smp_f5(struct crypto_shash *tfm_cmac, const u8 w[32],
238 		  const u8 n1[16], const u8 n2[16], const u8 a1[7],
239 		  const u8 a2[7], u8 mackey[16], u8 ltk[16])
240 {
241 	/* The btle, salt and length "magic" values are as defined in
242 	 * the SMP section of the Bluetooth core specification. In ASCII
243 	 * the btle value ends up being 'btle'. The salt is just a
244 	 * random number whereas length is the value 256 in little
245 	 * endian format.
246 	 */
247 	const u8 btle[4] = { 0x65, 0x6c, 0x74, 0x62 };
248 	const u8 salt[16] = { 0xbe, 0x83, 0x60, 0x5a, 0xdb, 0x0b, 0x37, 0x60,
249 			      0x38, 0xa5, 0xf5, 0xaa, 0x91, 0x83, 0x88, 0x6c };
250 	const u8 length[2] = { 0x00, 0x01 };
251 	u8 m[53], t[16];
252 	int err;
253 
254 	SMP_DBG("w %32phN", w);
255 	SMP_DBG("n1 %16phN n2 %16phN", n1, n2);
256 	SMP_DBG("a1 %7phN a2 %7phN", a1, a2);
257 
258 	err = aes_cmac(tfm_cmac, salt, w, 32, t);
259 	if (err)
260 		return err;
261 
262 	SMP_DBG("t %16phN", t);
263 
264 	memcpy(m, length, 2);
265 	memcpy(m + 2, a2, 7);
266 	memcpy(m + 9, a1, 7);
267 	memcpy(m + 16, n2, 16);
268 	memcpy(m + 32, n1, 16);
269 	memcpy(m + 48, btle, 4);
270 
271 	m[52] = 0; /* Counter */
272 
273 	err = aes_cmac(tfm_cmac, t, m, sizeof(m), mackey);
274 	if (err)
275 		return err;
276 
277 	SMP_DBG("mackey %16phN", mackey);
278 
279 	m[52] = 1; /* Counter */
280 
281 	err = aes_cmac(tfm_cmac, t, m, sizeof(m), ltk);
282 	if (err)
283 		return err;
284 
285 	SMP_DBG("ltk %16phN", ltk);
286 
287 	return 0;
288 }
289 
290 static int smp_f6(struct crypto_shash *tfm_cmac, const u8 w[16],
291 		  const u8 n1[16], const u8 n2[16], const u8 r[16],
292 		  const u8 io_cap[3], const u8 a1[7], const u8 a2[7],
293 		  u8 res[16])
294 {
295 	u8 m[65];
296 	int err;
297 
298 	SMP_DBG("w %16phN", w);
299 	SMP_DBG("n1 %16phN n2 %16phN", n1, n2);
300 	SMP_DBG("r %16phN io_cap %3phN a1 %7phN a2 %7phN", r, io_cap, a1, a2);
301 
302 	memcpy(m, a2, 7);
303 	memcpy(m + 7, a1, 7);
304 	memcpy(m + 14, io_cap, 3);
305 	memcpy(m + 17, r, 16);
306 	memcpy(m + 33, n2, 16);
307 	memcpy(m + 49, n1, 16);
308 
309 	err = aes_cmac(tfm_cmac, w, m, sizeof(m), res);
310 	if (err)
311 		return err;
312 
313 	SMP_DBG("res %16phN", res);
314 
315 	return err;
316 }
317 
318 static int smp_g2(struct crypto_shash *tfm_cmac, const u8 u[32], const u8 v[32],
319 		  const u8 x[16], const u8 y[16], u32 *val)
320 {
321 	u8 m[80], tmp[16];
322 	int err;
323 
324 	SMP_DBG("u %32phN", u);
325 	SMP_DBG("v %32phN", v);
326 	SMP_DBG("x %16phN y %16phN", x, y);
327 
328 	memcpy(m, y, 16);
329 	memcpy(m + 16, v, 32);
330 	memcpy(m + 48, u, 32);
331 
332 	err = aes_cmac(tfm_cmac, x, m, sizeof(m), tmp);
333 	if (err)
334 		return err;
335 
336 	*val = get_unaligned_le32(tmp);
337 	*val %= 1000000;
338 
339 	SMP_DBG("val %06u", *val);
340 
341 	return 0;
342 }
343 
344 static int smp_h6(struct crypto_shash *tfm_cmac, const u8 w[16],
345 		  const u8 key_id[4], u8 res[16])
346 {
347 	int err;
348 
349 	SMP_DBG("w %16phN key_id %4phN", w, key_id);
350 
351 	err = aes_cmac(tfm_cmac, w, key_id, 4, res);
352 	if (err)
353 		return err;
354 
355 	SMP_DBG("res %16phN", res);
356 
357 	return err;
358 }
359 
360 /* The following functions map to the legacy SMP crypto functions e, c1,
361  * s1 and ah.
362  */
363 
364 static int smp_e(struct crypto_skcipher *tfm, const u8 *k, u8 *r)
365 {
366 	SKCIPHER_REQUEST_ON_STACK(req, tfm);
367 	struct scatterlist sg;
368 	uint8_t tmp[16], data[16];
369 	int err;
370 
371 	SMP_DBG("k %16phN r %16phN", k, r);
372 
373 	if (!tfm) {
374 		BT_ERR("tfm %p", tfm);
375 		return -EINVAL;
376 	}
377 
378 	/* The most significant octet of key corresponds to k[0] */
379 	swap_buf(k, tmp, 16);
380 
381 	err = crypto_skcipher_setkey(tfm, tmp, 16);
382 	if (err) {
383 		BT_ERR("cipher setkey failed: %d", err);
384 		return err;
385 	}
386 
387 	/* Most significant octet of plaintextData corresponds to data[0] */
388 	swap_buf(r, data, 16);
389 
390 	sg_init_one(&sg, data, 16);
391 
392 	skcipher_request_set_tfm(req, tfm);
393 	skcipher_request_set_callback(req, 0, NULL, NULL);
394 	skcipher_request_set_crypt(req, &sg, &sg, 16, NULL);
395 
396 	err = crypto_skcipher_encrypt(req);
397 	skcipher_request_zero(req);
398 	if (err)
399 		BT_ERR("Encrypt data error %d", err);
400 
401 	/* Most significant octet of encryptedData corresponds to data[0] */
402 	swap_buf(data, r, 16);
403 
404 	SMP_DBG("r %16phN", r);
405 
406 	return err;
407 }
408 
409 static int smp_c1(struct crypto_skcipher *tfm_aes, const u8 k[16],
410 		  const u8 r[16], const u8 preq[7], const u8 pres[7], u8 _iat,
411 		  const bdaddr_t *ia, u8 _rat, const bdaddr_t *ra, u8 res[16])
412 {
413 	u8 p1[16], p2[16];
414 	int err;
415 
416 	SMP_DBG("k %16phN r %16phN", k, r);
417 	SMP_DBG("iat %u ia %6phN rat %u ra %6phN", _iat, ia, _rat, ra);
418 	SMP_DBG("preq %7phN pres %7phN", preq, pres);
419 
420 	memset(p1, 0, 16);
421 
422 	/* p1 = pres || preq || _rat || _iat */
423 	p1[0] = _iat;
424 	p1[1] = _rat;
425 	memcpy(p1 + 2, preq, 7);
426 	memcpy(p1 + 9, pres, 7);
427 
428 	SMP_DBG("p1 %16phN", p1);
429 
430 	/* res = r XOR p1 */
431 	u128_xor((u128 *) res, (u128 *) r, (u128 *) p1);
432 
433 	/* res = e(k, res) */
434 	err = smp_e(tfm_aes, k, res);
435 	if (err) {
436 		BT_ERR("Encrypt data error");
437 		return err;
438 	}
439 
440 	/* p2 = padding || ia || ra */
441 	memcpy(p2, ra, 6);
442 	memcpy(p2 + 6, ia, 6);
443 	memset(p2 + 12, 0, 4);
444 
445 	SMP_DBG("p2 %16phN", p2);
446 
447 	/* res = res XOR p2 */
448 	u128_xor((u128 *) res, (u128 *) res, (u128 *) p2);
449 
450 	/* res = e(k, res) */
451 	err = smp_e(tfm_aes, k, res);
452 	if (err)
453 		BT_ERR("Encrypt data error");
454 
455 	return err;
456 }
457 
458 static int smp_s1(struct crypto_skcipher *tfm_aes, const u8 k[16],
459 		  const u8 r1[16], const u8 r2[16], u8 _r[16])
460 {
461 	int err;
462 
463 	/* Just least significant octets from r1 and r2 are considered */
464 	memcpy(_r, r2, 8);
465 	memcpy(_r + 8, r1, 8);
466 
467 	err = smp_e(tfm_aes, k, _r);
468 	if (err)
469 		BT_ERR("Encrypt data error");
470 
471 	return err;
472 }
473 
474 static int smp_ah(struct crypto_skcipher *tfm, const u8 irk[16],
475 		  const u8 r[3], u8 res[3])
476 {
477 	u8 _res[16];
478 	int err;
479 
480 	/* r' = padding || r */
481 	memcpy(_res, r, 3);
482 	memset(_res + 3, 0, 13);
483 
484 	err = smp_e(tfm, irk, _res);
485 	if (err) {
486 		BT_ERR("Encrypt error");
487 		return err;
488 	}
489 
490 	/* The output of the random address function ah is:
491 	 *	ah(k, r) = e(k, r') mod 2^24
492 	 * The output of the security function e is then truncated to 24 bits
493 	 * by taking the least significant 24 bits of the output of e as the
494 	 * result of ah.
495 	 */
496 	memcpy(res, _res, 3);
497 
498 	return 0;
499 }
500 
501 bool smp_irk_matches(struct hci_dev *hdev, const u8 irk[16],
502 		     const bdaddr_t *bdaddr)
503 {
504 	struct l2cap_chan *chan = hdev->smp_data;
505 	struct smp_dev *smp;
506 	u8 hash[3];
507 	int err;
508 
509 	if (!chan || !chan->data)
510 		return false;
511 
512 	smp = chan->data;
513 
514 	BT_DBG("RPA %pMR IRK %*phN", bdaddr, 16, irk);
515 
516 	err = smp_ah(smp->tfm_aes, irk, &bdaddr->b[3], hash);
517 	if (err)
518 		return false;
519 
520 	return !memcmp(bdaddr->b, hash, 3);
521 }
522 
523 int smp_generate_rpa(struct hci_dev *hdev, const u8 irk[16], bdaddr_t *rpa)
524 {
525 	struct l2cap_chan *chan = hdev->smp_data;
526 	struct smp_dev *smp;
527 	int err;
528 
529 	if (!chan || !chan->data)
530 		return -EOPNOTSUPP;
531 
532 	smp = chan->data;
533 
534 	get_random_bytes(&rpa->b[3], 3);
535 
536 	rpa->b[5] &= 0x3f;	/* Clear two most significant bits */
537 	rpa->b[5] |= 0x40;	/* Set second most significant bit */
538 
539 	err = smp_ah(smp->tfm_aes, irk, &rpa->b[3], rpa->b);
540 	if (err < 0)
541 		return err;
542 
543 	BT_DBG("RPA %pMR", rpa);
544 
545 	return 0;
546 }
547 
548 int smp_generate_oob(struct hci_dev *hdev, u8 hash[16], u8 rand[16])
549 {
550 	struct l2cap_chan *chan = hdev->smp_data;
551 	struct smp_dev *smp;
552 	int err;
553 
554 	if (!chan || !chan->data)
555 		return -EOPNOTSUPP;
556 
557 	smp = chan->data;
558 
559 	if (hci_dev_test_flag(hdev, HCI_USE_DEBUG_KEYS)) {
560 		BT_DBG("Using debug keys");
561 		memcpy(smp->local_pk, debug_pk, 64);
562 		memcpy(smp->local_sk, debug_sk, 32);
563 		smp->debug_key = true;
564 	} else {
565 		while (true) {
566 			/* Generate local key pair for Secure Connections */
567 			if (!ecc_make_key(smp->local_pk, smp->local_sk))
568 				return -EIO;
569 
570 			/* This is unlikely, but we need to check that
571 			 * we didn't accidentially generate a debug key.
572 			 */
573 			if (memcmp(smp->local_sk, debug_sk, 32))
574 				break;
575 		}
576 		smp->debug_key = false;
577 	}
578 
579 	SMP_DBG("OOB Public Key X: %32phN", smp->local_pk);
580 	SMP_DBG("OOB Public Key Y: %32phN", smp->local_pk + 32);
581 	SMP_DBG("OOB Private Key:  %32phN", smp->local_sk);
582 
583 	get_random_bytes(smp->local_rand, 16);
584 
585 	err = smp_f4(smp->tfm_cmac, smp->local_pk, smp->local_pk,
586 		     smp->local_rand, 0, hash);
587 	if (err < 0)
588 		return err;
589 
590 	memcpy(rand, smp->local_rand, 16);
591 
592 	return 0;
593 }
594 
595 static void smp_send_cmd(struct l2cap_conn *conn, u8 code, u16 len, void *data)
596 {
597 	struct l2cap_chan *chan = conn->smp;
598 	struct smp_chan *smp;
599 	struct kvec iv[2];
600 	struct msghdr msg;
601 
602 	if (!chan)
603 		return;
604 
605 	BT_DBG("code 0x%2.2x", code);
606 
607 	iv[0].iov_base = &code;
608 	iv[0].iov_len = 1;
609 
610 	iv[1].iov_base = data;
611 	iv[1].iov_len = len;
612 
613 	memset(&msg, 0, sizeof(msg));
614 
615 	iov_iter_kvec(&msg.msg_iter, WRITE | ITER_KVEC, iv, 2, 1 + len);
616 
617 	l2cap_chan_send(chan, &msg, 1 + len);
618 
619 	if (!chan->data)
620 		return;
621 
622 	smp = chan->data;
623 
624 	cancel_delayed_work_sync(&smp->security_timer);
625 	schedule_delayed_work(&smp->security_timer, SMP_TIMEOUT);
626 }
627 
628 static u8 authreq_to_seclevel(u8 authreq)
629 {
630 	if (authreq & SMP_AUTH_MITM) {
631 		if (authreq & SMP_AUTH_SC)
632 			return BT_SECURITY_FIPS;
633 		else
634 			return BT_SECURITY_HIGH;
635 	} else {
636 		return BT_SECURITY_MEDIUM;
637 	}
638 }
639 
640 static __u8 seclevel_to_authreq(__u8 sec_level)
641 {
642 	switch (sec_level) {
643 	case BT_SECURITY_FIPS:
644 	case BT_SECURITY_HIGH:
645 		return SMP_AUTH_MITM | SMP_AUTH_BONDING;
646 	case BT_SECURITY_MEDIUM:
647 		return SMP_AUTH_BONDING;
648 	default:
649 		return SMP_AUTH_NONE;
650 	}
651 }
652 
653 static void build_pairing_cmd(struct l2cap_conn *conn,
654 			      struct smp_cmd_pairing *req,
655 			      struct smp_cmd_pairing *rsp, __u8 authreq)
656 {
657 	struct l2cap_chan *chan = conn->smp;
658 	struct smp_chan *smp = chan->data;
659 	struct hci_conn *hcon = conn->hcon;
660 	struct hci_dev *hdev = hcon->hdev;
661 	u8 local_dist = 0, remote_dist = 0, oob_flag = SMP_OOB_NOT_PRESENT;
662 
663 	if (hci_dev_test_flag(hdev, HCI_BONDABLE)) {
664 		local_dist = SMP_DIST_ENC_KEY | SMP_DIST_SIGN;
665 		remote_dist = SMP_DIST_ENC_KEY | SMP_DIST_SIGN;
666 		authreq |= SMP_AUTH_BONDING;
667 	} else {
668 		authreq &= ~SMP_AUTH_BONDING;
669 	}
670 
671 	if (hci_dev_test_flag(hdev, HCI_RPA_RESOLVING))
672 		remote_dist |= SMP_DIST_ID_KEY;
673 
674 	if (hci_dev_test_flag(hdev, HCI_PRIVACY))
675 		local_dist |= SMP_DIST_ID_KEY;
676 
677 	if (hci_dev_test_flag(hdev, HCI_SC_ENABLED) &&
678 	    (authreq & SMP_AUTH_SC)) {
679 		struct oob_data *oob_data;
680 		u8 bdaddr_type;
681 
682 		if (hci_dev_test_flag(hdev, HCI_SSP_ENABLED)) {
683 			local_dist |= SMP_DIST_LINK_KEY;
684 			remote_dist |= SMP_DIST_LINK_KEY;
685 		}
686 
687 		if (hcon->dst_type == ADDR_LE_DEV_PUBLIC)
688 			bdaddr_type = BDADDR_LE_PUBLIC;
689 		else
690 			bdaddr_type = BDADDR_LE_RANDOM;
691 
692 		oob_data = hci_find_remote_oob_data(hdev, &hcon->dst,
693 						    bdaddr_type);
694 		if (oob_data && oob_data->present) {
695 			set_bit(SMP_FLAG_REMOTE_OOB, &smp->flags);
696 			oob_flag = SMP_OOB_PRESENT;
697 			memcpy(smp->rr, oob_data->rand256, 16);
698 			memcpy(smp->pcnf, oob_data->hash256, 16);
699 			SMP_DBG("OOB Remote Confirmation: %16phN", smp->pcnf);
700 			SMP_DBG("OOB Remote Random: %16phN", smp->rr);
701 		}
702 
703 	} else {
704 		authreq &= ~SMP_AUTH_SC;
705 	}
706 
707 	if (rsp == NULL) {
708 		req->io_capability = conn->hcon->io_capability;
709 		req->oob_flag = oob_flag;
710 		req->max_key_size = SMP_DEV(hdev)->max_key_size;
711 		req->init_key_dist = local_dist;
712 		req->resp_key_dist = remote_dist;
713 		req->auth_req = (authreq & AUTH_REQ_MASK(hdev));
714 
715 		smp->remote_key_dist = remote_dist;
716 		return;
717 	}
718 
719 	rsp->io_capability = conn->hcon->io_capability;
720 	rsp->oob_flag = oob_flag;
721 	rsp->max_key_size = SMP_DEV(hdev)->max_key_size;
722 	rsp->init_key_dist = req->init_key_dist & remote_dist;
723 	rsp->resp_key_dist = req->resp_key_dist & local_dist;
724 	rsp->auth_req = (authreq & AUTH_REQ_MASK(hdev));
725 
726 	smp->remote_key_dist = rsp->init_key_dist;
727 }
728 
729 static u8 check_enc_key_size(struct l2cap_conn *conn, __u8 max_key_size)
730 {
731 	struct l2cap_chan *chan = conn->smp;
732 	struct hci_dev *hdev = conn->hcon->hdev;
733 	struct smp_chan *smp = chan->data;
734 
735 	if (max_key_size > SMP_DEV(hdev)->max_key_size ||
736 	    max_key_size < SMP_MIN_ENC_KEY_SIZE)
737 		return SMP_ENC_KEY_SIZE;
738 
739 	smp->enc_key_size = max_key_size;
740 
741 	return 0;
742 }
743 
744 static void smp_chan_destroy(struct l2cap_conn *conn)
745 {
746 	struct l2cap_chan *chan = conn->smp;
747 	struct smp_chan *smp = chan->data;
748 	struct hci_conn *hcon = conn->hcon;
749 	bool complete;
750 
751 	BUG_ON(!smp);
752 
753 	cancel_delayed_work_sync(&smp->security_timer);
754 
755 	complete = test_bit(SMP_FLAG_COMPLETE, &smp->flags);
756 	mgmt_smp_complete(hcon, complete);
757 
758 	kzfree(smp->csrk);
759 	kzfree(smp->slave_csrk);
760 	kzfree(smp->link_key);
761 
762 	crypto_free_skcipher(smp->tfm_aes);
763 	crypto_free_shash(smp->tfm_cmac);
764 
765 	/* Ensure that we don't leave any debug key around if debug key
766 	 * support hasn't been explicitly enabled.
767 	 */
768 	if (smp->ltk && smp->ltk->type == SMP_LTK_P256_DEBUG &&
769 	    !hci_dev_test_flag(hcon->hdev, HCI_KEEP_DEBUG_KEYS)) {
770 		list_del_rcu(&smp->ltk->list);
771 		kfree_rcu(smp->ltk, rcu);
772 		smp->ltk = NULL;
773 	}
774 
775 	/* If pairing failed clean up any keys we might have */
776 	if (!complete) {
777 		if (smp->ltk) {
778 			list_del_rcu(&smp->ltk->list);
779 			kfree_rcu(smp->ltk, rcu);
780 		}
781 
782 		if (smp->slave_ltk) {
783 			list_del_rcu(&smp->slave_ltk->list);
784 			kfree_rcu(smp->slave_ltk, rcu);
785 		}
786 
787 		if (smp->remote_irk) {
788 			list_del_rcu(&smp->remote_irk->list);
789 			kfree_rcu(smp->remote_irk, rcu);
790 		}
791 	}
792 
793 	chan->data = NULL;
794 	kzfree(smp);
795 	hci_conn_drop(hcon);
796 }
797 
798 static void smp_failure(struct l2cap_conn *conn, u8 reason)
799 {
800 	struct hci_conn *hcon = conn->hcon;
801 	struct l2cap_chan *chan = conn->smp;
802 
803 	if (reason)
804 		smp_send_cmd(conn, SMP_CMD_PAIRING_FAIL, sizeof(reason),
805 			     &reason);
806 
807 	mgmt_auth_failed(hcon, HCI_ERROR_AUTH_FAILURE);
808 
809 	if (chan->data)
810 		smp_chan_destroy(conn);
811 }
812 
813 #define JUST_WORKS	0x00
814 #define JUST_CFM	0x01
815 #define REQ_PASSKEY	0x02
816 #define CFM_PASSKEY	0x03
817 #define REQ_OOB		0x04
818 #define DSP_PASSKEY	0x05
819 #define OVERLAP		0xFF
820 
821 static const u8 gen_method[5][5] = {
822 	{ JUST_WORKS,  JUST_CFM,    REQ_PASSKEY, JUST_WORKS, REQ_PASSKEY },
823 	{ JUST_WORKS,  JUST_CFM,    REQ_PASSKEY, JUST_WORKS, REQ_PASSKEY },
824 	{ CFM_PASSKEY, CFM_PASSKEY, REQ_PASSKEY, JUST_WORKS, CFM_PASSKEY },
825 	{ JUST_WORKS,  JUST_CFM,    JUST_WORKS,  JUST_WORKS, JUST_CFM    },
826 	{ CFM_PASSKEY, CFM_PASSKEY, REQ_PASSKEY, JUST_WORKS, OVERLAP     },
827 };
828 
829 static const u8 sc_method[5][5] = {
830 	{ JUST_WORKS,  JUST_CFM,    REQ_PASSKEY, JUST_WORKS, REQ_PASSKEY },
831 	{ JUST_WORKS,  CFM_PASSKEY, REQ_PASSKEY, JUST_WORKS, CFM_PASSKEY },
832 	{ DSP_PASSKEY, DSP_PASSKEY, REQ_PASSKEY, JUST_WORKS, DSP_PASSKEY },
833 	{ JUST_WORKS,  JUST_CFM,    JUST_WORKS,  JUST_WORKS, JUST_CFM    },
834 	{ DSP_PASSKEY, CFM_PASSKEY, REQ_PASSKEY, JUST_WORKS, CFM_PASSKEY },
835 };
836 
837 static u8 get_auth_method(struct smp_chan *smp, u8 local_io, u8 remote_io)
838 {
839 	/* If either side has unknown io_caps, use JUST_CFM (which gets
840 	 * converted later to JUST_WORKS if we're initiators.
841 	 */
842 	if (local_io > SMP_IO_KEYBOARD_DISPLAY ||
843 	    remote_io > SMP_IO_KEYBOARD_DISPLAY)
844 		return JUST_CFM;
845 
846 	if (test_bit(SMP_FLAG_SC, &smp->flags))
847 		return sc_method[remote_io][local_io];
848 
849 	return gen_method[remote_io][local_io];
850 }
851 
852 static int tk_request(struct l2cap_conn *conn, u8 remote_oob, u8 auth,
853 						u8 local_io, u8 remote_io)
854 {
855 	struct hci_conn *hcon = conn->hcon;
856 	struct l2cap_chan *chan = conn->smp;
857 	struct smp_chan *smp = chan->data;
858 	u32 passkey = 0;
859 	int ret = 0;
860 
861 	/* Initialize key for JUST WORKS */
862 	memset(smp->tk, 0, sizeof(smp->tk));
863 	clear_bit(SMP_FLAG_TK_VALID, &smp->flags);
864 
865 	BT_DBG("tk_request: auth:%d lcl:%d rem:%d", auth, local_io, remote_io);
866 
867 	/* If neither side wants MITM, either "just" confirm an incoming
868 	 * request or use just-works for outgoing ones. The JUST_CFM
869 	 * will be converted to JUST_WORKS if necessary later in this
870 	 * function. If either side has MITM look up the method from the
871 	 * table.
872 	 */
873 	if (!(auth & SMP_AUTH_MITM))
874 		smp->method = JUST_CFM;
875 	else
876 		smp->method = get_auth_method(smp, local_io, remote_io);
877 
878 	/* Don't confirm locally initiated pairing attempts */
879 	if (smp->method == JUST_CFM && test_bit(SMP_FLAG_INITIATOR,
880 						&smp->flags))
881 		smp->method = JUST_WORKS;
882 
883 	/* Don't bother user space with no IO capabilities */
884 	if (smp->method == JUST_CFM &&
885 	    hcon->io_capability == HCI_IO_NO_INPUT_OUTPUT)
886 		smp->method = JUST_WORKS;
887 
888 	/* If Just Works, Continue with Zero TK */
889 	if (smp->method == JUST_WORKS) {
890 		set_bit(SMP_FLAG_TK_VALID, &smp->flags);
891 		return 0;
892 	}
893 
894 	/* If this function is used for SC -> legacy fallback we
895 	 * can only recover the just-works case.
896 	 */
897 	if (test_bit(SMP_FLAG_SC, &smp->flags))
898 		return -EINVAL;
899 
900 	/* Not Just Works/Confirm results in MITM Authentication */
901 	if (smp->method != JUST_CFM) {
902 		set_bit(SMP_FLAG_MITM_AUTH, &smp->flags);
903 		if (hcon->pending_sec_level < BT_SECURITY_HIGH)
904 			hcon->pending_sec_level = BT_SECURITY_HIGH;
905 	}
906 
907 	/* If both devices have Keyoard-Display I/O, the master
908 	 * Confirms and the slave Enters the passkey.
909 	 */
910 	if (smp->method == OVERLAP) {
911 		if (hcon->role == HCI_ROLE_MASTER)
912 			smp->method = CFM_PASSKEY;
913 		else
914 			smp->method = REQ_PASSKEY;
915 	}
916 
917 	/* Generate random passkey. */
918 	if (smp->method == CFM_PASSKEY) {
919 		memset(smp->tk, 0, sizeof(smp->tk));
920 		get_random_bytes(&passkey, sizeof(passkey));
921 		passkey %= 1000000;
922 		put_unaligned_le32(passkey, smp->tk);
923 		BT_DBG("PassKey: %d", passkey);
924 		set_bit(SMP_FLAG_TK_VALID, &smp->flags);
925 	}
926 
927 	if (smp->method == REQ_PASSKEY)
928 		ret = mgmt_user_passkey_request(hcon->hdev, &hcon->dst,
929 						hcon->type, hcon->dst_type);
930 	else if (smp->method == JUST_CFM)
931 		ret = mgmt_user_confirm_request(hcon->hdev, &hcon->dst,
932 						hcon->type, hcon->dst_type,
933 						passkey, 1);
934 	else
935 		ret = mgmt_user_passkey_notify(hcon->hdev, &hcon->dst,
936 						hcon->type, hcon->dst_type,
937 						passkey, 0);
938 
939 	return ret;
940 }
941 
942 static u8 smp_confirm(struct smp_chan *smp)
943 {
944 	struct l2cap_conn *conn = smp->conn;
945 	struct smp_cmd_pairing_confirm cp;
946 	int ret;
947 
948 	BT_DBG("conn %p", conn);
949 
950 	ret = smp_c1(smp->tfm_aes, smp->tk, smp->prnd, smp->preq, smp->prsp,
951 		     conn->hcon->init_addr_type, &conn->hcon->init_addr,
952 		     conn->hcon->resp_addr_type, &conn->hcon->resp_addr,
953 		     cp.confirm_val);
954 	if (ret)
955 		return SMP_UNSPECIFIED;
956 
957 	clear_bit(SMP_FLAG_CFM_PENDING, &smp->flags);
958 
959 	smp_send_cmd(smp->conn, SMP_CMD_PAIRING_CONFIRM, sizeof(cp), &cp);
960 
961 	if (conn->hcon->out)
962 		SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_CONFIRM);
963 	else
964 		SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_RANDOM);
965 
966 	return 0;
967 }
968 
969 static u8 smp_random(struct smp_chan *smp)
970 {
971 	struct l2cap_conn *conn = smp->conn;
972 	struct hci_conn *hcon = conn->hcon;
973 	u8 confirm[16];
974 	int ret;
975 
976 	if (IS_ERR_OR_NULL(smp->tfm_aes))
977 		return SMP_UNSPECIFIED;
978 
979 	BT_DBG("conn %p %s", conn, conn->hcon->out ? "master" : "slave");
980 
981 	ret = smp_c1(smp->tfm_aes, smp->tk, smp->rrnd, smp->preq, smp->prsp,
982 		     hcon->init_addr_type, &hcon->init_addr,
983 		     hcon->resp_addr_type, &hcon->resp_addr, confirm);
984 	if (ret)
985 		return SMP_UNSPECIFIED;
986 
987 	if (memcmp(smp->pcnf, confirm, sizeof(smp->pcnf)) != 0) {
988 		BT_ERR("Pairing failed (confirmation values mismatch)");
989 		return SMP_CONFIRM_FAILED;
990 	}
991 
992 	if (hcon->out) {
993 		u8 stk[16];
994 		__le64 rand = 0;
995 		__le16 ediv = 0;
996 
997 		smp_s1(smp->tfm_aes, smp->tk, smp->rrnd, smp->prnd, stk);
998 
999 		if (test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &hcon->flags))
1000 			return SMP_UNSPECIFIED;
1001 
1002 		hci_le_start_enc(hcon, ediv, rand, stk, smp->enc_key_size);
1003 		hcon->enc_key_size = smp->enc_key_size;
1004 		set_bit(HCI_CONN_STK_ENCRYPT, &hcon->flags);
1005 	} else {
1006 		u8 stk[16], auth;
1007 		__le64 rand = 0;
1008 		__le16 ediv = 0;
1009 
1010 		smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM, sizeof(smp->prnd),
1011 			     smp->prnd);
1012 
1013 		smp_s1(smp->tfm_aes, smp->tk, smp->prnd, smp->rrnd, stk);
1014 
1015 		if (hcon->pending_sec_level == BT_SECURITY_HIGH)
1016 			auth = 1;
1017 		else
1018 			auth = 0;
1019 
1020 		/* Even though there's no _SLAVE suffix this is the
1021 		 * slave STK we're adding for later lookup (the master
1022 		 * STK never needs to be stored).
1023 		 */
1024 		hci_add_ltk(hcon->hdev, &hcon->dst, hcon->dst_type,
1025 			    SMP_STK, auth, stk, smp->enc_key_size, ediv, rand);
1026 	}
1027 
1028 	return 0;
1029 }
1030 
1031 static void smp_notify_keys(struct l2cap_conn *conn)
1032 {
1033 	struct l2cap_chan *chan = conn->smp;
1034 	struct smp_chan *smp = chan->data;
1035 	struct hci_conn *hcon = conn->hcon;
1036 	struct hci_dev *hdev = hcon->hdev;
1037 	struct smp_cmd_pairing *req = (void *) &smp->preq[1];
1038 	struct smp_cmd_pairing *rsp = (void *) &smp->prsp[1];
1039 	bool persistent;
1040 
1041 	if (hcon->type == ACL_LINK) {
1042 		if (hcon->key_type == HCI_LK_DEBUG_COMBINATION)
1043 			persistent = false;
1044 		else
1045 			persistent = !test_bit(HCI_CONN_FLUSH_KEY,
1046 					       &hcon->flags);
1047 	} else {
1048 		/* The LTKs, IRKs and CSRKs should be persistent only if
1049 		 * both sides had the bonding bit set in their
1050 		 * authentication requests.
1051 		 */
1052 		persistent = !!((req->auth_req & rsp->auth_req) &
1053 				SMP_AUTH_BONDING);
1054 	}
1055 
1056 	if (smp->remote_irk) {
1057 		mgmt_new_irk(hdev, smp->remote_irk, persistent);
1058 
1059 		/* Now that user space can be considered to know the
1060 		 * identity address track the connection based on it
1061 		 * from now on (assuming this is an LE link).
1062 		 */
1063 		if (hcon->type == LE_LINK) {
1064 			bacpy(&hcon->dst, &smp->remote_irk->bdaddr);
1065 			hcon->dst_type = smp->remote_irk->addr_type;
1066 			queue_work(hdev->workqueue, &conn->id_addr_update_work);
1067 		}
1068 	}
1069 
1070 	if (smp->csrk) {
1071 		smp->csrk->bdaddr_type = hcon->dst_type;
1072 		bacpy(&smp->csrk->bdaddr, &hcon->dst);
1073 		mgmt_new_csrk(hdev, smp->csrk, persistent);
1074 	}
1075 
1076 	if (smp->slave_csrk) {
1077 		smp->slave_csrk->bdaddr_type = hcon->dst_type;
1078 		bacpy(&smp->slave_csrk->bdaddr, &hcon->dst);
1079 		mgmt_new_csrk(hdev, smp->slave_csrk, persistent);
1080 	}
1081 
1082 	if (smp->ltk) {
1083 		smp->ltk->bdaddr_type = hcon->dst_type;
1084 		bacpy(&smp->ltk->bdaddr, &hcon->dst);
1085 		mgmt_new_ltk(hdev, smp->ltk, persistent);
1086 	}
1087 
1088 	if (smp->slave_ltk) {
1089 		smp->slave_ltk->bdaddr_type = hcon->dst_type;
1090 		bacpy(&smp->slave_ltk->bdaddr, &hcon->dst);
1091 		mgmt_new_ltk(hdev, smp->slave_ltk, persistent);
1092 	}
1093 
1094 	if (smp->link_key) {
1095 		struct link_key *key;
1096 		u8 type;
1097 
1098 		if (test_bit(SMP_FLAG_DEBUG_KEY, &smp->flags))
1099 			type = HCI_LK_DEBUG_COMBINATION;
1100 		else if (hcon->sec_level == BT_SECURITY_FIPS)
1101 			type = HCI_LK_AUTH_COMBINATION_P256;
1102 		else
1103 			type = HCI_LK_UNAUTH_COMBINATION_P256;
1104 
1105 		key = hci_add_link_key(hdev, smp->conn->hcon, &hcon->dst,
1106 				       smp->link_key, type, 0, &persistent);
1107 		if (key) {
1108 			mgmt_new_link_key(hdev, key, persistent);
1109 
1110 			/* Don't keep debug keys around if the relevant
1111 			 * flag is not set.
1112 			 */
1113 			if (!hci_dev_test_flag(hdev, HCI_KEEP_DEBUG_KEYS) &&
1114 			    key->type == HCI_LK_DEBUG_COMBINATION) {
1115 				list_del_rcu(&key->list);
1116 				kfree_rcu(key, rcu);
1117 			}
1118 		}
1119 	}
1120 }
1121 
1122 static void sc_add_ltk(struct smp_chan *smp)
1123 {
1124 	struct hci_conn *hcon = smp->conn->hcon;
1125 	u8 key_type, auth;
1126 
1127 	if (test_bit(SMP_FLAG_DEBUG_KEY, &smp->flags))
1128 		key_type = SMP_LTK_P256_DEBUG;
1129 	else
1130 		key_type = SMP_LTK_P256;
1131 
1132 	if (hcon->pending_sec_level == BT_SECURITY_FIPS)
1133 		auth = 1;
1134 	else
1135 		auth = 0;
1136 
1137 	smp->ltk = hci_add_ltk(hcon->hdev, &hcon->dst, hcon->dst_type,
1138 			       key_type, auth, smp->tk, smp->enc_key_size,
1139 			       0, 0);
1140 }
1141 
1142 static void sc_generate_link_key(struct smp_chan *smp)
1143 {
1144 	/* These constants are as specified in the core specification.
1145 	 * In ASCII they spell out to 'tmp1' and 'lebr'.
1146 	 */
1147 	const u8 tmp1[4] = { 0x31, 0x70, 0x6d, 0x74 };
1148 	const u8 lebr[4] = { 0x72, 0x62, 0x65, 0x6c };
1149 
1150 	smp->link_key = kzalloc(16, GFP_KERNEL);
1151 	if (!smp->link_key)
1152 		return;
1153 
1154 	if (smp_h6(smp->tfm_cmac, smp->tk, tmp1, smp->link_key)) {
1155 		kzfree(smp->link_key);
1156 		smp->link_key = NULL;
1157 		return;
1158 	}
1159 
1160 	if (smp_h6(smp->tfm_cmac, smp->link_key, lebr, smp->link_key)) {
1161 		kzfree(smp->link_key);
1162 		smp->link_key = NULL;
1163 		return;
1164 	}
1165 }
1166 
1167 static void smp_allow_key_dist(struct smp_chan *smp)
1168 {
1169 	/* Allow the first expected phase 3 PDU. The rest of the PDUs
1170 	 * will be allowed in each PDU handler to ensure we receive
1171 	 * them in the correct order.
1172 	 */
1173 	if (smp->remote_key_dist & SMP_DIST_ENC_KEY)
1174 		SMP_ALLOW_CMD(smp, SMP_CMD_ENCRYPT_INFO);
1175 	else if (smp->remote_key_dist & SMP_DIST_ID_KEY)
1176 		SMP_ALLOW_CMD(smp, SMP_CMD_IDENT_INFO);
1177 	else if (smp->remote_key_dist & SMP_DIST_SIGN)
1178 		SMP_ALLOW_CMD(smp, SMP_CMD_SIGN_INFO);
1179 }
1180 
1181 static void sc_generate_ltk(struct smp_chan *smp)
1182 {
1183 	/* These constants are as specified in the core specification.
1184 	 * In ASCII they spell out to 'tmp2' and 'brle'.
1185 	 */
1186 	const u8 tmp2[4] = { 0x32, 0x70, 0x6d, 0x74 };
1187 	const u8 brle[4] = { 0x65, 0x6c, 0x72, 0x62 };
1188 	struct hci_conn *hcon = smp->conn->hcon;
1189 	struct hci_dev *hdev = hcon->hdev;
1190 	struct link_key *key;
1191 
1192 	key = hci_find_link_key(hdev, &hcon->dst);
1193 	if (!key) {
1194 		BT_ERR("%s No Link Key found to generate LTK", hdev->name);
1195 		return;
1196 	}
1197 
1198 	if (key->type == HCI_LK_DEBUG_COMBINATION)
1199 		set_bit(SMP_FLAG_DEBUG_KEY, &smp->flags);
1200 
1201 	if (smp_h6(smp->tfm_cmac, key->val, tmp2, smp->tk))
1202 		return;
1203 
1204 	if (smp_h6(smp->tfm_cmac, smp->tk, brle, smp->tk))
1205 		return;
1206 
1207 	sc_add_ltk(smp);
1208 }
1209 
1210 static void smp_distribute_keys(struct smp_chan *smp)
1211 {
1212 	struct smp_cmd_pairing *req, *rsp;
1213 	struct l2cap_conn *conn = smp->conn;
1214 	struct hci_conn *hcon = conn->hcon;
1215 	struct hci_dev *hdev = hcon->hdev;
1216 	__u8 *keydist;
1217 
1218 	BT_DBG("conn %p", conn);
1219 
1220 	rsp = (void *) &smp->prsp[1];
1221 
1222 	/* The responder sends its keys first */
1223 	if (hcon->out && (smp->remote_key_dist & KEY_DIST_MASK)) {
1224 		smp_allow_key_dist(smp);
1225 		return;
1226 	}
1227 
1228 	req = (void *) &smp->preq[1];
1229 
1230 	if (hcon->out) {
1231 		keydist = &rsp->init_key_dist;
1232 		*keydist &= req->init_key_dist;
1233 	} else {
1234 		keydist = &rsp->resp_key_dist;
1235 		*keydist &= req->resp_key_dist;
1236 	}
1237 
1238 	if (test_bit(SMP_FLAG_SC, &smp->flags)) {
1239 		if (hcon->type == LE_LINK && (*keydist & SMP_DIST_LINK_KEY))
1240 			sc_generate_link_key(smp);
1241 		if (hcon->type == ACL_LINK && (*keydist & SMP_DIST_ENC_KEY))
1242 			sc_generate_ltk(smp);
1243 
1244 		/* Clear the keys which are generated but not distributed */
1245 		*keydist &= ~SMP_SC_NO_DIST;
1246 	}
1247 
1248 	BT_DBG("keydist 0x%x", *keydist);
1249 
1250 	if (*keydist & SMP_DIST_ENC_KEY) {
1251 		struct smp_cmd_encrypt_info enc;
1252 		struct smp_cmd_master_ident ident;
1253 		struct smp_ltk *ltk;
1254 		u8 authenticated;
1255 		__le16 ediv;
1256 		__le64 rand;
1257 
1258 		/* Make sure we generate only the significant amount of
1259 		 * bytes based on the encryption key size, and set the rest
1260 		 * of the value to zeroes.
1261 		 */
1262 		get_random_bytes(enc.ltk, smp->enc_key_size);
1263 		memset(enc.ltk + smp->enc_key_size, 0,
1264 		       sizeof(enc.ltk) - smp->enc_key_size);
1265 
1266 		get_random_bytes(&ediv, sizeof(ediv));
1267 		get_random_bytes(&rand, sizeof(rand));
1268 
1269 		smp_send_cmd(conn, SMP_CMD_ENCRYPT_INFO, sizeof(enc), &enc);
1270 
1271 		authenticated = hcon->sec_level == BT_SECURITY_HIGH;
1272 		ltk = hci_add_ltk(hdev, &hcon->dst, hcon->dst_type,
1273 				  SMP_LTK_SLAVE, authenticated, enc.ltk,
1274 				  smp->enc_key_size, ediv, rand);
1275 		smp->slave_ltk = ltk;
1276 
1277 		ident.ediv = ediv;
1278 		ident.rand = rand;
1279 
1280 		smp_send_cmd(conn, SMP_CMD_MASTER_IDENT, sizeof(ident), &ident);
1281 
1282 		*keydist &= ~SMP_DIST_ENC_KEY;
1283 	}
1284 
1285 	if (*keydist & SMP_DIST_ID_KEY) {
1286 		struct smp_cmd_ident_addr_info addrinfo;
1287 		struct smp_cmd_ident_info idinfo;
1288 
1289 		memcpy(idinfo.irk, hdev->irk, sizeof(idinfo.irk));
1290 
1291 		smp_send_cmd(conn, SMP_CMD_IDENT_INFO, sizeof(idinfo), &idinfo);
1292 
1293 		/* The hci_conn contains the local identity address
1294 		 * after the connection has been established.
1295 		 *
1296 		 * This is true even when the connection has been
1297 		 * established using a resolvable random address.
1298 		 */
1299 		bacpy(&addrinfo.bdaddr, &hcon->src);
1300 		addrinfo.addr_type = hcon->src_type;
1301 
1302 		smp_send_cmd(conn, SMP_CMD_IDENT_ADDR_INFO, sizeof(addrinfo),
1303 			     &addrinfo);
1304 
1305 		*keydist &= ~SMP_DIST_ID_KEY;
1306 	}
1307 
1308 	if (*keydist & SMP_DIST_SIGN) {
1309 		struct smp_cmd_sign_info sign;
1310 		struct smp_csrk *csrk;
1311 
1312 		/* Generate a new random key */
1313 		get_random_bytes(sign.csrk, sizeof(sign.csrk));
1314 
1315 		csrk = kzalloc(sizeof(*csrk), GFP_KERNEL);
1316 		if (csrk) {
1317 			if (hcon->sec_level > BT_SECURITY_MEDIUM)
1318 				csrk->type = MGMT_CSRK_LOCAL_AUTHENTICATED;
1319 			else
1320 				csrk->type = MGMT_CSRK_LOCAL_UNAUTHENTICATED;
1321 			memcpy(csrk->val, sign.csrk, sizeof(csrk->val));
1322 		}
1323 		smp->slave_csrk = csrk;
1324 
1325 		smp_send_cmd(conn, SMP_CMD_SIGN_INFO, sizeof(sign), &sign);
1326 
1327 		*keydist &= ~SMP_DIST_SIGN;
1328 	}
1329 
1330 	/* If there are still keys to be received wait for them */
1331 	if (smp->remote_key_dist & KEY_DIST_MASK) {
1332 		smp_allow_key_dist(smp);
1333 		return;
1334 	}
1335 
1336 	set_bit(SMP_FLAG_COMPLETE, &smp->flags);
1337 	smp_notify_keys(conn);
1338 
1339 	smp_chan_destroy(conn);
1340 }
1341 
1342 static void smp_timeout(struct work_struct *work)
1343 {
1344 	struct smp_chan *smp = container_of(work, struct smp_chan,
1345 					    security_timer.work);
1346 	struct l2cap_conn *conn = smp->conn;
1347 
1348 	BT_DBG("conn %p", conn);
1349 
1350 	hci_disconnect(conn->hcon, HCI_ERROR_REMOTE_USER_TERM);
1351 }
1352 
1353 static struct smp_chan *smp_chan_create(struct l2cap_conn *conn)
1354 {
1355 	struct l2cap_chan *chan = conn->smp;
1356 	struct smp_chan *smp;
1357 
1358 	smp = kzalloc(sizeof(*smp), GFP_ATOMIC);
1359 	if (!smp)
1360 		return NULL;
1361 
1362 	smp->tfm_aes = crypto_alloc_skcipher("ecb(aes)", 0, CRYPTO_ALG_ASYNC);
1363 	if (IS_ERR(smp->tfm_aes)) {
1364 		BT_ERR("Unable to create ECB crypto context");
1365 		kzfree(smp);
1366 		return NULL;
1367 	}
1368 
1369 	smp->tfm_cmac = crypto_alloc_shash("cmac(aes)", 0, 0);
1370 	if (IS_ERR(smp->tfm_cmac)) {
1371 		BT_ERR("Unable to create CMAC crypto context");
1372 		crypto_free_skcipher(smp->tfm_aes);
1373 		kzfree(smp);
1374 		return NULL;
1375 	}
1376 
1377 	smp->conn = conn;
1378 	chan->data = smp;
1379 
1380 	SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_FAIL);
1381 
1382 	INIT_DELAYED_WORK(&smp->security_timer, smp_timeout);
1383 
1384 	hci_conn_hold(conn->hcon);
1385 
1386 	return smp;
1387 }
1388 
1389 static int sc_mackey_and_ltk(struct smp_chan *smp, u8 mackey[16], u8 ltk[16])
1390 {
1391 	struct hci_conn *hcon = smp->conn->hcon;
1392 	u8 *na, *nb, a[7], b[7];
1393 
1394 	if (hcon->out) {
1395 		na   = smp->prnd;
1396 		nb   = smp->rrnd;
1397 	} else {
1398 		na   = smp->rrnd;
1399 		nb   = smp->prnd;
1400 	}
1401 
1402 	memcpy(a, &hcon->init_addr, 6);
1403 	memcpy(b, &hcon->resp_addr, 6);
1404 	a[6] = hcon->init_addr_type;
1405 	b[6] = hcon->resp_addr_type;
1406 
1407 	return smp_f5(smp->tfm_cmac, smp->dhkey, na, nb, a, b, mackey, ltk);
1408 }
1409 
1410 static void sc_dhkey_check(struct smp_chan *smp)
1411 {
1412 	struct hci_conn *hcon = smp->conn->hcon;
1413 	struct smp_cmd_dhkey_check check;
1414 	u8 a[7], b[7], *local_addr, *remote_addr;
1415 	u8 io_cap[3], r[16];
1416 
1417 	memcpy(a, &hcon->init_addr, 6);
1418 	memcpy(b, &hcon->resp_addr, 6);
1419 	a[6] = hcon->init_addr_type;
1420 	b[6] = hcon->resp_addr_type;
1421 
1422 	if (hcon->out) {
1423 		local_addr = a;
1424 		remote_addr = b;
1425 		memcpy(io_cap, &smp->preq[1], 3);
1426 	} else {
1427 		local_addr = b;
1428 		remote_addr = a;
1429 		memcpy(io_cap, &smp->prsp[1], 3);
1430 	}
1431 
1432 	memset(r, 0, sizeof(r));
1433 
1434 	if (smp->method == REQ_PASSKEY || smp->method == DSP_PASSKEY)
1435 		put_unaligned_le32(hcon->passkey_notify, r);
1436 
1437 	if (smp->method == REQ_OOB)
1438 		memcpy(r, smp->rr, 16);
1439 
1440 	smp_f6(smp->tfm_cmac, smp->mackey, smp->prnd, smp->rrnd, r, io_cap,
1441 	       local_addr, remote_addr, check.e);
1442 
1443 	smp_send_cmd(smp->conn, SMP_CMD_DHKEY_CHECK, sizeof(check), &check);
1444 }
1445 
1446 static u8 sc_passkey_send_confirm(struct smp_chan *smp)
1447 {
1448 	struct l2cap_conn *conn = smp->conn;
1449 	struct hci_conn *hcon = conn->hcon;
1450 	struct smp_cmd_pairing_confirm cfm;
1451 	u8 r;
1452 
1453 	r = ((hcon->passkey_notify >> smp->passkey_round) & 0x01);
1454 	r |= 0x80;
1455 
1456 	get_random_bytes(smp->prnd, sizeof(smp->prnd));
1457 
1458 	if (smp_f4(smp->tfm_cmac, smp->local_pk, smp->remote_pk, smp->prnd, r,
1459 		   cfm.confirm_val))
1460 		return SMP_UNSPECIFIED;
1461 
1462 	smp_send_cmd(conn, SMP_CMD_PAIRING_CONFIRM, sizeof(cfm), &cfm);
1463 
1464 	return 0;
1465 }
1466 
1467 static u8 sc_passkey_round(struct smp_chan *smp, u8 smp_op)
1468 {
1469 	struct l2cap_conn *conn = smp->conn;
1470 	struct hci_conn *hcon = conn->hcon;
1471 	struct hci_dev *hdev = hcon->hdev;
1472 	u8 cfm[16], r;
1473 
1474 	/* Ignore the PDU if we've already done 20 rounds (0 - 19) */
1475 	if (smp->passkey_round >= 20)
1476 		return 0;
1477 
1478 	switch (smp_op) {
1479 	case SMP_CMD_PAIRING_RANDOM:
1480 		r = ((hcon->passkey_notify >> smp->passkey_round) & 0x01);
1481 		r |= 0x80;
1482 
1483 		if (smp_f4(smp->tfm_cmac, smp->remote_pk, smp->local_pk,
1484 			   smp->rrnd, r, cfm))
1485 			return SMP_UNSPECIFIED;
1486 
1487 		if (memcmp(smp->pcnf, cfm, 16))
1488 			return SMP_CONFIRM_FAILED;
1489 
1490 		smp->passkey_round++;
1491 
1492 		if (smp->passkey_round == 20) {
1493 			/* Generate MacKey and LTK */
1494 			if (sc_mackey_and_ltk(smp, smp->mackey, smp->tk))
1495 				return SMP_UNSPECIFIED;
1496 		}
1497 
1498 		/* The round is only complete when the initiator
1499 		 * receives pairing random.
1500 		 */
1501 		if (!hcon->out) {
1502 			smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM,
1503 				     sizeof(smp->prnd), smp->prnd);
1504 			if (smp->passkey_round == 20)
1505 				SMP_ALLOW_CMD(smp, SMP_CMD_DHKEY_CHECK);
1506 			else
1507 				SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_CONFIRM);
1508 			return 0;
1509 		}
1510 
1511 		/* Start the next round */
1512 		if (smp->passkey_round != 20)
1513 			return sc_passkey_round(smp, 0);
1514 
1515 		/* Passkey rounds are complete - start DHKey Check */
1516 		sc_dhkey_check(smp);
1517 		SMP_ALLOW_CMD(smp, SMP_CMD_DHKEY_CHECK);
1518 
1519 		break;
1520 
1521 	case SMP_CMD_PAIRING_CONFIRM:
1522 		if (test_bit(SMP_FLAG_WAIT_USER, &smp->flags)) {
1523 			set_bit(SMP_FLAG_CFM_PENDING, &smp->flags);
1524 			return 0;
1525 		}
1526 
1527 		SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_RANDOM);
1528 
1529 		if (hcon->out) {
1530 			smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM,
1531 				     sizeof(smp->prnd), smp->prnd);
1532 			return 0;
1533 		}
1534 
1535 		return sc_passkey_send_confirm(smp);
1536 
1537 	case SMP_CMD_PUBLIC_KEY:
1538 	default:
1539 		/* Initiating device starts the round */
1540 		if (!hcon->out)
1541 			return 0;
1542 
1543 		BT_DBG("%s Starting passkey round %u", hdev->name,
1544 		       smp->passkey_round + 1);
1545 
1546 		SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_CONFIRM);
1547 
1548 		return sc_passkey_send_confirm(smp);
1549 	}
1550 
1551 	return 0;
1552 }
1553 
1554 static int sc_user_reply(struct smp_chan *smp, u16 mgmt_op, __le32 passkey)
1555 {
1556 	struct l2cap_conn *conn = smp->conn;
1557 	struct hci_conn *hcon = conn->hcon;
1558 	u8 smp_op;
1559 
1560 	clear_bit(SMP_FLAG_WAIT_USER, &smp->flags);
1561 
1562 	switch (mgmt_op) {
1563 	case MGMT_OP_USER_PASSKEY_NEG_REPLY:
1564 		smp_failure(smp->conn, SMP_PASSKEY_ENTRY_FAILED);
1565 		return 0;
1566 	case MGMT_OP_USER_CONFIRM_NEG_REPLY:
1567 		smp_failure(smp->conn, SMP_NUMERIC_COMP_FAILED);
1568 		return 0;
1569 	case MGMT_OP_USER_PASSKEY_REPLY:
1570 		hcon->passkey_notify = le32_to_cpu(passkey);
1571 		smp->passkey_round = 0;
1572 
1573 		if (test_and_clear_bit(SMP_FLAG_CFM_PENDING, &smp->flags))
1574 			smp_op = SMP_CMD_PAIRING_CONFIRM;
1575 		else
1576 			smp_op = 0;
1577 
1578 		if (sc_passkey_round(smp, smp_op))
1579 			return -EIO;
1580 
1581 		return 0;
1582 	}
1583 
1584 	/* Initiator sends DHKey check first */
1585 	if (hcon->out) {
1586 		sc_dhkey_check(smp);
1587 		SMP_ALLOW_CMD(smp, SMP_CMD_DHKEY_CHECK);
1588 	} else if (test_and_clear_bit(SMP_FLAG_DHKEY_PENDING, &smp->flags)) {
1589 		sc_dhkey_check(smp);
1590 		sc_add_ltk(smp);
1591 	}
1592 
1593 	return 0;
1594 }
1595 
1596 int smp_user_confirm_reply(struct hci_conn *hcon, u16 mgmt_op, __le32 passkey)
1597 {
1598 	struct l2cap_conn *conn = hcon->l2cap_data;
1599 	struct l2cap_chan *chan;
1600 	struct smp_chan *smp;
1601 	u32 value;
1602 	int err;
1603 
1604 	BT_DBG("");
1605 
1606 	if (!conn)
1607 		return -ENOTCONN;
1608 
1609 	chan = conn->smp;
1610 	if (!chan)
1611 		return -ENOTCONN;
1612 
1613 	l2cap_chan_lock(chan);
1614 	if (!chan->data) {
1615 		err = -ENOTCONN;
1616 		goto unlock;
1617 	}
1618 
1619 	smp = chan->data;
1620 
1621 	if (test_bit(SMP_FLAG_SC, &smp->flags)) {
1622 		err = sc_user_reply(smp, mgmt_op, passkey);
1623 		goto unlock;
1624 	}
1625 
1626 	switch (mgmt_op) {
1627 	case MGMT_OP_USER_PASSKEY_REPLY:
1628 		value = le32_to_cpu(passkey);
1629 		memset(smp->tk, 0, sizeof(smp->tk));
1630 		BT_DBG("PassKey: %d", value);
1631 		put_unaligned_le32(value, smp->tk);
1632 		/* Fall Through */
1633 	case MGMT_OP_USER_CONFIRM_REPLY:
1634 		set_bit(SMP_FLAG_TK_VALID, &smp->flags);
1635 		break;
1636 	case MGMT_OP_USER_PASSKEY_NEG_REPLY:
1637 	case MGMT_OP_USER_CONFIRM_NEG_REPLY:
1638 		smp_failure(conn, SMP_PASSKEY_ENTRY_FAILED);
1639 		err = 0;
1640 		goto unlock;
1641 	default:
1642 		smp_failure(conn, SMP_PASSKEY_ENTRY_FAILED);
1643 		err = -EOPNOTSUPP;
1644 		goto unlock;
1645 	}
1646 
1647 	err = 0;
1648 
1649 	/* If it is our turn to send Pairing Confirm, do so now */
1650 	if (test_bit(SMP_FLAG_CFM_PENDING, &smp->flags)) {
1651 		u8 rsp = smp_confirm(smp);
1652 		if (rsp)
1653 			smp_failure(conn, rsp);
1654 	}
1655 
1656 unlock:
1657 	l2cap_chan_unlock(chan);
1658 	return err;
1659 }
1660 
1661 static void build_bredr_pairing_cmd(struct smp_chan *smp,
1662 				    struct smp_cmd_pairing *req,
1663 				    struct smp_cmd_pairing *rsp)
1664 {
1665 	struct l2cap_conn *conn = smp->conn;
1666 	struct hci_dev *hdev = conn->hcon->hdev;
1667 	u8 local_dist = 0, remote_dist = 0;
1668 
1669 	if (hci_dev_test_flag(hdev, HCI_BONDABLE)) {
1670 		local_dist = SMP_DIST_ENC_KEY | SMP_DIST_SIGN;
1671 		remote_dist = SMP_DIST_ENC_KEY | SMP_DIST_SIGN;
1672 	}
1673 
1674 	if (hci_dev_test_flag(hdev, HCI_RPA_RESOLVING))
1675 		remote_dist |= SMP_DIST_ID_KEY;
1676 
1677 	if (hci_dev_test_flag(hdev, HCI_PRIVACY))
1678 		local_dist |= SMP_DIST_ID_KEY;
1679 
1680 	if (!rsp) {
1681 		memset(req, 0, sizeof(*req));
1682 
1683 		req->init_key_dist   = local_dist;
1684 		req->resp_key_dist   = remote_dist;
1685 		req->max_key_size    = conn->hcon->enc_key_size;
1686 
1687 		smp->remote_key_dist = remote_dist;
1688 
1689 		return;
1690 	}
1691 
1692 	memset(rsp, 0, sizeof(*rsp));
1693 
1694 	rsp->max_key_size    = conn->hcon->enc_key_size;
1695 	rsp->init_key_dist   = req->init_key_dist & remote_dist;
1696 	rsp->resp_key_dist   = req->resp_key_dist & local_dist;
1697 
1698 	smp->remote_key_dist = rsp->init_key_dist;
1699 }
1700 
1701 static u8 smp_cmd_pairing_req(struct l2cap_conn *conn, struct sk_buff *skb)
1702 {
1703 	struct smp_cmd_pairing rsp, *req = (void *) skb->data;
1704 	struct l2cap_chan *chan = conn->smp;
1705 	struct hci_dev *hdev = conn->hcon->hdev;
1706 	struct smp_chan *smp;
1707 	u8 key_size, auth, sec_level;
1708 	int ret;
1709 
1710 	BT_DBG("conn %p", conn);
1711 
1712 	if (skb->len < sizeof(*req))
1713 		return SMP_INVALID_PARAMS;
1714 
1715 	if (conn->hcon->role != HCI_ROLE_SLAVE)
1716 		return SMP_CMD_NOTSUPP;
1717 
1718 	if (!chan->data)
1719 		smp = smp_chan_create(conn);
1720 	else
1721 		smp = chan->data;
1722 
1723 	if (!smp)
1724 		return SMP_UNSPECIFIED;
1725 
1726 	/* We didn't start the pairing, so match remote */
1727 	auth = req->auth_req & AUTH_REQ_MASK(hdev);
1728 
1729 	if (!hci_dev_test_flag(hdev, HCI_BONDABLE) &&
1730 	    (auth & SMP_AUTH_BONDING))
1731 		return SMP_PAIRING_NOTSUPP;
1732 
1733 	if (hci_dev_test_flag(hdev, HCI_SC_ONLY) && !(auth & SMP_AUTH_SC))
1734 		return SMP_AUTH_REQUIREMENTS;
1735 
1736 	smp->preq[0] = SMP_CMD_PAIRING_REQ;
1737 	memcpy(&smp->preq[1], req, sizeof(*req));
1738 	skb_pull(skb, sizeof(*req));
1739 
1740 	/* If the remote side's OOB flag is set it means it has
1741 	 * successfully received our local OOB data - therefore set the
1742 	 * flag to indicate that local OOB is in use.
1743 	 */
1744 	if (req->oob_flag == SMP_OOB_PRESENT)
1745 		set_bit(SMP_FLAG_LOCAL_OOB, &smp->flags);
1746 
1747 	/* SMP over BR/EDR requires special treatment */
1748 	if (conn->hcon->type == ACL_LINK) {
1749 		/* We must have a BR/EDR SC link */
1750 		if (!test_bit(HCI_CONN_AES_CCM, &conn->hcon->flags) &&
1751 		    !hci_dev_test_flag(hdev, HCI_FORCE_BREDR_SMP))
1752 			return SMP_CROSS_TRANSP_NOT_ALLOWED;
1753 
1754 		set_bit(SMP_FLAG_SC, &smp->flags);
1755 
1756 		build_bredr_pairing_cmd(smp, req, &rsp);
1757 
1758 		key_size = min(req->max_key_size, rsp.max_key_size);
1759 		if (check_enc_key_size(conn, key_size))
1760 			return SMP_ENC_KEY_SIZE;
1761 
1762 		/* Clear bits which are generated but not distributed */
1763 		smp->remote_key_dist &= ~SMP_SC_NO_DIST;
1764 
1765 		smp->prsp[0] = SMP_CMD_PAIRING_RSP;
1766 		memcpy(&smp->prsp[1], &rsp, sizeof(rsp));
1767 		smp_send_cmd(conn, SMP_CMD_PAIRING_RSP, sizeof(rsp), &rsp);
1768 
1769 		smp_distribute_keys(smp);
1770 		return 0;
1771 	}
1772 
1773 	build_pairing_cmd(conn, req, &rsp, auth);
1774 
1775 	if (rsp.auth_req & SMP_AUTH_SC)
1776 		set_bit(SMP_FLAG_SC, &smp->flags);
1777 
1778 	if (conn->hcon->io_capability == HCI_IO_NO_INPUT_OUTPUT)
1779 		sec_level = BT_SECURITY_MEDIUM;
1780 	else
1781 		sec_level = authreq_to_seclevel(auth);
1782 
1783 	if (sec_level > conn->hcon->pending_sec_level)
1784 		conn->hcon->pending_sec_level = sec_level;
1785 
1786 	/* If we need MITM check that it can be achieved */
1787 	if (conn->hcon->pending_sec_level >= BT_SECURITY_HIGH) {
1788 		u8 method;
1789 
1790 		method = get_auth_method(smp, conn->hcon->io_capability,
1791 					 req->io_capability);
1792 		if (method == JUST_WORKS || method == JUST_CFM)
1793 			return SMP_AUTH_REQUIREMENTS;
1794 	}
1795 
1796 	key_size = min(req->max_key_size, rsp.max_key_size);
1797 	if (check_enc_key_size(conn, key_size))
1798 		return SMP_ENC_KEY_SIZE;
1799 
1800 	get_random_bytes(smp->prnd, sizeof(smp->prnd));
1801 
1802 	smp->prsp[0] = SMP_CMD_PAIRING_RSP;
1803 	memcpy(&smp->prsp[1], &rsp, sizeof(rsp));
1804 
1805 	smp_send_cmd(conn, SMP_CMD_PAIRING_RSP, sizeof(rsp), &rsp);
1806 
1807 	clear_bit(SMP_FLAG_INITIATOR, &smp->flags);
1808 
1809 	/* Strictly speaking we shouldn't allow Pairing Confirm for the
1810 	 * SC case, however some implementations incorrectly copy RFU auth
1811 	 * req bits from our security request, which may create a false
1812 	 * positive SC enablement.
1813 	 */
1814 	SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_CONFIRM);
1815 
1816 	if (test_bit(SMP_FLAG_SC, &smp->flags)) {
1817 		SMP_ALLOW_CMD(smp, SMP_CMD_PUBLIC_KEY);
1818 		/* Clear bits which are generated but not distributed */
1819 		smp->remote_key_dist &= ~SMP_SC_NO_DIST;
1820 		/* Wait for Public Key from Initiating Device */
1821 		return 0;
1822 	}
1823 
1824 	/* Request setup of TK */
1825 	ret = tk_request(conn, 0, auth, rsp.io_capability, req->io_capability);
1826 	if (ret)
1827 		return SMP_UNSPECIFIED;
1828 
1829 	return 0;
1830 }
1831 
1832 static u8 sc_send_public_key(struct smp_chan *smp)
1833 {
1834 	struct hci_dev *hdev = smp->conn->hcon->hdev;
1835 
1836 	BT_DBG("");
1837 
1838 	if (test_bit(SMP_FLAG_LOCAL_OOB, &smp->flags)) {
1839 		struct l2cap_chan *chan = hdev->smp_data;
1840 		struct smp_dev *smp_dev;
1841 
1842 		if (!chan || !chan->data)
1843 			return SMP_UNSPECIFIED;
1844 
1845 		smp_dev = chan->data;
1846 
1847 		memcpy(smp->local_pk, smp_dev->local_pk, 64);
1848 		memcpy(smp->local_sk, smp_dev->local_sk, 32);
1849 		memcpy(smp->lr, smp_dev->local_rand, 16);
1850 
1851 		if (smp_dev->debug_key)
1852 			set_bit(SMP_FLAG_DEBUG_KEY, &smp->flags);
1853 
1854 		goto done;
1855 	}
1856 
1857 	if (hci_dev_test_flag(hdev, HCI_USE_DEBUG_KEYS)) {
1858 		BT_DBG("Using debug keys");
1859 		memcpy(smp->local_pk, debug_pk, 64);
1860 		memcpy(smp->local_sk, debug_sk, 32);
1861 		set_bit(SMP_FLAG_DEBUG_KEY, &smp->flags);
1862 	} else {
1863 		while (true) {
1864 			/* Generate local key pair for Secure Connections */
1865 			if (!ecc_make_key(smp->local_pk, smp->local_sk))
1866 				return SMP_UNSPECIFIED;
1867 
1868 			/* This is unlikely, but we need to check that
1869 			 * we didn't accidentially generate a debug key.
1870 			 */
1871 			if (memcmp(smp->local_sk, debug_sk, 32))
1872 				break;
1873 		}
1874 	}
1875 
1876 done:
1877 	SMP_DBG("Local Public Key X: %32phN", smp->local_pk);
1878 	SMP_DBG("Local Public Key Y: %32phN", smp->local_pk + 32);
1879 	SMP_DBG("Local Private Key:  %32phN", smp->local_sk);
1880 
1881 	smp_send_cmd(smp->conn, SMP_CMD_PUBLIC_KEY, 64, smp->local_pk);
1882 
1883 	return 0;
1884 }
1885 
1886 static u8 smp_cmd_pairing_rsp(struct l2cap_conn *conn, struct sk_buff *skb)
1887 {
1888 	struct smp_cmd_pairing *req, *rsp = (void *) skb->data;
1889 	struct l2cap_chan *chan = conn->smp;
1890 	struct smp_chan *smp = chan->data;
1891 	struct hci_dev *hdev = conn->hcon->hdev;
1892 	u8 key_size, auth;
1893 	int ret;
1894 
1895 	BT_DBG("conn %p", conn);
1896 
1897 	if (skb->len < sizeof(*rsp))
1898 		return SMP_INVALID_PARAMS;
1899 
1900 	if (conn->hcon->role != HCI_ROLE_MASTER)
1901 		return SMP_CMD_NOTSUPP;
1902 
1903 	skb_pull(skb, sizeof(*rsp));
1904 
1905 	req = (void *) &smp->preq[1];
1906 
1907 	key_size = min(req->max_key_size, rsp->max_key_size);
1908 	if (check_enc_key_size(conn, key_size))
1909 		return SMP_ENC_KEY_SIZE;
1910 
1911 	auth = rsp->auth_req & AUTH_REQ_MASK(hdev);
1912 
1913 	if (hci_dev_test_flag(hdev, HCI_SC_ONLY) && !(auth & SMP_AUTH_SC))
1914 		return SMP_AUTH_REQUIREMENTS;
1915 
1916 	/* If the remote side's OOB flag is set it means it has
1917 	 * successfully received our local OOB data - therefore set the
1918 	 * flag to indicate that local OOB is in use.
1919 	 */
1920 	if (rsp->oob_flag == SMP_OOB_PRESENT)
1921 		set_bit(SMP_FLAG_LOCAL_OOB, &smp->flags);
1922 
1923 	smp->prsp[0] = SMP_CMD_PAIRING_RSP;
1924 	memcpy(&smp->prsp[1], rsp, sizeof(*rsp));
1925 
1926 	/* Update remote key distribution in case the remote cleared
1927 	 * some bits that we had enabled in our request.
1928 	 */
1929 	smp->remote_key_dist &= rsp->resp_key_dist;
1930 
1931 	/* For BR/EDR this means we're done and can start phase 3 */
1932 	if (conn->hcon->type == ACL_LINK) {
1933 		/* Clear bits which are generated but not distributed */
1934 		smp->remote_key_dist &= ~SMP_SC_NO_DIST;
1935 		smp_distribute_keys(smp);
1936 		return 0;
1937 	}
1938 
1939 	if ((req->auth_req & SMP_AUTH_SC) && (auth & SMP_AUTH_SC))
1940 		set_bit(SMP_FLAG_SC, &smp->flags);
1941 	else if (conn->hcon->pending_sec_level > BT_SECURITY_HIGH)
1942 		conn->hcon->pending_sec_level = BT_SECURITY_HIGH;
1943 
1944 	/* If we need MITM check that it can be achieved */
1945 	if (conn->hcon->pending_sec_level >= BT_SECURITY_HIGH) {
1946 		u8 method;
1947 
1948 		method = get_auth_method(smp, req->io_capability,
1949 					 rsp->io_capability);
1950 		if (method == JUST_WORKS || method == JUST_CFM)
1951 			return SMP_AUTH_REQUIREMENTS;
1952 	}
1953 
1954 	get_random_bytes(smp->prnd, sizeof(smp->prnd));
1955 
1956 	/* Update remote key distribution in case the remote cleared
1957 	 * some bits that we had enabled in our request.
1958 	 */
1959 	smp->remote_key_dist &= rsp->resp_key_dist;
1960 
1961 	if (test_bit(SMP_FLAG_SC, &smp->flags)) {
1962 		/* Clear bits which are generated but not distributed */
1963 		smp->remote_key_dist &= ~SMP_SC_NO_DIST;
1964 		SMP_ALLOW_CMD(smp, SMP_CMD_PUBLIC_KEY);
1965 		return sc_send_public_key(smp);
1966 	}
1967 
1968 	auth |= req->auth_req;
1969 
1970 	ret = tk_request(conn, 0, auth, req->io_capability, rsp->io_capability);
1971 	if (ret)
1972 		return SMP_UNSPECIFIED;
1973 
1974 	set_bit(SMP_FLAG_CFM_PENDING, &smp->flags);
1975 
1976 	/* Can't compose response until we have been confirmed */
1977 	if (test_bit(SMP_FLAG_TK_VALID, &smp->flags))
1978 		return smp_confirm(smp);
1979 
1980 	return 0;
1981 }
1982 
1983 static u8 sc_check_confirm(struct smp_chan *smp)
1984 {
1985 	struct l2cap_conn *conn = smp->conn;
1986 
1987 	BT_DBG("");
1988 
1989 	if (smp->method == REQ_PASSKEY || smp->method == DSP_PASSKEY)
1990 		return sc_passkey_round(smp, SMP_CMD_PAIRING_CONFIRM);
1991 
1992 	if (conn->hcon->out) {
1993 		smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM, sizeof(smp->prnd),
1994 			     smp->prnd);
1995 		SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_RANDOM);
1996 	}
1997 
1998 	return 0;
1999 }
2000 
2001 /* Work-around for some implementations that incorrectly copy RFU bits
2002  * from our security request and thereby create the impression that
2003  * we're doing SC when in fact the remote doesn't support it.
2004  */
2005 static int fixup_sc_false_positive(struct smp_chan *smp)
2006 {
2007 	struct l2cap_conn *conn = smp->conn;
2008 	struct hci_conn *hcon = conn->hcon;
2009 	struct hci_dev *hdev = hcon->hdev;
2010 	struct smp_cmd_pairing *req, *rsp;
2011 	u8 auth;
2012 
2013 	/* The issue is only observed when we're in slave role */
2014 	if (hcon->out)
2015 		return SMP_UNSPECIFIED;
2016 
2017 	if (hci_dev_test_flag(hdev, HCI_SC_ONLY)) {
2018 		BT_ERR("Refusing SMP SC -> legacy fallback in SC-only mode");
2019 		return SMP_UNSPECIFIED;
2020 	}
2021 
2022 	BT_ERR("Trying to fall back to legacy SMP");
2023 
2024 	req = (void *) &smp->preq[1];
2025 	rsp = (void *) &smp->prsp[1];
2026 
2027 	/* Rebuild key dist flags which may have been cleared for SC */
2028 	smp->remote_key_dist = (req->init_key_dist & rsp->resp_key_dist);
2029 
2030 	auth = req->auth_req & AUTH_REQ_MASK(hdev);
2031 
2032 	if (tk_request(conn, 0, auth, rsp->io_capability, req->io_capability)) {
2033 		BT_ERR("Failed to fall back to legacy SMP");
2034 		return SMP_UNSPECIFIED;
2035 	}
2036 
2037 	clear_bit(SMP_FLAG_SC, &smp->flags);
2038 
2039 	return 0;
2040 }
2041 
2042 static u8 smp_cmd_pairing_confirm(struct l2cap_conn *conn, struct sk_buff *skb)
2043 {
2044 	struct l2cap_chan *chan = conn->smp;
2045 	struct smp_chan *smp = chan->data;
2046 
2047 	BT_DBG("conn %p %s", conn, conn->hcon->out ? "master" : "slave");
2048 
2049 	if (skb->len < sizeof(smp->pcnf))
2050 		return SMP_INVALID_PARAMS;
2051 
2052 	memcpy(smp->pcnf, skb->data, sizeof(smp->pcnf));
2053 	skb_pull(skb, sizeof(smp->pcnf));
2054 
2055 	if (test_bit(SMP_FLAG_SC, &smp->flags)) {
2056 		int ret;
2057 
2058 		/* Public Key exchange must happen before any other steps */
2059 		if (test_bit(SMP_FLAG_REMOTE_PK, &smp->flags))
2060 			return sc_check_confirm(smp);
2061 
2062 		BT_ERR("Unexpected SMP Pairing Confirm");
2063 
2064 		ret = fixup_sc_false_positive(smp);
2065 		if (ret)
2066 			return ret;
2067 	}
2068 
2069 	if (conn->hcon->out) {
2070 		smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM, sizeof(smp->prnd),
2071 			     smp->prnd);
2072 		SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_RANDOM);
2073 		return 0;
2074 	}
2075 
2076 	if (test_bit(SMP_FLAG_TK_VALID, &smp->flags))
2077 		return smp_confirm(smp);
2078 
2079 	set_bit(SMP_FLAG_CFM_PENDING, &smp->flags);
2080 
2081 	return 0;
2082 }
2083 
2084 static u8 smp_cmd_pairing_random(struct l2cap_conn *conn, struct sk_buff *skb)
2085 {
2086 	struct l2cap_chan *chan = conn->smp;
2087 	struct smp_chan *smp = chan->data;
2088 	struct hci_conn *hcon = conn->hcon;
2089 	u8 *pkax, *pkbx, *na, *nb;
2090 	u32 passkey;
2091 	int err;
2092 
2093 	BT_DBG("conn %p", conn);
2094 
2095 	if (skb->len < sizeof(smp->rrnd))
2096 		return SMP_INVALID_PARAMS;
2097 
2098 	memcpy(smp->rrnd, skb->data, sizeof(smp->rrnd));
2099 	skb_pull(skb, sizeof(smp->rrnd));
2100 
2101 	if (!test_bit(SMP_FLAG_SC, &smp->flags))
2102 		return smp_random(smp);
2103 
2104 	if (hcon->out) {
2105 		pkax = smp->local_pk;
2106 		pkbx = smp->remote_pk;
2107 		na   = smp->prnd;
2108 		nb   = smp->rrnd;
2109 	} else {
2110 		pkax = smp->remote_pk;
2111 		pkbx = smp->local_pk;
2112 		na   = smp->rrnd;
2113 		nb   = smp->prnd;
2114 	}
2115 
2116 	if (smp->method == REQ_OOB) {
2117 		if (!hcon->out)
2118 			smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM,
2119 				     sizeof(smp->prnd), smp->prnd);
2120 		SMP_ALLOW_CMD(smp, SMP_CMD_DHKEY_CHECK);
2121 		goto mackey_and_ltk;
2122 	}
2123 
2124 	/* Passkey entry has special treatment */
2125 	if (smp->method == REQ_PASSKEY || smp->method == DSP_PASSKEY)
2126 		return sc_passkey_round(smp, SMP_CMD_PAIRING_RANDOM);
2127 
2128 	if (hcon->out) {
2129 		u8 cfm[16];
2130 
2131 		err = smp_f4(smp->tfm_cmac, smp->remote_pk, smp->local_pk,
2132 			     smp->rrnd, 0, cfm);
2133 		if (err)
2134 			return SMP_UNSPECIFIED;
2135 
2136 		if (memcmp(smp->pcnf, cfm, 16))
2137 			return SMP_CONFIRM_FAILED;
2138 	} else {
2139 		smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM, sizeof(smp->prnd),
2140 			     smp->prnd);
2141 		SMP_ALLOW_CMD(smp, SMP_CMD_DHKEY_CHECK);
2142 	}
2143 
2144 mackey_and_ltk:
2145 	/* Generate MacKey and LTK */
2146 	err = sc_mackey_and_ltk(smp, smp->mackey, smp->tk);
2147 	if (err)
2148 		return SMP_UNSPECIFIED;
2149 
2150 	if (smp->method == JUST_WORKS || smp->method == REQ_OOB) {
2151 		if (hcon->out) {
2152 			sc_dhkey_check(smp);
2153 			SMP_ALLOW_CMD(smp, SMP_CMD_DHKEY_CHECK);
2154 		}
2155 		return 0;
2156 	}
2157 
2158 	err = smp_g2(smp->tfm_cmac, pkax, pkbx, na, nb, &passkey);
2159 	if (err)
2160 		return SMP_UNSPECIFIED;
2161 
2162 	err = mgmt_user_confirm_request(hcon->hdev, &hcon->dst, hcon->type,
2163 					hcon->dst_type, passkey, 0);
2164 	if (err)
2165 		return SMP_UNSPECIFIED;
2166 
2167 	set_bit(SMP_FLAG_WAIT_USER, &smp->flags);
2168 
2169 	return 0;
2170 }
2171 
2172 static bool smp_ltk_encrypt(struct l2cap_conn *conn, u8 sec_level)
2173 {
2174 	struct smp_ltk *key;
2175 	struct hci_conn *hcon = conn->hcon;
2176 
2177 	key = hci_find_ltk(hcon->hdev, &hcon->dst, hcon->dst_type, hcon->role);
2178 	if (!key)
2179 		return false;
2180 
2181 	if (smp_ltk_sec_level(key) < sec_level)
2182 		return false;
2183 
2184 	if (test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &hcon->flags))
2185 		return true;
2186 
2187 	hci_le_start_enc(hcon, key->ediv, key->rand, key->val, key->enc_size);
2188 	hcon->enc_key_size = key->enc_size;
2189 
2190 	/* We never store STKs for master role, so clear this flag */
2191 	clear_bit(HCI_CONN_STK_ENCRYPT, &hcon->flags);
2192 
2193 	return true;
2194 }
2195 
2196 bool smp_sufficient_security(struct hci_conn *hcon, u8 sec_level,
2197 			     enum smp_key_pref key_pref)
2198 {
2199 	if (sec_level == BT_SECURITY_LOW)
2200 		return true;
2201 
2202 	/* If we're encrypted with an STK but the caller prefers using
2203 	 * LTK claim insufficient security. This way we allow the
2204 	 * connection to be re-encrypted with an LTK, even if the LTK
2205 	 * provides the same level of security. Only exception is if we
2206 	 * don't have an LTK (e.g. because of key distribution bits).
2207 	 */
2208 	if (key_pref == SMP_USE_LTK &&
2209 	    test_bit(HCI_CONN_STK_ENCRYPT, &hcon->flags) &&
2210 	    hci_find_ltk(hcon->hdev, &hcon->dst, hcon->dst_type, hcon->role))
2211 		return false;
2212 
2213 	if (hcon->sec_level >= sec_level)
2214 		return true;
2215 
2216 	return false;
2217 }
2218 
2219 static u8 smp_cmd_security_req(struct l2cap_conn *conn, struct sk_buff *skb)
2220 {
2221 	struct smp_cmd_security_req *rp = (void *) skb->data;
2222 	struct smp_cmd_pairing cp;
2223 	struct hci_conn *hcon = conn->hcon;
2224 	struct hci_dev *hdev = hcon->hdev;
2225 	struct smp_chan *smp;
2226 	u8 sec_level, auth;
2227 
2228 	BT_DBG("conn %p", conn);
2229 
2230 	if (skb->len < sizeof(*rp))
2231 		return SMP_INVALID_PARAMS;
2232 
2233 	if (hcon->role != HCI_ROLE_MASTER)
2234 		return SMP_CMD_NOTSUPP;
2235 
2236 	auth = rp->auth_req & AUTH_REQ_MASK(hdev);
2237 
2238 	if (hci_dev_test_flag(hdev, HCI_SC_ONLY) && !(auth & SMP_AUTH_SC))
2239 		return SMP_AUTH_REQUIREMENTS;
2240 
2241 	if (hcon->io_capability == HCI_IO_NO_INPUT_OUTPUT)
2242 		sec_level = BT_SECURITY_MEDIUM;
2243 	else
2244 		sec_level = authreq_to_seclevel(auth);
2245 
2246 	if (smp_sufficient_security(hcon, sec_level, SMP_USE_LTK))
2247 		return 0;
2248 
2249 	if (sec_level > hcon->pending_sec_level)
2250 		hcon->pending_sec_level = sec_level;
2251 
2252 	if (smp_ltk_encrypt(conn, hcon->pending_sec_level))
2253 		return 0;
2254 
2255 	smp = smp_chan_create(conn);
2256 	if (!smp)
2257 		return SMP_UNSPECIFIED;
2258 
2259 	if (!hci_dev_test_flag(hdev, HCI_BONDABLE) &&
2260 	    (auth & SMP_AUTH_BONDING))
2261 		return SMP_PAIRING_NOTSUPP;
2262 
2263 	skb_pull(skb, sizeof(*rp));
2264 
2265 	memset(&cp, 0, sizeof(cp));
2266 	build_pairing_cmd(conn, &cp, NULL, auth);
2267 
2268 	smp->preq[0] = SMP_CMD_PAIRING_REQ;
2269 	memcpy(&smp->preq[1], &cp, sizeof(cp));
2270 
2271 	smp_send_cmd(conn, SMP_CMD_PAIRING_REQ, sizeof(cp), &cp);
2272 	SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_RSP);
2273 
2274 	return 0;
2275 }
2276 
2277 int smp_conn_security(struct hci_conn *hcon, __u8 sec_level)
2278 {
2279 	struct l2cap_conn *conn = hcon->l2cap_data;
2280 	struct l2cap_chan *chan;
2281 	struct smp_chan *smp;
2282 	__u8 authreq;
2283 	int ret;
2284 
2285 	BT_DBG("conn %p hcon %p level 0x%2.2x", conn, hcon, sec_level);
2286 
2287 	/* This may be NULL if there's an unexpected disconnection */
2288 	if (!conn)
2289 		return 1;
2290 
2291 	if (!hci_dev_test_flag(hcon->hdev, HCI_LE_ENABLED))
2292 		return 1;
2293 
2294 	if (smp_sufficient_security(hcon, sec_level, SMP_USE_LTK))
2295 		return 1;
2296 
2297 	if (sec_level > hcon->pending_sec_level)
2298 		hcon->pending_sec_level = sec_level;
2299 
2300 	if (hcon->role == HCI_ROLE_MASTER)
2301 		if (smp_ltk_encrypt(conn, hcon->pending_sec_level))
2302 			return 0;
2303 
2304 	chan = conn->smp;
2305 	if (!chan) {
2306 		BT_ERR("SMP security requested but not available");
2307 		return 1;
2308 	}
2309 
2310 	l2cap_chan_lock(chan);
2311 
2312 	/* If SMP is already in progress ignore this request */
2313 	if (chan->data) {
2314 		ret = 0;
2315 		goto unlock;
2316 	}
2317 
2318 	smp = smp_chan_create(conn);
2319 	if (!smp) {
2320 		ret = 1;
2321 		goto unlock;
2322 	}
2323 
2324 	authreq = seclevel_to_authreq(sec_level);
2325 
2326 	if (hci_dev_test_flag(hcon->hdev, HCI_SC_ENABLED))
2327 		authreq |= SMP_AUTH_SC;
2328 
2329 	/* Require MITM if IO Capability allows or the security level
2330 	 * requires it.
2331 	 */
2332 	if (hcon->io_capability != HCI_IO_NO_INPUT_OUTPUT ||
2333 	    hcon->pending_sec_level > BT_SECURITY_MEDIUM)
2334 		authreq |= SMP_AUTH_MITM;
2335 
2336 	if (hcon->role == HCI_ROLE_MASTER) {
2337 		struct smp_cmd_pairing cp;
2338 
2339 		build_pairing_cmd(conn, &cp, NULL, authreq);
2340 		smp->preq[0] = SMP_CMD_PAIRING_REQ;
2341 		memcpy(&smp->preq[1], &cp, sizeof(cp));
2342 
2343 		smp_send_cmd(conn, SMP_CMD_PAIRING_REQ, sizeof(cp), &cp);
2344 		SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_RSP);
2345 	} else {
2346 		struct smp_cmd_security_req cp;
2347 		cp.auth_req = authreq;
2348 		smp_send_cmd(conn, SMP_CMD_SECURITY_REQ, sizeof(cp), &cp);
2349 		SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_REQ);
2350 	}
2351 
2352 	set_bit(SMP_FLAG_INITIATOR, &smp->flags);
2353 	ret = 0;
2354 
2355 unlock:
2356 	l2cap_chan_unlock(chan);
2357 	return ret;
2358 }
2359 
2360 void smp_cancel_pairing(struct hci_conn *hcon)
2361 {
2362 	struct l2cap_conn *conn = hcon->l2cap_data;
2363 	struct l2cap_chan *chan;
2364 	struct smp_chan *smp;
2365 
2366 	if (!conn)
2367 		return;
2368 
2369 	chan = conn->smp;
2370 	if (!chan)
2371 		return;
2372 
2373 	l2cap_chan_lock(chan);
2374 
2375 	smp = chan->data;
2376 	if (smp) {
2377 		if (test_bit(SMP_FLAG_COMPLETE, &smp->flags))
2378 			smp_failure(conn, 0);
2379 		else
2380 			smp_failure(conn, SMP_UNSPECIFIED);
2381 	}
2382 
2383 	l2cap_chan_unlock(chan);
2384 }
2385 
2386 static int smp_cmd_encrypt_info(struct l2cap_conn *conn, struct sk_buff *skb)
2387 {
2388 	struct smp_cmd_encrypt_info *rp = (void *) skb->data;
2389 	struct l2cap_chan *chan = conn->smp;
2390 	struct smp_chan *smp = chan->data;
2391 
2392 	BT_DBG("conn %p", conn);
2393 
2394 	if (skb->len < sizeof(*rp))
2395 		return SMP_INVALID_PARAMS;
2396 
2397 	SMP_ALLOW_CMD(smp, SMP_CMD_MASTER_IDENT);
2398 
2399 	skb_pull(skb, sizeof(*rp));
2400 
2401 	memcpy(smp->tk, rp->ltk, sizeof(smp->tk));
2402 
2403 	return 0;
2404 }
2405 
2406 static int smp_cmd_master_ident(struct l2cap_conn *conn, struct sk_buff *skb)
2407 {
2408 	struct smp_cmd_master_ident *rp = (void *) skb->data;
2409 	struct l2cap_chan *chan = conn->smp;
2410 	struct smp_chan *smp = chan->data;
2411 	struct hci_dev *hdev = conn->hcon->hdev;
2412 	struct hci_conn *hcon = conn->hcon;
2413 	struct smp_ltk *ltk;
2414 	u8 authenticated;
2415 
2416 	BT_DBG("conn %p", conn);
2417 
2418 	if (skb->len < sizeof(*rp))
2419 		return SMP_INVALID_PARAMS;
2420 
2421 	/* Mark the information as received */
2422 	smp->remote_key_dist &= ~SMP_DIST_ENC_KEY;
2423 
2424 	if (smp->remote_key_dist & SMP_DIST_ID_KEY)
2425 		SMP_ALLOW_CMD(smp, SMP_CMD_IDENT_INFO);
2426 	else if (smp->remote_key_dist & SMP_DIST_SIGN)
2427 		SMP_ALLOW_CMD(smp, SMP_CMD_SIGN_INFO);
2428 
2429 	skb_pull(skb, sizeof(*rp));
2430 
2431 	authenticated = (hcon->sec_level == BT_SECURITY_HIGH);
2432 	ltk = hci_add_ltk(hdev, &hcon->dst, hcon->dst_type, SMP_LTK,
2433 			  authenticated, smp->tk, smp->enc_key_size,
2434 			  rp->ediv, rp->rand);
2435 	smp->ltk = ltk;
2436 	if (!(smp->remote_key_dist & KEY_DIST_MASK))
2437 		smp_distribute_keys(smp);
2438 
2439 	return 0;
2440 }
2441 
2442 static int smp_cmd_ident_info(struct l2cap_conn *conn, struct sk_buff *skb)
2443 {
2444 	struct smp_cmd_ident_info *info = (void *) skb->data;
2445 	struct l2cap_chan *chan = conn->smp;
2446 	struct smp_chan *smp = chan->data;
2447 
2448 	BT_DBG("");
2449 
2450 	if (skb->len < sizeof(*info))
2451 		return SMP_INVALID_PARAMS;
2452 
2453 	SMP_ALLOW_CMD(smp, SMP_CMD_IDENT_ADDR_INFO);
2454 
2455 	skb_pull(skb, sizeof(*info));
2456 
2457 	memcpy(smp->irk, info->irk, 16);
2458 
2459 	return 0;
2460 }
2461 
2462 static int smp_cmd_ident_addr_info(struct l2cap_conn *conn,
2463 				   struct sk_buff *skb)
2464 {
2465 	struct smp_cmd_ident_addr_info *info = (void *) skb->data;
2466 	struct l2cap_chan *chan = conn->smp;
2467 	struct smp_chan *smp = chan->data;
2468 	struct hci_conn *hcon = conn->hcon;
2469 	bdaddr_t rpa;
2470 
2471 	BT_DBG("");
2472 
2473 	if (skb->len < sizeof(*info))
2474 		return SMP_INVALID_PARAMS;
2475 
2476 	/* Mark the information as received */
2477 	smp->remote_key_dist &= ~SMP_DIST_ID_KEY;
2478 
2479 	if (smp->remote_key_dist & SMP_DIST_SIGN)
2480 		SMP_ALLOW_CMD(smp, SMP_CMD_SIGN_INFO);
2481 
2482 	skb_pull(skb, sizeof(*info));
2483 
2484 	/* Strictly speaking the Core Specification (4.1) allows sending
2485 	 * an empty address which would force us to rely on just the IRK
2486 	 * as "identity information". However, since such
2487 	 * implementations are not known of and in order to not over
2488 	 * complicate our implementation, simply pretend that we never
2489 	 * received an IRK for such a device.
2490 	 *
2491 	 * The Identity Address must also be a Static Random or Public
2492 	 * Address, which hci_is_identity_address() checks for.
2493 	 */
2494 	if (!bacmp(&info->bdaddr, BDADDR_ANY) ||
2495 	    !hci_is_identity_address(&info->bdaddr, info->addr_type)) {
2496 		BT_ERR("Ignoring IRK with no identity address");
2497 		goto distribute;
2498 	}
2499 
2500 	bacpy(&smp->id_addr, &info->bdaddr);
2501 	smp->id_addr_type = info->addr_type;
2502 
2503 	if (hci_bdaddr_is_rpa(&hcon->dst, hcon->dst_type))
2504 		bacpy(&rpa, &hcon->dst);
2505 	else
2506 		bacpy(&rpa, BDADDR_ANY);
2507 
2508 	smp->remote_irk = hci_add_irk(conn->hcon->hdev, &smp->id_addr,
2509 				      smp->id_addr_type, smp->irk, &rpa);
2510 
2511 distribute:
2512 	if (!(smp->remote_key_dist & KEY_DIST_MASK))
2513 		smp_distribute_keys(smp);
2514 
2515 	return 0;
2516 }
2517 
2518 static int smp_cmd_sign_info(struct l2cap_conn *conn, struct sk_buff *skb)
2519 {
2520 	struct smp_cmd_sign_info *rp = (void *) skb->data;
2521 	struct l2cap_chan *chan = conn->smp;
2522 	struct smp_chan *smp = chan->data;
2523 	struct smp_csrk *csrk;
2524 
2525 	BT_DBG("conn %p", conn);
2526 
2527 	if (skb->len < sizeof(*rp))
2528 		return SMP_INVALID_PARAMS;
2529 
2530 	/* Mark the information as received */
2531 	smp->remote_key_dist &= ~SMP_DIST_SIGN;
2532 
2533 	skb_pull(skb, sizeof(*rp));
2534 
2535 	csrk = kzalloc(sizeof(*csrk), GFP_KERNEL);
2536 	if (csrk) {
2537 		if (conn->hcon->sec_level > BT_SECURITY_MEDIUM)
2538 			csrk->type = MGMT_CSRK_REMOTE_AUTHENTICATED;
2539 		else
2540 			csrk->type = MGMT_CSRK_REMOTE_UNAUTHENTICATED;
2541 		memcpy(csrk->val, rp->csrk, sizeof(csrk->val));
2542 	}
2543 	smp->csrk = csrk;
2544 	smp_distribute_keys(smp);
2545 
2546 	return 0;
2547 }
2548 
2549 static u8 sc_select_method(struct smp_chan *smp)
2550 {
2551 	struct l2cap_conn *conn = smp->conn;
2552 	struct hci_conn *hcon = conn->hcon;
2553 	struct smp_cmd_pairing *local, *remote;
2554 	u8 local_mitm, remote_mitm, local_io, remote_io, method;
2555 
2556 	if (test_bit(SMP_FLAG_REMOTE_OOB, &smp->flags) ||
2557 	    test_bit(SMP_FLAG_LOCAL_OOB, &smp->flags))
2558 		return REQ_OOB;
2559 
2560 	/* The preq/prsp contain the raw Pairing Request/Response PDUs
2561 	 * which are needed as inputs to some crypto functions. To get
2562 	 * the "struct smp_cmd_pairing" from them we need to skip the
2563 	 * first byte which contains the opcode.
2564 	 */
2565 	if (hcon->out) {
2566 		local = (void *) &smp->preq[1];
2567 		remote = (void *) &smp->prsp[1];
2568 	} else {
2569 		local = (void *) &smp->prsp[1];
2570 		remote = (void *) &smp->preq[1];
2571 	}
2572 
2573 	local_io = local->io_capability;
2574 	remote_io = remote->io_capability;
2575 
2576 	local_mitm = (local->auth_req & SMP_AUTH_MITM);
2577 	remote_mitm = (remote->auth_req & SMP_AUTH_MITM);
2578 
2579 	/* If either side wants MITM, look up the method from the table,
2580 	 * otherwise use JUST WORKS.
2581 	 */
2582 	if (local_mitm || remote_mitm)
2583 		method = get_auth_method(smp, local_io, remote_io);
2584 	else
2585 		method = JUST_WORKS;
2586 
2587 	/* Don't confirm locally initiated pairing attempts */
2588 	if (method == JUST_CFM && test_bit(SMP_FLAG_INITIATOR, &smp->flags))
2589 		method = JUST_WORKS;
2590 
2591 	return method;
2592 }
2593 
2594 static int smp_cmd_public_key(struct l2cap_conn *conn, struct sk_buff *skb)
2595 {
2596 	struct smp_cmd_public_key *key = (void *) skb->data;
2597 	struct hci_conn *hcon = conn->hcon;
2598 	struct l2cap_chan *chan = conn->smp;
2599 	struct smp_chan *smp = chan->data;
2600 	struct hci_dev *hdev = hcon->hdev;
2601 	struct smp_cmd_pairing_confirm cfm;
2602 	int err;
2603 
2604 	BT_DBG("conn %p", conn);
2605 
2606 	if (skb->len < sizeof(*key))
2607 		return SMP_INVALID_PARAMS;
2608 
2609 	memcpy(smp->remote_pk, key, 64);
2610 
2611 	if (test_bit(SMP_FLAG_REMOTE_OOB, &smp->flags)) {
2612 		err = smp_f4(smp->tfm_cmac, smp->remote_pk, smp->remote_pk,
2613 			     smp->rr, 0, cfm.confirm_val);
2614 		if (err)
2615 			return SMP_UNSPECIFIED;
2616 
2617 		if (memcmp(cfm.confirm_val, smp->pcnf, 16))
2618 			return SMP_CONFIRM_FAILED;
2619 	}
2620 
2621 	/* Non-initiating device sends its public key after receiving
2622 	 * the key from the initiating device.
2623 	 */
2624 	if (!hcon->out) {
2625 		err = sc_send_public_key(smp);
2626 		if (err)
2627 			return err;
2628 	}
2629 
2630 	SMP_DBG("Remote Public Key X: %32phN", smp->remote_pk);
2631 	SMP_DBG("Remote Public Key Y: %32phN", smp->remote_pk + 32);
2632 
2633 	if (!ecdh_shared_secret(smp->remote_pk, smp->local_sk, smp->dhkey))
2634 		return SMP_UNSPECIFIED;
2635 
2636 	SMP_DBG("DHKey %32phN", smp->dhkey);
2637 
2638 	set_bit(SMP_FLAG_REMOTE_PK, &smp->flags);
2639 
2640 	smp->method = sc_select_method(smp);
2641 
2642 	BT_DBG("%s selected method 0x%02x", hdev->name, smp->method);
2643 
2644 	/* JUST_WORKS and JUST_CFM result in an unauthenticated key */
2645 	if (smp->method == JUST_WORKS || smp->method == JUST_CFM)
2646 		hcon->pending_sec_level = BT_SECURITY_MEDIUM;
2647 	else
2648 		hcon->pending_sec_level = BT_SECURITY_FIPS;
2649 
2650 	if (!memcmp(debug_pk, smp->remote_pk, 64))
2651 		set_bit(SMP_FLAG_DEBUG_KEY, &smp->flags);
2652 
2653 	if (smp->method == DSP_PASSKEY) {
2654 		get_random_bytes(&hcon->passkey_notify,
2655 				 sizeof(hcon->passkey_notify));
2656 		hcon->passkey_notify %= 1000000;
2657 		hcon->passkey_entered = 0;
2658 		smp->passkey_round = 0;
2659 		if (mgmt_user_passkey_notify(hdev, &hcon->dst, hcon->type,
2660 					     hcon->dst_type,
2661 					     hcon->passkey_notify,
2662 					     hcon->passkey_entered))
2663 			return SMP_UNSPECIFIED;
2664 		SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_CONFIRM);
2665 		return sc_passkey_round(smp, SMP_CMD_PUBLIC_KEY);
2666 	}
2667 
2668 	if (smp->method == REQ_OOB) {
2669 		if (hcon->out)
2670 			smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM,
2671 				     sizeof(smp->prnd), smp->prnd);
2672 
2673 		SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_RANDOM);
2674 
2675 		return 0;
2676 	}
2677 
2678 	if (hcon->out)
2679 		SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_CONFIRM);
2680 
2681 	if (smp->method == REQ_PASSKEY) {
2682 		if (mgmt_user_passkey_request(hdev, &hcon->dst, hcon->type,
2683 					      hcon->dst_type))
2684 			return SMP_UNSPECIFIED;
2685 		SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_CONFIRM);
2686 		set_bit(SMP_FLAG_WAIT_USER, &smp->flags);
2687 		return 0;
2688 	}
2689 
2690 	/* The Initiating device waits for the non-initiating device to
2691 	 * send the confirm value.
2692 	 */
2693 	if (conn->hcon->out)
2694 		return 0;
2695 
2696 	err = smp_f4(smp->tfm_cmac, smp->local_pk, smp->remote_pk, smp->prnd,
2697 		     0, cfm.confirm_val);
2698 	if (err)
2699 		return SMP_UNSPECIFIED;
2700 
2701 	smp_send_cmd(conn, SMP_CMD_PAIRING_CONFIRM, sizeof(cfm), &cfm);
2702 	SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_RANDOM);
2703 
2704 	return 0;
2705 }
2706 
2707 static int smp_cmd_dhkey_check(struct l2cap_conn *conn, struct sk_buff *skb)
2708 {
2709 	struct smp_cmd_dhkey_check *check = (void *) skb->data;
2710 	struct l2cap_chan *chan = conn->smp;
2711 	struct hci_conn *hcon = conn->hcon;
2712 	struct smp_chan *smp = chan->data;
2713 	u8 a[7], b[7], *local_addr, *remote_addr;
2714 	u8 io_cap[3], r[16], e[16];
2715 	int err;
2716 
2717 	BT_DBG("conn %p", conn);
2718 
2719 	if (skb->len < sizeof(*check))
2720 		return SMP_INVALID_PARAMS;
2721 
2722 	memcpy(a, &hcon->init_addr, 6);
2723 	memcpy(b, &hcon->resp_addr, 6);
2724 	a[6] = hcon->init_addr_type;
2725 	b[6] = hcon->resp_addr_type;
2726 
2727 	if (hcon->out) {
2728 		local_addr = a;
2729 		remote_addr = b;
2730 		memcpy(io_cap, &smp->prsp[1], 3);
2731 	} else {
2732 		local_addr = b;
2733 		remote_addr = a;
2734 		memcpy(io_cap, &smp->preq[1], 3);
2735 	}
2736 
2737 	memset(r, 0, sizeof(r));
2738 
2739 	if (smp->method == REQ_PASSKEY || smp->method == DSP_PASSKEY)
2740 		put_unaligned_le32(hcon->passkey_notify, r);
2741 	else if (smp->method == REQ_OOB)
2742 		memcpy(r, smp->lr, 16);
2743 
2744 	err = smp_f6(smp->tfm_cmac, smp->mackey, smp->rrnd, smp->prnd, r,
2745 		     io_cap, remote_addr, local_addr, e);
2746 	if (err)
2747 		return SMP_UNSPECIFIED;
2748 
2749 	if (memcmp(check->e, e, 16))
2750 		return SMP_DHKEY_CHECK_FAILED;
2751 
2752 	if (!hcon->out) {
2753 		if (test_bit(SMP_FLAG_WAIT_USER, &smp->flags)) {
2754 			set_bit(SMP_FLAG_DHKEY_PENDING, &smp->flags);
2755 			return 0;
2756 		}
2757 
2758 		/* Slave sends DHKey check as response to master */
2759 		sc_dhkey_check(smp);
2760 	}
2761 
2762 	sc_add_ltk(smp);
2763 
2764 	if (hcon->out) {
2765 		hci_le_start_enc(hcon, 0, 0, smp->tk, smp->enc_key_size);
2766 		hcon->enc_key_size = smp->enc_key_size;
2767 	}
2768 
2769 	return 0;
2770 }
2771 
2772 static int smp_cmd_keypress_notify(struct l2cap_conn *conn,
2773 				   struct sk_buff *skb)
2774 {
2775 	struct smp_cmd_keypress_notify *kp = (void *) skb->data;
2776 
2777 	BT_DBG("value 0x%02x", kp->value);
2778 
2779 	return 0;
2780 }
2781 
2782 static int smp_sig_channel(struct l2cap_chan *chan, struct sk_buff *skb)
2783 {
2784 	struct l2cap_conn *conn = chan->conn;
2785 	struct hci_conn *hcon = conn->hcon;
2786 	struct smp_chan *smp;
2787 	__u8 code, reason;
2788 	int err = 0;
2789 
2790 	if (skb->len < 1)
2791 		return -EILSEQ;
2792 
2793 	if (!hci_dev_test_flag(hcon->hdev, HCI_LE_ENABLED)) {
2794 		reason = SMP_PAIRING_NOTSUPP;
2795 		goto done;
2796 	}
2797 
2798 	code = skb->data[0];
2799 	skb_pull(skb, sizeof(code));
2800 
2801 	smp = chan->data;
2802 
2803 	if (code > SMP_CMD_MAX)
2804 		goto drop;
2805 
2806 	if (smp && !test_and_clear_bit(code, &smp->allow_cmd))
2807 		goto drop;
2808 
2809 	/* If we don't have a context the only allowed commands are
2810 	 * pairing request and security request.
2811 	 */
2812 	if (!smp && code != SMP_CMD_PAIRING_REQ && code != SMP_CMD_SECURITY_REQ)
2813 		goto drop;
2814 
2815 	switch (code) {
2816 	case SMP_CMD_PAIRING_REQ:
2817 		reason = smp_cmd_pairing_req(conn, skb);
2818 		break;
2819 
2820 	case SMP_CMD_PAIRING_FAIL:
2821 		smp_failure(conn, 0);
2822 		err = -EPERM;
2823 		break;
2824 
2825 	case SMP_CMD_PAIRING_RSP:
2826 		reason = smp_cmd_pairing_rsp(conn, skb);
2827 		break;
2828 
2829 	case SMP_CMD_SECURITY_REQ:
2830 		reason = smp_cmd_security_req(conn, skb);
2831 		break;
2832 
2833 	case SMP_CMD_PAIRING_CONFIRM:
2834 		reason = smp_cmd_pairing_confirm(conn, skb);
2835 		break;
2836 
2837 	case SMP_CMD_PAIRING_RANDOM:
2838 		reason = smp_cmd_pairing_random(conn, skb);
2839 		break;
2840 
2841 	case SMP_CMD_ENCRYPT_INFO:
2842 		reason = smp_cmd_encrypt_info(conn, skb);
2843 		break;
2844 
2845 	case SMP_CMD_MASTER_IDENT:
2846 		reason = smp_cmd_master_ident(conn, skb);
2847 		break;
2848 
2849 	case SMP_CMD_IDENT_INFO:
2850 		reason = smp_cmd_ident_info(conn, skb);
2851 		break;
2852 
2853 	case SMP_CMD_IDENT_ADDR_INFO:
2854 		reason = smp_cmd_ident_addr_info(conn, skb);
2855 		break;
2856 
2857 	case SMP_CMD_SIGN_INFO:
2858 		reason = smp_cmd_sign_info(conn, skb);
2859 		break;
2860 
2861 	case SMP_CMD_PUBLIC_KEY:
2862 		reason = smp_cmd_public_key(conn, skb);
2863 		break;
2864 
2865 	case SMP_CMD_DHKEY_CHECK:
2866 		reason = smp_cmd_dhkey_check(conn, skb);
2867 		break;
2868 
2869 	case SMP_CMD_KEYPRESS_NOTIFY:
2870 		reason = smp_cmd_keypress_notify(conn, skb);
2871 		break;
2872 
2873 	default:
2874 		BT_DBG("Unknown command code 0x%2.2x", code);
2875 		reason = SMP_CMD_NOTSUPP;
2876 		goto done;
2877 	}
2878 
2879 done:
2880 	if (!err) {
2881 		if (reason)
2882 			smp_failure(conn, reason);
2883 		kfree_skb(skb);
2884 	}
2885 
2886 	return err;
2887 
2888 drop:
2889 	BT_ERR("%s unexpected SMP command 0x%02x from %pMR", hcon->hdev->name,
2890 	       code, &hcon->dst);
2891 	kfree_skb(skb);
2892 	return 0;
2893 }
2894 
2895 static void smp_teardown_cb(struct l2cap_chan *chan, int err)
2896 {
2897 	struct l2cap_conn *conn = chan->conn;
2898 
2899 	BT_DBG("chan %p", chan);
2900 
2901 	if (chan->data)
2902 		smp_chan_destroy(conn);
2903 
2904 	conn->smp = NULL;
2905 	l2cap_chan_put(chan);
2906 }
2907 
2908 static void bredr_pairing(struct l2cap_chan *chan)
2909 {
2910 	struct l2cap_conn *conn = chan->conn;
2911 	struct hci_conn *hcon = conn->hcon;
2912 	struct hci_dev *hdev = hcon->hdev;
2913 	struct smp_cmd_pairing req;
2914 	struct smp_chan *smp;
2915 
2916 	BT_DBG("chan %p", chan);
2917 
2918 	/* Only new pairings are interesting */
2919 	if (!test_bit(HCI_CONN_NEW_LINK_KEY, &hcon->flags))
2920 		return;
2921 
2922 	/* Don't bother if we're not encrypted */
2923 	if (!test_bit(HCI_CONN_ENCRYPT, &hcon->flags))
2924 		return;
2925 
2926 	/* Only master may initiate SMP over BR/EDR */
2927 	if (hcon->role != HCI_ROLE_MASTER)
2928 		return;
2929 
2930 	/* Secure Connections support must be enabled */
2931 	if (!hci_dev_test_flag(hdev, HCI_SC_ENABLED))
2932 		return;
2933 
2934 	/* BR/EDR must use Secure Connections for SMP */
2935 	if (!test_bit(HCI_CONN_AES_CCM, &hcon->flags) &&
2936 	    !hci_dev_test_flag(hdev, HCI_FORCE_BREDR_SMP))
2937 		return;
2938 
2939 	/* If our LE support is not enabled don't do anything */
2940 	if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED))
2941 		return;
2942 
2943 	/* Don't bother if remote LE support is not enabled */
2944 	if (!lmp_host_le_capable(hcon))
2945 		return;
2946 
2947 	/* Remote must support SMP fixed chan for BR/EDR */
2948 	if (!(conn->remote_fixed_chan & L2CAP_FC_SMP_BREDR))
2949 		return;
2950 
2951 	/* Don't bother if SMP is already ongoing */
2952 	if (chan->data)
2953 		return;
2954 
2955 	smp = smp_chan_create(conn);
2956 	if (!smp) {
2957 		BT_ERR("%s unable to create SMP context for BR/EDR",
2958 		       hdev->name);
2959 		return;
2960 	}
2961 
2962 	set_bit(SMP_FLAG_SC, &smp->flags);
2963 
2964 	BT_DBG("%s starting SMP over BR/EDR", hdev->name);
2965 
2966 	/* Prepare and send the BR/EDR SMP Pairing Request */
2967 	build_bredr_pairing_cmd(smp, &req, NULL);
2968 
2969 	smp->preq[0] = SMP_CMD_PAIRING_REQ;
2970 	memcpy(&smp->preq[1], &req, sizeof(req));
2971 
2972 	smp_send_cmd(conn, SMP_CMD_PAIRING_REQ, sizeof(req), &req);
2973 	SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_RSP);
2974 }
2975 
2976 static void smp_resume_cb(struct l2cap_chan *chan)
2977 {
2978 	struct smp_chan *smp = chan->data;
2979 	struct l2cap_conn *conn = chan->conn;
2980 	struct hci_conn *hcon = conn->hcon;
2981 
2982 	BT_DBG("chan %p", chan);
2983 
2984 	if (hcon->type == ACL_LINK) {
2985 		bredr_pairing(chan);
2986 		return;
2987 	}
2988 
2989 	if (!smp)
2990 		return;
2991 
2992 	if (!test_bit(HCI_CONN_ENCRYPT, &hcon->flags))
2993 		return;
2994 
2995 	cancel_delayed_work(&smp->security_timer);
2996 
2997 	smp_distribute_keys(smp);
2998 }
2999 
3000 static void smp_ready_cb(struct l2cap_chan *chan)
3001 {
3002 	struct l2cap_conn *conn = chan->conn;
3003 	struct hci_conn *hcon = conn->hcon;
3004 
3005 	BT_DBG("chan %p", chan);
3006 
3007 	/* No need to call l2cap_chan_hold() here since we already own
3008 	 * the reference taken in smp_new_conn_cb(). This is just the
3009 	 * first time that we tie it to a specific pointer. The code in
3010 	 * l2cap_core.c ensures that there's no risk this function wont
3011 	 * get called if smp_new_conn_cb was previously called.
3012 	 */
3013 	conn->smp = chan;
3014 
3015 	if (hcon->type == ACL_LINK && test_bit(HCI_CONN_ENCRYPT, &hcon->flags))
3016 		bredr_pairing(chan);
3017 }
3018 
3019 static int smp_recv_cb(struct l2cap_chan *chan, struct sk_buff *skb)
3020 {
3021 	int err;
3022 
3023 	BT_DBG("chan %p", chan);
3024 
3025 	err = smp_sig_channel(chan, skb);
3026 	if (err) {
3027 		struct smp_chan *smp = chan->data;
3028 
3029 		if (smp)
3030 			cancel_delayed_work_sync(&smp->security_timer);
3031 
3032 		hci_disconnect(chan->conn->hcon, HCI_ERROR_AUTH_FAILURE);
3033 	}
3034 
3035 	return err;
3036 }
3037 
3038 static struct sk_buff *smp_alloc_skb_cb(struct l2cap_chan *chan,
3039 					unsigned long hdr_len,
3040 					unsigned long len, int nb)
3041 {
3042 	struct sk_buff *skb;
3043 
3044 	skb = bt_skb_alloc(hdr_len + len, GFP_KERNEL);
3045 	if (!skb)
3046 		return ERR_PTR(-ENOMEM);
3047 
3048 	skb->priority = HCI_PRIO_MAX;
3049 	bt_cb(skb)->l2cap.chan = chan;
3050 
3051 	return skb;
3052 }
3053 
3054 static const struct l2cap_ops smp_chan_ops = {
3055 	.name			= "Security Manager",
3056 	.ready			= smp_ready_cb,
3057 	.recv			= smp_recv_cb,
3058 	.alloc_skb		= smp_alloc_skb_cb,
3059 	.teardown		= smp_teardown_cb,
3060 	.resume			= smp_resume_cb,
3061 
3062 	.new_connection		= l2cap_chan_no_new_connection,
3063 	.state_change		= l2cap_chan_no_state_change,
3064 	.close			= l2cap_chan_no_close,
3065 	.defer			= l2cap_chan_no_defer,
3066 	.suspend		= l2cap_chan_no_suspend,
3067 	.set_shutdown		= l2cap_chan_no_set_shutdown,
3068 	.get_sndtimeo		= l2cap_chan_no_get_sndtimeo,
3069 };
3070 
3071 static inline struct l2cap_chan *smp_new_conn_cb(struct l2cap_chan *pchan)
3072 {
3073 	struct l2cap_chan *chan;
3074 
3075 	BT_DBG("pchan %p", pchan);
3076 
3077 	chan = l2cap_chan_create();
3078 	if (!chan)
3079 		return NULL;
3080 
3081 	chan->chan_type	= pchan->chan_type;
3082 	chan->ops	= &smp_chan_ops;
3083 	chan->scid	= pchan->scid;
3084 	chan->dcid	= chan->scid;
3085 	chan->imtu	= pchan->imtu;
3086 	chan->omtu	= pchan->omtu;
3087 	chan->mode	= pchan->mode;
3088 
3089 	/* Other L2CAP channels may request SMP routines in order to
3090 	 * change the security level. This means that the SMP channel
3091 	 * lock must be considered in its own category to avoid lockdep
3092 	 * warnings.
3093 	 */
3094 	atomic_set(&chan->nesting, L2CAP_NESTING_SMP);
3095 
3096 	BT_DBG("created chan %p", chan);
3097 
3098 	return chan;
3099 }
3100 
3101 static const struct l2cap_ops smp_root_chan_ops = {
3102 	.name			= "Security Manager Root",
3103 	.new_connection		= smp_new_conn_cb,
3104 
3105 	/* None of these are implemented for the root channel */
3106 	.close			= l2cap_chan_no_close,
3107 	.alloc_skb		= l2cap_chan_no_alloc_skb,
3108 	.recv			= l2cap_chan_no_recv,
3109 	.state_change		= l2cap_chan_no_state_change,
3110 	.teardown		= l2cap_chan_no_teardown,
3111 	.ready			= l2cap_chan_no_ready,
3112 	.defer			= l2cap_chan_no_defer,
3113 	.suspend		= l2cap_chan_no_suspend,
3114 	.resume			= l2cap_chan_no_resume,
3115 	.set_shutdown		= l2cap_chan_no_set_shutdown,
3116 	.get_sndtimeo		= l2cap_chan_no_get_sndtimeo,
3117 };
3118 
3119 static struct l2cap_chan *smp_add_cid(struct hci_dev *hdev, u16 cid)
3120 {
3121 	struct l2cap_chan *chan;
3122 	struct smp_dev *smp;
3123 	struct crypto_skcipher *tfm_aes;
3124 	struct crypto_shash *tfm_cmac;
3125 
3126 	if (cid == L2CAP_CID_SMP_BREDR) {
3127 		smp = NULL;
3128 		goto create_chan;
3129 	}
3130 
3131 	smp = kzalloc(sizeof(*smp), GFP_KERNEL);
3132 	if (!smp)
3133 		return ERR_PTR(-ENOMEM);
3134 
3135 	tfm_aes = crypto_alloc_skcipher("ecb(aes)", 0, CRYPTO_ALG_ASYNC);
3136 	if (IS_ERR(tfm_aes)) {
3137 		BT_ERR("Unable to create ECB crypto context");
3138 		kzfree(smp);
3139 		return ERR_CAST(tfm_aes);
3140 	}
3141 
3142 	tfm_cmac = crypto_alloc_shash("cmac(aes)", 0, 0);
3143 	if (IS_ERR(tfm_cmac)) {
3144 		BT_ERR("Unable to create CMAC crypto context");
3145 		crypto_free_skcipher(tfm_aes);
3146 		kzfree(smp);
3147 		return ERR_CAST(tfm_cmac);
3148 	}
3149 
3150 	smp->tfm_aes = tfm_aes;
3151 	smp->tfm_cmac = tfm_cmac;
3152 	smp->min_key_size = SMP_MIN_ENC_KEY_SIZE;
3153 	smp->max_key_size = SMP_MAX_ENC_KEY_SIZE;
3154 
3155 create_chan:
3156 	chan = l2cap_chan_create();
3157 	if (!chan) {
3158 		if (smp) {
3159 			crypto_free_skcipher(smp->tfm_aes);
3160 			crypto_free_shash(smp->tfm_cmac);
3161 			kzfree(smp);
3162 		}
3163 		return ERR_PTR(-ENOMEM);
3164 	}
3165 
3166 	chan->data = smp;
3167 
3168 	l2cap_add_scid(chan, cid);
3169 
3170 	l2cap_chan_set_defaults(chan);
3171 
3172 	if (cid == L2CAP_CID_SMP) {
3173 		u8 bdaddr_type;
3174 
3175 		hci_copy_identity_address(hdev, &chan->src, &bdaddr_type);
3176 
3177 		if (bdaddr_type == ADDR_LE_DEV_PUBLIC)
3178 			chan->src_type = BDADDR_LE_PUBLIC;
3179 		else
3180 			chan->src_type = BDADDR_LE_RANDOM;
3181 	} else {
3182 		bacpy(&chan->src, &hdev->bdaddr);
3183 		chan->src_type = BDADDR_BREDR;
3184 	}
3185 
3186 	chan->state = BT_LISTEN;
3187 	chan->mode = L2CAP_MODE_BASIC;
3188 	chan->imtu = L2CAP_DEFAULT_MTU;
3189 	chan->ops = &smp_root_chan_ops;
3190 
3191 	/* Set correct nesting level for a parent/listening channel */
3192 	atomic_set(&chan->nesting, L2CAP_NESTING_PARENT);
3193 
3194 	return chan;
3195 }
3196 
3197 static void smp_del_chan(struct l2cap_chan *chan)
3198 {
3199 	struct smp_dev *smp;
3200 
3201 	BT_DBG("chan %p", chan);
3202 
3203 	smp = chan->data;
3204 	if (smp) {
3205 		chan->data = NULL;
3206 		crypto_free_skcipher(smp->tfm_aes);
3207 		crypto_free_shash(smp->tfm_cmac);
3208 		kzfree(smp);
3209 	}
3210 
3211 	l2cap_chan_put(chan);
3212 }
3213 
3214 static ssize_t force_bredr_smp_read(struct file *file,
3215 				    char __user *user_buf,
3216 				    size_t count, loff_t *ppos)
3217 {
3218 	struct hci_dev *hdev = file->private_data;
3219 	char buf[3];
3220 
3221 	buf[0] = hci_dev_test_flag(hdev, HCI_FORCE_BREDR_SMP) ? 'Y': 'N';
3222 	buf[1] = '\n';
3223 	buf[2] = '\0';
3224 	return simple_read_from_buffer(user_buf, count, ppos, buf, 2);
3225 }
3226 
3227 static ssize_t force_bredr_smp_write(struct file *file,
3228 				     const char __user *user_buf,
3229 				     size_t count, loff_t *ppos)
3230 {
3231 	struct hci_dev *hdev = file->private_data;
3232 	char buf[32];
3233 	size_t buf_size = min(count, (sizeof(buf)-1));
3234 	bool enable;
3235 
3236 	if (copy_from_user(buf, user_buf, buf_size))
3237 		return -EFAULT;
3238 
3239 	buf[buf_size] = '\0';
3240 	if (strtobool(buf, &enable))
3241 		return -EINVAL;
3242 
3243 	if (enable == hci_dev_test_flag(hdev, HCI_FORCE_BREDR_SMP))
3244 		return -EALREADY;
3245 
3246 	if (enable) {
3247 		struct l2cap_chan *chan;
3248 
3249 		chan = smp_add_cid(hdev, L2CAP_CID_SMP_BREDR);
3250 		if (IS_ERR(chan))
3251 			return PTR_ERR(chan);
3252 
3253 		hdev->smp_bredr_data = chan;
3254 	} else {
3255 		struct l2cap_chan *chan;
3256 
3257 		chan = hdev->smp_bredr_data;
3258 		hdev->smp_bredr_data = NULL;
3259 		smp_del_chan(chan);
3260 	}
3261 
3262 	hci_dev_change_flag(hdev, HCI_FORCE_BREDR_SMP);
3263 
3264 	return count;
3265 }
3266 
3267 static const struct file_operations force_bredr_smp_fops = {
3268 	.open		= simple_open,
3269 	.read		= force_bredr_smp_read,
3270 	.write		= force_bredr_smp_write,
3271 	.llseek		= default_llseek,
3272 };
3273 
3274 static ssize_t le_min_key_size_read(struct file *file,
3275 				     char __user *user_buf,
3276 				     size_t count, loff_t *ppos)
3277 {
3278 	struct hci_dev *hdev = file->private_data;
3279 	char buf[4];
3280 
3281 	snprintf(buf, sizeof(buf), "%2u\n", SMP_DEV(hdev)->min_key_size);
3282 
3283 	return simple_read_from_buffer(user_buf, count, ppos, buf, strlen(buf));
3284 }
3285 
3286 static ssize_t le_min_key_size_write(struct file *file,
3287 				      const char __user *user_buf,
3288 				      size_t count, loff_t *ppos)
3289 {
3290 	struct hci_dev *hdev = file->private_data;
3291 	char buf[32];
3292 	size_t buf_size = min(count, (sizeof(buf) - 1));
3293 	u8 key_size;
3294 
3295 	if (copy_from_user(buf, user_buf, buf_size))
3296 		return -EFAULT;
3297 
3298 	buf[buf_size] = '\0';
3299 
3300 	sscanf(buf, "%hhu", &key_size);
3301 
3302 	if (key_size > SMP_DEV(hdev)->max_key_size ||
3303 	    key_size < SMP_MIN_ENC_KEY_SIZE)
3304 		return -EINVAL;
3305 
3306 	SMP_DEV(hdev)->min_key_size = key_size;
3307 
3308 	return count;
3309 }
3310 
3311 static const struct file_operations le_min_key_size_fops = {
3312 	.open		= simple_open,
3313 	.read		= le_min_key_size_read,
3314 	.write		= le_min_key_size_write,
3315 	.llseek		= default_llseek,
3316 };
3317 
3318 static ssize_t le_max_key_size_read(struct file *file,
3319 				     char __user *user_buf,
3320 				     size_t count, loff_t *ppos)
3321 {
3322 	struct hci_dev *hdev = file->private_data;
3323 	char buf[4];
3324 
3325 	snprintf(buf, sizeof(buf), "%2u\n", SMP_DEV(hdev)->max_key_size);
3326 
3327 	return simple_read_from_buffer(user_buf, count, ppos, buf, strlen(buf));
3328 }
3329 
3330 static ssize_t le_max_key_size_write(struct file *file,
3331 				      const char __user *user_buf,
3332 				      size_t count, loff_t *ppos)
3333 {
3334 	struct hci_dev *hdev = file->private_data;
3335 	char buf[32];
3336 	size_t buf_size = min(count, (sizeof(buf) - 1));
3337 	u8 key_size;
3338 
3339 	if (copy_from_user(buf, user_buf, buf_size))
3340 		return -EFAULT;
3341 
3342 	buf[buf_size] = '\0';
3343 
3344 	sscanf(buf, "%hhu", &key_size);
3345 
3346 	if (key_size > SMP_MAX_ENC_KEY_SIZE ||
3347 	    key_size < SMP_DEV(hdev)->min_key_size)
3348 		return -EINVAL;
3349 
3350 	SMP_DEV(hdev)->max_key_size = key_size;
3351 
3352 	return count;
3353 }
3354 
3355 static const struct file_operations le_max_key_size_fops = {
3356 	.open		= simple_open,
3357 	.read		= le_max_key_size_read,
3358 	.write		= le_max_key_size_write,
3359 	.llseek		= default_llseek,
3360 };
3361 
3362 int smp_register(struct hci_dev *hdev)
3363 {
3364 	struct l2cap_chan *chan;
3365 
3366 	BT_DBG("%s", hdev->name);
3367 
3368 	/* If the controller does not support Low Energy operation, then
3369 	 * there is also no need to register any SMP channel.
3370 	 */
3371 	if (!lmp_le_capable(hdev))
3372 		return 0;
3373 
3374 	if (WARN_ON(hdev->smp_data)) {
3375 		chan = hdev->smp_data;
3376 		hdev->smp_data = NULL;
3377 		smp_del_chan(chan);
3378 	}
3379 
3380 	chan = smp_add_cid(hdev, L2CAP_CID_SMP);
3381 	if (IS_ERR(chan))
3382 		return PTR_ERR(chan);
3383 
3384 	hdev->smp_data = chan;
3385 
3386 	debugfs_create_file("le_min_key_size", 0644, hdev->debugfs, hdev,
3387 			    &le_min_key_size_fops);
3388 	debugfs_create_file("le_max_key_size", 0644, hdev->debugfs, hdev,
3389 			    &le_max_key_size_fops);
3390 
3391 	/* If the controller does not support BR/EDR Secure Connections
3392 	 * feature, then the BR/EDR SMP channel shall not be present.
3393 	 *
3394 	 * To test this with Bluetooth 4.0 controllers, create a debugfs
3395 	 * switch that allows forcing BR/EDR SMP support and accepting
3396 	 * cross-transport pairing on non-AES encrypted connections.
3397 	 */
3398 	if (!lmp_sc_capable(hdev)) {
3399 		debugfs_create_file("force_bredr_smp", 0644, hdev->debugfs,
3400 				    hdev, &force_bredr_smp_fops);
3401 		return 0;
3402 	}
3403 
3404 	if (WARN_ON(hdev->smp_bredr_data)) {
3405 		chan = hdev->smp_bredr_data;
3406 		hdev->smp_bredr_data = NULL;
3407 		smp_del_chan(chan);
3408 	}
3409 
3410 	chan = smp_add_cid(hdev, L2CAP_CID_SMP_BREDR);
3411 	if (IS_ERR(chan)) {
3412 		int err = PTR_ERR(chan);
3413 		chan = hdev->smp_data;
3414 		hdev->smp_data = NULL;
3415 		smp_del_chan(chan);
3416 		return err;
3417 	}
3418 
3419 	hdev->smp_bredr_data = chan;
3420 
3421 	return 0;
3422 }
3423 
3424 void smp_unregister(struct hci_dev *hdev)
3425 {
3426 	struct l2cap_chan *chan;
3427 
3428 	if (hdev->smp_bredr_data) {
3429 		chan = hdev->smp_bredr_data;
3430 		hdev->smp_bredr_data = NULL;
3431 		smp_del_chan(chan);
3432 	}
3433 
3434 	if (hdev->smp_data) {
3435 		chan = hdev->smp_data;
3436 		hdev->smp_data = NULL;
3437 		smp_del_chan(chan);
3438 	}
3439 }
3440 
3441 #if IS_ENABLED(CONFIG_BT_SELFTEST_SMP)
3442 
3443 static int __init test_ah(struct crypto_skcipher *tfm_aes)
3444 {
3445 	const u8 irk[16] = {
3446 			0x9b, 0x7d, 0x39, 0x0a, 0xa6, 0x10, 0x10, 0x34,
3447 			0x05, 0xad, 0xc8, 0x57, 0xa3, 0x34, 0x02, 0xec };
3448 	const u8 r[3] = { 0x94, 0x81, 0x70 };
3449 	const u8 exp[3] = { 0xaa, 0xfb, 0x0d };
3450 	u8 res[3];
3451 	int err;
3452 
3453 	err = smp_ah(tfm_aes, irk, r, res);
3454 	if (err)
3455 		return err;
3456 
3457 	if (memcmp(res, exp, 3))
3458 		return -EINVAL;
3459 
3460 	return 0;
3461 }
3462 
3463 static int __init test_c1(struct crypto_skcipher *tfm_aes)
3464 {
3465 	const u8 k[16] = {
3466 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3467 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
3468 	const u8 r[16] = {
3469 			0xe0, 0x2e, 0x70, 0xc6, 0x4e, 0x27, 0x88, 0x63,
3470 			0x0e, 0x6f, 0xad, 0x56, 0x21, 0xd5, 0x83, 0x57 };
3471 	const u8 preq[7] = { 0x01, 0x01, 0x00, 0x00, 0x10, 0x07, 0x07 };
3472 	const u8 pres[7] = { 0x02, 0x03, 0x00, 0x00, 0x08, 0x00, 0x05 };
3473 	const u8 _iat = 0x01;
3474 	const u8 _rat = 0x00;
3475 	const bdaddr_t ra = { { 0xb6, 0xb5, 0xb4, 0xb3, 0xb2, 0xb1 } };
3476 	const bdaddr_t ia = { { 0xa6, 0xa5, 0xa4, 0xa3, 0xa2, 0xa1 } };
3477 	const u8 exp[16] = {
3478 			0x86, 0x3b, 0xf1, 0xbe, 0xc5, 0x4d, 0xa7, 0xd2,
3479 			0xea, 0x88, 0x89, 0x87, 0xef, 0x3f, 0x1e, 0x1e };
3480 	u8 res[16];
3481 	int err;
3482 
3483 	err = smp_c1(tfm_aes, k, r, preq, pres, _iat, &ia, _rat, &ra, res);
3484 	if (err)
3485 		return err;
3486 
3487 	if (memcmp(res, exp, 16))
3488 		return -EINVAL;
3489 
3490 	return 0;
3491 }
3492 
3493 static int __init test_s1(struct crypto_skcipher *tfm_aes)
3494 {
3495 	const u8 k[16] = {
3496 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3497 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
3498 	const u8 r1[16] = {
3499 			0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11 };
3500 	const u8 r2[16] = {
3501 			0x00, 0xff, 0xee, 0xdd, 0xcc, 0xbb, 0xaa, 0x99 };
3502 	const u8 exp[16] = {
3503 			0x62, 0xa0, 0x6d, 0x79, 0xae, 0x16, 0x42, 0x5b,
3504 			0x9b, 0xf4, 0xb0, 0xe8, 0xf0, 0xe1, 0x1f, 0x9a };
3505 	u8 res[16];
3506 	int err;
3507 
3508 	err = smp_s1(tfm_aes, k, r1, r2, res);
3509 	if (err)
3510 		return err;
3511 
3512 	if (memcmp(res, exp, 16))
3513 		return -EINVAL;
3514 
3515 	return 0;
3516 }
3517 
3518 static int __init test_f4(struct crypto_shash *tfm_cmac)
3519 {
3520 	const u8 u[32] = {
3521 			0xe6, 0x9d, 0x35, 0x0e, 0x48, 0x01, 0x03, 0xcc,
3522 			0xdb, 0xfd, 0xf4, 0xac, 0x11, 0x91, 0xf4, 0xef,
3523 			0xb9, 0xa5, 0xf9, 0xe9, 0xa7, 0x83, 0x2c, 0x5e,
3524 			0x2c, 0xbe, 0x97, 0xf2, 0xd2, 0x03, 0xb0, 0x20 };
3525 	const u8 v[32] = {
3526 			0xfd, 0xc5, 0x7f, 0xf4, 0x49, 0xdd, 0x4f, 0x6b,
3527 			0xfb, 0x7c, 0x9d, 0xf1, 0xc2, 0x9a, 0xcb, 0x59,
3528 			0x2a, 0xe7, 0xd4, 0xee, 0xfb, 0xfc, 0x0a, 0x90,
3529 			0x9a, 0xbb, 0xf6, 0x32, 0x3d, 0x8b, 0x18, 0x55 };
3530 	const u8 x[16] = {
3531 			0xab, 0xae, 0x2b, 0x71, 0xec, 0xb2, 0xff, 0xff,
3532 			0x3e, 0x73, 0x77, 0xd1, 0x54, 0x84, 0xcb, 0xd5 };
3533 	const u8 z = 0x00;
3534 	const u8 exp[16] = {
3535 			0x2d, 0x87, 0x74, 0xa9, 0xbe, 0xa1, 0xed, 0xf1,
3536 			0x1c, 0xbd, 0xa9, 0x07, 0xf1, 0x16, 0xc9, 0xf2 };
3537 	u8 res[16];
3538 	int err;
3539 
3540 	err = smp_f4(tfm_cmac, u, v, x, z, res);
3541 	if (err)
3542 		return err;
3543 
3544 	if (memcmp(res, exp, 16))
3545 		return -EINVAL;
3546 
3547 	return 0;
3548 }
3549 
3550 static int __init test_f5(struct crypto_shash *tfm_cmac)
3551 {
3552 	const u8 w[32] = {
3553 			0x98, 0xa6, 0xbf, 0x73, 0xf3, 0x34, 0x8d, 0x86,
3554 			0xf1, 0x66, 0xf8, 0xb4, 0x13, 0x6b, 0x79, 0x99,
3555 			0x9b, 0x7d, 0x39, 0x0a, 0xa6, 0x10, 0x10, 0x34,
3556 			0x05, 0xad, 0xc8, 0x57, 0xa3, 0x34, 0x02, 0xec };
3557 	const u8 n1[16] = {
3558 			0xab, 0xae, 0x2b, 0x71, 0xec, 0xb2, 0xff, 0xff,
3559 			0x3e, 0x73, 0x77, 0xd1, 0x54, 0x84, 0xcb, 0xd5 };
3560 	const u8 n2[16] = {
3561 			0xcf, 0xc4, 0x3d, 0xff, 0xf7, 0x83, 0x65, 0x21,
3562 			0x6e, 0x5f, 0xa7, 0x25, 0xcc, 0xe7, 0xe8, 0xa6 };
3563 	const u8 a1[7] = { 0xce, 0xbf, 0x37, 0x37, 0x12, 0x56, 0x00 };
3564 	const u8 a2[7] = { 0xc1, 0xcf, 0x2d, 0x70, 0x13, 0xa7, 0x00 };
3565 	const u8 exp_ltk[16] = {
3566 			0x38, 0x0a, 0x75, 0x94, 0xb5, 0x22, 0x05, 0x98,
3567 			0x23, 0xcd, 0xd7, 0x69, 0x11, 0x79, 0x86, 0x69 };
3568 	const u8 exp_mackey[16] = {
3569 			0x20, 0x6e, 0x63, 0xce, 0x20, 0x6a, 0x3f, 0xfd,
3570 			0x02, 0x4a, 0x08, 0xa1, 0x76, 0xf1, 0x65, 0x29 };
3571 	u8 mackey[16], ltk[16];
3572 	int err;
3573 
3574 	err = smp_f5(tfm_cmac, w, n1, n2, a1, a2, mackey, ltk);
3575 	if (err)
3576 		return err;
3577 
3578 	if (memcmp(mackey, exp_mackey, 16))
3579 		return -EINVAL;
3580 
3581 	if (memcmp(ltk, exp_ltk, 16))
3582 		return -EINVAL;
3583 
3584 	return 0;
3585 }
3586 
3587 static int __init test_f6(struct crypto_shash *tfm_cmac)
3588 {
3589 	const u8 w[16] = {
3590 			0x20, 0x6e, 0x63, 0xce, 0x20, 0x6a, 0x3f, 0xfd,
3591 			0x02, 0x4a, 0x08, 0xa1, 0x76, 0xf1, 0x65, 0x29 };
3592 	const u8 n1[16] = {
3593 			0xab, 0xae, 0x2b, 0x71, 0xec, 0xb2, 0xff, 0xff,
3594 			0x3e, 0x73, 0x77, 0xd1, 0x54, 0x84, 0xcb, 0xd5 };
3595 	const u8 n2[16] = {
3596 			0xcf, 0xc4, 0x3d, 0xff, 0xf7, 0x83, 0x65, 0x21,
3597 			0x6e, 0x5f, 0xa7, 0x25, 0xcc, 0xe7, 0xe8, 0xa6 };
3598 	const u8 r[16] = {
3599 			0xc8, 0x0f, 0x2d, 0x0c, 0xd2, 0x42, 0xda, 0x08,
3600 			0x54, 0xbb, 0x53, 0xb4, 0x3b, 0x34, 0xa3, 0x12 };
3601 	const u8 io_cap[3] = { 0x02, 0x01, 0x01 };
3602 	const u8 a1[7] = { 0xce, 0xbf, 0x37, 0x37, 0x12, 0x56, 0x00 };
3603 	const u8 a2[7] = { 0xc1, 0xcf, 0x2d, 0x70, 0x13, 0xa7, 0x00 };
3604 	const u8 exp[16] = {
3605 			0x61, 0x8f, 0x95, 0xda, 0x09, 0x0b, 0x6c, 0xd2,
3606 			0xc5, 0xe8, 0xd0, 0x9c, 0x98, 0x73, 0xc4, 0xe3 };
3607 	u8 res[16];
3608 	int err;
3609 
3610 	err = smp_f6(tfm_cmac, w, n1, n2, r, io_cap, a1, a2, res);
3611 	if (err)
3612 		return err;
3613 
3614 	if (memcmp(res, exp, 16))
3615 		return -EINVAL;
3616 
3617 	return 0;
3618 }
3619 
3620 static int __init test_g2(struct crypto_shash *tfm_cmac)
3621 {
3622 	const u8 u[32] = {
3623 			0xe6, 0x9d, 0x35, 0x0e, 0x48, 0x01, 0x03, 0xcc,
3624 			0xdb, 0xfd, 0xf4, 0xac, 0x11, 0x91, 0xf4, 0xef,
3625 			0xb9, 0xa5, 0xf9, 0xe9, 0xa7, 0x83, 0x2c, 0x5e,
3626 			0x2c, 0xbe, 0x97, 0xf2, 0xd2, 0x03, 0xb0, 0x20 };
3627 	const u8 v[32] = {
3628 			0xfd, 0xc5, 0x7f, 0xf4, 0x49, 0xdd, 0x4f, 0x6b,
3629 			0xfb, 0x7c, 0x9d, 0xf1, 0xc2, 0x9a, 0xcb, 0x59,
3630 			0x2a, 0xe7, 0xd4, 0xee, 0xfb, 0xfc, 0x0a, 0x90,
3631 			0x9a, 0xbb, 0xf6, 0x32, 0x3d, 0x8b, 0x18, 0x55 };
3632 	const u8 x[16] = {
3633 			0xab, 0xae, 0x2b, 0x71, 0xec, 0xb2, 0xff, 0xff,
3634 			0x3e, 0x73, 0x77, 0xd1, 0x54, 0x84, 0xcb, 0xd5 };
3635 	const u8 y[16] = {
3636 			0xcf, 0xc4, 0x3d, 0xff, 0xf7, 0x83, 0x65, 0x21,
3637 			0x6e, 0x5f, 0xa7, 0x25, 0xcc, 0xe7, 0xe8, 0xa6 };
3638 	const u32 exp_val = 0x2f9ed5ba % 1000000;
3639 	u32 val;
3640 	int err;
3641 
3642 	err = smp_g2(tfm_cmac, u, v, x, y, &val);
3643 	if (err)
3644 		return err;
3645 
3646 	if (val != exp_val)
3647 		return -EINVAL;
3648 
3649 	return 0;
3650 }
3651 
3652 static int __init test_h6(struct crypto_shash *tfm_cmac)
3653 {
3654 	const u8 w[16] = {
3655 			0x9b, 0x7d, 0x39, 0x0a, 0xa6, 0x10, 0x10, 0x34,
3656 			0x05, 0xad, 0xc8, 0x57, 0xa3, 0x34, 0x02, 0xec };
3657 	const u8 key_id[4] = { 0x72, 0x62, 0x65, 0x6c };
3658 	const u8 exp[16] = {
3659 			0x99, 0x63, 0xb1, 0x80, 0xe2, 0xa9, 0xd3, 0xe8,
3660 			0x1c, 0xc9, 0x6d, 0xe7, 0x02, 0xe1, 0x9a, 0x2d };
3661 	u8 res[16];
3662 	int err;
3663 
3664 	err = smp_h6(tfm_cmac, w, key_id, res);
3665 	if (err)
3666 		return err;
3667 
3668 	if (memcmp(res, exp, 16))
3669 		return -EINVAL;
3670 
3671 	return 0;
3672 }
3673 
3674 static char test_smp_buffer[32];
3675 
3676 static ssize_t test_smp_read(struct file *file, char __user *user_buf,
3677 			     size_t count, loff_t *ppos)
3678 {
3679 	return simple_read_from_buffer(user_buf, count, ppos, test_smp_buffer,
3680 				       strlen(test_smp_buffer));
3681 }
3682 
3683 static const struct file_operations test_smp_fops = {
3684 	.open		= simple_open,
3685 	.read		= test_smp_read,
3686 	.llseek		= default_llseek,
3687 };
3688 
3689 static int __init run_selftests(struct crypto_skcipher *tfm_aes,
3690 				struct crypto_shash *tfm_cmac)
3691 {
3692 	ktime_t calltime, delta, rettime;
3693 	unsigned long long duration;
3694 	int err;
3695 
3696 	calltime = ktime_get();
3697 
3698 	err = test_ah(tfm_aes);
3699 	if (err) {
3700 		BT_ERR("smp_ah test failed");
3701 		goto done;
3702 	}
3703 
3704 	err = test_c1(tfm_aes);
3705 	if (err) {
3706 		BT_ERR("smp_c1 test failed");
3707 		goto done;
3708 	}
3709 
3710 	err = test_s1(tfm_aes);
3711 	if (err) {
3712 		BT_ERR("smp_s1 test failed");
3713 		goto done;
3714 	}
3715 
3716 	err = test_f4(tfm_cmac);
3717 	if (err) {
3718 		BT_ERR("smp_f4 test failed");
3719 		goto done;
3720 	}
3721 
3722 	err = test_f5(tfm_cmac);
3723 	if (err) {
3724 		BT_ERR("smp_f5 test failed");
3725 		goto done;
3726 	}
3727 
3728 	err = test_f6(tfm_cmac);
3729 	if (err) {
3730 		BT_ERR("smp_f6 test failed");
3731 		goto done;
3732 	}
3733 
3734 	err = test_g2(tfm_cmac);
3735 	if (err) {
3736 		BT_ERR("smp_g2 test failed");
3737 		goto done;
3738 	}
3739 
3740 	err = test_h6(tfm_cmac);
3741 	if (err) {
3742 		BT_ERR("smp_h6 test failed");
3743 		goto done;
3744 	}
3745 
3746 	rettime = ktime_get();
3747 	delta = ktime_sub(rettime, calltime);
3748 	duration = (unsigned long long) ktime_to_ns(delta) >> 10;
3749 
3750 	BT_INFO("SMP test passed in %llu usecs", duration);
3751 
3752 done:
3753 	if (!err)
3754 		snprintf(test_smp_buffer, sizeof(test_smp_buffer),
3755 			 "PASS (%llu usecs)\n", duration);
3756 	else
3757 		snprintf(test_smp_buffer, sizeof(test_smp_buffer), "FAIL\n");
3758 
3759 	debugfs_create_file("selftest_smp", 0444, bt_debugfs, NULL,
3760 			    &test_smp_fops);
3761 
3762 	return err;
3763 }
3764 
3765 int __init bt_selftest_smp(void)
3766 {
3767 	struct crypto_skcipher *tfm_aes;
3768 	struct crypto_shash *tfm_cmac;
3769 	int err;
3770 
3771 	tfm_aes = crypto_alloc_skcipher("ecb(aes)", 0, CRYPTO_ALG_ASYNC);
3772 	if (IS_ERR(tfm_aes)) {
3773 		BT_ERR("Unable to create ECB crypto context");
3774 		return PTR_ERR(tfm_aes);
3775 	}
3776 
3777 	tfm_cmac = crypto_alloc_shash("cmac(aes)", 0, CRYPTO_ALG_ASYNC);
3778 	if (IS_ERR(tfm_cmac)) {
3779 		BT_ERR("Unable to create CMAC crypto context");
3780 		crypto_free_skcipher(tfm_aes);
3781 		return PTR_ERR(tfm_cmac);
3782 	}
3783 
3784 	err = run_selftests(tfm_aes, tfm_cmac);
3785 
3786 	crypto_free_shash(tfm_cmac);
3787 	crypto_free_skcipher(tfm_aes);
3788 
3789 	return err;
3790 }
3791 
3792 #endif
3793