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