These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / 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(k, 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         mgmt_auth_failed(hcon, HCI_ERROR_AUTH_FAILURE);
815
816         if (chan->data)
817                 smp_chan_destroy(conn);
818 }
819
820 #define JUST_WORKS      0x00
821 #define JUST_CFM        0x01
822 #define REQ_PASSKEY     0x02
823 #define CFM_PASSKEY     0x03
824 #define REQ_OOB         0x04
825 #define DSP_PASSKEY     0x05
826 #define OVERLAP         0xFF
827
828 static const u8 gen_method[5][5] = {
829         { JUST_WORKS,  JUST_CFM,    REQ_PASSKEY, JUST_WORKS, REQ_PASSKEY },
830         { JUST_WORKS,  JUST_CFM,    REQ_PASSKEY, JUST_WORKS, REQ_PASSKEY },
831         { CFM_PASSKEY, CFM_PASSKEY, REQ_PASSKEY, JUST_WORKS, CFM_PASSKEY },
832         { JUST_WORKS,  JUST_CFM,    JUST_WORKS,  JUST_WORKS, JUST_CFM    },
833         { CFM_PASSKEY, CFM_PASSKEY, REQ_PASSKEY, JUST_WORKS, OVERLAP     },
834 };
835
836 static const u8 sc_method[5][5] = {
837         { JUST_WORKS,  JUST_CFM,    REQ_PASSKEY, JUST_WORKS, REQ_PASSKEY },
838         { JUST_WORKS,  CFM_PASSKEY, REQ_PASSKEY, JUST_WORKS, CFM_PASSKEY },
839         { DSP_PASSKEY, DSP_PASSKEY, REQ_PASSKEY, JUST_WORKS, DSP_PASSKEY },
840         { JUST_WORKS,  JUST_CFM,    JUST_WORKS,  JUST_WORKS, JUST_CFM    },
841         { DSP_PASSKEY, CFM_PASSKEY, REQ_PASSKEY, JUST_WORKS, CFM_PASSKEY },
842 };
843
844 static u8 get_auth_method(struct smp_chan *smp, u8 local_io, u8 remote_io)
845 {
846         /* If either side has unknown io_caps, use JUST_CFM (which gets
847          * converted later to JUST_WORKS if we're initiators.
848          */
849         if (local_io > SMP_IO_KEYBOARD_DISPLAY ||
850             remote_io > SMP_IO_KEYBOARD_DISPLAY)
851                 return JUST_CFM;
852
853         if (test_bit(SMP_FLAG_SC, &smp->flags))
854                 return sc_method[remote_io][local_io];
855
856         return gen_method[remote_io][local_io];
857 }
858
859 static int tk_request(struct l2cap_conn *conn, u8 remote_oob, u8 auth,
860                                                 u8 local_io, u8 remote_io)
861 {
862         struct hci_conn *hcon = conn->hcon;
863         struct l2cap_chan *chan = conn->smp;
864         struct smp_chan *smp = chan->data;
865         u32 passkey = 0;
866         int ret = 0;
867
868         /* Initialize key for JUST WORKS */
869         memset(smp->tk, 0, sizeof(smp->tk));
870         clear_bit(SMP_FLAG_TK_VALID, &smp->flags);
871
872         BT_DBG("tk_request: auth:%d lcl:%d rem:%d", auth, local_io, remote_io);
873
874         /* If neither side wants MITM, either "just" confirm an incoming
875          * request or use just-works for outgoing ones. The JUST_CFM
876          * will be converted to JUST_WORKS if necessary later in this
877          * function. If either side has MITM look up the method from the
878          * table.
879          */
880         if (!(auth & SMP_AUTH_MITM))
881                 smp->method = JUST_CFM;
882         else
883                 smp->method = get_auth_method(smp, local_io, remote_io);
884
885         /* Don't confirm locally initiated pairing attempts */
886         if (smp->method == JUST_CFM && test_bit(SMP_FLAG_INITIATOR,
887                                                 &smp->flags))
888                 smp->method = JUST_WORKS;
889
890         /* Don't bother user space with no IO capabilities */
891         if (smp->method == JUST_CFM &&
892             hcon->io_capability == HCI_IO_NO_INPUT_OUTPUT)
893                 smp->method = JUST_WORKS;
894
895         /* If Just Works, Continue with Zero TK */
896         if (smp->method == JUST_WORKS) {
897                 set_bit(SMP_FLAG_TK_VALID, &smp->flags);
898                 return 0;
899         }
900
901         /* If this function is used for SC -> legacy fallback we
902          * can only recover the just-works case.
903          */
904         if (test_bit(SMP_FLAG_SC, &smp->flags))
905                 return -EINVAL;
906
907         /* Not Just Works/Confirm results in MITM Authentication */
908         if (smp->method != JUST_CFM) {
909                 set_bit(SMP_FLAG_MITM_AUTH, &smp->flags);
910                 if (hcon->pending_sec_level < BT_SECURITY_HIGH)
911                         hcon->pending_sec_level = BT_SECURITY_HIGH;
912         }
913
914         /* If both devices have Keyoard-Display I/O, the master
915          * Confirms and the slave Enters the passkey.
916          */
917         if (smp->method == OVERLAP) {
918                 if (hcon->role == HCI_ROLE_MASTER)
919                         smp->method = CFM_PASSKEY;
920                 else
921                         smp->method = REQ_PASSKEY;
922         }
923
924         /* Generate random passkey. */
925         if (smp->method == CFM_PASSKEY) {
926                 memset(smp->tk, 0, sizeof(smp->tk));
927                 get_random_bytes(&passkey, sizeof(passkey));
928                 passkey %= 1000000;
929                 put_unaligned_le32(passkey, smp->tk);
930                 BT_DBG("PassKey: %d", passkey);
931                 set_bit(SMP_FLAG_TK_VALID, &smp->flags);
932         }
933
934         if (smp->method == REQ_PASSKEY)
935                 ret = mgmt_user_passkey_request(hcon->hdev, &hcon->dst,
936                                                 hcon->type, hcon->dst_type);
937         else if (smp->method == JUST_CFM)
938                 ret = mgmt_user_confirm_request(hcon->hdev, &hcon->dst,
939                                                 hcon->type, hcon->dst_type,
940                                                 passkey, 1);
941         else
942                 ret = mgmt_user_passkey_notify(hcon->hdev, &hcon->dst,
943                                                 hcon->type, hcon->dst_type,
944                                                 passkey, 0);
945
946         return ret;
947 }
948
949 static u8 smp_confirm(struct smp_chan *smp)
950 {
951         struct l2cap_conn *conn = smp->conn;
952         struct smp_cmd_pairing_confirm cp;
953         int ret;
954
955         BT_DBG("conn %p", conn);
956
957         ret = smp_c1(smp->tfm_aes, smp->tk, smp->prnd, smp->preq, smp->prsp,
958                      conn->hcon->init_addr_type, &conn->hcon->init_addr,
959                      conn->hcon->resp_addr_type, &conn->hcon->resp_addr,
960                      cp.confirm_val);
961         if (ret)
962                 return SMP_UNSPECIFIED;
963
964         clear_bit(SMP_FLAG_CFM_PENDING, &smp->flags);
965
966         smp_send_cmd(smp->conn, SMP_CMD_PAIRING_CONFIRM, sizeof(cp), &cp);
967
968         if (conn->hcon->out)
969                 SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_CONFIRM);
970         else
971                 SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_RANDOM);
972
973         return 0;
974 }
975
976 static u8 smp_random(struct smp_chan *smp)
977 {
978         struct l2cap_conn *conn = smp->conn;
979         struct hci_conn *hcon = conn->hcon;
980         u8 confirm[16];
981         int ret;
982
983         if (IS_ERR_OR_NULL(smp->tfm_aes))
984                 return SMP_UNSPECIFIED;
985
986         BT_DBG("conn %p %s", conn, conn->hcon->out ? "master" : "slave");
987
988         ret = smp_c1(smp->tfm_aes, smp->tk, smp->rrnd, smp->preq, smp->prsp,
989                      hcon->init_addr_type, &hcon->init_addr,
990                      hcon->resp_addr_type, &hcon->resp_addr, confirm);
991         if (ret)
992                 return SMP_UNSPECIFIED;
993
994         if (memcmp(smp->pcnf, confirm, sizeof(smp->pcnf)) != 0) {
995                 BT_ERR("Pairing failed (confirmation values mismatch)");
996                 return SMP_CONFIRM_FAILED;
997         }
998
999         if (hcon->out) {
1000                 u8 stk[16];
1001                 __le64 rand = 0;
1002                 __le16 ediv = 0;
1003
1004                 smp_s1(smp->tfm_aes, smp->tk, smp->rrnd, smp->prnd, stk);
1005
1006                 if (test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &hcon->flags))
1007                         return SMP_UNSPECIFIED;
1008
1009                 hci_le_start_enc(hcon, ediv, rand, stk, smp->enc_key_size);
1010                 hcon->enc_key_size = smp->enc_key_size;
1011                 set_bit(HCI_CONN_STK_ENCRYPT, &hcon->flags);
1012         } else {
1013                 u8 stk[16], auth;
1014                 __le64 rand = 0;
1015                 __le16 ediv = 0;
1016
1017                 smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM, sizeof(smp->prnd),
1018                              smp->prnd);
1019
1020                 smp_s1(smp->tfm_aes, smp->tk, smp->prnd, smp->rrnd, stk);
1021
1022                 if (hcon->pending_sec_level == BT_SECURITY_HIGH)
1023                         auth = 1;
1024                 else
1025                         auth = 0;
1026
1027                 /* Even though there's no _SLAVE suffix this is the
1028                  * slave STK we're adding for later lookup (the master
1029                  * STK never needs to be stored).
1030                  */
1031                 hci_add_ltk(hcon->hdev, &hcon->dst, hcon->dst_type,
1032                             SMP_STK, auth, stk, smp->enc_key_size, ediv, rand);
1033         }
1034
1035         return 0;
1036 }
1037
1038 static void smp_notify_keys(struct l2cap_conn *conn)
1039 {
1040         struct l2cap_chan *chan = conn->smp;
1041         struct smp_chan *smp = chan->data;
1042         struct hci_conn *hcon = conn->hcon;
1043         struct hci_dev *hdev = hcon->hdev;
1044         struct smp_cmd_pairing *req = (void *) &smp->preq[1];
1045         struct smp_cmd_pairing *rsp = (void *) &smp->prsp[1];
1046         bool persistent;
1047
1048         if (hcon->type == ACL_LINK) {
1049                 if (hcon->key_type == HCI_LK_DEBUG_COMBINATION)
1050                         persistent = false;
1051                 else
1052                         persistent = !test_bit(HCI_CONN_FLUSH_KEY,
1053                                                &hcon->flags);
1054         } else {
1055                 /* The LTKs, IRKs and CSRKs should be persistent only if
1056                  * both sides had the bonding bit set in their
1057                  * authentication requests.
1058                  */
1059                 persistent = !!((req->auth_req & rsp->auth_req) &
1060                                 SMP_AUTH_BONDING);
1061         }
1062
1063         if (smp->remote_irk) {
1064                 mgmt_new_irk(hdev, smp->remote_irk, persistent);
1065
1066                 /* Now that user space can be considered to know the
1067                  * identity address track the connection based on it
1068                  * from now on (assuming this is an LE link).
1069                  */
1070                 if (hcon->type == LE_LINK) {
1071                         bacpy(&hcon->dst, &smp->remote_irk->bdaddr);
1072                         hcon->dst_type = smp->remote_irk->addr_type;
1073                         queue_work(hdev->workqueue, &conn->id_addr_update_work);
1074                 }
1075         }
1076
1077         if (smp->csrk) {
1078                 smp->csrk->bdaddr_type = hcon->dst_type;
1079                 bacpy(&smp->csrk->bdaddr, &hcon->dst);
1080                 mgmt_new_csrk(hdev, smp->csrk, persistent);
1081         }
1082
1083         if (smp->slave_csrk) {
1084                 smp->slave_csrk->bdaddr_type = hcon->dst_type;
1085                 bacpy(&smp->slave_csrk->bdaddr, &hcon->dst);
1086                 mgmt_new_csrk(hdev, smp->slave_csrk, persistent);
1087         }
1088
1089         if (smp->ltk) {
1090                 smp->ltk->bdaddr_type = hcon->dst_type;
1091                 bacpy(&smp->ltk->bdaddr, &hcon->dst);
1092                 mgmt_new_ltk(hdev, smp->ltk, persistent);
1093         }
1094
1095         if (smp->slave_ltk) {
1096                 smp->slave_ltk->bdaddr_type = hcon->dst_type;
1097                 bacpy(&smp->slave_ltk->bdaddr, &hcon->dst);
1098                 mgmt_new_ltk(hdev, smp->slave_ltk, persistent);
1099         }
1100
1101         if (smp->link_key) {
1102                 struct link_key *key;
1103                 u8 type;
1104
1105                 if (test_bit(SMP_FLAG_DEBUG_KEY, &smp->flags))
1106                         type = HCI_LK_DEBUG_COMBINATION;
1107                 else if (hcon->sec_level == BT_SECURITY_FIPS)
1108                         type = HCI_LK_AUTH_COMBINATION_P256;
1109                 else
1110                         type = HCI_LK_UNAUTH_COMBINATION_P256;
1111
1112                 key = hci_add_link_key(hdev, smp->conn->hcon, &hcon->dst,
1113                                        smp->link_key, type, 0, &persistent);
1114                 if (key) {
1115                         mgmt_new_link_key(hdev, key, persistent);
1116
1117                         /* Don't keep debug keys around if the relevant
1118                          * flag is not set.
1119                          */
1120                         if (!hci_dev_test_flag(hdev, HCI_KEEP_DEBUG_KEYS) &&
1121                             key->type == HCI_LK_DEBUG_COMBINATION) {
1122                                 list_del_rcu(&key->list);
1123                                 kfree_rcu(key, rcu);
1124                         }
1125                 }
1126         }
1127 }
1128
1129 static void sc_add_ltk(struct smp_chan *smp)
1130 {
1131         struct hci_conn *hcon = smp->conn->hcon;
1132         u8 key_type, auth;
1133
1134         if (test_bit(SMP_FLAG_DEBUG_KEY, &smp->flags))
1135                 key_type = SMP_LTK_P256_DEBUG;
1136         else
1137                 key_type = SMP_LTK_P256;
1138
1139         if (hcon->pending_sec_level == BT_SECURITY_FIPS)
1140                 auth = 1;
1141         else
1142                 auth = 0;
1143
1144         smp->ltk = hci_add_ltk(hcon->hdev, &hcon->dst, hcon->dst_type,
1145                                key_type, auth, smp->tk, smp->enc_key_size,
1146                                0, 0);
1147 }
1148
1149 static void sc_generate_link_key(struct smp_chan *smp)
1150 {
1151         /* These constants are as specified in the core specification.
1152          * In ASCII they spell out to 'tmp1' and 'lebr'.
1153          */
1154         const u8 tmp1[4] = { 0x31, 0x70, 0x6d, 0x74 };
1155         const u8 lebr[4] = { 0x72, 0x62, 0x65, 0x6c };
1156
1157         smp->link_key = kzalloc(16, GFP_KERNEL);
1158         if (!smp->link_key)
1159                 return;
1160
1161         if (smp_h6(smp->tfm_cmac, smp->tk, tmp1, smp->link_key)) {
1162                 kzfree(smp->link_key);
1163                 smp->link_key = NULL;
1164                 return;
1165         }
1166
1167         if (smp_h6(smp->tfm_cmac, smp->link_key, lebr, smp->link_key)) {
1168                 kzfree(smp->link_key);
1169                 smp->link_key = NULL;
1170                 return;
1171         }
1172 }
1173
1174 static void smp_allow_key_dist(struct smp_chan *smp)
1175 {
1176         /* Allow the first expected phase 3 PDU. The rest of the PDUs
1177          * will be allowed in each PDU handler to ensure we receive
1178          * them in the correct order.
1179          */
1180         if (smp->remote_key_dist & SMP_DIST_ENC_KEY)
1181                 SMP_ALLOW_CMD(smp, SMP_CMD_ENCRYPT_INFO);
1182         else if (smp->remote_key_dist & SMP_DIST_ID_KEY)
1183                 SMP_ALLOW_CMD(smp, SMP_CMD_IDENT_INFO);
1184         else if (smp->remote_key_dist & SMP_DIST_SIGN)
1185                 SMP_ALLOW_CMD(smp, SMP_CMD_SIGN_INFO);
1186 }
1187
1188 static void sc_generate_ltk(struct smp_chan *smp)
1189 {
1190         /* These constants are as specified in the core specification.
1191          * In ASCII they spell out to 'tmp2' and 'brle'.
1192          */
1193         const u8 tmp2[4] = { 0x32, 0x70, 0x6d, 0x74 };
1194         const u8 brle[4] = { 0x65, 0x6c, 0x72, 0x62 };
1195         struct hci_conn *hcon = smp->conn->hcon;
1196         struct hci_dev *hdev = hcon->hdev;
1197         struct link_key *key;
1198
1199         key = hci_find_link_key(hdev, &hcon->dst);
1200         if (!key) {
1201                 BT_ERR("%s No Link Key found to generate LTK", hdev->name);
1202                 return;
1203         }
1204
1205         if (key->type == HCI_LK_DEBUG_COMBINATION)
1206                 set_bit(SMP_FLAG_DEBUG_KEY, &smp->flags);
1207
1208         if (smp_h6(smp->tfm_cmac, key->val, tmp2, smp->tk))
1209                 return;
1210
1211         if (smp_h6(smp->tfm_cmac, smp->tk, brle, smp->tk))
1212                 return;
1213
1214         sc_add_ltk(smp);
1215 }
1216
1217 static void smp_distribute_keys(struct smp_chan *smp)
1218 {
1219         struct smp_cmd_pairing *req, *rsp;
1220         struct l2cap_conn *conn = smp->conn;
1221         struct hci_conn *hcon = conn->hcon;
1222         struct hci_dev *hdev = hcon->hdev;
1223         __u8 *keydist;
1224
1225         BT_DBG("conn %p", conn);
1226
1227         rsp = (void *) &smp->prsp[1];
1228
1229         /* The responder sends its keys first */
1230         if (hcon->out && (smp->remote_key_dist & KEY_DIST_MASK)) {
1231                 smp_allow_key_dist(smp);
1232                 return;
1233         }
1234
1235         req = (void *) &smp->preq[1];
1236
1237         if (hcon->out) {
1238                 keydist = &rsp->init_key_dist;
1239                 *keydist &= req->init_key_dist;
1240         } else {
1241                 keydist = &rsp->resp_key_dist;
1242                 *keydist &= req->resp_key_dist;
1243         }
1244
1245         if (test_bit(SMP_FLAG_SC, &smp->flags)) {
1246                 if (hcon->type == LE_LINK && (*keydist & SMP_DIST_LINK_KEY))
1247                         sc_generate_link_key(smp);
1248                 if (hcon->type == ACL_LINK && (*keydist & SMP_DIST_ENC_KEY))
1249                         sc_generate_ltk(smp);
1250
1251                 /* Clear the keys which are generated but not distributed */
1252                 *keydist &= ~SMP_SC_NO_DIST;
1253         }
1254
1255         BT_DBG("keydist 0x%x", *keydist);
1256
1257         if (*keydist & SMP_DIST_ENC_KEY) {
1258                 struct smp_cmd_encrypt_info enc;
1259                 struct smp_cmd_master_ident ident;
1260                 struct smp_ltk *ltk;
1261                 u8 authenticated;
1262                 __le16 ediv;
1263                 __le64 rand;
1264
1265                 /* Make sure we generate only the significant amount of
1266                  * bytes based on the encryption key size, and set the rest
1267                  * of the value to zeroes.
1268                  */
1269                 get_random_bytes(enc.ltk, smp->enc_key_size);
1270                 memset(enc.ltk + smp->enc_key_size, 0,
1271                        sizeof(enc.ltk) - smp->enc_key_size);
1272
1273                 get_random_bytes(&ediv, sizeof(ediv));
1274                 get_random_bytes(&rand, sizeof(rand));
1275
1276                 smp_send_cmd(conn, SMP_CMD_ENCRYPT_INFO, sizeof(enc), &enc);
1277
1278                 authenticated = hcon->sec_level == BT_SECURITY_HIGH;
1279                 ltk = hci_add_ltk(hdev, &hcon->dst, hcon->dst_type,
1280                                   SMP_LTK_SLAVE, authenticated, enc.ltk,
1281                                   smp->enc_key_size, ediv, rand);
1282                 smp->slave_ltk = ltk;
1283
1284                 ident.ediv = ediv;
1285                 ident.rand = rand;
1286
1287                 smp_send_cmd(conn, SMP_CMD_MASTER_IDENT, sizeof(ident), &ident);
1288
1289                 *keydist &= ~SMP_DIST_ENC_KEY;
1290         }
1291
1292         if (*keydist & SMP_DIST_ID_KEY) {
1293                 struct smp_cmd_ident_addr_info addrinfo;
1294                 struct smp_cmd_ident_info idinfo;
1295
1296                 memcpy(idinfo.irk, hdev->irk, sizeof(idinfo.irk));
1297
1298                 smp_send_cmd(conn, SMP_CMD_IDENT_INFO, sizeof(idinfo), &idinfo);
1299
1300                 /* The hci_conn contains the local identity address
1301                  * after the connection has been established.
1302                  *
1303                  * This is true even when the connection has been
1304                  * established using a resolvable random address.
1305                  */
1306                 bacpy(&addrinfo.bdaddr, &hcon->src);
1307                 addrinfo.addr_type = hcon->src_type;
1308
1309                 smp_send_cmd(conn, SMP_CMD_IDENT_ADDR_INFO, sizeof(addrinfo),
1310                              &addrinfo);
1311
1312                 *keydist &= ~SMP_DIST_ID_KEY;
1313         }
1314
1315         if (*keydist & SMP_DIST_SIGN) {
1316                 struct smp_cmd_sign_info sign;
1317                 struct smp_csrk *csrk;
1318
1319                 /* Generate a new random key */
1320                 get_random_bytes(sign.csrk, sizeof(sign.csrk));
1321
1322                 csrk = kzalloc(sizeof(*csrk), GFP_KERNEL);
1323                 if (csrk) {
1324                         if (hcon->sec_level > BT_SECURITY_MEDIUM)
1325                                 csrk->type = MGMT_CSRK_LOCAL_AUTHENTICATED;
1326                         else
1327                                 csrk->type = MGMT_CSRK_LOCAL_UNAUTHENTICATED;
1328                         memcpy(csrk->val, sign.csrk, sizeof(csrk->val));
1329                 }
1330                 smp->slave_csrk = csrk;
1331
1332                 smp_send_cmd(conn, SMP_CMD_SIGN_INFO, sizeof(sign), &sign);
1333
1334                 *keydist &= ~SMP_DIST_SIGN;
1335         }
1336
1337         /* If there are still keys to be received wait for them */
1338         if (smp->remote_key_dist & KEY_DIST_MASK) {
1339                 smp_allow_key_dist(smp);
1340                 return;
1341         }
1342
1343         set_bit(SMP_FLAG_COMPLETE, &smp->flags);
1344         smp_notify_keys(conn);
1345
1346         smp_chan_destroy(conn);
1347 }
1348
1349 static void smp_timeout(struct work_struct *work)
1350 {
1351         struct smp_chan *smp = container_of(work, struct smp_chan,
1352                                             security_timer.work);
1353         struct l2cap_conn *conn = smp->conn;
1354
1355         BT_DBG("conn %p", conn);
1356
1357         hci_disconnect(conn->hcon, HCI_ERROR_REMOTE_USER_TERM);
1358 }
1359
1360 static struct smp_chan *smp_chan_create(struct l2cap_conn *conn)
1361 {
1362         struct l2cap_chan *chan = conn->smp;
1363         struct smp_chan *smp;
1364
1365         smp = kzalloc(sizeof(*smp), GFP_ATOMIC);
1366         if (!smp)
1367                 return NULL;
1368
1369         smp->tfm_aes = crypto_alloc_blkcipher("ecb(aes)", 0, CRYPTO_ALG_ASYNC);
1370         if (IS_ERR(smp->tfm_aes)) {
1371                 BT_ERR("Unable to create ECB crypto context");
1372                 kzfree(smp);
1373                 return NULL;
1374         }
1375
1376         smp->tfm_cmac = crypto_alloc_hash("cmac(aes)", 0, CRYPTO_ALG_ASYNC);
1377         if (IS_ERR(smp->tfm_cmac)) {
1378                 BT_ERR("Unable to create CMAC crypto context");
1379                 crypto_free_blkcipher(smp->tfm_aes);
1380                 kzfree(smp);
1381                 return NULL;
1382         }
1383
1384         smp->conn = conn;
1385         chan->data = smp;
1386
1387         SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_FAIL);
1388
1389         INIT_DELAYED_WORK(&smp->security_timer, smp_timeout);
1390
1391         hci_conn_hold(conn->hcon);
1392
1393         return smp;
1394 }
1395
1396 static int sc_mackey_and_ltk(struct smp_chan *smp, u8 mackey[16], u8 ltk[16])
1397 {
1398         struct hci_conn *hcon = smp->conn->hcon;
1399         u8 *na, *nb, a[7], b[7];
1400
1401         if (hcon->out) {
1402                 na   = smp->prnd;
1403                 nb   = smp->rrnd;
1404         } else {
1405                 na   = smp->rrnd;
1406                 nb   = smp->prnd;
1407         }
1408
1409         memcpy(a, &hcon->init_addr, 6);
1410         memcpy(b, &hcon->resp_addr, 6);
1411         a[6] = hcon->init_addr_type;
1412         b[6] = hcon->resp_addr_type;
1413
1414         return smp_f5(smp->tfm_cmac, smp->dhkey, na, nb, a, b, mackey, ltk);
1415 }
1416
1417 static void sc_dhkey_check(struct smp_chan *smp)
1418 {
1419         struct hci_conn *hcon = smp->conn->hcon;
1420         struct smp_cmd_dhkey_check check;
1421         u8 a[7], b[7], *local_addr, *remote_addr;
1422         u8 io_cap[3], r[16];
1423
1424         memcpy(a, &hcon->init_addr, 6);
1425         memcpy(b, &hcon->resp_addr, 6);
1426         a[6] = hcon->init_addr_type;
1427         b[6] = hcon->resp_addr_type;
1428
1429         if (hcon->out) {
1430                 local_addr = a;
1431                 remote_addr = b;
1432                 memcpy(io_cap, &smp->preq[1], 3);
1433         } else {
1434                 local_addr = b;
1435                 remote_addr = a;
1436                 memcpy(io_cap, &smp->prsp[1], 3);
1437         }
1438
1439         memset(r, 0, sizeof(r));
1440
1441         if (smp->method == REQ_PASSKEY || smp->method == DSP_PASSKEY)
1442                 put_unaligned_le32(hcon->passkey_notify, r);
1443
1444         if (smp->method == REQ_OOB)
1445                 memcpy(r, smp->rr, 16);
1446
1447         smp_f6(smp->tfm_cmac, smp->mackey, smp->prnd, smp->rrnd, r, io_cap,
1448                local_addr, remote_addr, check.e);
1449
1450         smp_send_cmd(smp->conn, SMP_CMD_DHKEY_CHECK, sizeof(check), &check);
1451 }
1452
1453 static u8 sc_passkey_send_confirm(struct smp_chan *smp)
1454 {
1455         struct l2cap_conn *conn = smp->conn;
1456         struct hci_conn *hcon = conn->hcon;
1457         struct smp_cmd_pairing_confirm cfm;
1458         u8 r;
1459
1460         r = ((hcon->passkey_notify >> smp->passkey_round) & 0x01);
1461         r |= 0x80;
1462
1463         get_random_bytes(smp->prnd, sizeof(smp->prnd));
1464
1465         if (smp_f4(smp->tfm_cmac, smp->local_pk, smp->remote_pk, smp->prnd, r,
1466                    cfm.confirm_val))
1467                 return SMP_UNSPECIFIED;
1468
1469         smp_send_cmd(conn, SMP_CMD_PAIRING_CONFIRM, sizeof(cfm), &cfm);
1470
1471         return 0;
1472 }
1473
1474 static u8 sc_passkey_round(struct smp_chan *smp, u8 smp_op)
1475 {
1476         struct l2cap_conn *conn = smp->conn;
1477         struct hci_conn *hcon = conn->hcon;
1478         struct hci_dev *hdev = hcon->hdev;
1479         u8 cfm[16], r;
1480
1481         /* Ignore the PDU if we've already done 20 rounds (0 - 19) */
1482         if (smp->passkey_round >= 20)
1483                 return 0;
1484
1485         switch (smp_op) {
1486         case SMP_CMD_PAIRING_RANDOM:
1487                 r = ((hcon->passkey_notify >> smp->passkey_round) & 0x01);
1488                 r |= 0x80;
1489
1490                 if (smp_f4(smp->tfm_cmac, smp->remote_pk, smp->local_pk,
1491                            smp->rrnd, r, cfm))
1492                         return SMP_UNSPECIFIED;
1493
1494                 if (memcmp(smp->pcnf, cfm, 16))
1495                         return SMP_CONFIRM_FAILED;
1496
1497                 smp->passkey_round++;
1498
1499                 if (smp->passkey_round == 20) {
1500                         /* Generate MacKey and LTK */
1501                         if (sc_mackey_and_ltk(smp, smp->mackey, smp->tk))
1502                                 return SMP_UNSPECIFIED;
1503                 }
1504
1505                 /* The round is only complete when the initiator
1506                  * receives pairing random.
1507                  */
1508                 if (!hcon->out) {
1509                         smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM,
1510                                      sizeof(smp->prnd), smp->prnd);
1511                         if (smp->passkey_round == 20)
1512                                 SMP_ALLOW_CMD(smp, SMP_CMD_DHKEY_CHECK);
1513                         else
1514                                 SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_CONFIRM);
1515                         return 0;
1516                 }
1517
1518                 /* Start the next round */
1519                 if (smp->passkey_round != 20)
1520                         return sc_passkey_round(smp, 0);
1521
1522                 /* Passkey rounds are complete - start DHKey Check */
1523                 sc_dhkey_check(smp);
1524                 SMP_ALLOW_CMD(smp, SMP_CMD_DHKEY_CHECK);
1525
1526                 break;
1527
1528         case SMP_CMD_PAIRING_CONFIRM:
1529                 if (test_bit(SMP_FLAG_WAIT_USER, &smp->flags)) {
1530                         set_bit(SMP_FLAG_CFM_PENDING, &smp->flags);
1531                         return 0;
1532                 }
1533
1534                 SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_RANDOM);
1535
1536                 if (hcon->out) {
1537                         smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM,
1538                                      sizeof(smp->prnd), smp->prnd);
1539                         return 0;
1540                 }
1541
1542                 return sc_passkey_send_confirm(smp);
1543
1544         case SMP_CMD_PUBLIC_KEY:
1545         default:
1546                 /* Initiating device starts the round */
1547                 if (!hcon->out)
1548                         return 0;
1549
1550                 BT_DBG("%s Starting passkey round %u", hdev->name,
1551                        smp->passkey_round + 1);
1552
1553                 SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_CONFIRM);
1554
1555                 return sc_passkey_send_confirm(smp);
1556         }
1557
1558         return 0;
1559 }
1560
1561 static int sc_user_reply(struct smp_chan *smp, u16 mgmt_op, __le32 passkey)
1562 {
1563         struct l2cap_conn *conn = smp->conn;
1564         struct hci_conn *hcon = conn->hcon;
1565         u8 smp_op;
1566
1567         clear_bit(SMP_FLAG_WAIT_USER, &smp->flags);
1568
1569         switch (mgmt_op) {
1570         case MGMT_OP_USER_PASSKEY_NEG_REPLY:
1571                 smp_failure(smp->conn, SMP_PASSKEY_ENTRY_FAILED);
1572                 return 0;
1573         case MGMT_OP_USER_CONFIRM_NEG_REPLY:
1574                 smp_failure(smp->conn, SMP_NUMERIC_COMP_FAILED);
1575                 return 0;
1576         case MGMT_OP_USER_PASSKEY_REPLY:
1577                 hcon->passkey_notify = le32_to_cpu(passkey);
1578                 smp->passkey_round = 0;
1579
1580                 if (test_and_clear_bit(SMP_FLAG_CFM_PENDING, &smp->flags))
1581                         smp_op = SMP_CMD_PAIRING_CONFIRM;
1582                 else
1583                         smp_op = 0;
1584
1585                 if (sc_passkey_round(smp, smp_op))
1586                         return -EIO;
1587
1588                 return 0;
1589         }
1590
1591         /* Initiator sends DHKey check first */
1592         if (hcon->out) {
1593                 sc_dhkey_check(smp);
1594                 SMP_ALLOW_CMD(smp, SMP_CMD_DHKEY_CHECK);
1595         } else if (test_and_clear_bit(SMP_FLAG_DHKEY_PENDING, &smp->flags)) {
1596                 sc_dhkey_check(smp);
1597                 sc_add_ltk(smp);
1598         }
1599
1600         return 0;
1601 }
1602
1603 int smp_user_confirm_reply(struct hci_conn *hcon, u16 mgmt_op, __le32 passkey)
1604 {
1605         struct l2cap_conn *conn = hcon->l2cap_data;
1606         struct l2cap_chan *chan;
1607         struct smp_chan *smp;
1608         u32 value;
1609         int err;
1610
1611         BT_DBG("");
1612
1613         if (!conn)
1614                 return -ENOTCONN;
1615
1616         chan = conn->smp;
1617         if (!chan)
1618                 return -ENOTCONN;
1619
1620         l2cap_chan_lock(chan);
1621         if (!chan->data) {
1622                 err = -ENOTCONN;
1623                 goto unlock;
1624         }
1625
1626         smp = chan->data;
1627
1628         if (test_bit(SMP_FLAG_SC, &smp->flags)) {
1629                 err = sc_user_reply(smp, mgmt_op, passkey);
1630                 goto unlock;
1631         }
1632
1633         switch (mgmt_op) {
1634         case MGMT_OP_USER_PASSKEY_REPLY:
1635                 value = le32_to_cpu(passkey);
1636                 memset(smp->tk, 0, sizeof(smp->tk));
1637                 BT_DBG("PassKey: %d", value);
1638                 put_unaligned_le32(value, smp->tk);
1639                 /* Fall Through */
1640         case MGMT_OP_USER_CONFIRM_REPLY:
1641                 set_bit(SMP_FLAG_TK_VALID, &smp->flags);
1642                 break;
1643         case MGMT_OP_USER_PASSKEY_NEG_REPLY:
1644         case MGMT_OP_USER_CONFIRM_NEG_REPLY:
1645                 smp_failure(conn, SMP_PASSKEY_ENTRY_FAILED);
1646                 err = 0;
1647                 goto unlock;
1648         default:
1649                 smp_failure(conn, SMP_PASSKEY_ENTRY_FAILED);
1650                 err = -EOPNOTSUPP;
1651                 goto unlock;
1652         }
1653
1654         err = 0;
1655
1656         /* If it is our turn to send Pairing Confirm, do so now */
1657         if (test_bit(SMP_FLAG_CFM_PENDING, &smp->flags)) {
1658                 u8 rsp = smp_confirm(smp);
1659                 if (rsp)
1660                         smp_failure(conn, rsp);
1661         }
1662
1663 unlock:
1664         l2cap_chan_unlock(chan);
1665         return err;
1666 }
1667
1668 static void build_bredr_pairing_cmd(struct smp_chan *smp,
1669                                     struct smp_cmd_pairing *req,
1670                                     struct smp_cmd_pairing *rsp)
1671 {
1672         struct l2cap_conn *conn = smp->conn;
1673         struct hci_dev *hdev = conn->hcon->hdev;
1674         u8 local_dist = 0, remote_dist = 0;
1675
1676         if (hci_dev_test_flag(hdev, HCI_BONDABLE)) {
1677                 local_dist = SMP_DIST_ENC_KEY | SMP_DIST_SIGN;
1678                 remote_dist = SMP_DIST_ENC_KEY | SMP_DIST_SIGN;
1679         }
1680
1681         if (hci_dev_test_flag(hdev, HCI_RPA_RESOLVING))
1682                 remote_dist |= SMP_DIST_ID_KEY;
1683
1684         if (hci_dev_test_flag(hdev, HCI_PRIVACY))
1685                 local_dist |= SMP_DIST_ID_KEY;
1686
1687         if (!rsp) {
1688                 memset(req, 0, sizeof(*req));
1689
1690                 req->init_key_dist   = local_dist;
1691                 req->resp_key_dist   = remote_dist;
1692                 req->max_key_size    = conn->hcon->enc_key_size;
1693
1694                 smp->remote_key_dist = remote_dist;
1695
1696                 return;
1697         }
1698
1699         memset(rsp, 0, sizeof(*rsp));
1700
1701         rsp->max_key_size    = conn->hcon->enc_key_size;
1702         rsp->init_key_dist   = req->init_key_dist & remote_dist;
1703         rsp->resp_key_dist   = req->resp_key_dist & local_dist;
1704
1705         smp->remote_key_dist = rsp->init_key_dist;
1706 }
1707
1708 static u8 smp_cmd_pairing_req(struct l2cap_conn *conn, struct sk_buff *skb)
1709 {
1710         struct smp_cmd_pairing rsp, *req = (void *) skb->data;
1711         struct l2cap_chan *chan = conn->smp;
1712         struct hci_dev *hdev = conn->hcon->hdev;
1713         struct smp_chan *smp;
1714         u8 key_size, auth, sec_level;
1715         int ret;
1716
1717         BT_DBG("conn %p", conn);
1718
1719         if (skb->len < sizeof(*req))
1720                 return SMP_INVALID_PARAMS;
1721
1722         if (conn->hcon->role != HCI_ROLE_SLAVE)
1723                 return SMP_CMD_NOTSUPP;
1724
1725         if (!chan->data)
1726                 smp = smp_chan_create(conn);
1727         else
1728                 smp = chan->data;
1729
1730         if (!smp)
1731                 return SMP_UNSPECIFIED;
1732
1733         /* We didn't start the pairing, so match remote */
1734         auth = req->auth_req & AUTH_REQ_MASK(hdev);
1735
1736         if (!hci_dev_test_flag(hdev, HCI_BONDABLE) &&
1737             (auth & SMP_AUTH_BONDING))
1738                 return SMP_PAIRING_NOTSUPP;
1739
1740         if (hci_dev_test_flag(hdev, HCI_SC_ONLY) && !(auth & SMP_AUTH_SC))
1741                 return SMP_AUTH_REQUIREMENTS;
1742
1743         smp->preq[0] = SMP_CMD_PAIRING_REQ;
1744         memcpy(&smp->preq[1], req, sizeof(*req));
1745         skb_pull(skb, sizeof(*req));
1746
1747         /* If the remote side's OOB flag is set it means it has
1748          * successfully received our local OOB data - therefore set the
1749          * flag to indicate that local OOB is in use.
1750          */
1751         if (req->oob_flag == SMP_OOB_PRESENT)
1752                 set_bit(SMP_FLAG_LOCAL_OOB, &smp->flags);
1753
1754         /* SMP over BR/EDR requires special treatment */
1755         if (conn->hcon->type == ACL_LINK) {
1756                 /* We must have a BR/EDR SC link */
1757                 if (!test_bit(HCI_CONN_AES_CCM, &conn->hcon->flags) &&
1758                     !hci_dev_test_flag(hdev, HCI_FORCE_BREDR_SMP))
1759                         return SMP_CROSS_TRANSP_NOT_ALLOWED;
1760
1761                 set_bit(SMP_FLAG_SC, &smp->flags);
1762
1763                 build_bredr_pairing_cmd(smp, req, &rsp);
1764
1765                 key_size = min(req->max_key_size, rsp.max_key_size);
1766                 if (check_enc_key_size(conn, key_size))
1767                         return SMP_ENC_KEY_SIZE;
1768
1769                 /* Clear bits which are generated but not distributed */
1770                 smp->remote_key_dist &= ~SMP_SC_NO_DIST;
1771
1772                 smp->prsp[0] = SMP_CMD_PAIRING_RSP;
1773                 memcpy(&smp->prsp[1], &rsp, sizeof(rsp));
1774                 smp_send_cmd(conn, SMP_CMD_PAIRING_RSP, sizeof(rsp), &rsp);
1775
1776                 smp_distribute_keys(smp);
1777                 return 0;
1778         }
1779
1780         build_pairing_cmd(conn, req, &rsp, auth);
1781
1782         if (rsp.auth_req & SMP_AUTH_SC)
1783                 set_bit(SMP_FLAG_SC, &smp->flags);
1784
1785         if (conn->hcon->io_capability == HCI_IO_NO_INPUT_OUTPUT)
1786                 sec_level = BT_SECURITY_MEDIUM;
1787         else
1788                 sec_level = authreq_to_seclevel(auth);
1789
1790         if (sec_level > conn->hcon->pending_sec_level)
1791                 conn->hcon->pending_sec_level = sec_level;
1792
1793         /* If we need MITM check that it can be achieved */
1794         if (conn->hcon->pending_sec_level >= BT_SECURITY_HIGH) {
1795                 u8 method;
1796
1797                 method = get_auth_method(smp, conn->hcon->io_capability,
1798                                          req->io_capability);
1799                 if (method == JUST_WORKS || method == JUST_CFM)
1800                         return SMP_AUTH_REQUIREMENTS;
1801         }
1802
1803         key_size = min(req->max_key_size, rsp.max_key_size);
1804         if (check_enc_key_size(conn, key_size))
1805                 return SMP_ENC_KEY_SIZE;
1806
1807         get_random_bytes(smp->prnd, sizeof(smp->prnd));
1808
1809         smp->prsp[0] = SMP_CMD_PAIRING_RSP;
1810         memcpy(&smp->prsp[1], &rsp, sizeof(rsp));
1811
1812         smp_send_cmd(conn, SMP_CMD_PAIRING_RSP, sizeof(rsp), &rsp);
1813
1814         clear_bit(SMP_FLAG_INITIATOR, &smp->flags);
1815
1816         /* Strictly speaking we shouldn't allow Pairing Confirm for the
1817          * SC case, however some implementations incorrectly copy RFU auth
1818          * req bits from our security request, which may create a false
1819          * positive SC enablement.
1820          */
1821         SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_CONFIRM);
1822
1823         if (test_bit(SMP_FLAG_SC, &smp->flags)) {
1824                 SMP_ALLOW_CMD(smp, SMP_CMD_PUBLIC_KEY);
1825                 /* Clear bits which are generated but not distributed */
1826                 smp->remote_key_dist &= ~SMP_SC_NO_DIST;
1827                 /* Wait for Public Key from Initiating Device */
1828                 return 0;
1829         }
1830
1831         /* Request setup of TK */
1832         ret = tk_request(conn, 0, auth, rsp.io_capability, req->io_capability);
1833         if (ret)
1834                 return SMP_UNSPECIFIED;
1835
1836         return 0;
1837 }
1838
1839 static u8 sc_send_public_key(struct smp_chan *smp)
1840 {
1841         struct hci_dev *hdev = smp->conn->hcon->hdev;
1842
1843         BT_DBG("");
1844
1845         if (test_bit(SMP_FLAG_LOCAL_OOB, &smp->flags)) {
1846                 struct l2cap_chan *chan = hdev->smp_data;
1847                 struct smp_dev *smp_dev;
1848
1849                 if (!chan || !chan->data)
1850                         return SMP_UNSPECIFIED;
1851
1852                 smp_dev = chan->data;
1853
1854                 memcpy(smp->local_pk, smp_dev->local_pk, 64);
1855                 memcpy(smp->local_sk, smp_dev->local_sk, 32);
1856                 memcpy(smp->lr, smp_dev->local_rand, 16);
1857
1858                 if (smp_dev->debug_key)
1859                         set_bit(SMP_FLAG_DEBUG_KEY, &smp->flags);
1860
1861                 goto done;
1862         }
1863
1864         if (hci_dev_test_flag(hdev, HCI_USE_DEBUG_KEYS)) {
1865                 BT_DBG("Using debug keys");
1866                 memcpy(smp->local_pk, debug_pk, 64);
1867                 memcpy(smp->local_sk, debug_sk, 32);
1868                 set_bit(SMP_FLAG_DEBUG_KEY, &smp->flags);
1869         } else {
1870                 while (true) {
1871                         /* Generate local key pair for Secure Connections */
1872                         if (!ecc_make_key(smp->local_pk, smp->local_sk))
1873                                 return SMP_UNSPECIFIED;
1874
1875                         /* This is unlikely, but we need to check that
1876                          * we didn't accidentially generate a debug key.
1877                          */
1878                         if (memcmp(smp->local_sk, debug_sk, 32))
1879                                 break;
1880                 }
1881         }
1882
1883 done:
1884         SMP_DBG("Local Public Key X: %32phN", smp->local_pk);
1885         SMP_DBG("Local Public Key Y: %32phN", smp->local_pk + 32);
1886         SMP_DBG("Local Private Key:  %32phN", smp->local_sk);
1887
1888         smp_send_cmd(smp->conn, SMP_CMD_PUBLIC_KEY, 64, smp->local_pk);
1889
1890         return 0;
1891 }
1892
1893 static u8 smp_cmd_pairing_rsp(struct l2cap_conn *conn, struct sk_buff *skb)
1894 {
1895         struct smp_cmd_pairing *req, *rsp = (void *) skb->data;
1896         struct l2cap_chan *chan = conn->smp;
1897         struct smp_chan *smp = chan->data;
1898         struct hci_dev *hdev = conn->hcon->hdev;
1899         u8 key_size, auth;
1900         int ret;
1901
1902         BT_DBG("conn %p", conn);
1903
1904         if (skb->len < sizeof(*rsp))
1905                 return SMP_INVALID_PARAMS;
1906
1907         if (conn->hcon->role != HCI_ROLE_MASTER)
1908                 return SMP_CMD_NOTSUPP;
1909
1910         skb_pull(skb, sizeof(*rsp));
1911
1912         req = (void *) &smp->preq[1];
1913
1914         key_size = min(req->max_key_size, rsp->max_key_size);
1915         if (check_enc_key_size(conn, key_size))
1916                 return SMP_ENC_KEY_SIZE;
1917
1918         auth = rsp->auth_req & AUTH_REQ_MASK(hdev);
1919
1920         if (hci_dev_test_flag(hdev, HCI_SC_ONLY) && !(auth & SMP_AUTH_SC))
1921                 return SMP_AUTH_REQUIREMENTS;
1922
1923         /* If the remote side's OOB flag is set it means it has
1924          * successfully received our local OOB data - therefore set the
1925          * flag to indicate that local OOB is in use.
1926          */
1927         if (rsp->oob_flag == SMP_OOB_PRESENT)
1928                 set_bit(SMP_FLAG_LOCAL_OOB, &smp->flags);
1929
1930         smp->prsp[0] = SMP_CMD_PAIRING_RSP;
1931         memcpy(&smp->prsp[1], rsp, sizeof(*rsp));
1932
1933         /* Update remote key distribution in case the remote cleared
1934          * some bits that we had enabled in our request.
1935          */
1936         smp->remote_key_dist &= rsp->resp_key_dist;
1937
1938         /* For BR/EDR this means we're done and can start phase 3 */
1939         if (conn->hcon->type == ACL_LINK) {
1940                 /* Clear bits which are generated but not distributed */
1941                 smp->remote_key_dist &= ~SMP_SC_NO_DIST;
1942                 smp_distribute_keys(smp);
1943                 return 0;
1944         }
1945
1946         if ((req->auth_req & SMP_AUTH_SC) && (auth & SMP_AUTH_SC))
1947                 set_bit(SMP_FLAG_SC, &smp->flags);
1948         else if (conn->hcon->pending_sec_level > BT_SECURITY_HIGH)
1949                 conn->hcon->pending_sec_level = BT_SECURITY_HIGH;
1950
1951         /* If we need MITM check that it can be achieved */
1952         if (conn->hcon->pending_sec_level >= BT_SECURITY_HIGH) {
1953                 u8 method;
1954
1955                 method = get_auth_method(smp, req->io_capability,
1956                                          rsp->io_capability);
1957                 if (method == JUST_WORKS || method == JUST_CFM)
1958                         return SMP_AUTH_REQUIREMENTS;
1959         }
1960
1961         get_random_bytes(smp->prnd, sizeof(smp->prnd));
1962
1963         /* Update remote key distribution in case the remote cleared
1964          * some bits that we had enabled in our request.
1965          */
1966         smp->remote_key_dist &= rsp->resp_key_dist;
1967
1968         if (test_bit(SMP_FLAG_SC, &smp->flags)) {
1969                 /* Clear bits which are generated but not distributed */
1970                 smp->remote_key_dist &= ~SMP_SC_NO_DIST;
1971                 SMP_ALLOW_CMD(smp, SMP_CMD_PUBLIC_KEY);
1972                 return sc_send_public_key(smp);
1973         }
1974
1975         auth |= req->auth_req;
1976
1977         ret = tk_request(conn, 0, auth, req->io_capability, rsp->io_capability);
1978         if (ret)
1979                 return SMP_UNSPECIFIED;
1980
1981         set_bit(SMP_FLAG_CFM_PENDING, &smp->flags);
1982
1983         /* Can't compose response until we have been confirmed */
1984         if (test_bit(SMP_FLAG_TK_VALID, &smp->flags))
1985                 return smp_confirm(smp);
1986
1987         return 0;
1988 }
1989
1990 static u8 sc_check_confirm(struct smp_chan *smp)
1991 {
1992         struct l2cap_conn *conn = smp->conn;
1993
1994         BT_DBG("");
1995
1996         if (smp->method == REQ_PASSKEY || smp->method == DSP_PASSKEY)
1997                 return sc_passkey_round(smp, SMP_CMD_PAIRING_CONFIRM);
1998
1999         if (conn->hcon->out) {
2000                 smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM, sizeof(smp->prnd),
2001                              smp->prnd);
2002                 SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_RANDOM);
2003         }
2004
2005         return 0;
2006 }
2007
2008 /* Work-around for some implementations that incorrectly copy RFU bits
2009  * from our security request and thereby create the impression that
2010  * we're doing SC when in fact the remote doesn't support it.
2011  */
2012 static int fixup_sc_false_positive(struct smp_chan *smp)
2013 {
2014         struct l2cap_conn *conn = smp->conn;
2015         struct hci_conn *hcon = conn->hcon;
2016         struct hci_dev *hdev = hcon->hdev;
2017         struct smp_cmd_pairing *req, *rsp;
2018         u8 auth;
2019
2020         /* The issue is only observed when we're in slave role */
2021         if (hcon->out)
2022                 return SMP_UNSPECIFIED;
2023
2024         if (hci_dev_test_flag(hdev, HCI_SC_ONLY)) {
2025                 BT_ERR("Refusing SMP SC -> legacy fallback in SC-only mode");
2026                 return SMP_UNSPECIFIED;
2027         }
2028
2029         BT_ERR("Trying to fall back to legacy SMP");
2030
2031         req = (void *) &smp->preq[1];
2032         rsp = (void *) &smp->prsp[1];
2033
2034         /* Rebuild key dist flags which may have been cleared for SC */
2035         smp->remote_key_dist = (req->init_key_dist & rsp->resp_key_dist);
2036
2037         auth = req->auth_req & AUTH_REQ_MASK(hdev);
2038
2039         if (tk_request(conn, 0, auth, rsp->io_capability, req->io_capability)) {
2040                 BT_ERR("Failed to fall back to legacy SMP");
2041                 return SMP_UNSPECIFIED;
2042         }
2043
2044         clear_bit(SMP_FLAG_SC, &smp->flags);
2045
2046         return 0;
2047 }
2048
2049 static u8 smp_cmd_pairing_confirm(struct l2cap_conn *conn, struct sk_buff *skb)
2050 {
2051         struct l2cap_chan *chan = conn->smp;
2052         struct smp_chan *smp = chan->data;
2053
2054         BT_DBG("conn %p %s", conn, conn->hcon->out ? "master" : "slave");
2055
2056         if (skb->len < sizeof(smp->pcnf))
2057                 return SMP_INVALID_PARAMS;
2058
2059         memcpy(smp->pcnf, skb->data, sizeof(smp->pcnf));
2060         skb_pull(skb, sizeof(smp->pcnf));
2061
2062         if (test_bit(SMP_FLAG_SC, &smp->flags)) {
2063                 int ret;
2064
2065                 /* Public Key exchange must happen before any other steps */
2066                 if (test_bit(SMP_FLAG_REMOTE_PK, &smp->flags))
2067                         return sc_check_confirm(smp);
2068
2069                 BT_ERR("Unexpected SMP Pairing Confirm");
2070
2071                 ret = fixup_sc_false_positive(smp);
2072                 if (ret)
2073                         return ret;
2074         }
2075
2076         if (conn->hcon->out) {
2077                 smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM, sizeof(smp->prnd),
2078                              smp->prnd);
2079                 SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_RANDOM);
2080                 return 0;
2081         }
2082
2083         if (test_bit(SMP_FLAG_TK_VALID, &smp->flags))
2084                 return smp_confirm(smp);
2085
2086         set_bit(SMP_FLAG_CFM_PENDING, &smp->flags);
2087
2088         return 0;
2089 }
2090
2091 static u8 smp_cmd_pairing_random(struct l2cap_conn *conn, struct sk_buff *skb)
2092 {
2093         struct l2cap_chan *chan = conn->smp;
2094         struct smp_chan *smp = chan->data;
2095         struct hci_conn *hcon = conn->hcon;
2096         u8 *pkax, *pkbx, *na, *nb;
2097         u32 passkey;
2098         int err;
2099
2100         BT_DBG("conn %p", conn);
2101
2102         if (skb->len < sizeof(smp->rrnd))
2103                 return SMP_INVALID_PARAMS;
2104
2105         memcpy(smp->rrnd, skb->data, sizeof(smp->rrnd));
2106         skb_pull(skb, sizeof(smp->rrnd));
2107
2108         if (!test_bit(SMP_FLAG_SC, &smp->flags))
2109                 return smp_random(smp);
2110
2111         if (hcon->out) {
2112                 pkax = smp->local_pk;
2113                 pkbx = smp->remote_pk;
2114                 na   = smp->prnd;
2115                 nb   = smp->rrnd;
2116         } else {
2117                 pkax = smp->remote_pk;
2118                 pkbx = smp->local_pk;
2119                 na   = smp->rrnd;
2120                 nb   = smp->prnd;
2121         }
2122
2123         if (smp->method == REQ_OOB) {
2124                 if (!hcon->out)
2125                         smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM,
2126                                      sizeof(smp->prnd), smp->prnd);
2127                 SMP_ALLOW_CMD(smp, SMP_CMD_DHKEY_CHECK);
2128                 goto mackey_and_ltk;
2129         }
2130
2131         /* Passkey entry has special treatment */
2132         if (smp->method == REQ_PASSKEY || smp->method == DSP_PASSKEY)
2133                 return sc_passkey_round(smp, SMP_CMD_PAIRING_RANDOM);
2134
2135         if (hcon->out) {
2136                 u8 cfm[16];
2137
2138                 err = smp_f4(smp->tfm_cmac, smp->remote_pk, smp->local_pk,
2139                              smp->rrnd, 0, cfm);
2140                 if (err)
2141                         return SMP_UNSPECIFIED;
2142
2143                 if (memcmp(smp->pcnf, cfm, 16))
2144                         return SMP_CONFIRM_FAILED;
2145         } else {
2146                 smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM, sizeof(smp->prnd),
2147                              smp->prnd);
2148                 SMP_ALLOW_CMD(smp, SMP_CMD_DHKEY_CHECK);
2149         }
2150
2151 mackey_and_ltk:
2152         /* Generate MacKey and LTK */
2153         err = sc_mackey_and_ltk(smp, smp->mackey, smp->tk);
2154         if (err)
2155                 return SMP_UNSPECIFIED;
2156
2157         if (smp->method == JUST_WORKS || smp->method == REQ_OOB) {
2158                 if (hcon->out) {
2159                         sc_dhkey_check(smp);
2160                         SMP_ALLOW_CMD(smp, SMP_CMD_DHKEY_CHECK);
2161                 }
2162                 return 0;
2163         }
2164
2165         err = smp_g2(smp->tfm_cmac, pkax, pkbx, na, nb, &passkey);
2166         if (err)
2167                 return SMP_UNSPECIFIED;
2168
2169         err = mgmt_user_confirm_request(hcon->hdev, &hcon->dst, hcon->type,
2170                                         hcon->dst_type, passkey, 0);
2171         if (err)
2172                 return SMP_UNSPECIFIED;
2173
2174         set_bit(SMP_FLAG_WAIT_USER, &smp->flags);
2175
2176         return 0;
2177 }
2178
2179 static bool smp_ltk_encrypt(struct l2cap_conn *conn, u8 sec_level)
2180 {
2181         struct smp_ltk *key;
2182         struct hci_conn *hcon = conn->hcon;
2183
2184         key = hci_find_ltk(hcon->hdev, &hcon->dst, hcon->dst_type, hcon->role);
2185         if (!key)
2186                 return false;
2187
2188         if (smp_ltk_sec_level(key) < sec_level)
2189                 return false;
2190
2191         if (test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &hcon->flags))
2192                 return true;
2193
2194         hci_le_start_enc(hcon, key->ediv, key->rand, key->val, key->enc_size);
2195         hcon->enc_key_size = key->enc_size;
2196
2197         /* We never store STKs for master role, so clear this flag */
2198         clear_bit(HCI_CONN_STK_ENCRYPT, &hcon->flags);
2199
2200         return true;
2201 }
2202
2203 bool smp_sufficient_security(struct hci_conn *hcon, u8 sec_level,
2204                              enum smp_key_pref key_pref)
2205 {
2206         if (sec_level == BT_SECURITY_LOW)
2207                 return true;
2208
2209         /* If we're encrypted with an STK but the caller prefers using
2210          * LTK claim insufficient security. This way we allow the
2211          * connection to be re-encrypted with an LTK, even if the LTK
2212          * provides the same level of security. Only exception is if we
2213          * don't have an LTK (e.g. because of key distribution bits).
2214          */
2215         if (key_pref == SMP_USE_LTK &&
2216             test_bit(HCI_CONN_STK_ENCRYPT, &hcon->flags) &&
2217             hci_find_ltk(hcon->hdev, &hcon->dst, hcon->dst_type, hcon->role))
2218                 return false;
2219
2220         if (hcon->sec_level >= sec_level)
2221                 return true;
2222
2223         return false;
2224 }
2225
2226 static u8 smp_cmd_security_req(struct l2cap_conn *conn, struct sk_buff *skb)
2227 {
2228         struct smp_cmd_security_req *rp = (void *) skb->data;
2229         struct smp_cmd_pairing cp;
2230         struct hci_conn *hcon = conn->hcon;
2231         struct hci_dev *hdev = hcon->hdev;
2232         struct smp_chan *smp;
2233         u8 sec_level, auth;
2234
2235         BT_DBG("conn %p", conn);
2236
2237         if (skb->len < sizeof(*rp))
2238                 return SMP_INVALID_PARAMS;
2239
2240         if (hcon->role != HCI_ROLE_MASTER)
2241                 return SMP_CMD_NOTSUPP;
2242
2243         auth = rp->auth_req & AUTH_REQ_MASK(hdev);
2244
2245         if (hci_dev_test_flag(hdev, HCI_SC_ONLY) && !(auth & SMP_AUTH_SC))
2246                 return SMP_AUTH_REQUIREMENTS;
2247
2248         if (hcon->io_capability == HCI_IO_NO_INPUT_OUTPUT)
2249                 sec_level = BT_SECURITY_MEDIUM;
2250         else
2251                 sec_level = authreq_to_seclevel(auth);
2252
2253         if (smp_sufficient_security(hcon, sec_level, SMP_USE_LTK))
2254                 return 0;
2255
2256         if (sec_level > hcon->pending_sec_level)
2257                 hcon->pending_sec_level = sec_level;
2258
2259         if (smp_ltk_encrypt(conn, hcon->pending_sec_level))
2260                 return 0;
2261
2262         smp = smp_chan_create(conn);
2263         if (!smp)
2264                 return SMP_UNSPECIFIED;
2265
2266         if (!hci_dev_test_flag(hdev, HCI_BONDABLE) &&
2267             (auth & SMP_AUTH_BONDING))
2268                 return SMP_PAIRING_NOTSUPP;
2269
2270         skb_pull(skb, sizeof(*rp));
2271
2272         memset(&cp, 0, sizeof(cp));
2273         build_pairing_cmd(conn, &cp, NULL, auth);
2274
2275         smp->preq[0] = SMP_CMD_PAIRING_REQ;
2276         memcpy(&smp->preq[1], &cp, sizeof(cp));
2277
2278         smp_send_cmd(conn, SMP_CMD_PAIRING_REQ, sizeof(cp), &cp);
2279         SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_RSP);
2280
2281         return 0;
2282 }
2283
2284 int smp_conn_security(struct hci_conn *hcon, __u8 sec_level)
2285 {
2286         struct l2cap_conn *conn = hcon->l2cap_data;
2287         struct l2cap_chan *chan;
2288         struct smp_chan *smp;
2289         __u8 authreq;
2290         int ret;
2291
2292         BT_DBG("conn %p hcon %p level 0x%2.2x", conn, hcon, sec_level);
2293
2294         /* This may be NULL if there's an unexpected disconnection */
2295         if (!conn)
2296                 return 1;
2297
2298         if (!hci_dev_test_flag(hcon->hdev, HCI_LE_ENABLED))
2299                 return 1;
2300
2301         if (smp_sufficient_security(hcon, sec_level, SMP_USE_LTK))
2302                 return 1;
2303
2304         if (sec_level > hcon->pending_sec_level)
2305                 hcon->pending_sec_level = sec_level;
2306
2307         if (hcon->role == HCI_ROLE_MASTER)
2308                 if (smp_ltk_encrypt(conn, hcon->pending_sec_level))
2309                         return 0;
2310
2311         chan = conn->smp;
2312         if (!chan) {
2313                 BT_ERR("SMP security requested but not available");
2314                 return 1;
2315         }
2316
2317         l2cap_chan_lock(chan);
2318
2319         /* If SMP is already in progress ignore this request */
2320         if (chan->data) {
2321                 ret = 0;
2322                 goto unlock;
2323         }
2324
2325         smp = smp_chan_create(conn);
2326         if (!smp) {
2327                 ret = 1;
2328                 goto unlock;
2329         }
2330
2331         authreq = seclevel_to_authreq(sec_level);
2332
2333         if (hci_dev_test_flag(hcon->hdev, HCI_SC_ENABLED))
2334                 authreq |= SMP_AUTH_SC;
2335
2336         /* Require MITM if IO Capability allows or the security level
2337          * requires it.
2338          */
2339         if (hcon->io_capability != HCI_IO_NO_INPUT_OUTPUT ||
2340             hcon->pending_sec_level > BT_SECURITY_MEDIUM)
2341                 authreq |= SMP_AUTH_MITM;
2342
2343         if (hcon->role == HCI_ROLE_MASTER) {
2344                 struct smp_cmd_pairing cp;
2345
2346                 build_pairing_cmd(conn, &cp, NULL, authreq);
2347                 smp->preq[0] = SMP_CMD_PAIRING_REQ;
2348                 memcpy(&smp->preq[1], &cp, sizeof(cp));
2349
2350                 smp_send_cmd(conn, SMP_CMD_PAIRING_REQ, sizeof(cp), &cp);
2351                 SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_RSP);
2352         } else {
2353                 struct smp_cmd_security_req cp;
2354                 cp.auth_req = authreq;
2355                 smp_send_cmd(conn, SMP_CMD_SECURITY_REQ, sizeof(cp), &cp);
2356                 SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_REQ);
2357         }
2358
2359         set_bit(SMP_FLAG_INITIATOR, &smp->flags);
2360         ret = 0;
2361
2362 unlock:
2363         l2cap_chan_unlock(chan);
2364         return ret;
2365 }
2366
2367 void smp_cancel_pairing(struct hci_conn *hcon)
2368 {
2369         struct l2cap_conn *conn = hcon->l2cap_data;
2370         struct l2cap_chan *chan;
2371         struct smp_chan *smp;
2372
2373         if (!conn)
2374                 return;
2375
2376         chan = conn->smp;
2377         if (!chan)
2378                 return;
2379
2380         l2cap_chan_lock(chan);
2381
2382         smp = chan->data;
2383         if (smp) {
2384                 if (test_bit(SMP_FLAG_COMPLETE, &smp->flags))
2385                         smp_failure(conn, 0);
2386                 else
2387                         smp_failure(conn, SMP_UNSPECIFIED);
2388         }
2389
2390         l2cap_chan_unlock(chan);
2391 }
2392
2393 static int smp_cmd_encrypt_info(struct l2cap_conn *conn, struct sk_buff *skb)
2394 {
2395         struct smp_cmd_encrypt_info *rp = (void *) skb->data;
2396         struct l2cap_chan *chan = conn->smp;
2397         struct smp_chan *smp = chan->data;
2398
2399         BT_DBG("conn %p", conn);
2400
2401         if (skb->len < sizeof(*rp))
2402                 return SMP_INVALID_PARAMS;
2403
2404         SMP_ALLOW_CMD(smp, SMP_CMD_MASTER_IDENT);
2405
2406         skb_pull(skb, sizeof(*rp));
2407
2408         memcpy(smp->tk, rp->ltk, sizeof(smp->tk));
2409
2410         return 0;
2411 }
2412
2413 static int smp_cmd_master_ident(struct l2cap_conn *conn, struct sk_buff *skb)
2414 {
2415         struct smp_cmd_master_ident *rp = (void *) skb->data;
2416         struct l2cap_chan *chan = conn->smp;
2417         struct smp_chan *smp = chan->data;
2418         struct hci_dev *hdev = conn->hcon->hdev;
2419         struct hci_conn *hcon = conn->hcon;
2420         struct smp_ltk *ltk;
2421         u8 authenticated;
2422
2423         BT_DBG("conn %p", conn);
2424
2425         if (skb->len < sizeof(*rp))
2426                 return SMP_INVALID_PARAMS;
2427
2428         /* Mark the information as received */
2429         smp->remote_key_dist &= ~SMP_DIST_ENC_KEY;
2430
2431         if (smp->remote_key_dist & SMP_DIST_ID_KEY)
2432                 SMP_ALLOW_CMD(smp, SMP_CMD_IDENT_INFO);
2433         else if (smp->remote_key_dist & SMP_DIST_SIGN)
2434                 SMP_ALLOW_CMD(smp, SMP_CMD_SIGN_INFO);
2435
2436         skb_pull(skb, sizeof(*rp));
2437
2438         authenticated = (hcon->sec_level == BT_SECURITY_HIGH);
2439         ltk = hci_add_ltk(hdev, &hcon->dst, hcon->dst_type, SMP_LTK,
2440                           authenticated, smp->tk, smp->enc_key_size,
2441                           rp->ediv, rp->rand);
2442         smp->ltk = ltk;
2443         if (!(smp->remote_key_dist & KEY_DIST_MASK))
2444                 smp_distribute_keys(smp);
2445
2446         return 0;
2447 }
2448
2449 static int smp_cmd_ident_info(struct l2cap_conn *conn, struct sk_buff *skb)
2450 {
2451         struct smp_cmd_ident_info *info = (void *) skb->data;
2452         struct l2cap_chan *chan = conn->smp;
2453         struct smp_chan *smp = chan->data;
2454
2455         BT_DBG("");
2456
2457         if (skb->len < sizeof(*info))
2458                 return SMP_INVALID_PARAMS;
2459
2460         SMP_ALLOW_CMD(smp, SMP_CMD_IDENT_ADDR_INFO);
2461
2462         skb_pull(skb, sizeof(*info));
2463
2464         memcpy(smp->irk, info->irk, 16);
2465
2466         return 0;
2467 }
2468
2469 static int smp_cmd_ident_addr_info(struct l2cap_conn *conn,
2470                                    struct sk_buff *skb)
2471 {
2472         struct smp_cmd_ident_addr_info *info = (void *) skb->data;
2473         struct l2cap_chan *chan = conn->smp;
2474         struct smp_chan *smp = chan->data;
2475         struct hci_conn *hcon = conn->hcon;
2476         bdaddr_t rpa;
2477
2478         BT_DBG("");
2479
2480         if (skb->len < sizeof(*info))
2481                 return SMP_INVALID_PARAMS;
2482
2483         /* Mark the information as received */
2484         smp->remote_key_dist &= ~SMP_DIST_ID_KEY;
2485
2486         if (smp->remote_key_dist & SMP_DIST_SIGN)
2487                 SMP_ALLOW_CMD(smp, SMP_CMD_SIGN_INFO);
2488
2489         skb_pull(skb, sizeof(*info));
2490
2491         /* Strictly speaking the Core Specification (4.1) allows sending
2492          * an empty address which would force us to rely on just the IRK
2493          * as "identity information". However, since such
2494          * implementations are not known of and in order to not over
2495          * complicate our implementation, simply pretend that we never
2496          * received an IRK for such a device.
2497          *
2498          * The Identity Address must also be a Static Random or Public
2499          * Address, which hci_is_identity_address() checks for.
2500          */
2501         if (!bacmp(&info->bdaddr, BDADDR_ANY) ||
2502             !hci_is_identity_address(&info->bdaddr, info->addr_type)) {
2503                 BT_ERR("Ignoring IRK with no identity address");
2504                 goto distribute;
2505         }
2506
2507         bacpy(&smp->id_addr, &info->bdaddr);
2508         smp->id_addr_type = info->addr_type;
2509
2510         if (hci_bdaddr_is_rpa(&hcon->dst, hcon->dst_type))
2511                 bacpy(&rpa, &hcon->dst);
2512         else
2513                 bacpy(&rpa, BDADDR_ANY);
2514
2515         smp->remote_irk = hci_add_irk(conn->hcon->hdev, &smp->id_addr,
2516                                       smp->id_addr_type, smp->irk, &rpa);
2517
2518 distribute:
2519         if (!(smp->remote_key_dist & KEY_DIST_MASK))
2520                 smp_distribute_keys(smp);
2521
2522         return 0;
2523 }
2524
2525 static int smp_cmd_sign_info(struct l2cap_conn *conn, struct sk_buff *skb)
2526 {
2527         struct smp_cmd_sign_info *rp = (void *) skb->data;
2528         struct l2cap_chan *chan = conn->smp;
2529         struct smp_chan *smp = chan->data;
2530         struct smp_csrk *csrk;
2531
2532         BT_DBG("conn %p", conn);
2533
2534         if (skb->len < sizeof(*rp))
2535                 return SMP_INVALID_PARAMS;
2536
2537         /* Mark the information as received */
2538         smp->remote_key_dist &= ~SMP_DIST_SIGN;
2539
2540         skb_pull(skb, sizeof(*rp));
2541
2542         csrk = kzalloc(sizeof(*csrk), GFP_KERNEL);
2543         if (csrk) {
2544                 if (conn->hcon->sec_level > BT_SECURITY_MEDIUM)
2545                         csrk->type = MGMT_CSRK_REMOTE_AUTHENTICATED;
2546                 else
2547                         csrk->type = MGMT_CSRK_REMOTE_UNAUTHENTICATED;
2548                 memcpy(csrk->val, rp->csrk, sizeof(csrk->val));
2549         }
2550         smp->csrk = csrk;
2551         smp_distribute_keys(smp);
2552
2553         return 0;
2554 }
2555
2556 static u8 sc_select_method(struct smp_chan *smp)
2557 {
2558         struct l2cap_conn *conn = smp->conn;
2559         struct hci_conn *hcon = conn->hcon;
2560         struct smp_cmd_pairing *local, *remote;
2561         u8 local_mitm, remote_mitm, local_io, remote_io, method;
2562
2563         if (test_bit(SMP_FLAG_REMOTE_OOB, &smp->flags) ||
2564             test_bit(SMP_FLAG_LOCAL_OOB, &smp->flags))
2565                 return REQ_OOB;
2566
2567         /* The preq/prsp contain the raw Pairing Request/Response PDUs
2568          * which are needed as inputs to some crypto functions. To get
2569          * the "struct smp_cmd_pairing" from them we need to skip the
2570          * first byte which contains the opcode.
2571          */
2572         if (hcon->out) {
2573                 local = (void *) &smp->preq[1];
2574                 remote = (void *) &smp->prsp[1];
2575         } else {
2576                 local = (void *) &smp->prsp[1];
2577                 remote = (void *) &smp->preq[1];
2578         }
2579
2580         local_io = local->io_capability;
2581         remote_io = remote->io_capability;
2582
2583         local_mitm = (local->auth_req & SMP_AUTH_MITM);
2584         remote_mitm = (remote->auth_req & SMP_AUTH_MITM);
2585
2586         /* If either side wants MITM, look up the method from the table,
2587          * otherwise use JUST WORKS.
2588          */
2589         if (local_mitm || remote_mitm)
2590                 method = get_auth_method(smp, local_io, remote_io);
2591         else
2592                 method = JUST_WORKS;
2593
2594         /* Don't confirm locally initiated pairing attempts */
2595         if (method == JUST_CFM && test_bit(SMP_FLAG_INITIATOR, &smp->flags))
2596                 method = JUST_WORKS;
2597
2598         return method;
2599 }
2600
2601 static int smp_cmd_public_key(struct l2cap_conn *conn, struct sk_buff *skb)
2602 {
2603         struct smp_cmd_public_key *key = (void *) skb->data;
2604         struct hci_conn *hcon = conn->hcon;
2605         struct l2cap_chan *chan = conn->smp;
2606         struct smp_chan *smp = chan->data;
2607         struct hci_dev *hdev = hcon->hdev;
2608         struct smp_cmd_pairing_confirm cfm;
2609         int err;
2610
2611         BT_DBG("conn %p", conn);
2612
2613         if (skb->len < sizeof(*key))
2614                 return SMP_INVALID_PARAMS;
2615
2616         memcpy(smp->remote_pk, key, 64);
2617
2618         if (test_bit(SMP_FLAG_REMOTE_OOB, &smp->flags)) {
2619                 err = smp_f4(smp->tfm_cmac, smp->remote_pk, smp->remote_pk,
2620                              smp->rr, 0, cfm.confirm_val);
2621                 if (err)
2622                         return SMP_UNSPECIFIED;
2623
2624                 if (memcmp(cfm.confirm_val, smp->pcnf, 16))
2625                         return SMP_CONFIRM_FAILED;
2626         }
2627
2628         /* Non-initiating device sends its public key after receiving
2629          * the key from the initiating device.
2630          */
2631         if (!hcon->out) {
2632                 err = sc_send_public_key(smp);
2633                 if (err)
2634                         return err;
2635         }
2636
2637         SMP_DBG("Remote Public Key X: %32phN", smp->remote_pk);
2638         SMP_DBG("Remote Public Key Y: %32phN", smp->remote_pk + 32);
2639
2640         if (!ecdh_shared_secret(smp->remote_pk, smp->local_sk, smp->dhkey))
2641                 return SMP_UNSPECIFIED;
2642
2643         SMP_DBG("DHKey %32phN", smp->dhkey);
2644
2645         set_bit(SMP_FLAG_REMOTE_PK, &smp->flags);
2646
2647         smp->method = sc_select_method(smp);
2648
2649         BT_DBG("%s selected method 0x%02x", hdev->name, smp->method);
2650
2651         /* JUST_WORKS and JUST_CFM result in an unauthenticated key */
2652         if (smp->method == JUST_WORKS || smp->method == JUST_CFM)
2653                 hcon->pending_sec_level = BT_SECURITY_MEDIUM;
2654         else
2655                 hcon->pending_sec_level = BT_SECURITY_FIPS;
2656
2657         if (!memcmp(debug_pk, smp->remote_pk, 64))
2658                 set_bit(SMP_FLAG_DEBUG_KEY, &smp->flags);
2659
2660         if (smp->method == DSP_PASSKEY) {
2661                 get_random_bytes(&hcon->passkey_notify,
2662                                  sizeof(hcon->passkey_notify));
2663                 hcon->passkey_notify %= 1000000;
2664                 hcon->passkey_entered = 0;
2665                 smp->passkey_round = 0;
2666                 if (mgmt_user_passkey_notify(hdev, &hcon->dst, hcon->type,
2667                                              hcon->dst_type,
2668                                              hcon->passkey_notify,
2669                                              hcon->passkey_entered))
2670                         return SMP_UNSPECIFIED;
2671                 SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_CONFIRM);
2672                 return sc_passkey_round(smp, SMP_CMD_PUBLIC_KEY);
2673         }
2674
2675         if (smp->method == REQ_OOB) {
2676                 if (hcon->out)
2677                         smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM,
2678                                      sizeof(smp->prnd), smp->prnd);
2679
2680                 SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_RANDOM);
2681
2682                 return 0;
2683         }
2684
2685         if (hcon->out)
2686                 SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_CONFIRM);
2687
2688         if (smp->method == REQ_PASSKEY) {
2689                 if (mgmt_user_passkey_request(hdev, &hcon->dst, hcon->type,
2690                                               hcon->dst_type))
2691                         return SMP_UNSPECIFIED;
2692                 SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_CONFIRM);
2693                 set_bit(SMP_FLAG_WAIT_USER, &smp->flags);
2694                 return 0;
2695         }
2696
2697         /* The Initiating device waits for the non-initiating device to
2698          * send the confirm value.
2699          */
2700         if (conn->hcon->out)
2701                 return 0;
2702
2703         err = smp_f4(smp->tfm_cmac, smp->local_pk, smp->remote_pk, smp->prnd,
2704                      0, cfm.confirm_val);
2705         if (err)
2706                 return SMP_UNSPECIFIED;
2707
2708         smp_send_cmd(conn, SMP_CMD_PAIRING_CONFIRM, sizeof(cfm), &cfm);
2709         SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_RANDOM);
2710
2711         return 0;
2712 }
2713
2714 static int smp_cmd_dhkey_check(struct l2cap_conn *conn, struct sk_buff *skb)
2715 {
2716         struct smp_cmd_dhkey_check *check = (void *) skb->data;
2717         struct l2cap_chan *chan = conn->smp;
2718         struct hci_conn *hcon = conn->hcon;
2719         struct smp_chan *smp = chan->data;
2720         u8 a[7], b[7], *local_addr, *remote_addr;
2721         u8 io_cap[3], r[16], e[16];
2722         int err;
2723
2724         BT_DBG("conn %p", conn);
2725
2726         if (skb->len < sizeof(*check))
2727                 return SMP_INVALID_PARAMS;
2728
2729         memcpy(a, &hcon->init_addr, 6);
2730         memcpy(b, &hcon->resp_addr, 6);
2731         a[6] = hcon->init_addr_type;
2732         b[6] = hcon->resp_addr_type;
2733
2734         if (hcon->out) {
2735                 local_addr = a;
2736                 remote_addr = b;
2737                 memcpy(io_cap, &smp->prsp[1], 3);
2738         } else {
2739                 local_addr = b;
2740                 remote_addr = a;
2741                 memcpy(io_cap, &smp->preq[1], 3);
2742         }
2743
2744         memset(r, 0, sizeof(r));
2745
2746         if (smp->method == REQ_PASSKEY || smp->method == DSP_PASSKEY)
2747                 put_unaligned_le32(hcon->passkey_notify, r);
2748         else if (smp->method == REQ_OOB)
2749                 memcpy(r, smp->lr, 16);
2750
2751         err = smp_f6(smp->tfm_cmac, smp->mackey, smp->rrnd, smp->prnd, r,
2752                      io_cap, remote_addr, local_addr, e);
2753         if (err)
2754                 return SMP_UNSPECIFIED;
2755
2756         if (memcmp(check->e, e, 16))
2757                 return SMP_DHKEY_CHECK_FAILED;
2758
2759         if (!hcon->out) {
2760                 if (test_bit(SMP_FLAG_WAIT_USER, &smp->flags)) {
2761                         set_bit(SMP_FLAG_DHKEY_PENDING, &smp->flags);
2762                         return 0;
2763                 }
2764
2765                 /* Slave sends DHKey check as response to master */
2766                 sc_dhkey_check(smp);
2767         }
2768
2769         sc_add_ltk(smp);
2770
2771         if (hcon->out) {
2772                 hci_le_start_enc(hcon, 0, 0, smp->tk, smp->enc_key_size);
2773                 hcon->enc_key_size = smp->enc_key_size;
2774         }
2775
2776         return 0;
2777 }
2778
2779 static int smp_cmd_keypress_notify(struct l2cap_conn *conn,
2780                                    struct sk_buff *skb)
2781 {
2782         struct smp_cmd_keypress_notify *kp = (void *) skb->data;
2783
2784         BT_DBG("value 0x%02x", kp->value);
2785
2786         return 0;
2787 }
2788
2789 static int smp_sig_channel(struct l2cap_chan *chan, struct sk_buff *skb)
2790 {
2791         struct l2cap_conn *conn = chan->conn;
2792         struct hci_conn *hcon = conn->hcon;
2793         struct smp_chan *smp;
2794         __u8 code, reason;
2795         int err = 0;
2796
2797         if (skb->len < 1)
2798                 return -EILSEQ;
2799
2800         if (!hci_dev_test_flag(hcon->hdev, HCI_LE_ENABLED)) {
2801                 reason = SMP_PAIRING_NOTSUPP;
2802                 goto done;
2803         }
2804
2805         code = skb->data[0];
2806         skb_pull(skb, sizeof(code));
2807
2808         smp = chan->data;
2809
2810         if (code > SMP_CMD_MAX)
2811                 goto drop;
2812
2813         if (smp && !test_and_clear_bit(code, &smp->allow_cmd))
2814                 goto drop;
2815
2816         /* If we don't have a context the only allowed commands are
2817          * pairing request and security request.
2818          */
2819         if (!smp && code != SMP_CMD_PAIRING_REQ && code != SMP_CMD_SECURITY_REQ)
2820                 goto drop;
2821
2822         switch (code) {
2823         case SMP_CMD_PAIRING_REQ:
2824                 reason = smp_cmd_pairing_req(conn, skb);
2825                 break;
2826
2827         case SMP_CMD_PAIRING_FAIL:
2828                 smp_failure(conn, 0);
2829                 err = -EPERM;
2830                 break;
2831
2832         case SMP_CMD_PAIRING_RSP:
2833                 reason = smp_cmd_pairing_rsp(conn, skb);
2834                 break;
2835
2836         case SMP_CMD_SECURITY_REQ:
2837                 reason = smp_cmd_security_req(conn, skb);
2838                 break;
2839
2840         case SMP_CMD_PAIRING_CONFIRM:
2841                 reason = smp_cmd_pairing_confirm(conn, skb);
2842                 break;
2843
2844         case SMP_CMD_PAIRING_RANDOM:
2845                 reason = smp_cmd_pairing_random(conn, skb);
2846                 break;
2847
2848         case SMP_CMD_ENCRYPT_INFO:
2849                 reason = smp_cmd_encrypt_info(conn, skb);
2850                 break;
2851
2852         case SMP_CMD_MASTER_IDENT:
2853                 reason = smp_cmd_master_ident(conn, skb);
2854                 break;
2855
2856         case SMP_CMD_IDENT_INFO:
2857                 reason = smp_cmd_ident_info(conn, skb);
2858                 break;
2859
2860         case SMP_CMD_IDENT_ADDR_INFO:
2861                 reason = smp_cmd_ident_addr_info(conn, skb);
2862                 break;
2863
2864         case SMP_CMD_SIGN_INFO:
2865                 reason = smp_cmd_sign_info(conn, skb);
2866                 break;
2867
2868         case SMP_CMD_PUBLIC_KEY:
2869                 reason = smp_cmd_public_key(conn, skb);
2870                 break;
2871
2872         case SMP_CMD_DHKEY_CHECK:
2873                 reason = smp_cmd_dhkey_check(conn, skb);
2874                 break;
2875
2876         case SMP_CMD_KEYPRESS_NOTIFY:
2877                 reason = smp_cmd_keypress_notify(conn, skb);
2878                 break;
2879
2880         default:
2881                 BT_DBG("Unknown command code 0x%2.2x", code);
2882                 reason = SMP_CMD_NOTSUPP;
2883                 goto done;
2884         }
2885
2886 done:
2887         if (!err) {
2888                 if (reason)
2889                         smp_failure(conn, reason);
2890                 kfree_skb(skb);
2891         }
2892
2893         return err;
2894
2895 drop:
2896         BT_ERR("%s unexpected SMP command 0x%02x from %pMR", hcon->hdev->name,
2897                code, &hcon->dst);
2898         kfree_skb(skb);
2899         return 0;
2900 }
2901
2902 static void smp_teardown_cb(struct l2cap_chan *chan, int err)
2903 {
2904         struct l2cap_conn *conn = chan->conn;
2905
2906         BT_DBG("chan %p", chan);
2907
2908         if (chan->data)
2909                 smp_chan_destroy(conn);
2910
2911         conn->smp = NULL;
2912         l2cap_chan_put(chan);
2913 }
2914
2915 static void bredr_pairing(struct l2cap_chan *chan)
2916 {
2917         struct l2cap_conn *conn = chan->conn;
2918         struct hci_conn *hcon = conn->hcon;
2919         struct hci_dev *hdev = hcon->hdev;
2920         struct smp_cmd_pairing req;
2921         struct smp_chan *smp;
2922
2923         BT_DBG("chan %p", chan);
2924
2925         /* Only new pairings are interesting */
2926         if (!test_bit(HCI_CONN_NEW_LINK_KEY, &hcon->flags))
2927                 return;
2928
2929         /* Don't bother if we're not encrypted */
2930         if (!test_bit(HCI_CONN_ENCRYPT, &hcon->flags))
2931                 return;
2932
2933         /* Only master may initiate SMP over BR/EDR */
2934         if (hcon->role != HCI_ROLE_MASTER)
2935                 return;
2936
2937         /* Secure Connections support must be enabled */
2938         if (!hci_dev_test_flag(hdev, HCI_SC_ENABLED))
2939                 return;
2940
2941         /* BR/EDR must use Secure Connections for SMP */
2942         if (!test_bit(HCI_CONN_AES_CCM, &hcon->flags) &&
2943             !hci_dev_test_flag(hdev, HCI_FORCE_BREDR_SMP))
2944                 return;
2945
2946         /* If our LE support is not enabled don't do anything */
2947         if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED))
2948                 return;
2949
2950         /* Don't bother if remote LE support is not enabled */
2951         if (!lmp_host_le_capable(hcon))
2952                 return;
2953
2954         /* Remote must support SMP fixed chan for BR/EDR */
2955         if (!(conn->remote_fixed_chan & L2CAP_FC_SMP_BREDR))
2956                 return;
2957
2958         /* Don't bother if SMP is already ongoing */
2959         if (chan->data)
2960                 return;
2961
2962         smp = smp_chan_create(conn);
2963         if (!smp) {
2964                 BT_ERR("%s unable to create SMP context for BR/EDR",
2965                        hdev->name);
2966                 return;
2967         }
2968
2969         set_bit(SMP_FLAG_SC, &smp->flags);
2970
2971         BT_DBG("%s starting SMP over BR/EDR", hdev->name);
2972
2973         /* Prepare and send the BR/EDR SMP Pairing Request */
2974         build_bredr_pairing_cmd(smp, &req, NULL);
2975
2976         smp->preq[0] = SMP_CMD_PAIRING_REQ;
2977         memcpy(&smp->preq[1], &req, sizeof(req));
2978
2979         smp_send_cmd(conn, SMP_CMD_PAIRING_REQ, sizeof(req), &req);
2980         SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_RSP);
2981 }
2982
2983 static void smp_resume_cb(struct l2cap_chan *chan)
2984 {
2985         struct smp_chan *smp = chan->data;
2986         struct l2cap_conn *conn = chan->conn;
2987         struct hci_conn *hcon = conn->hcon;
2988
2989         BT_DBG("chan %p", chan);
2990
2991         if (hcon->type == ACL_LINK) {
2992                 bredr_pairing(chan);
2993                 return;
2994         }
2995
2996         if (!smp)
2997                 return;
2998
2999         if (!test_bit(HCI_CONN_ENCRYPT, &hcon->flags))
3000                 return;
3001
3002         cancel_delayed_work(&smp->security_timer);
3003
3004         smp_distribute_keys(smp);
3005 }
3006
3007 static void smp_ready_cb(struct l2cap_chan *chan)
3008 {
3009         struct l2cap_conn *conn = chan->conn;
3010         struct hci_conn *hcon = conn->hcon;
3011
3012         BT_DBG("chan %p", chan);
3013
3014         /* No need to call l2cap_chan_hold() here since we already own
3015          * the reference taken in smp_new_conn_cb(). This is just the
3016          * first time that we tie it to a specific pointer. The code in
3017          * l2cap_core.c ensures that there's no risk this function wont
3018          * get called if smp_new_conn_cb was previously called.
3019          */
3020         conn->smp = chan;
3021
3022         if (hcon->type == ACL_LINK && test_bit(HCI_CONN_ENCRYPT, &hcon->flags))
3023                 bredr_pairing(chan);
3024 }
3025
3026 static int smp_recv_cb(struct l2cap_chan *chan, struct sk_buff *skb)
3027 {
3028         int err;
3029
3030         BT_DBG("chan %p", chan);
3031
3032         err = smp_sig_channel(chan, skb);
3033         if (err) {
3034                 struct smp_chan *smp = chan->data;
3035
3036                 if (smp)
3037                         cancel_delayed_work_sync(&smp->security_timer);
3038
3039                 hci_disconnect(chan->conn->hcon, HCI_ERROR_AUTH_FAILURE);
3040         }
3041
3042         return err;
3043 }
3044
3045 static struct sk_buff *smp_alloc_skb_cb(struct l2cap_chan *chan,
3046                                         unsigned long hdr_len,
3047                                         unsigned long len, int nb)
3048 {
3049         struct sk_buff *skb;
3050
3051         skb = bt_skb_alloc(hdr_len + len, GFP_KERNEL);
3052         if (!skb)
3053                 return ERR_PTR(-ENOMEM);
3054
3055         skb->priority = HCI_PRIO_MAX;
3056         bt_cb(skb)->l2cap.chan = chan;
3057
3058         return skb;
3059 }
3060
3061 static const struct l2cap_ops smp_chan_ops = {
3062         .name                   = "Security Manager",
3063         .ready                  = smp_ready_cb,
3064         .recv                   = smp_recv_cb,
3065         .alloc_skb              = smp_alloc_skb_cb,
3066         .teardown               = smp_teardown_cb,
3067         .resume                 = smp_resume_cb,
3068
3069         .new_connection         = l2cap_chan_no_new_connection,
3070         .state_change           = l2cap_chan_no_state_change,
3071         .close                  = l2cap_chan_no_close,
3072         .defer                  = l2cap_chan_no_defer,
3073         .suspend                = l2cap_chan_no_suspend,
3074         .set_shutdown           = l2cap_chan_no_set_shutdown,
3075         .get_sndtimeo           = l2cap_chan_no_get_sndtimeo,
3076 };
3077
3078 static inline struct l2cap_chan *smp_new_conn_cb(struct l2cap_chan *pchan)
3079 {
3080         struct l2cap_chan *chan;
3081
3082         BT_DBG("pchan %p", pchan);
3083
3084         chan = l2cap_chan_create();
3085         if (!chan)
3086                 return NULL;
3087
3088         chan->chan_type = pchan->chan_type;
3089         chan->ops       = &smp_chan_ops;
3090         chan->scid      = pchan->scid;
3091         chan->dcid      = chan->scid;
3092         chan->imtu      = pchan->imtu;
3093         chan->omtu      = pchan->omtu;
3094         chan->mode      = pchan->mode;
3095
3096         /* Other L2CAP channels may request SMP routines in order to
3097          * change the security level. This means that the SMP channel
3098          * lock must be considered in its own category to avoid lockdep
3099          * warnings.
3100          */
3101         atomic_set(&chan->nesting, L2CAP_NESTING_SMP);
3102
3103         BT_DBG("created chan %p", chan);
3104
3105         return chan;
3106 }
3107
3108 static const struct l2cap_ops smp_root_chan_ops = {
3109         .name                   = "Security Manager Root",
3110         .new_connection         = smp_new_conn_cb,
3111
3112         /* None of these are implemented for the root channel */
3113         .close                  = l2cap_chan_no_close,
3114         .alloc_skb              = l2cap_chan_no_alloc_skb,
3115         .recv                   = l2cap_chan_no_recv,
3116         .state_change           = l2cap_chan_no_state_change,
3117         .teardown               = l2cap_chan_no_teardown,
3118         .ready                  = l2cap_chan_no_ready,
3119         .defer                  = l2cap_chan_no_defer,
3120         .suspend                = l2cap_chan_no_suspend,
3121         .resume                 = l2cap_chan_no_resume,
3122         .set_shutdown           = l2cap_chan_no_set_shutdown,
3123         .get_sndtimeo           = l2cap_chan_no_get_sndtimeo,
3124 };
3125
3126 static struct l2cap_chan *smp_add_cid(struct hci_dev *hdev, u16 cid)
3127 {
3128         struct l2cap_chan *chan;
3129         struct smp_dev *smp;
3130         struct crypto_blkcipher *tfm_aes;
3131         struct crypto_hash *tfm_cmac;
3132
3133         if (cid == L2CAP_CID_SMP_BREDR) {
3134                 smp = NULL;
3135                 goto create_chan;
3136         }
3137
3138         smp = kzalloc(sizeof(*smp), GFP_KERNEL);
3139         if (!smp)
3140                 return ERR_PTR(-ENOMEM);
3141
3142         tfm_aes = crypto_alloc_blkcipher("ecb(aes)", 0, CRYPTO_ALG_ASYNC);
3143         if (IS_ERR(tfm_aes)) {
3144                 BT_ERR("Unable to create ECB crypto context");
3145                 kzfree(smp);
3146                 return ERR_CAST(tfm_aes);
3147         }
3148
3149         tfm_cmac = crypto_alloc_hash("cmac(aes)", 0, CRYPTO_ALG_ASYNC);
3150         if (IS_ERR(tfm_cmac)) {
3151                 BT_ERR("Unable to create CMAC crypto context");
3152                 crypto_free_blkcipher(tfm_aes);
3153                 kzfree(smp);
3154                 return ERR_CAST(tfm_cmac);
3155         }
3156
3157         smp->tfm_aes = tfm_aes;
3158         smp->tfm_cmac = tfm_cmac;
3159         smp->min_key_size = SMP_MIN_ENC_KEY_SIZE;
3160         smp->max_key_size = SMP_MAX_ENC_KEY_SIZE;
3161
3162 create_chan:
3163         chan = l2cap_chan_create();
3164         if (!chan) {
3165                 if (smp) {
3166                         crypto_free_blkcipher(smp->tfm_aes);
3167                         crypto_free_hash(smp->tfm_cmac);
3168                         kzfree(smp);
3169                 }
3170                 return ERR_PTR(-ENOMEM);
3171         }
3172
3173         chan->data = smp;
3174
3175         l2cap_add_scid(chan, cid);
3176
3177         l2cap_chan_set_defaults(chan);
3178
3179         if (cid == L2CAP_CID_SMP) {
3180                 u8 bdaddr_type;
3181
3182                 hci_copy_identity_address(hdev, &chan->src, &bdaddr_type);
3183
3184                 if (bdaddr_type == ADDR_LE_DEV_PUBLIC)
3185                         chan->src_type = BDADDR_LE_PUBLIC;
3186                 else
3187                         chan->src_type = BDADDR_LE_RANDOM;
3188         } else {
3189                 bacpy(&chan->src, &hdev->bdaddr);
3190                 chan->src_type = BDADDR_BREDR;
3191         }
3192
3193         chan->state = BT_LISTEN;
3194         chan->mode = L2CAP_MODE_BASIC;
3195         chan->imtu = L2CAP_DEFAULT_MTU;
3196         chan->ops = &smp_root_chan_ops;
3197
3198         /* Set correct nesting level for a parent/listening channel */
3199         atomic_set(&chan->nesting, L2CAP_NESTING_PARENT);
3200
3201         return chan;
3202 }
3203
3204 static void smp_del_chan(struct l2cap_chan *chan)
3205 {
3206         struct smp_dev *smp;
3207
3208         BT_DBG("chan %p", chan);
3209
3210         smp = chan->data;
3211         if (smp) {
3212                 chan->data = NULL;
3213                 if (smp->tfm_aes)
3214                         crypto_free_blkcipher(smp->tfm_aes);
3215                 if (smp->tfm_cmac)
3216                         crypto_free_hash(smp->tfm_cmac);
3217                 kzfree(smp);
3218         }
3219
3220         l2cap_chan_put(chan);
3221 }
3222
3223 static ssize_t force_bredr_smp_read(struct file *file,
3224                                     char __user *user_buf,
3225                                     size_t count, loff_t *ppos)
3226 {
3227         struct hci_dev *hdev = file->private_data;
3228         char buf[3];
3229
3230         buf[0] = hci_dev_test_flag(hdev, HCI_FORCE_BREDR_SMP) ? 'Y': 'N';
3231         buf[1] = '\n';
3232         buf[2] = '\0';
3233         return simple_read_from_buffer(user_buf, count, ppos, buf, 2);
3234 }
3235
3236 static ssize_t force_bredr_smp_write(struct file *file,
3237                                      const char __user *user_buf,
3238                                      size_t count, loff_t *ppos)
3239 {
3240         struct hci_dev *hdev = file->private_data;
3241         char buf[32];
3242         size_t buf_size = min(count, (sizeof(buf)-1));
3243         bool enable;
3244
3245         if (copy_from_user(buf, user_buf, buf_size))
3246                 return -EFAULT;
3247
3248         buf[buf_size] = '\0';
3249         if (strtobool(buf, &enable))
3250                 return -EINVAL;
3251
3252         if (enable == hci_dev_test_flag(hdev, HCI_FORCE_BREDR_SMP))
3253                 return -EALREADY;
3254
3255         if (enable) {
3256                 struct l2cap_chan *chan;
3257
3258                 chan = smp_add_cid(hdev, L2CAP_CID_SMP_BREDR);
3259                 if (IS_ERR(chan))
3260                         return PTR_ERR(chan);
3261
3262                 hdev->smp_bredr_data = chan;
3263         } else {
3264                 struct l2cap_chan *chan;
3265
3266                 chan = hdev->smp_bredr_data;
3267                 hdev->smp_bredr_data = NULL;
3268                 smp_del_chan(chan);
3269         }
3270
3271         hci_dev_change_flag(hdev, HCI_FORCE_BREDR_SMP);
3272
3273         return count;
3274 }
3275
3276 static const struct file_operations force_bredr_smp_fops = {
3277         .open           = simple_open,
3278         .read           = force_bredr_smp_read,
3279         .write          = force_bredr_smp_write,
3280         .llseek         = default_llseek,
3281 };
3282
3283 static ssize_t le_min_key_size_read(struct file *file,
3284                                      char __user *user_buf,
3285                                      size_t count, loff_t *ppos)
3286 {
3287         struct hci_dev *hdev = file->private_data;
3288         char buf[4];
3289
3290         snprintf(buf, sizeof(buf), "%2u\n", SMP_DEV(hdev)->min_key_size);
3291
3292         return simple_read_from_buffer(user_buf, count, ppos, buf, strlen(buf));
3293 }
3294
3295 static ssize_t le_min_key_size_write(struct file *file,
3296                                       const char __user *user_buf,
3297                                       size_t count, loff_t *ppos)
3298 {
3299         struct hci_dev *hdev = file->private_data;
3300         char buf[32];
3301         size_t buf_size = min(count, (sizeof(buf) - 1));
3302         u8 key_size;
3303
3304         if (copy_from_user(buf, user_buf, buf_size))
3305                 return -EFAULT;
3306
3307         buf[buf_size] = '\0';
3308
3309         sscanf(buf, "%hhu", &key_size);
3310
3311         if (key_size > SMP_DEV(hdev)->max_key_size ||
3312             key_size < SMP_MIN_ENC_KEY_SIZE)
3313                 return -EINVAL;
3314
3315         SMP_DEV(hdev)->min_key_size = key_size;
3316
3317         return count;
3318 }
3319
3320 static const struct file_operations le_min_key_size_fops = {
3321         .open           = simple_open,
3322         .read           = le_min_key_size_read,
3323         .write          = le_min_key_size_write,
3324         .llseek         = default_llseek,
3325 };
3326
3327 static ssize_t le_max_key_size_read(struct file *file,
3328                                      char __user *user_buf,
3329                                      size_t count, loff_t *ppos)
3330 {
3331         struct hci_dev *hdev = file->private_data;
3332         char buf[4];
3333
3334         snprintf(buf, sizeof(buf), "%2u\n", SMP_DEV(hdev)->max_key_size);
3335
3336         return simple_read_from_buffer(user_buf, count, ppos, buf, strlen(buf));
3337 }
3338
3339 static ssize_t le_max_key_size_write(struct file *file,
3340                                       const char __user *user_buf,
3341                                       size_t count, loff_t *ppos)
3342 {
3343         struct hci_dev *hdev = file->private_data;
3344         char buf[32];
3345         size_t buf_size = min(count, (sizeof(buf) - 1));
3346         u8 key_size;
3347
3348         if (copy_from_user(buf, user_buf, buf_size))
3349                 return -EFAULT;
3350
3351         buf[buf_size] = '\0';
3352
3353         sscanf(buf, "%hhu", &key_size);
3354
3355         if (key_size > SMP_MAX_ENC_KEY_SIZE ||
3356             key_size < SMP_DEV(hdev)->min_key_size)
3357                 return -EINVAL;
3358
3359         SMP_DEV(hdev)->max_key_size = key_size;
3360
3361         return count;
3362 }
3363
3364 static const struct file_operations le_max_key_size_fops = {
3365         .open           = simple_open,
3366         .read           = le_max_key_size_read,
3367         .write          = le_max_key_size_write,
3368         .llseek         = default_llseek,
3369 };
3370
3371 int smp_register(struct hci_dev *hdev)
3372 {
3373         struct l2cap_chan *chan;
3374
3375         BT_DBG("%s", hdev->name);
3376
3377         /* If the controller does not support Low Energy operation, then
3378          * there is also no need to register any SMP channel.
3379          */
3380         if (!lmp_le_capable(hdev))
3381                 return 0;
3382
3383         if (WARN_ON(hdev->smp_data)) {
3384                 chan = hdev->smp_data;
3385                 hdev->smp_data = NULL;
3386                 smp_del_chan(chan);
3387         }
3388
3389         chan = smp_add_cid(hdev, L2CAP_CID_SMP);
3390         if (IS_ERR(chan))
3391                 return PTR_ERR(chan);
3392
3393         hdev->smp_data = chan;
3394
3395         debugfs_create_file("le_min_key_size", 0644, hdev->debugfs, hdev,
3396                             &le_min_key_size_fops);
3397         debugfs_create_file("le_max_key_size", 0644, hdev->debugfs, hdev,
3398                             &le_max_key_size_fops);
3399
3400         /* If the controller does not support BR/EDR Secure Connections
3401          * feature, then the BR/EDR SMP channel shall not be present.
3402          *
3403          * To test this with Bluetooth 4.0 controllers, create a debugfs
3404          * switch that allows forcing BR/EDR SMP support and accepting
3405          * cross-transport pairing on non-AES encrypted connections.
3406          */
3407         if (!lmp_sc_capable(hdev)) {
3408                 debugfs_create_file("force_bredr_smp", 0644, hdev->debugfs,
3409                                     hdev, &force_bredr_smp_fops);
3410                 return 0;
3411         }
3412
3413         if (WARN_ON(hdev->smp_bredr_data)) {
3414                 chan = hdev->smp_bredr_data;
3415                 hdev->smp_bredr_data = NULL;
3416                 smp_del_chan(chan);
3417         }
3418
3419         chan = smp_add_cid(hdev, L2CAP_CID_SMP_BREDR);
3420         if (IS_ERR(chan)) {
3421                 int err = PTR_ERR(chan);
3422                 chan = hdev->smp_data;
3423                 hdev->smp_data = NULL;
3424                 smp_del_chan(chan);
3425                 return err;
3426         }
3427
3428         hdev->smp_bredr_data = chan;
3429
3430         return 0;
3431 }
3432
3433 void smp_unregister(struct hci_dev *hdev)
3434 {
3435         struct l2cap_chan *chan;
3436
3437         if (hdev->smp_bredr_data) {
3438                 chan = hdev->smp_bredr_data;
3439                 hdev->smp_bredr_data = NULL;
3440                 smp_del_chan(chan);
3441         }
3442
3443         if (hdev->smp_data) {
3444                 chan = hdev->smp_data;
3445                 hdev->smp_data = NULL;
3446                 smp_del_chan(chan);
3447         }
3448 }
3449
3450 #if IS_ENABLED(CONFIG_BT_SELFTEST_SMP)
3451
3452 static int __init test_ah(struct crypto_blkcipher *tfm_aes)
3453 {
3454         const u8 irk[16] = {
3455                         0x9b, 0x7d, 0x39, 0x0a, 0xa6, 0x10, 0x10, 0x34,
3456                         0x05, 0xad, 0xc8, 0x57, 0xa3, 0x34, 0x02, 0xec };
3457         const u8 r[3] = { 0x94, 0x81, 0x70 };
3458         const u8 exp[3] = { 0xaa, 0xfb, 0x0d };
3459         u8 res[3];
3460         int err;
3461
3462         err = smp_ah(tfm_aes, irk, r, res);
3463         if (err)
3464                 return err;
3465
3466         if (memcmp(res, exp, 3))
3467                 return -EINVAL;
3468
3469         return 0;
3470 }
3471
3472 static int __init test_c1(struct crypto_blkcipher *tfm_aes)
3473 {
3474         const u8 k[16] = {
3475                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3476                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
3477         const u8 r[16] = {
3478                         0xe0, 0x2e, 0x70, 0xc6, 0x4e, 0x27, 0x88, 0x63,
3479                         0x0e, 0x6f, 0xad, 0x56, 0x21, 0xd5, 0x83, 0x57 };
3480         const u8 preq[7] = { 0x01, 0x01, 0x00, 0x00, 0x10, 0x07, 0x07 };
3481         const u8 pres[7] = { 0x02, 0x03, 0x00, 0x00, 0x08, 0x00, 0x05 };
3482         const u8 _iat = 0x01;
3483         const u8 _rat = 0x00;
3484         const bdaddr_t ra = { { 0xb6, 0xb5, 0xb4, 0xb3, 0xb2, 0xb1 } };
3485         const bdaddr_t ia = { { 0xa6, 0xa5, 0xa4, 0xa3, 0xa2, 0xa1 } };
3486         const u8 exp[16] = {
3487                         0x86, 0x3b, 0xf1, 0xbe, 0xc5, 0x4d, 0xa7, 0xd2,
3488                         0xea, 0x88, 0x89, 0x87, 0xef, 0x3f, 0x1e, 0x1e };
3489         u8 res[16];
3490         int err;
3491
3492         err = smp_c1(tfm_aes, k, r, preq, pres, _iat, &ia, _rat, &ra, res);
3493         if (err)
3494                 return err;
3495
3496         if (memcmp(res, exp, 16))
3497                 return -EINVAL;
3498
3499         return 0;
3500 }
3501
3502 static int __init test_s1(struct crypto_blkcipher *tfm_aes)
3503 {
3504         const u8 k[16] = {
3505                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3506                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
3507         const u8 r1[16] = {
3508                         0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11 };
3509         const u8 r2[16] = {
3510                         0x00, 0xff, 0xee, 0xdd, 0xcc, 0xbb, 0xaa, 0x99 };
3511         const u8 exp[16] = {
3512                         0x62, 0xa0, 0x6d, 0x79, 0xae, 0x16, 0x42, 0x5b,
3513                         0x9b, 0xf4, 0xb0, 0xe8, 0xf0, 0xe1, 0x1f, 0x9a };
3514         u8 res[16];
3515         int err;
3516
3517         err = smp_s1(tfm_aes, k, r1, r2, res);
3518         if (err)
3519                 return err;
3520
3521         if (memcmp(res, exp, 16))
3522                 return -EINVAL;
3523
3524         return 0;
3525 }
3526
3527 static int __init test_f4(struct crypto_hash *tfm_cmac)
3528 {
3529         const u8 u[32] = {
3530                         0xe6, 0x9d, 0x35, 0x0e, 0x48, 0x01, 0x03, 0xcc,
3531                         0xdb, 0xfd, 0xf4, 0xac, 0x11, 0x91, 0xf4, 0xef,
3532                         0xb9, 0xa5, 0xf9, 0xe9, 0xa7, 0x83, 0x2c, 0x5e,
3533                         0x2c, 0xbe, 0x97, 0xf2, 0xd2, 0x03, 0xb0, 0x20 };
3534         const u8 v[32] = {
3535                         0xfd, 0xc5, 0x7f, 0xf4, 0x49, 0xdd, 0x4f, 0x6b,
3536                         0xfb, 0x7c, 0x9d, 0xf1, 0xc2, 0x9a, 0xcb, 0x59,
3537                         0x2a, 0xe7, 0xd4, 0xee, 0xfb, 0xfc, 0x0a, 0x90,
3538                         0x9a, 0xbb, 0xf6, 0x32, 0x3d, 0x8b, 0x18, 0x55 };
3539         const u8 x[16] = {
3540                         0xab, 0xae, 0x2b, 0x71, 0xec, 0xb2, 0xff, 0xff,
3541                         0x3e, 0x73, 0x77, 0xd1, 0x54, 0x84, 0xcb, 0xd5 };
3542         const u8 z = 0x00;
3543         const u8 exp[16] = {
3544                         0x2d, 0x87, 0x74, 0xa9, 0xbe, 0xa1, 0xed, 0xf1,
3545                         0x1c, 0xbd, 0xa9, 0x07, 0xf1, 0x16, 0xc9, 0xf2 };
3546         u8 res[16];
3547         int err;
3548
3549         err = smp_f4(tfm_cmac, u, v, x, z, res);
3550         if (err)
3551                 return err;
3552
3553         if (memcmp(res, exp, 16))
3554                 return -EINVAL;
3555
3556         return 0;
3557 }
3558
3559 static int __init test_f5(struct crypto_hash *tfm_cmac)
3560 {
3561         const u8 w[32] = {
3562                         0x98, 0xa6, 0xbf, 0x73, 0xf3, 0x34, 0x8d, 0x86,
3563                         0xf1, 0x66, 0xf8, 0xb4, 0x13, 0x6b, 0x79, 0x99,
3564                         0x9b, 0x7d, 0x39, 0x0a, 0xa6, 0x10, 0x10, 0x34,
3565                         0x05, 0xad, 0xc8, 0x57, 0xa3, 0x34, 0x02, 0xec };
3566         const u8 n1[16] = {
3567                         0xab, 0xae, 0x2b, 0x71, 0xec, 0xb2, 0xff, 0xff,
3568                         0x3e, 0x73, 0x77, 0xd1, 0x54, 0x84, 0xcb, 0xd5 };
3569         const u8 n2[16] = {
3570                         0xcf, 0xc4, 0x3d, 0xff, 0xf7, 0x83, 0x65, 0x21,
3571                         0x6e, 0x5f, 0xa7, 0x25, 0xcc, 0xe7, 0xe8, 0xa6 };
3572         const u8 a1[7] = { 0xce, 0xbf, 0x37, 0x37, 0x12, 0x56, 0x00 };
3573         const u8 a2[7] = { 0xc1, 0xcf, 0x2d, 0x70, 0x13, 0xa7, 0x00 };
3574         const u8 exp_ltk[16] = {
3575                         0x38, 0x0a, 0x75, 0x94, 0xb5, 0x22, 0x05, 0x98,
3576                         0x23, 0xcd, 0xd7, 0x69, 0x11, 0x79, 0x86, 0x69 };
3577         const u8 exp_mackey[16] = {
3578                         0x20, 0x6e, 0x63, 0xce, 0x20, 0x6a, 0x3f, 0xfd,
3579                         0x02, 0x4a, 0x08, 0xa1, 0x76, 0xf1, 0x65, 0x29 };
3580         u8 mackey[16], ltk[16];
3581         int err;
3582
3583         err = smp_f5(tfm_cmac, w, n1, n2, a1, a2, mackey, ltk);
3584         if (err)
3585                 return err;
3586
3587         if (memcmp(mackey, exp_mackey, 16))
3588                 return -EINVAL;
3589
3590         if (memcmp(ltk, exp_ltk, 16))
3591                 return -EINVAL;
3592
3593         return 0;
3594 }
3595
3596 static int __init test_f6(struct crypto_hash *tfm_cmac)
3597 {
3598         const u8 w[16] = {
3599                         0x20, 0x6e, 0x63, 0xce, 0x20, 0x6a, 0x3f, 0xfd,
3600                         0x02, 0x4a, 0x08, 0xa1, 0x76, 0xf1, 0x65, 0x29 };
3601         const u8 n1[16] = {
3602                         0xab, 0xae, 0x2b, 0x71, 0xec, 0xb2, 0xff, 0xff,
3603                         0x3e, 0x73, 0x77, 0xd1, 0x54, 0x84, 0xcb, 0xd5 };
3604         const u8 n2[16] = {
3605                         0xcf, 0xc4, 0x3d, 0xff, 0xf7, 0x83, 0x65, 0x21,
3606                         0x6e, 0x5f, 0xa7, 0x25, 0xcc, 0xe7, 0xe8, 0xa6 };
3607         const u8 r[16] = {
3608                         0xc8, 0x0f, 0x2d, 0x0c, 0xd2, 0x42, 0xda, 0x08,
3609                         0x54, 0xbb, 0x53, 0xb4, 0x3b, 0x34, 0xa3, 0x12 };
3610         const u8 io_cap[3] = { 0x02, 0x01, 0x01 };
3611         const u8 a1[7] = { 0xce, 0xbf, 0x37, 0x37, 0x12, 0x56, 0x00 };
3612         const u8 a2[7] = { 0xc1, 0xcf, 0x2d, 0x70, 0x13, 0xa7, 0x00 };
3613         const u8 exp[16] = {
3614                         0x61, 0x8f, 0x95, 0xda, 0x09, 0x0b, 0x6c, 0xd2,
3615                         0xc5, 0xe8, 0xd0, 0x9c, 0x98, 0x73, 0xc4, 0xe3 };
3616         u8 res[16];
3617         int err;
3618
3619         err = smp_f6(tfm_cmac, w, n1, n2, r, io_cap, a1, a2, res);
3620         if (err)
3621                 return err;
3622
3623         if (memcmp(res, exp, 16))
3624                 return -EINVAL;
3625
3626         return 0;
3627 }
3628
3629 static int __init test_g2(struct crypto_hash *tfm_cmac)
3630 {
3631         const u8 u[32] = {
3632                         0xe6, 0x9d, 0x35, 0x0e, 0x48, 0x01, 0x03, 0xcc,
3633                         0xdb, 0xfd, 0xf4, 0xac, 0x11, 0x91, 0xf4, 0xef,
3634                         0xb9, 0xa5, 0xf9, 0xe9, 0xa7, 0x83, 0x2c, 0x5e,
3635                         0x2c, 0xbe, 0x97, 0xf2, 0xd2, 0x03, 0xb0, 0x20 };
3636         const u8 v[32] = {
3637                         0xfd, 0xc5, 0x7f, 0xf4, 0x49, 0xdd, 0x4f, 0x6b,
3638                         0xfb, 0x7c, 0x9d, 0xf1, 0xc2, 0x9a, 0xcb, 0x59,
3639                         0x2a, 0xe7, 0xd4, 0xee, 0xfb, 0xfc, 0x0a, 0x90,
3640                         0x9a, 0xbb, 0xf6, 0x32, 0x3d, 0x8b, 0x18, 0x55 };
3641         const u8 x[16] = {
3642                         0xab, 0xae, 0x2b, 0x71, 0xec, 0xb2, 0xff, 0xff,
3643                         0x3e, 0x73, 0x77, 0xd1, 0x54, 0x84, 0xcb, 0xd5 };
3644         const u8 y[16] = {
3645                         0xcf, 0xc4, 0x3d, 0xff, 0xf7, 0x83, 0x65, 0x21,
3646                         0x6e, 0x5f, 0xa7, 0x25, 0xcc, 0xe7, 0xe8, 0xa6 };
3647         const u32 exp_val = 0x2f9ed5ba % 1000000;
3648         u32 val;
3649         int err;
3650
3651         err = smp_g2(tfm_cmac, u, v, x, y, &val);
3652         if (err)
3653                 return err;
3654
3655         if (val != exp_val)
3656                 return -EINVAL;
3657
3658         return 0;
3659 }
3660
3661 static int __init test_h6(struct crypto_hash *tfm_cmac)
3662 {
3663         const u8 w[16] = {
3664                         0x9b, 0x7d, 0x39, 0x0a, 0xa6, 0x10, 0x10, 0x34,
3665                         0x05, 0xad, 0xc8, 0x57, 0xa3, 0x34, 0x02, 0xec };
3666         const u8 key_id[4] = { 0x72, 0x62, 0x65, 0x6c };
3667         const u8 exp[16] = {
3668                         0x99, 0x63, 0xb1, 0x80, 0xe2, 0xa9, 0xd3, 0xe8,
3669                         0x1c, 0xc9, 0x6d, 0xe7, 0x02, 0xe1, 0x9a, 0x2d };
3670         u8 res[16];
3671         int err;
3672
3673         err = smp_h6(tfm_cmac, w, key_id, res);
3674         if (err)
3675                 return err;
3676
3677         if (memcmp(res, exp, 16))
3678                 return -EINVAL;
3679
3680         return 0;
3681 }
3682
3683 static char test_smp_buffer[32];
3684
3685 static ssize_t test_smp_read(struct file *file, char __user *user_buf,
3686                              size_t count, loff_t *ppos)
3687 {
3688         return simple_read_from_buffer(user_buf, count, ppos, test_smp_buffer,
3689                                        strlen(test_smp_buffer));
3690 }
3691
3692 static const struct file_operations test_smp_fops = {
3693         .open           = simple_open,
3694         .read           = test_smp_read,
3695         .llseek         = default_llseek,
3696 };
3697
3698 static int __init run_selftests(struct crypto_blkcipher *tfm_aes,
3699                                 struct crypto_hash *tfm_cmac)
3700 {
3701         ktime_t calltime, delta, rettime;
3702         unsigned long long duration;
3703         int err;
3704
3705         calltime = ktime_get();
3706
3707         err = test_ah(tfm_aes);
3708         if (err) {
3709                 BT_ERR("smp_ah test failed");
3710                 goto done;
3711         }
3712
3713         err = test_c1(tfm_aes);
3714         if (err) {
3715                 BT_ERR("smp_c1 test failed");
3716                 goto done;
3717         }
3718
3719         err = test_s1(tfm_aes);
3720         if (err) {
3721                 BT_ERR("smp_s1 test failed");
3722                 goto done;
3723         }
3724
3725         err = test_f4(tfm_cmac);
3726         if (err) {
3727                 BT_ERR("smp_f4 test failed");
3728                 goto done;
3729         }
3730
3731         err = test_f5(tfm_cmac);
3732         if (err) {
3733                 BT_ERR("smp_f5 test failed");
3734                 goto done;
3735         }
3736
3737         err = test_f6(tfm_cmac);
3738         if (err) {
3739                 BT_ERR("smp_f6 test failed");
3740                 goto done;
3741         }
3742
3743         err = test_g2(tfm_cmac);
3744         if (err) {
3745                 BT_ERR("smp_g2 test failed");
3746                 goto done;
3747         }
3748
3749         err = test_h6(tfm_cmac);
3750         if (err) {
3751                 BT_ERR("smp_h6 test failed");
3752                 goto done;
3753         }
3754
3755         rettime = ktime_get();
3756         delta = ktime_sub(rettime, calltime);
3757         duration = (unsigned long long) ktime_to_ns(delta) >> 10;
3758
3759         BT_INFO("SMP test passed in %llu usecs", duration);
3760
3761 done:
3762         if (!err)
3763                 snprintf(test_smp_buffer, sizeof(test_smp_buffer),
3764                          "PASS (%llu usecs)\n", duration);
3765         else
3766                 snprintf(test_smp_buffer, sizeof(test_smp_buffer), "FAIL\n");
3767
3768         debugfs_create_file("selftest_smp", 0444, bt_debugfs, NULL,
3769                             &test_smp_fops);
3770
3771         return err;
3772 }
3773
3774 int __init bt_selftest_smp(void)
3775 {
3776         struct crypto_blkcipher *tfm_aes;
3777         struct crypto_hash *tfm_cmac;
3778         int err;
3779
3780         tfm_aes = crypto_alloc_blkcipher("ecb(aes)", 0, CRYPTO_ALG_ASYNC);
3781         if (IS_ERR(tfm_aes)) {
3782                 BT_ERR("Unable to create ECB crypto context");
3783                 return PTR_ERR(tfm_aes);
3784         }
3785
3786         tfm_cmac = crypto_alloc_hash("cmac(aes)", 0, CRYPTO_ALG_ASYNC);
3787         if (IS_ERR(tfm_cmac)) {
3788                 BT_ERR("Unable to create CMAC crypto context");
3789                 crypto_free_blkcipher(tfm_aes);
3790                 return PTR_ERR(tfm_cmac);
3791         }
3792
3793         err = run_selftests(tfm_aes, tfm_cmac);
3794
3795         crypto_free_hash(tfm_cmac);
3796         crypto_free_blkcipher(tfm_aes);
3797
3798         return err;
3799 }
3800
3801 #endif