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