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