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