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