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