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