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