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