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