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