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