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