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