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