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