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