OSDN Git Service

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