Merge branch 'for-davem-2' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
[cascardo/linux.git] / net / bluetooth / smp.c
1 /*
2    BlueZ - Bluetooth protocol stack for Linux
3    Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
4
5    This program is free software; you can redistribute it and/or modify
6    it under the terms of the GNU General Public License version 2 as
7    published by the Free Software Foundation;
8
9    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
10    OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
11    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
12    IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
13    CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
14    WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15    ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16    OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17
18    ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
19    COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
20    SOFTWARE IS DISCLAIMED.
21 */
22
23 #include <linux/crypto.h>
24 #include <linux/scatterlist.h>
25 #include <crypto/b128ops.h>
26
27 #include <net/bluetooth/bluetooth.h>
28 #include <net/bluetooth/hci_core.h>
29 #include <net/bluetooth/l2cap.h>
30 #include <net/bluetooth/mgmt.h>
31
32 #include "ecc.h"
33 #include "smp.h"
34
35 /* Low-level debug macros to be used for stuff that we don't want
36  * accidentially in dmesg, i.e. the values of the various crypto keys
37  * and the inputs & outputs of crypto functions.
38  */
39 #ifdef DEBUG
40 #define SMP_DBG(fmt, ...) printk(KERN_DEBUG "%s: " fmt, __func__, \
41                                  ##__VA_ARGS__)
42 #else
43 #define SMP_DBG(fmt, ...) no_printk(KERN_DEBUG "%s: " fmt, __func__, \
44                                     ##__VA_ARGS__)
45 #endif
46
47 #define SMP_ALLOW_CMD(smp, code)        set_bit(code, &smp->allow_cmd)
48
49 /* Keys which are not distributed with Secure Connections */
50 #define SMP_SC_NO_DIST (SMP_DIST_ENC_KEY | SMP_DIST_LINK_KEY);
51
52 #define SMP_TIMEOUT     msecs_to_jiffies(30000)
53
54 #define AUTH_REQ_MASK(dev)      (test_bit(HCI_SC_ENABLED, &(dev)->dev_flags) ? \
55                                  0x1f : 0x07)
56 #define KEY_DIST_MASK           0x07
57
58 /* Maximum message length that can be passed to aes_cmac */
59 #define CMAC_MSG_MAX    80
60
61 enum {
62         SMP_FLAG_TK_VALID,
63         SMP_FLAG_CFM_PENDING,
64         SMP_FLAG_MITM_AUTH,
65         SMP_FLAG_COMPLETE,
66         SMP_FLAG_INITIATOR,
67         SMP_FLAG_SC,
68         SMP_FLAG_REMOTE_PK,
69         SMP_FLAG_DEBUG_KEY,
70         SMP_FLAG_WAIT_USER,
71         SMP_FLAG_DHKEY_PENDING,
72         SMP_FLAG_OOB,
73 };
74
75 struct smp_chan {
76         struct l2cap_conn       *conn;
77         struct delayed_work     security_timer;
78         unsigned long           allow_cmd; /* Bitmask of allowed commands */
79
80         u8              preq[7]; /* SMP Pairing Request */
81         u8              prsp[7]; /* SMP Pairing Response */
82         u8              prnd[16]; /* SMP Pairing Random (local) */
83         u8              rrnd[16]; /* SMP Pairing Random (remote) */
84         u8              pcnf[16]; /* SMP Pairing Confirm */
85         u8              tk[16]; /* SMP Temporary Key */
86         u8              rr[16];
87         u8              enc_key_size;
88         u8              remote_key_dist;
89         bdaddr_t        id_addr;
90         u8              id_addr_type;
91         u8              irk[16];
92         struct smp_csrk *csrk;
93         struct smp_csrk *slave_csrk;
94         struct smp_ltk  *ltk;
95         struct smp_ltk  *slave_ltk;
96         struct smp_irk  *remote_irk;
97         u8              *link_key;
98         unsigned long   flags;
99         u8              method;
100         u8              passkey_round;
101
102         /* Secure Connections variables */
103         u8                      local_pk[64];
104         u8                      local_sk[32];
105         u8                      remote_pk[64];
106         u8                      dhkey[32];
107         u8                      mackey[16];
108
109         struct crypto_blkcipher *tfm_aes;
110         struct crypto_hash      *tfm_cmac;
111 };
112
113 /* These debug key values are defined in the SMP section of the core
114  * specification. debug_pk is the public debug key and debug_sk the
115  * private debug key.
116  */
117 static const u8 debug_pk[64] = {
118                 0xe6, 0x9d, 0x35, 0x0e, 0x48, 0x01, 0x03, 0xcc,
119                 0xdb, 0xfd, 0xf4, 0xac, 0x11, 0x91, 0xf4, 0xef,
120                 0xb9, 0xa5, 0xf9, 0xe9, 0xa7, 0x83, 0x2c, 0x5e,
121                 0x2c, 0xbe, 0x97, 0xf2, 0xd2, 0x03, 0xb0, 0x20,
122
123                 0x8b, 0xd2, 0x89, 0x15, 0xd0, 0x8e, 0x1c, 0x74,
124                 0x24, 0x30, 0xed, 0x8f, 0xc2, 0x45, 0x63, 0x76,
125                 0x5c, 0x15, 0x52, 0x5a, 0xbf, 0x9a, 0x32, 0x63,
126                 0x6d, 0xeb, 0x2a, 0x65, 0x49, 0x9c, 0x80, 0xdc,
127 };
128
129 static const u8 debug_sk[32] = {
130                 0xbd, 0x1a, 0x3c, 0xcd, 0xa6, 0xb8, 0x99, 0x58,
131                 0x99, 0xb7, 0x40, 0xeb, 0x7b, 0x60, 0xff, 0x4a,
132                 0x50, 0x3f, 0x10, 0xd2, 0xe3, 0xb3, 0xc9, 0x74,
133                 0x38, 0x5f, 0xc5, 0xa3, 0xd4, 0xf6, 0x49, 0x3f,
134 };
135
136 static inline void swap_buf(const u8 *src, u8 *dst, size_t len)
137 {
138         size_t i;
139
140         for (i = 0; i < len; i++)
141                 dst[len - 1 - i] = src[i];
142 }
143
144 /* The following functions map to the LE SC SMP crypto functions
145  * AES-CMAC, f4, f5, f6, g2 and h6.
146  */
147
148 static int aes_cmac(struct crypto_hash *tfm, const u8 k[16], const u8 *m,
149                     size_t len, u8 mac[16])
150 {
151         uint8_t tmp[16], mac_msb[16], msg_msb[CMAC_MSG_MAX];
152         struct hash_desc desc;
153         struct scatterlist sg;
154         int err;
155
156         if (len > CMAC_MSG_MAX)
157                 return -EFBIG;
158
159         if (!tfm) {
160                 BT_ERR("tfm %p", tfm);
161                 return -EINVAL;
162         }
163
164         desc.tfm = tfm;
165         desc.flags = 0;
166
167         crypto_hash_init(&desc);
168
169         /* Swap key and message from LSB to MSB */
170         swap_buf(k, tmp, 16);
171         swap_buf(m, msg_msb, len);
172
173         SMP_DBG("msg (len %zu) %*phN", len, (int) len, m);
174         SMP_DBG("key %16phN", k);
175
176         err = crypto_hash_setkey(tfm, tmp, 16);
177         if (err) {
178                 BT_ERR("cipher setkey failed: %d", err);
179                 return err;
180         }
181
182         sg_init_one(&sg, msg_msb, len);
183
184         err = crypto_hash_update(&desc, &sg, len);
185         if (err) {
186                 BT_ERR("Hash update error %d", err);
187                 return err;
188         }
189
190         err = crypto_hash_final(&desc, mac_msb);
191         if (err) {
192                 BT_ERR("Hash final error %d", err);
193                 return err;
194         }
195
196         swap_buf(mac_msb, mac, 16);
197
198         SMP_DBG("mac %16phN", mac);
199
200         return 0;
201 }
202
203 static int smp_f4(struct crypto_hash *tfm_cmac, const u8 u[32], const u8 v[32],
204                   const u8 x[16], u8 z, u8 res[16])
205 {
206         u8 m[65];
207         int err;
208
209         SMP_DBG("u %32phN", u);
210         SMP_DBG("v %32phN", v);
211         SMP_DBG("x %16phN z %02x", x, z);
212
213         m[0] = z;
214         memcpy(m + 1, v, 32);
215         memcpy(m + 33, u, 32);
216
217         err = aes_cmac(tfm_cmac, x, m, sizeof(m), res);
218         if (err)
219                 return err;
220
221         SMP_DBG("res %16phN", res);
222
223         return err;
224 }
225
226 static int smp_f5(struct crypto_hash *tfm_cmac, u8 w[32], u8 n1[16], u8 n2[16],
227                   u8 a1[7], u8 a2[7], u8 mackey[16], u8 ltk[16])
228 {
229         /* The btle, salt and length "magic" values are as defined in
230          * the SMP section of the Bluetooth core specification. In ASCII
231          * the btle value ends up being 'btle'. The salt is just a
232          * random number whereas length is the value 256 in little
233          * endian format.
234          */
235         const u8 btle[4] = { 0x65, 0x6c, 0x74, 0x62 };
236         const u8 salt[16] = { 0xbe, 0x83, 0x60, 0x5a, 0xdb, 0x0b, 0x37, 0x60,
237                               0x38, 0xa5, 0xf5, 0xaa, 0x91, 0x83, 0x88, 0x6c };
238         const u8 length[2] = { 0x00, 0x01 };
239         u8 m[53], t[16];
240         int err;
241
242         SMP_DBG("w %32phN", w);
243         SMP_DBG("n1 %16phN n2 %16phN", n1, n2);
244         SMP_DBG("a1 %7phN a2 %7phN", a1, a2);
245
246         err = aes_cmac(tfm_cmac, salt, w, 32, t);
247         if (err)
248                 return err;
249
250         SMP_DBG("t %16phN", t);
251
252         memcpy(m, length, 2);
253         memcpy(m + 2, a2, 7);
254         memcpy(m + 9, a1, 7);
255         memcpy(m + 16, n2, 16);
256         memcpy(m + 32, n1, 16);
257         memcpy(m + 48, btle, 4);
258
259         m[52] = 0; /* Counter */
260
261         err = aes_cmac(tfm_cmac, t, m, sizeof(m), mackey);
262         if (err)
263                 return err;
264
265         SMP_DBG("mackey %16phN", mackey);
266
267         m[52] = 1; /* Counter */
268
269         err = aes_cmac(tfm_cmac, t, m, sizeof(m), ltk);
270         if (err)
271                 return err;
272
273         SMP_DBG("ltk %16phN", ltk);
274
275         return 0;
276 }
277
278 static int smp_f6(struct crypto_hash *tfm_cmac, const u8 w[16],
279                   const u8 n1[16], u8 n2[16], const u8 r[16],
280                   const u8 io_cap[3], const u8 a1[7], const u8 a2[7],
281                   u8 res[16])
282 {
283         u8 m[65];
284         int err;
285
286         SMP_DBG("w %16phN", w);
287         SMP_DBG("n1 %16phN n2 %16phN", n1, n2);
288         SMP_DBG("r %16phN io_cap %3phN a1 %7phN a2 %7phN", r, io_cap, a1, a2);
289
290         memcpy(m, a2, 7);
291         memcpy(m + 7, a1, 7);
292         memcpy(m + 14, io_cap, 3);
293         memcpy(m + 17, r, 16);
294         memcpy(m + 33, n2, 16);
295         memcpy(m + 49, n1, 16);
296
297         err = aes_cmac(tfm_cmac, w, m, sizeof(m), res);
298         if (err)
299                 return err;
300
301         BT_DBG("res %16phN", res);
302
303         return err;
304 }
305
306 static int smp_g2(struct crypto_hash *tfm_cmac, const u8 u[32], const u8 v[32],
307                   const u8 x[16], const u8 y[16], u32 *val)
308 {
309         u8 m[80], tmp[16];
310         int err;
311
312         SMP_DBG("u %32phN", u);
313         SMP_DBG("v %32phN", v);
314         SMP_DBG("x %16phN y %16phN", x, y);
315
316         memcpy(m, y, 16);
317         memcpy(m + 16, v, 32);
318         memcpy(m + 48, u, 32);
319
320         err = aes_cmac(tfm_cmac, x, m, sizeof(m), tmp);
321         if (err)
322                 return err;
323
324         *val = get_unaligned_le32(tmp);
325         *val %= 1000000;
326
327         SMP_DBG("val %06u", *val);
328
329         return 0;
330 }
331
332 static int smp_h6(struct crypto_hash *tfm_cmac, const u8 w[16],
333                   const u8 key_id[4], u8 res[16])
334 {
335         int err;
336
337         SMP_DBG("w %16phN key_id %4phN", w, key_id);
338
339         err = aes_cmac(tfm_cmac, w, key_id, 4, res);
340         if (err)
341                 return err;
342
343         SMP_DBG("res %16phN", res);
344
345         return err;
346 }
347
348 /* The following functions map to the legacy SMP crypto functions e, c1,
349  * s1 and ah.
350  */
351
352 static int smp_e(struct crypto_blkcipher *tfm, const u8 *k, u8 *r)
353 {
354         struct blkcipher_desc desc;
355         struct scatterlist sg;
356         uint8_t tmp[16], data[16];
357         int err;
358
359         if (!tfm) {
360                 BT_ERR("tfm %p", tfm);
361                 return -EINVAL;
362         }
363
364         desc.tfm = tfm;
365         desc.flags = 0;
366
367         /* The most significant octet of key corresponds to k[0] */
368         swap_buf(k, tmp, 16);
369
370         err = crypto_blkcipher_setkey(tfm, tmp, 16);
371         if (err) {
372                 BT_ERR("cipher setkey failed: %d", err);
373                 return err;
374         }
375
376         /* Most significant octet of plaintextData corresponds to data[0] */
377         swap_buf(r, data, 16);
378
379         sg_init_one(&sg, data, 16);
380
381         err = crypto_blkcipher_encrypt(&desc, &sg, &sg, 16);
382         if (err)
383                 BT_ERR("Encrypt data error %d", err);
384
385         /* Most significant octet of encryptedData corresponds to data[0] */
386         swap_buf(data, r, 16);
387
388         return err;
389 }
390
391 static int smp_c1(struct crypto_blkcipher *tfm_aes, const u8 k[16],
392                   const u8 r[16], const u8 preq[7], const u8 pres[7], u8 _iat,
393                   const bdaddr_t *ia, u8 _rat, const bdaddr_t *ra, u8 res[16])
394 {
395         u8 p1[16], p2[16];
396         int err;
397
398         memset(p1, 0, 16);
399
400         /* p1 = pres || preq || _rat || _iat */
401         p1[0] = _iat;
402         p1[1] = _rat;
403         memcpy(p1 + 2, preq, 7);
404         memcpy(p1 + 9, pres, 7);
405
406         /* p2 = padding || ia || ra */
407         memcpy(p2, ra, 6);
408         memcpy(p2 + 6, ia, 6);
409         memset(p2 + 12, 0, 4);
410
411         /* res = r XOR p1 */
412         u128_xor((u128 *) res, (u128 *) r, (u128 *) p1);
413
414         /* res = e(k, res) */
415         err = smp_e(tfm_aes, k, res);
416         if (err) {
417                 BT_ERR("Encrypt data error");
418                 return err;
419         }
420
421         /* res = res XOR p2 */
422         u128_xor((u128 *) res, (u128 *) res, (u128 *) p2);
423
424         /* res = e(k, res) */
425         err = smp_e(tfm_aes, k, res);
426         if (err)
427                 BT_ERR("Encrypt data error");
428
429         return err;
430 }
431
432 static int smp_s1(struct crypto_blkcipher *tfm_aes, const u8 k[16],
433                   const u8 r1[16], const u8 r2[16], u8 _r[16])
434 {
435         int err;
436
437         /* Just least significant octets from r1 and r2 are considered */
438         memcpy(_r, r2, 8);
439         memcpy(_r + 8, r1, 8);
440
441         err = smp_e(tfm_aes, k, _r);
442         if (err)
443                 BT_ERR("Encrypt data error");
444
445         return err;
446 }
447
448 static int smp_ah(struct crypto_blkcipher *tfm, const u8 irk[16],
449                   const u8 r[3], u8 res[3])
450 {
451         u8 _res[16];
452         int err;
453
454         /* r' = padding || r */
455         memcpy(_res, r, 3);
456         memset(_res + 3, 0, 13);
457
458         err = smp_e(tfm, irk, _res);
459         if (err) {
460                 BT_ERR("Encrypt error");
461                 return err;
462         }
463
464         /* The output of the random address function ah is:
465          *      ah(h, r) = e(k, r') mod 2^24
466          * The output of the security function e is then truncated to 24 bits
467          * by taking the least significant 24 bits of the output of e as the
468          * result of ah.
469          */
470         memcpy(res, _res, 3);
471
472         return 0;
473 }
474
475 bool smp_irk_matches(struct hci_dev *hdev, const u8 irk[16],
476                      const bdaddr_t *bdaddr)
477 {
478         struct l2cap_chan *chan = hdev->smp_data;
479         struct crypto_blkcipher *tfm;
480         u8 hash[3];
481         int err;
482
483         if (!chan || !chan->data)
484                 return false;
485
486         tfm = chan->data;
487
488         BT_DBG("RPA %pMR IRK %*phN", bdaddr, 16, irk);
489
490         err = smp_ah(tfm, irk, &bdaddr->b[3], hash);
491         if (err)
492                 return false;
493
494         return !memcmp(bdaddr->b, hash, 3);
495 }
496
497 int smp_generate_rpa(struct hci_dev *hdev, const u8 irk[16], bdaddr_t *rpa)
498 {
499         struct l2cap_chan *chan = hdev->smp_data;
500         struct crypto_blkcipher *tfm;
501         int err;
502
503         if (!chan || !chan->data)
504                 return -EOPNOTSUPP;
505
506         tfm = chan->data;
507
508         get_random_bytes(&rpa->b[3], 3);
509
510         rpa->b[5] &= 0x3f;      /* Clear two most significant bits */
511         rpa->b[5] |= 0x40;      /* Set second most significant bit */
512
513         err = smp_ah(tfm, irk, &rpa->b[3], rpa->b);
514         if (err < 0)
515                 return err;
516
517         BT_DBG("RPA %pMR", rpa);
518
519         return 0;
520 }
521
522 static void smp_send_cmd(struct l2cap_conn *conn, u8 code, u16 len, void *data)
523 {
524         struct l2cap_chan *chan = conn->smp;
525         struct smp_chan *smp;
526         struct kvec iv[2];
527         struct msghdr msg;
528
529         if (!chan)
530                 return;
531
532         BT_DBG("code 0x%2.2x", code);
533
534         iv[0].iov_base = &code;
535         iv[0].iov_len = 1;
536
537         iv[1].iov_base = data;
538         iv[1].iov_len = len;
539
540         memset(&msg, 0, sizeof(msg));
541
542         iov_iter_kvec(&msg.msg_iter, WRITE | ITER_KVEC, iv, 2, 1 + len);
543
544         l2cap_chan_send(chan, &msg, 1 + len);
545
546         if (!chan->data)
547                 return;
548
549         smp = chan->data;
550
551         cancel_delayed_work_sync(&smp->security_timer);
552         schedule_delayed_work(&smp->security_timer, SMP_TIMEOUT);
553 }
554
555 static u8 authreq_to_seclevel(u8 authreq)
556 {
557         if (authreq & SMP_AUTH_MITM) {
558                 if (authreq & SMP_AUTH_SC)
559                         return BT_SECURITY_FIPS;
560                 else
561                         return BT_SECURITY_HIGH;
562         } else {
563                 return BT_SECURITY_MEDIUM;
564         }
565 }
566
567 static __u8 seclevel_to_authreq(__u8 sec_level)
568 {
569         switch (sec_level) {
570         case BT_SECURITY_FIPS:
571         case BT_SECURITY_HIGH:
572                 return SMP_AUTH_MITM | SMP_AUTH_BONDING;
573         case BT_SECURITY_MEDIUM:
574                 return SMP_AUTH_BONDING;
575         default:
576                 return SMP_AUTH_NONE;
577         }
578 }
579
580 static void build_pairing_cmd(struct l2cap_conn *conn,
581                               struct smp_cmd_pairing *req,
582                               struct smp_cmd_pairing *rsp, __u8 authreq)
583 {
584         struct l2cap_chan *chan = conn->smp;
585         struct smp_chan *smp = chan->data;
586         struct hci_conn *hcon = conn->hcon;
587         struct hci_dev *hdev = hcon->hdev;
588         u8 local_dist = 0, remote_dist = 0, oob_flag = SMP_OOB_NOT_PRESENT;
589
590         if (test_bit(HCI_BONDABLE, &conn->hcon->hdev->dev_flags)) {
591                 local_dist = SMP_DIST_ENC_KEY | SMP_DIST_SIGN;
592                 remote_dist = SMP_DIST_ENC_KEY | SMP_DIST_SIGN;
593                 authreq |= SMP_AUTH_BONDING;
594         } else {
595                 authreq &= ~SMP_AUTH_BONDING;
596         }
597
598         if (test_bit(HCI_RPA_RESOLVING, &hdev->dev_flags))
599                 remote_dist |= SMP_DIST_ID_KEY;
600
601         if (test_bit(HCI_PRIVACY, &hdev->dev_flags))
602                 local_dist |= SMP_DIST_ID_KEY;
603
604         if (test_bit(HCI_SC_ENABLED, &hdev->dev_flags) &&
605             (authreq & SMP_AUTH_SC)) {
606                 struct oob_data *oob_data;
607                 u8 bdaddr_type;
608
609                 if (test_bit(HCI_SSP_ENABLED, &hdev->dev_flags)) {
610                         local_dist |= SMP_DIST_LINK_KEY;
611                         remote_dist |= SMP_DIST_LINK_KEY;
612                 }
613
614                 if (hcon->dst_type == ADDR_LE_DEV_PUBLIC)
615                         bdaddr_type = BDADDR_LE_PUBLIC;
616                 else
617                         bdaddr_type = BDADDR_LE_RANDOM;
618
619                 oob_data = hci_find_remote_oob_data(hdev, &hcon->dst,
620                                                     bdaddr_type);
621                 if (oob_data) {
622                         set_bit(SMP_FLAG_OOB, &smp->flags);
623                         oob_flag = SMP_OOB_PRESENT;
624                         memcpy(smp->rr, oob_data->rand256, 16);
625                         memcpy(smp->pcnf, oob_data->hash256, 16);
626                 }
627
628         } else {
629                 authreq &= ~SMP_AUTH_SC;
630         }
631
632         if (rsp == NULL) {
633                 req->io_capability = conn->hcon->io_capability;
634                 req->oob_flag = oob_flag;
635                 req->max_key_size = SMP_MAX_ENC_KEY_SIZE;
636                 req->init_key_dist = local_dist;
637                 req->resp_key_dist = remote_dist;
638                 req->auth_req = (authreq & AUTH_REQ_MASK(hdev));
639
640                 smp->remote_key_dist = remote_dist;
641                 return;
642         }
643
644         rsp->io_capability = conn->hcon->io_capability;
645         rsp->oob_flag = oob_flag;
646         rsp->max_key_size = SMP_MAX_ENC_KEY_SIZE;
647         rsp->init_key_dist = req->init_key_dist & remote_dist;
648         rsp->resp_key_dist = req->resp_key_dist & local_dist;
649         rsp->auth_req = (authreq & AUTH_REQ_MASK(hdev));
650
651         smp->remote_key_dist = rsp->init_key_dist;
652 }
653
654 static u8 check_enc_key_size(struct l2cap_conn *conn, __u8 max_key_size)
655 {
656         struct l2cap_chan *chan = conn->smp;
657         struct smp_chan *smp = chan->data;
658
659         if ((max_key_size > SMP_MAX_ENC_KEY_SIZE) ||
660             (max_key_size < SMP_MIN_ENC_KEY_SIZE))
661                 return SMP_ENC_KEY_SIZE;
662
663         smp->enc_key_size = max_key_size;
664
665         return 0;
666 }
667
668 static void smp_chan_destroy(struct l2cap_conn *conn)
669 {
670         struct l2cap_chan *chan = conn->smp;
671         struct smp_chan *smp = chan->data;
672         struct hci_conn *hcon = conn->hcon;
673         bool complete;
674
675         BUG_ON(!smp);
676
677         cancel_delayed_work_sync(&smp->security_timer);
678
679         complete = test_bit(SMP_FLAG_COMPLETE, &smp->flags);
680         mgmt_smp_complete(hcon, complete);
681
682         kfree(smp->csrk);
683         kfree(smp->slave_csrk);
684         kfree(smp->link_key);
685
686         crypto_free_blkcipher(smp->tfm_aes);
687         crypto_free_hash(smp->tfm_cmac);
688
689         /* Ensure that we don't leave any debug key around if debug key
690          * support hasn't been explicitly enabled.
691          */
692         if (smp->ltk && smp->ltk->type == SMP_LTK_P256_DEBUG &&
693             !test_bit(HCI_KEEP_DEBUG_KEYS, &hcon->hdev->dev_flags)) {
694                 list_del_rcu(&smp->ltk->list);
695                 kfree_rcu(smp->ltk, rcu);
696                 smp->ltk = NULL;
697         }
698
699         /* If pairing failed clean up any keys we might have */
700         if (!complete) {
701                 if (smp->ltk) {
702                         list_del_rcu(&smp->ltk->list);
703                         kfree_rcu(smp->ltk, rcu);
704                 }
705
706                 if (smp->slave_ltk) {
707                         list_del_rcu(&smp->slave_ltk->list);
708                         kfree_rcu(smp->slave_ltk, rcu);
709                 }
710
711                 if (smp->remote_irk) {
712                         list_del_rcu(&smp->remote_irk->list);
713                         kfree_rcu(smp->remote_irk, rcu);
714                 }
715         }
716
717         chan->data = NULL;
718         kfree(smp);
719         hci_conn_drop(hcon);
720 }
721
722 static void smp_failure(struct l2cap_conn *conn, u8 reason)
723 {
724         struct hci_conn *hcon = conn->hcon;
725         struct l2cap_chan *chan = conn->smp;
726
727         if (reason)
728                 smp_send_cmd(conn, SMP_CMD_PAIRING_FAIL, sizeof(reason),
729                              &reason);
730
731         clear_bit(HCI_CONN_ENCRYPT_PEND, &hcon->flags);
732         mgmt_auth_failed(hcon, HCI_ERROR_AUTH_FAILURE);
733
734         if (chan->data)
735                 smp_chan_destroy(conn);
736 }
737
738 #define JUST_WORKS      0x00
739 #define JUST_CFM        0x01
740 #define REQ_PASSKEY     0x02
741 #define CFM_PASSKEY     0x03
742 #define REQ_OOB         0x04
743 #define DSP_PASSKEY     0x05
744 #define OVERLAP         0xFF
745
746 static const u8 gen_method[5][5] = {
747         { JUST_WORKS,  JUST_CFM,    REQ_PASSKEY, JUST_WORKS, REQ_PASSKEY },
748         { JUST_WORKS,  JUST_CFM,    REQ_PASSKEY, JUST_WORKS, REQ_PASSKEY },
749         { CFM_PASSKEY, CFM_PASSKEY, REQ_PASSKEY, JUST_WORKS, CFM_PASSKEY },
750         { JUST_WORKS,  JUST_CFM,    JUST_WORKS,  JUST_WORKS, JUST_CFM    },
751         { CFM_PASSKEY, CFM_PASSKEY, REQ_PASSKEY, JUST_WORKS, OVERLAP     },
752 };
753
754 static const u8 sc_method[5][5] = {
755         { JUST_WORKS,  JUST_CFM,    REQ_PASSKEY, JUST_WORKS, REQ_PASSKEY },
756         { JUST_WORKS,  CFM_PASSKEY, REQ_PASSKEY, JUST_WORKS, CFM_PASSKEY },
757         { DSP_PASSKEY, DSP_PASSKEY, REQ_PASSKEY, JUST_WORKS, DSP_PASSKEY },
758         { JUST_WORKS,  JUST_CFM,    JUST_WORKS,  JUST_WORKS, JUST_CFM    },
759         { DSP_PASSKEY, CFM_PASSKEY, REQ_PASSKEY, JUST_WORKS, CFM_PASSKEY },
760 };
761
762 static u8 get_auth_method(struct smp_chan *smp, u8 local_io, u8 remote_io)
763 {
764         /* If either side has unknown io_caps, use JUST_CFM (which gets
765          * converted later to JUST_WORKS if we're initiators.
766          */
767         if (local_io > SMP_IO_KEYBOARD_DISPLAY ||
768             remote_io > SMP_IO_KEYBOARD_DISPLAY)
769                 return JUST_CFM;
770
771         if (test_bit(SMP_FLAG_SC, &smp->flags))
772                 return sc_method[remote_io][local_io];
773
774         return gen_method[remote_io][local_io];
775 }
776
777 static int tk_request(struct l2cap_conn *conn, u8 remote_oob, u8 auth,
778                                                 u8 local_io, u8 remote_io)
779 {
780         struct hci_conn *hcon = conn->hcon;
781         struct l2cap_chan *chan = conn->smp;
782         struct smp_chan *smp = chan->data;
783         u32 passkey = 0;
784         int ret = 0;
785
786         /* Initialize key for JUST WORKS */
787         memset(smp->tk, 0, sizeof(smp->tk));
788         clear_bit(SMP_FLAG_TK_VALID, &smp->flags);
789
790         BT_DBG("tk_request: auth:%d lcl:%d rem:%d", auth, local_io, remote_io);
791
792         /* If neither side wants MITM, either "just" confirm an incoming
793          * request or use just-works for outgoing ones. The JUST_CFM
794          * will be converted to JUST_WORKS if necessary later in this
795          * function. If either side has MITM look up the method from the
796          * table.
797          */
798         if (!(auth & SMP_AUTH_MITM))
799                 smp->method = JUST_CFM;
800         else
801                 smp->method = get_auth_method(smp, local_io, remote_io);
802
803         /* Don't confirm locally initiated pairing attempts */
804         if (smp->method == JUST_CFM && test_bit(SMP_FLAG_INITIATOR,
805                                                 &smp->flags))
806                 smp->method = JUST_WORKS;
807
808         /* Don't bother user space with no IO capabilities */
809         if (smp->method == JUST_CFM &&
810             hcon->io_capability == HCI_IO_NO_INPUT_OUTPUT)
811                 smp->method = JUST_WORKS;
812
813         /* If Just Works, Continue with Zero TK */
814         if (smp->method == JUST_WORKS) {
815                 set_bit(SMP_FLAG_TK_VALID, &smp->flags);
816                 return 0;
817         }
818
819         /* Not Just Works/Confirm results in MITM Authentication */
820         if (smp->method != JUST_CFM) {
821                 set_bit(SMP_FLAG_MITM_AUTH, &smp->flags);
822                 if (hcon->pending_sec_level < BT_SECURITY_HIGH)
823                         hcon->pending_sec_level = BT_SECURITY_HIGH;
824         }
825
826         /* If both devices have Keyoard-Display I/O, the master
827          * Confirms and the slave Enters the passkey.
828          */
829         if (smp->method == OVERLAP) {
830                 if (hcon->role == HCI_ROLE_MASTER)
831                         smp->method = CFM_PASSKEY;
832                 else
833                         smp->method = REQ_PASSKEY;
834         }
835
836         /* Generate random passkey. */
837         if (smp->method == CFM_PASSKEY) {
838                 memset(smp->tk, 0, sizeof(smp->tk));
839                 get_random_bytes(&passkey, sizeof(passkey));
840                 passkey %= 1000000;
841                 put_unaligned_le32(passkey, smp->tk);
842                 BT_DBG("PassKey: %d", passkey);
843                 set_bit(SMP_FLAG_TK_VALID, &smp->flags);
844         }
845
846         if (smp->method == REQ_PASSKEY)
847                 ret = mgmt_user_passkey_request(hcon->hdev, &hcon->dst,
848                                                 hcon->type, hcon->dst_type);
849         else if (smp->method == JUST_CFM)
850                 ret = mgmt_user_confirm_request(hcon->hdev, &hcon->dst,
851                                                 hcon->type, hcon->dst_type,
852                                                 passkey, 1);
853         else
854                 ret = mgmt_user_passkey_notify(hcon->hdev, &hcon->dst,
855                                                 hcon->type, hcon->dst_type,
856                                                 passkey, 0);
857
858         return ret;
859 }
860
861 static u8 smp_confirm(struct smp_chan *smp)
862 {
863         struct l2cap_conn *conn = smp->conn;
864         struct smp_cmd_pairing_confirm cp;
865         int ret;
866
867         BT_DBG("conn %p", conn);
868
869         ret = smp_c1(smp->tfm_aes, smp->tk, smp->prnd, smp->preq, smp->prsp,
870                      conn->hcon->init_addr_type, &conn->hcon->init_addr,
871                      conn->hcon->resp_addr_type, &conn->hcon->resp_addr,
872                      cp.confirm_val);
873         if (ret)
874                 return SMP_UNSPECIFIED;
875
876         clear_bit(SMP_FLAG_CFM_PENDING, &smp->flags);
877
878         smp_send_cmd(smp->conn, SMP_CMD_PAIRING_CONFIRM, sizeof(cp), &cp);
879
880         if (conn->hcon->out)
881                 SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_CONFIRM);
882         else
883                 SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_RANDOM);
884
885         return 0;
886 }
887
888 static u8 smp_random(struct smp_chan *smp)
889 {
890         struct l2cap_conn *conn = smp->conn;
891         struct hci_conn *hcon = conn->hcon;
892         u8 confirm[16];
893         int ret;
894
895         if (IS_ERR_OR_NULL(smp->tfm_aes))
896                 return SMP_UNSPECIFIED;
897
898         BT_DBG("conn %p %s", conn, conn->hcon->out ? "master" : "slave");
899
900         ret = smp_c1(smp->tfm_aes, smp->tk, smp->rrnd, smp->preq, smp->prsp,
901                      hcon->init_addr_type, &hcon->init_addr,
902                      hcon->resp_addr_type, &hcon->resp_addr, confirm);
903         if (ret)
904                 return SMP_UNSPECIFIED;
905
906         if (memcmp(smp->pcnf, confirm, sizeof(smp->pcnf)) != 0) {
907                 BT_ERR("Pairing failed (confirmation values mismatch)");
908                 return SMP_CONFIRM_FAILED;
909         }
910
911         if (hcon->out) {
912                 u8 stk[16];
913                 __le64 rand = 0;
914                 __le16 ediv = 0;
915
916                 smp_s1(smp->tfm_aes, smp->tk, smp->rrnd, smp->prnd, stk);
917
918                 memset(stk + smp->enc_key_size, 0,
919                        SMP_MAX_ENC_KEY_SIZE - smp->enc_key_size);
920
921                 if (test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &hcon->flags))
922                         return SMP_UNSPECIFIED;
923
924                 hci_le_start_enc(hcon, ediv, rand, stk);
925                 hcon->enc_key_size = smp->enc_key_size;
926                 set_bit(HCI_CONN_STK_ENCRYPT, &hcon->flags);
927         } else {
928                 u8 stk[16], auth;
929                 __le64 rand = 0;
930                 __le16 ediv = 0;
931
932                 smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM, sizeof(smp->prnd),
933                              smp->prnd);
934
935                 smp_s1(smp->tfm_aes, smp->tk, smp->prnd, smp->rrnd, stk);
936
937                 memset(stk + smp->enc_key_size, 0,
938                        SMP_MAX_ENC_KEY_SIZE - smp->enc_key_size);
939
940                 if (hcon->pending_sec_level == BT_SECURITY_HIGH)
941                         auth = 1;
942                 else
943                         auth = 0;
944
945                 /* Even though there's no _SLAVE suffix this is the
946                  * slave STK we're adding for later lookup (the master
947                  * STK never needs to be stored).
948                  */
949                 hci_add_ltk(hcon->hdev, &hcon->dst, hcon->dst_type,
950                             SMP_STK, auth, stk, smp->enc_key_size, ediv, rand);
951         }
952
953         return 0;
954 }
955
956 static void smp_notify_keys(struct l2cap_conn *conn)
957 {
958         struct l2cap_chan *chan = conn->smp;
959         struct smp_chan *smp = chan->data;
960         struct hci_conn *hcon = conn->hcon;
961         struct hci_dev *hdev = hcon->hdev;
962         struct smp_cmd_pairing *req = (void *) &smp->preq[1];
963         struct smp_cmd_pairing *rsp = (void *) &smp->prsp[1];
964         bool persistent;
965
966         if (smp->remote_irk) {
967                 mgmt_new_irk(hdev, smp->remote_irk);
968                 /* Now that user space can be considered to know the
969                  * identity address track the connection based on it
970                  * from now on (assuming this is an LE link).
971                  */
972                 if (hcon->type == LE_LINK) {
973                         bacpy(&hcon->dst, &smp->remote_irk->bdaddr);
974                         hcon->dst_type = smp->remote_irk->addr_type;
975                         queue_work(hdev->workqueue, &conn->id_addr_update_work);
976                 }
977
978                 /* When receiving an indentity resolving key for
979                  * a remote device that does not use a resolvable
980                  * private address, just remove the key so that
981                  * it is possible to use the controller white
982                  * list for scanning.
983                  *
984                  * Userspace will have been told to not store
985                  * this key at this point. So it is safe to
986                  * just remove it.
987                  */
988                 if (!bacmp(&smp->remote_irk->rpa, BDADDR_ANY)) {
989                         list_del_rcu(&smp->remote_irk->list);
990                         kfree_rcu(smp->remote_irk, rcu);
991                         smp->remote_irk = NULL;
992                 }
993         }
994
995         if (hcon->type == ACL_LINK) {
996                 if (hcon->key_type == HCI_LK_DEBUG_COMBINATION)
997                         persistent = false;
998                 else
999                         persistent = !test_bit(HCI_CONN_FLUSH_KEY,
1000                                                &hcon->flags);
1001         } else {
1002                 /* The LTKs and CSRKs should be persistent only if both sides
1003                  * had the bonding bit set in their authentication requests.
1004                  */
1005                 persistent = !!((req->auth_req & rsp->auth_req) &
1006                                 SMP_AUTH_BONDING);
1007         }
1008
1009
1010         if (smp->csrk) {
1011                 smp->csrk->bdaddr_type = hcon->dst_type;
1012                 bacpy(&smp->csrk->bdaddr, &hcon->dst);
1013                 mgmt_new_csrk(hdev, smp->csrk, persistent);
1014         }
1015
1016         if (smp->slave_csrk) {
1017                 smp->slave_csrk->bdaddr_type = hcon->dst_type;
1018                 bacpy(&smp->slave_csrk->bdaddr, &hcon->dst);
1019                 mgmt_new_csrk(hdev, smp->slave_csrk, persistent);
1020         }
1021
1022         if (smp->ltk) {
1023                 smp->ltk->bdaddr_type = hcon->dst_type;
1024                 bacpy(&smp->ltk->bdaddr, &hcon->dst);
1025                 mgmt_new_ltk(hdev, smp->ltk, persistent);
1026         }
1027
1028         if (smp->slave_ltk) {
1029                 smp->slave_ltk->bdaddr_type = hcon->dst_type;
1030                 bacpy(&smp->slave_ltk->bdaddr, &hcon->dst);
1031                 mgmt_new_ltk(hdev, smp->slave_ltk, persistent);
1032         }
1033
1034         if (smp->link_key) {
1035                 struct link_key *key;
1036                 u8 type;
1037
1038                 if (test_bit(SMP_FLAG_DEBUG_KEY, &smp->flags))
1039                         type = HCI_LK_DEBUG_COMBINATION;
1040                 else if (hcon->sec_level == BT_SECURITY_FIPS)
1041                         type = HCI_LK_AUTH_COMBINATION_P256;
1042                 else
1043                         type = HCI_LK_UNAUTH_COMBINATION_P256;
1044
1045                 key = hci_add_link_key(hdev, smp->conn->hcon, &hcon->dst,
1046                                        smp->link_key, type, 0, &persistent);
1047                 if (key) {
1048                         mgmt_new_link_key(hdev, key, persistent);
1049
1050                         /* Don't keep debug keys around if the relevant
1051                          * flag is not set.
1052                          */
1053                         if (!test_bit(HCI_KEEP_DEBUG_KEYS, &hdev->dev_flags) &&
1054                             key->type == HCI_LK_DEBUG_COMBINATION) {
1055                                 list_del_rcu(&key->list);
1056                                 kfree_rcu(key, rcu);
1057                         }
1058                 }
1059         }
1060 }
1061
1062 static void sc_add_ltk(struct smp_chan *smp)
1063 {
1064         struct hci_conn *hcon = smp->conn->hcon;
1065         u8 key_type, auth;
1066
1067         if (test_bit(SMP_FLAG_DEBUG_KEY, &smp->flags))
1068                 key_type = SMP_LTK_P256_DEBUG;
1069         else
1070                 key_type = SMP_LTK_P256;
1071
1072         if (hcon->pending_sec_level == BT_SECURITY_FIPS)
1073                 auth = 1;
1074         else
1075                 auth = 0;
1076
1077         memset(smp->tk + smp->enc_key_size, 0,
1078                SMP_MAX_ENC_KEY_SIZE - smp->enc_key_size);
1079
1080         smp->ltk = hci_add_ltk(hcon->hdev, &hcon->dst, hcon->dst_type,
1081                                key_type, auth, smp->tk, smp->enc_key_size,
1082                                0, 0);
1083 }
1084
1085 static void sc_generate_link_key(struct smp_chan *smp)
1086 {
1087         /* These constants are as specified in the core specification.
1088          * In ASCII they spell out to 'tmp1' and 'lebr'.
1089          */
1090         const u8 tmp1[4] = { 0x31, 0x70, 0x6d, 0x74 };
1091         const u8 lebr[4] = { 0x72, 0x62, 0x65, 0x6c };
1092
1093         smp->link_key = kzalloc(16, GFP_KERNEL);
1094         if (!smp->link_key)
1095                 return;
1096
1097         if (smp_h6(smp->tfm_cmac, smp->tk, tmp1, smp->link_key)) {
1098                 kfree(smp->link_key);
1099                 smp->link_key = NULL;
1100                 return;
1101         }
1102
1103         if (smp_h6(smp->tfm_cmac, smp->link_key, lebr, smp->link_key)) {
1104                 kfree(smp->link_key);
1105                 smp->link_key = NULL;
1106                 return;
1107         }
1108 }
1109
1110 static void smp_allow_key_dist(struct smp_chan *smp)
1111 {
1112         /* Allow the first expected phase 3 PDU. The rest of the PDUs
1113          * will be allowed in each PDU handler to ensure we receive
1114          * them in the correct order.
1115          */
1116         if (smp->remote_key_dist & SMP_DIST_ENC_KEY)
1117                 SMP_ALLOW_CMD(smp, SMP_CMD_ENCRYPT_INFO);
1118         else if (smp->remote_key_dist & SMP_DIST_ID_KEY)
1119                 SMP_ALLOW_CMD(smp, SMP_CMD_IDENT_INFO);
1120         else if (smp->remote_key_dist & SMP_DIST_SIGN)
1121                 SMP_ALLOW_CMD(smp, SMP_CMD_SIGN_INFO);
1122 }
1123
1124 static void sc_generate_ltk(struct smp_chan *smp)
1125 {
1126         /* These constants are as specified in the core specification.
1127          * In ASCII they spell out to 'tmp2' and 'brle'.
1128          */
1129         const u8 tmp2[4] = { 0x32, 0x70, 0x6d, 0x74 };
1130         const u8 brle[4] = { 0x65, 0x6c, 0x72, 0x62 };
1131         struct hci_conn *hcon = smp->conn->hcon;
1132         struct hci_dev *hdev = hcon->hdev;
1133         struct link_key *key;
1134
1135         key = hci_find_link_key(hdev, &hcon->dst);
1136         if (!key) {
1137                 BT_ERR("%s No Link Key found to generate LTK", hdev->name);
1138                 return;
1139         }
1140
1141         if (key->type == HCI_LK_DEBUG_COMBINATION)
1142                 set_bit(SMP_FLAG_DEBUG_KEY, &smp->flags);
1143
1144         if (smp_h6(smp->tfm_cmac, key->val, tmp2, smp->tk))
1145                 return;
1146
1147         if (smp_h6(smp->tfm_cmac, smp->tk, brle, smp->tk))
1148                 return;
1149
1150         sc_add_ltk(smp);
1151 }
1152
1153 static void smp_distribute_keys(struct smp_chan *smp)
1154 {
1155         struct smp_cmd_pairing *req, *rsp;
1156         struct l2cap_conn *conn = smp->conn;
1157         struct hci_conn *hcon = conn->hcon;
1158         struct hci_dev *hdev = hcon->hdev;
1159         __u8 *keydist;
1160
1161         BT_DBG("conn %p", conn);
1162
1163         rsp = (void *) &smp->prsp[1];
1164
1165         /* The responder sends its keys first */
1166         if (hcon->out && (smp->remote_key_dist & KEY_DIST_MASK)) {
1167                 smp_allow_key_dist(smp);
1168                 return;
1169         }
1170
1171         req = (void *) &smp->preq[1];
1172
1173         if (hcon->out) {
1174                 keydist = &rsp->init_key_dist;
1175                 *keydist &= req->init_key_dist;
1176         } else {
1177                 keydist = &rsp->resp_key_dist;
1178                 *keydist &= req->resp_key_dist;
1179         }
1180
1181         if (test_bit(SMP_FLAG_SC, &smp->flags)) {
1182                 if (hcon->type == LE_LINK && (*keydist & SMP_DIST_LINK_KEY))
1183                         sc_generate_link_key(smp);
1184                 if (hcon->type == ACL_LINK && (*keydist & SMP_DIST_ENC_KEY))
1185                         sc_generate_ltk(smp);
1186
1187                 /* Clear the keys which are generated but not distributed */
1188                 *keydist &= ~SMP_SC_NO_DIST;
1189         }
1190
1191         BT_DBG("keydist 0x%x", *keydist);
1192
1193         if (*keydist & SMP_DIST_ENC_KEY) {
1194                 struct smp_cmd_encrypt_info enc;
1195                 struct smp_cmd_master_ident ident;
1196                 struct smp_ltk *ltk;
1197                 u8 authenticated;
1198                 __le16 ediv;
1199                 __le64 rand;
1200
1201                 get_random_bytes(enc.ltk, sizeof(enc.ltk));
1202                 get_random_bytes(&ediv, sizeof(ediv));
1203                 get_random_bytes(&rand, sizeof(rand));
1204
1205                 smp_send_cmd(conn, SMP_CMD_ENCRYPT_INFO, sizeof(enc), &enc);
1206
1207                 authenticated = hcon->sec_level == BT_SECURITY_HIGH;
1208                 ltk = hci_add_ltk(hdev, &hcon->dst, hcon->dst_type,
1209                                   SMP_LTK_SLAVE, authenticated, enc.ltk,
1210                                   smp->enc_key_size, ediv, rand);
1211                 smp->slave_ltk = ltk;
1212
1213                 ident.ediv = ediv;
1214                 ident.rand = rand;
1215
1216                 smp_send_cmd(conn, SMP_CMD_MASTER_IDENT, sizeof(ident), &ident);
1217
1218                 *keydist &= ~SMP_DIST_ENC_KEY;
1219         }
1220
1221         if (*keydist & SMP_DIST_ID_KEY) {
1222                 struct smp_cmd_ident_addr_info addrinfo;
1223                 struct smp_cmd_ident_info idinfo;
1224
1225                 memcpy(idinfo.irk, hdev->irk, sizeof(idinfo.irk));
1226
1227                 smp_send_cmd(conn, SMP_CMD_IDENT_INFO, sizeof(idinfo), &idinfo);
1228
1229                 /* The hci_conn contains the local identity address
1230                  * after the connection has been established.
1231                  *
1232                  * This is true even when the connection has been
1233                  * established using a resolvable random address.
1234                  */
1235                 bacpy(&addrinfo.bdaddr, &hcon->src);
1236                 addrinfo.addr_type = hcon->src_type;
1237
1238                 smp_send_cmd(conn, SMP_CMD_IDENT_ADDR_INFO, sizeof(addrinfo),
1239                              &addrinfo);
1240
1241                 *keydist &= ~SMP_DIST_ID_KEY;
1242         }
1243
1244         if (*keydist & SMP_DIST_SIGN) {
1245                 struct smp_cmd_sign_info sign;
1246                 struct smp_csrk *csrk;
1247
1248                 /* Generate a new random key */
1249                 get_random_bytes(sign.csrk, sizeof(sign.csrk));
1250
1251                 csrk = kzalloc(sizeof(*csrk), GFP_KERNEL);
1252                 if (csrk) {
1253                         csrk->master = 0x00;
1254                         memcpy(csrk->val, sign.csrk, sizeof(csrk->val));
1255                 }
1256                 smp->slave_csrk = csrk;
1257
1258                 smp_send_cmd(conn, SMP_CMD_SIGN_INFO, sizeof(sign), &sign);
1259
1260                 *keydist &= ~SMP_DIST_SIGN;
1261         }
1262
1263         /* If there are still keys to be received wait for them */
1264         if (smp->remote_key_dist & KEY_DIST_MASK) {
1265                 smp_allow_key_dist(smp);
1266                 return;
1267         }
1268
1269         set_bit(SMP_FLAG_COMPLETE, &smp->flags);
1270         smp_notify_keys(conn);
1271
1272         smp_chan_destroy(conn);
1273 }
1274
1275 static void smp_timeout(struct work_struct *work)
1276 {
1277         struct smp_chan *smp = container_of(work, struct smp_chan,
1278                                             security_timer.work);
1279         struct l2cap_conn *conn = smp->conn;
1280
1281         BT_DBG("conn %p", conn);
1282
1283         hci_disconnect(conn->hcon, HCI_ERROR_REMOTE_USER_TERM);
1284 }
1285
1286 static struct smp_chan *smp_chan_create(struct l2cap_conn *conn)
1287 {
1288         struct l2cap_chan *chan = conn->smp;
1289         struct smp_chan *smp;
1290
1291         smp = kzalloc(sizeof(*smp), GFP_ATOMIC);
1292         if (!smp)
1293                 return NULL;
1294
1295         smp->tfm_aes = crypto_alloc_blkcipher("ecb(aes)", 0, CRYPTO_ALG_ASYNC);
1296         if (IS_ERR(smp->tfm_aes)) {
1297                 BT_ERR("Unable to create ECB crypto context");
1298                 kfree(smp);
1299                 return NULL;
1300         }
1301
1302         smp->tfm_cmac = crypto_alloc_hash("cmac(aes)", 0, CRYPTO_ALG_ASYNC);
1303         if (IS_ERR(smp->tfm_cmac)) {
1304                 BT_ERR("Unable to create CMAC crypto context");
1305                 crypto_free_blkcipher(smp->tfm_aes);
1306                 kfree(smp);
1307                 return NULL;
1308         }
1309
1310         smp->conn = conn;
1311         chan->data = smp;
1312
1313         SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_FAIL);
1314
1315         INIT_DELAYED_WORK(&smp->security_timer, smp_timeout);
1316
1317         hci_conn_hold(conn->hcon);
1318
1319         return smp;
1320 }
1321
1322 static int sc_mackey_and_ltk(struct smp_chan *smp, u8 mackey[16], u8 ltk[16])
1323 {
1324         struct hci_conn *hcon = smp->conn->hcon;
1325         u8 *na, *nb, a[7], b[7];
1326
1327         if (hcon->out) {
1328                 na   = smp->prnd;
1329                 nb   = smp->rrnd;
1330         } else {
1331                 na   = smp->rrnd;
1332                 nb   = smp->prnd;
1333         }
1334
1335         memcpy(a, &hcon->init_addr, 6);
1336         memcpy(b, &hcon->resp_addr, 6);
1337         a[6] = hcon->init_addr_type;
1338         b[6] = hcon->resp_addr_type;
1339
1340         return smp_f5(smp->tfm_cmac, smp->dhkey, na, nb, a, b, mackey, ltk);
1341 }
1342
1343 static void sc_dhkey_check(struct smp_chan *smp)
1344 {
1345         struct hci_conn *hcon = smp->conn->hcon;
1346         struct smp_cmd_dhkey_check check;
1347         u8 a[7], b[7], *local_addr, *remote_addr;
1348         u8 io_cap[3], r[16];
1349
1350         memcpy(a, &hcon->init_addr, 6);
1351         memcpy(b, &hcon->resp_addr, 6);
1352         a[6] = hcon->init_addr_type;
1353         b[6] = hcon->resp_addr_type;
1354
1355         if (hcon->out) {
1356                 local_addr = a;
1357                 remote_addr = b;
1358                 memcpy(io_cap, &smp->preq[1], 3);
1359         } else {
1360                 local_addr = b;
1361                 remote_addr = a;
1362                 memcpy(io_cap, &smp->prsp[1], 3);
1363         }
1364
1365         memset(r, 0, sizeof(r));
1366
1367         if (smp->method == REQ_PASSKEY || smp->method == DSP_PASSKEY)
1368                 put_unaligned_le32(hcon->passkey_notify, r);
1369
1370         if (smp->method == REQ_OOB)
1371                 memcpy(r, smp->rr, 16);
1372
1373         smp_f6(smp->tfm_cmac, smp->mackey, smp->prnd, smp->rrnd, r, io_cap,
1374                local_addr, remote_addr, check.e);
1375
1376         smp_send_cmd(smp->conn, SMP_CMD_DHKEY_CHECK, sizeof(check), &check);
1377 }
1378
1379 static u8 sc_passkey_send_confirm(struct smp_chan *smp)
1380 {
1381         struct l2cap_conn *conn = smp->conn;
1382         struct hci_conn *hcon = conn->hcon;
1383         struct smp_cmd_pairing_confirm cfm;
1384         u8 r;
1385
1386         r = ((hcon->passkey_notify >> smp->passkey_round) & 0x01);
1387         r |= 0x80;
1388
1389         get_random_bytes(smp->prnd, sizeof(smp->prnd));
1390
1391         if (smp_f4(smp->tfm_cmac, smp->local_pk, smp->remote_pk, smp->prnd, r,
1392                    cfm.confirm_val))
1393                 return SMP_UNSPECIFIED;
1394
1395         smp_send_cmd(conn, SMP_CMD_PAIRING_CONFIRM, sizeof(cfm), &cfm);
1396
1397         return 0;
1398 }
1399
1400 static u8 sc_passkey_round(struct smp_chan *smp, u8 smp_op)
1401 {
1402         struct l2cap_conn *conn = smp->conn;
1403         struct hci_conn *hcon = conn->hcon;
1404         struct hci_dev *hdev = hcon->hdev;
1405         u8 cfm[16], r;
1406
1407         /* Ignore the PDU if we've already done 20 rounds (0 - 19) */
1408         if (smp->passkey_round >= 20)
1409                 return 0;
1410
1411         switch (smp_op) {
1412         case SMP_CMD_PAIRING_RANDOM:
1413                 r = ((hcon->passkey_notify >> smp->passkey_round) & 0x01);
1414                 r |= 0x80;
1415
1416                 if (smp_f4(smp->tfm_cmac, smp->remote_pk, smp->local_pk,
1417                            smp->rrnd, r, cfm))
1418                         return SMP_UNSPECIFIED;
1419
1420                 if (memcmp(smp->pcnf, cfm, 16))
1421                         return SMP_CONFIRM_FAILED;
1422
1423                 smp->passkey_round++;
1424
1425                 if (smp->passkey_round == 20) {
1426                         /* Generate MacKey and LTK */
1427                         if (sc_mackey_and_ltk(smp, smp->mackey, smp->tk))
1428                                 return SMP_UNSPECIFIED;
1429                 }
1430
1431                 /* The round is only complete when the initiator
1432                  * receives pairing random.
1433                  */
1434                 if (!hcon->out) {
1435                         smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM,
1436                                      sizeof(smp->prnd), smp->prnd);
1437                         if (smp->passkey_round == 20)
1438                                 SMP_ALLOW_CMD(smp, SMP_CMD_DHKEY_CHECK);
1439                         else
1440                                 SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_CONFIRM);
1441                         return 0;
1442                 }
1443
1444                 /* Start the next round */
1445                 if (smp->passkey_round != 20)
1446                         return sc_passkey_round(smp, 0);
1447
1448                 /* Passkey rounds are complete - start DHKey Check */
1449                 sc_dhkey_check(smp);
1450                 SMP_ALLOW_CMD(smp, SMP_CMD_DHKEY_CHECK);
1451
1452                 break;
1453
1454         case SMP_CMD_PAIRING_CONFIRM:
1455                 if (test_bit(SMP_FLAG_WAIT_USER, &smp->flags)) {
1456                         set_bit(SMP_FLAG_CFM_PENDING, &smp->flags);
1457                         return 0;
1458                 }
1459
1460                 SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_RANDOM);
1461
1462                 if (hcon->out) {
1463                         smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM,
1464                                      sizeof(smp->prnd), smp->prnd);
1465                         return 0;
1466                 }
1467
1468                 return sc_passkey_send_confirm(smp);
1469
1470         case SMP_CMD_PUBLIC_KEY:
1471         default:
1472                 /* Initiating device starts the round */
1473                 if (!hcon->out)
1474                         return 0;
1475
1476                 BT_DBG("%s Starting passkey round %u", hdev->name,
1477                        smp->passkey_round + 1);
1478
1479                 SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_CONFIRM);
1480
1481                 return sc_passkey_send_confirm(smp);
1482         }
1483
1484         return 0;
1485 }
1486
1487 static int sc_user_reply(struct smp_chan *smp, u16 mgmt_op, __le32 passkey)
1488 {
1489         struct l2cap_conn *conn = smp->conn;
1490         struct hci_conn *hcon = conn->hcon;
1491         u8 smp_op;
1492
1493         clear_bit(SMP_FLAG_WAIT_USER, &smp->flags);
1494
1495         switch (mgmt_op) {
1496         case MGMT_OP_USER_PASSKEY_NEG_REPLY:
1497                 smp_failure(smp->conn, SMP_PASSKEY_ENTRY_FAILED);
1498                 return 0;
1499         case MGMT_OP_USER_CONFIRM_NEG_REPLY:
1500                 smp_failure(smp->conn, SMP_NUMERIC_COMP_FAILED);
1501                 return 0;
1502         case MGMT_OP_USER_PASSKEY_REPLY:
1503                 hcon->passkey_notify = le32_to_cpu(passkey);
1504                 smp->passkey_round = 0;
1505
1506                 if (test_and_clear_bit(SMP_FLAG_CFM_PENDING, &smp->flags))
1507                         smp_op = SMP_CMD_PAIRING_CONFIRM;
1508                 else
1509                         smp_op = 0;
1510
1511                 if (sc_passkey_round(smp, smp_op))
1512                         return -EIO;
1513
1514                 return 0;
1515         }
1516
1517         /* Initiator sends DHKey check first */
1518         if (hcon->out) {
1519                 sc_dhkey_check(smp);
1520                 SMP_ALLOW_CMD(smp, SMP_CMD_DHKEY_CHECK);
1521         } else if (test_and_clear_bit(SMP_FLAG_DHKEY_PENDING, &smp->flags)) {
1522                 sc_dhkey_check(smp);
1523                 sc_add_ltk(smp);
1524         }
1525
1526         return 0;
1527 }
1528
1529 int smp_user_confirm_reply(struct hci_conn *hcon, u16 mgmt_op, __le32 passkey)
1530 {
1531         struct l2cap_conn *conn = hcon->l2cap_data;
1532         struct l2cap_chan *chan;
1533         struct smp_chan *smp;
1534         u32 value;
1535         int err;
1536
1537         BT_DBG("");
1538
1539         if (!conn)
1540                 return -ENOTCONN;
1541
1542         chan = conn->smp;
1543         if (!chan)
1544                 return -ENOTCONN;
1545
1546         l2cap_chan_lock(chan);
1547         if (!chan->data) {
1548                 err = -ENOTCONN;
1549                 goto unlock;
1550         }
1551
1552         smp = chan->data;
1553
1554         if (test_bit(SMP_FLAG_SC, &smp->flags)) {
1555                 err = sc_user_reply(smp, mgmt_op, passkey);
1556                 goto unlock;
1557         }
1558
1559         switch (mgmt_op) {
1560         case MGMT_OP_USER_PASSKEY_REPLY:
1561                 value = le32_to_cpu(passkey);
1562                 memset(smp->tk, 0, sizeof(smp->tk));
1563                 BT_DBG("PassKey: %d", value);
1564                 put_unaligned_le32(value, smp->tk);
1565                 /* Fall Through */
1566         case MGMT_OP_USER_CONFIRM_REPLY:
1567                 set_bit(SMP_FLAG_TK_VALID, &smp->flags);
1568                 break;
1569         case MGMT_OP_USER_PASSKEY_NEG_REPLY:
1570         case MGMT_OP_USER_CONFIRM_NEG_REPLY:
1571                 smp_failure(conn, SMP_PASSKEY_ENTRY_FAILED);
1572                 err = 0;
1573                 goto unlock;
1574         default:
1575                 smp_failure(conn, SMP_PASSKEY_ENTRY_FAILED);
1576                 err = -EOPNOTSUPP;
1577                 goto unlock;
1578         }
1579
1580         err = 0;
1581
1582         /* If it is our turn to send Pairing Confirm, do so now */
1583         if (test_bit(SMP_FLAG_CFM_PENDING, &smp->flags)) {
1584                 u8 rsp = smp_confirm(smp);
1585                 if (rsp)
1586                         smp_failure(conn, rsp);
1587         }
1588
1589 unlock:
1590         l2cap_chan_unlock(chan);
1591         return err;
1592 }
1593
1594 static void build_bredr_pairing_cmd(struct smp_chan *smp,
1595                                     struct smp_cmd_pairing *req,
1596                                     struct smp_cmd_pairing *rsp)
1597 {
1598         struct l2cap_conn *conn = smp->conn;
1599         struct hci_dev *hdev = conn->hcon->hdev;
1600         u8 local_dist = 0, remote_dist = 0;
1601
1602         if (test_bit(HCI_BONDABLE, &hdev->dev_flags)) {
1603                 local_dist = SMP_DIST_ENC_KEY | SMP_DIST_SIGN;
1604                 remote_dist = SMP_DIST_ENC_KEY | SMP_DIST_SIGN;
1605         }
1606
1607         if (test_bit(HCI_RPA_RESOLVING, &hdev->dev_flags))
1608                 remote_dist |= SMP_DIST_ID_KEY;
1609
1610         if (test_bit(HCI_PRIVACY, &hdev->dev_flags))
1611                 local_dist |= SMP_DIST_ID_KEY;
1612
1613         if (!rsp) {
1614                 memset(req, 0, sizeof(*req));
1615
1616                 req->init_key_dist   = local_dist;
1617                 req->resp_key_dist   = remote_dist;
1618                 req->max_key_size    = SMP_MAX_ENC_KEY_SIZE;
1619
1620                 smp->remote_key_dist = remote_dist;
1621
1622                 return;
1623         }
1624
1625         memset(rsp, 0, sizeof(*rsp));
1626
1627         rsp->max_key_size    = SMP_MAX_ENC_KEY_SIZE;
1628         rsp->init_key_dist   = req->init_key_dist & remote_dist;
1629         rsp->resp_key_dist   = req->resp_key_dist & local_dist;
1630
1631         smp->remote_key_dist = rsp->init_key_dist;
1632 }
1633
1634 static u8 smp_cmd_pairing_req(struct l2cap_conn *conn, struct sk_buff *skb)
1635 {
1636         struct smp_cmd_pairing rsp, *req = (void *) skb->data;
1637         struct l2cap_chan *chan = conn->smp;
1638         struct hci_dev *hdev = conn->hcon->hdev;
1639         struct smp_chan *smp;
1640         u8 key_size, auth, sec_level;
1641         int ret;
1642
1643         BT_DBG("conn %p", conn);
1644
1645         if (skb->len < sizeof(*req))
1646                 return SMP_INVALID_PARAMS;
1647
1648         if (conn->hcon->role != HCI_ROLE_SLAVE)
1649                 return SMP_CMD_NOTSUPP;
1650
1651         if (!chan->data)
1652                 smp = smp_chan_create(conn);
1653         else
1654                 smp = chan->data;
1655
1656         if (!smp)
1657                 return SMP_UNSPECIFIED;
1658
1659         /* We didn't start the pairing, so match remote */
1660         auth = req->auth_req & AUTH_REQ_MASK(hdev);
1661
1662         if (!test_bit(HCI_BONDABLE, &hdev->dev_flags) &&
1663             (auth & SMP_AUTH_BONDING))
1664                 return SMP_PAIRING_NOTSUPP;
1665
1666         if (test_bit(HCI_SC_ONLY, &hdev->dev_flags) && !(auth & SMP_AUTH_SC))
1667                 return SMP_AUTH_REQUIREMENTS;
1668
1669         smp->preq[0] = SMP_CMD_PAIRING_REQ;
1670         memcpy(&smp->preq[1], req, sizeof(*req));
1671         skb_pull(skb, sizeof(*req));
1672
1673         /* SMP over BR/EDR requires special treatment */
1674         if (conn->hcon->type == ACL_LINK) {
1675                 /* We must have a BR/EDR SC link */
1676                 if (!test_bit(HCI_CONN_AES_CCM, &conn->hcon->flags))
1677                         return SMP_CROSS_TRANSP_NOT_ALLOWED;
1678
1679                 set_bit(SMP_FLAG_SC, &smp->flags);
1680
1681                 build_bredr_pairing_cmd(smp, req, &rsp);
1682
1683                 key_size = min(req->max_key_size, rsp.max_key_size);
1684                 if (check_enc_key_size(conn, key_size))
1685                         return SMP_ENC_KEY_SIZE;
1686
1687                 /* Clear bits which are generated but not distributed */
1688                 smp->remote_key_dist &= ~SMP_SC_NO_DIST;
1689
1690                 smp->prsp[0] = SMP_CMD_PAIRING_RSP;
1691                 memcpy(&smp->prsp[1], &rsp, sizeof(rsp));
1692                 smp_send_cmd(conn, SMP_CMD_PAIRING_RSP, sizeof(rsp), &rsp);
1693
1694                 smp_distribute_keys(smp);
1695                 return 0;
1696         }
1697
1698         build_pairing_cmd(conn, req, &rsp, auth);
1699
1700         if (rsp.auth_req & SMP_AUTH_SC)
1701                 set_bit(SMP_FLAG_SC, &smp->flags);
1702
1703         if (conn->hcon->io_capability == HCI_IO_NO_INPUT_OUTPUT)
1704                 sec_level = BT_SECURITY_MEDIUM;
1705         else
1706                 sec_level = authreq_to_seclevel(auth);
1707
1708         if (sec_level > conn->hcon->pending_sec_level)
1709                 conn->hcon->pending_sec_level = sec_level;
1710
1711         /* If we need MITM check that it can be achieved */
1712         if (conn->hcon->pending_sec_level >= BT_SECURITY_HIGH) {
1713                 u8 method;
1714
1715                 method = get_auth_method(smp, conn->hcon->io_capability,
1716                                          req->io_capability);
1717                 if (method == JUST_WORKS || method == JUST_CFM)
1718                         return SMP_AUTH_REQUIREMENTS;
1719         }
1720
1721         key_size = min(req->max_key_size, rsp.max_key_size);
1722         if (check_enc_key_size(conn, key_size))
1723                 return SMP_ENC_KEY_SIZE;
1724
1725         get_random_bytes(smp->prnd, sizeof(smp->prnd));
1726
1727         smp->prsp[0] = SMP_CMD_PAIRING_RSP;
1728         memcpy(&smp->prsp[1], &rsp, sizeof(rsp));
1729
1730         smp_send_cmd(conn, SMP_CMD_PAIRING_RSP, sizeof(rsp), &rsp);
1731
1732         clear_bit(SMP_FLAG_INITIATOR, &smp->flags);
1733
1734         if (test_bit(SMP_FLAG_SC, &smp->flags)) {
1735                 SMP_ALLOW_CMD(smp, SMP_CMD_PUBLIC_KEY);
1736                 /* Clear bits which are generated but not distributed */
1737                 smp->remote_key_dist &= ~SMP_SC_NO_DIST;
1738                 /* Wait for Public Key from Initiating Device */
1739                 return 0;
1740         } else {
1741                 SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_CONFIRM);
1742         }
1743
1744         /* Request setup of TK */
1745         ret = tk_request(conn, 0, auth, rsp.io_capability, req->io_capability);
1746         if (ret)
1747                 return SMP_UNSPECIFIED;
1748
1749         return 0;
1750 }
1751
1752 static u8 sc_send_public_key(struct smp_chan *smp)
1753 {
1754         struct hci_dev *hdev = smp->conn->hcon->hdev;
1755
1756         BT_DBG("");
1757
1758         if (test_bit(HCI_USE_DEBUG_KEYS, &hdev->dev_flags)) {
1759                 BT_DBG("Using debug keys");
1760                 memcpy(smp->local_pk, debug_pk, 64);
1761                 memcpy(smp->local_sk, debug_sk, 32);
1762                 set_bit(SMP_FLAG_DEBUG_KEY, &smp->flags);
1763         } else {
1764                 while (true) {
1765                         /* Generate local key pair for Secure Connections */
1766                         if (!ecc_make_key(smp->local_pk, smp->local_sk))
1767                                 return SMP_UNSPECIFIED;
1768
1769                         /* This is unlikely, but we need to check that
1770                          * we didn't accidentially generate a debug key.
1771                          */
1772                         if (memcmp(smp->local_sk, debug_sk, 32))
1773                                 break;
1774                 }
1775         }
1776
1777         SMP_DBG("Local Public Key X: %32phN", smp->local_pk);
1778         SMP_DBG("Local Public Key Y: %32phN", &smp->local_pk[32]);
1779         SMP_DBG("Local Private Key:  %32phN", smp->local_sk);
1780
1781         smp_send_cmd(smp->conn, SMP_CMD_PUBLIC_KEY, 64, smp->local_pk);
1782
1783         return 0;
1784 }
1785
1786 static u8 smp_cmd_pairing_rsp(struct l2cap_conn *conn, struct sk_buff *skb)
1787 {
1788         struct smp_cmd_pairing *req, *rsp = (void *) skb->data;
1789         struct l2cap_chan *chan = conn->smp;
1790         struct smp_chan *smp = chan->data;
1791         struct hci_dev *hdev = conn->hcon->hdev;
1792         u8 key_size, auth;
1793         int ret;
1794
1795         BT_DBG("conn %p", conn);
1796
1797         if (skb->len < sizeof(*rsp))
1798                 return SMP_INVALID_PARAMS;
1799
1800         if (conn->hcon->role != HCI_ROLE_MASTER)
1801                 return SMP_CMD_NOTSUPP;
1802
1803         skb_pull(skb, sizeof(*rsp));
1804
1805         req = (void *) &smp->preq[1];
1806
1807         key_size = min(req->max_key_size, rsp->max_key_size);
1808         if (check_enc_key_size(conn, key_size))
1809                 return SMP_ENC_KEY_SIZE;
1810
1811         auth = rsp->auth_req & AUTH_REQ_MASK(hdev);
1812
1813         if (test_bit(HCI_SC_ONLY, &hdev->dev_flags) && !(auth & SMP_AUTH_SC))
1814                 return SMP_AUTH_REQUIREMENTS;
1815
1816         smp->prsp[0] = SMP_CMD_PAIRING_RSP;
1817         memcpy(&smp->prsp[1], rsp, sizeof(*rsp));
1818
1819         /* Update remote key distribution in case the remote cleared
1820          * some bits that we had enabled in our request.
1821          */
1822         smp->remote_key_dist &= rsp->resp_key_dist;
1823
1824         /* For BR/EDR this means we're done and can start phase 3 */
1825         if (conn->hcon->type == ACL_LINK) {
1826                 /* Clear bits which are generated but not distributed */
1827                 smp->remote_key_dist &= ~SMP_SC_NO_DIST;
1828                 smp_distribute_keys(smp);
1829                 return 0;
1830         }
1831
1832         if ((req->auth_req & SMP_AUTH_SC) && (auth & SMP_AUTH_SC))
1833                 set_bit(SMP_FLAG_SC, &smp->flags);
1834         else if (conn->hcon->pending_sec_level > BT_SECURITY_HIGH)
1835                 conn->hcon->pending_sec_level = BT_SECURITY_HIGH;
1836
1837         /* If we need MITM check that it can be achieved */
1838         if (conn->hcon->pending_sec_level >= BT_SECURITY_HIGH) {
1839                 u8 method;
1840
1841                 method = get_auth_method(smp, req->io_capability,
1842                                          rsp->io_capability);
1843                 if (method == JUST_WORKS || method == JUST_CFM)
1844                         return SMP_AUTH_REQUIREMENTS;
1845         }
1846
1847         get_random_bytes(smp->prnd, sizeof(smp->prnd));
1848
1849         /* Update remote key distribution in case the remote cleared
1850          * some bits that we had enabled in our request.
1851          */
1852         smp->remote_key_dist &= rsp->resp_key_dist;
1853
1854         if (test_bit(SMP_FLAG_SC, &smp->flags)) {
1855                 /* Clear bits which are generated but not distributed */
1856                 smp->remote_key_dist &= ~SMP_SC_NO_DIST;
1857                 SMP_ALLOW_CMD(smp, SMP_CMD_PUBLIC_KEY);
1858                 return sc_send_public_key(smp);
1859         }
1860
1861         auth |= req->auth_req;
1862
1863         ret = tk_request(conn, 0, auth, req->io_capability, rsp->io_capability);
1864         if (ret)
1865                 return SMP_UNSPECIFIED;
1866
1867         set_bit(SMP_FLAG_CFM_PENDING, &smp->flags);
1868
1869         /* Can't compose response until we have been confirmed */
1870         if (test_bit(SMP_FLAG_TK_VALID, &smp->flags))
1871                 return smp_confirm(smp);
1872
1873         return 0;
1874 }
1875
1876 static u8 sc_check_confirm(struct smp_chan *smp)
1877 {
1878         struct l2cap_conn *conn = smp->conn;
1879
1880         BT_DBG("");
1881
1882         /* Public Key exchange must happen before any other steps */
1883         if (!test_bit(SMP_FLAG_REMOTE_PK, &smp->flags))
1884                 return SMP_UNSPECIFIED;
1885
1886         if (smp->method == REQ_PASSKEY || smp->method == DSP_PASSKEY)
1887                 return sc_passkey_round(smp, SMP_CMD_PAIRING_CONFIRM);
1888
1889         if (conn->hcon->out) {
1890                 smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM, sizeof(smp->prnd),
1891                              smp->prnd);
1892                 SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_RANDOM);
1893         }
1894
1895         return 0;
1896 }
1897
1898 static u8 smp_cmd_pairing_confirm(struct l2cap_conn *conn, struct sk_buff *skb)
1899 {
1900         struct l2cap_chan *chan = conn->smp;
1901         struct smp_chan *smp = chan->data;
1902
1903         BT_DBG("conn %p %s", conn, conn->hcon->out ? "master" : "slave");
1904
1905         if (skb->len < sizeof(smp->pcnf))
1906                 return SMP_INVALID_PARAMS;
1907
1908         memcpy(smp->pcnf, skb->data, sizeof(smp->pcnf));
1909         skb_pull(skb, sizeof(smp->pcnf));
1910
1911         if (test_bit(SMP_FLAG_SC, &smp->flags))
1912                 return sc_check_confirm(smp);
1913
1914         if (conn->hcon->out) {
1915                 smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM, sizeof(smp->prnd),
1916                              smp->prnd);
1917                 SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_RANDOM);
1918                 return 0;
1919         }
1920
1921         if (test_bit(SMP_FLAG_TK_VALID, &smp->flags))
1922                 return smp_confirm(smp);
1923         else
1924                 set_bit(SMP_FLAG_CFM_PENDING, &smp->flags);
1925
1926         return 0;
1927 }
1928
1929 static u8 smp_cmd_pairing_random(struct l2cap_conn *conn, struct sk_buff *skb)
1930 {
1931         struct l2cap_chan *chan = conn->smp;
1932         struct smp_chan *smp = chan->data;
1933         struct hci_conn *hcon = conn->hcon;
1934         u8 *pkax, *pkbx, *na, *nb;
1935         u32 passkey;
1936         int err;
1937
1938         BT_DBG("conn %p", conn);
1939
1940         if (skb->len < sizeof(smp->rrnd))
1941                 return SMP_INVALID_PARAMS;
1942
1943         memcpy(smp->rrnd, skb->data, sizeof(smp->rrnd));
1944         skb_pull(skb, sizeof(smp->rrnd));
1945
1946         if (!test_bit(SMP_FLAG_SC, &smp->flags))
1947                 return smp_random(smp);
1948
1949         if (hcon->out) {
1950                 pkax = smp->local_pk;
1951                 pkbx = smp->remote_pk;
1952                 na   = smp->prnd;
1953                 nb   = smp->rrnd;
1954         } else {
1955                 pkax = smp->remote_pk;
1956                 pkbx = smp->local_pk;
1957                 na   = smp->rrnd;
1958                 nb   = smp->prnd;
1959         }
1960
1961         if (smp->method == REQ_OOB) {
1962                 if (!hcon->out)
1963                         smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM,
1964                                      sizeof(smp->prnd), smp->prnd);
1965                 SMP_ALLOW_CMD(smp, SMP_CMD_DHKEY_CHECK);
1966                 goto mackey_and_ltk;
1967         }
1968
1969         /* Passkey entry has special treatment */
1970         if (smp->method == REQ_PASSKEY || smp->method == DSP_PASSKEY)
1971                 return sc_passkey_round(smp, SMP_CMD_PAIRING_RANDOM);
1972
1973         if (hcon->out) {
1974                 u8 cfm[16];
1975
1976                 err = smp_f4(smp->tfm_cmac, smp->remote_pk, smp->local_pk,
1977                              smp->rrnd, 0, cfm);
1978                 if (err)
1979                         return SMP_UNSPECIFIED;
1980
1981                 if (memcmp(smp->pcnf, cfm, 16))
1982                         return SMP_CONFIRM_FAILED;
1983         } else {
1984                 smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM, sizeof(smp->prnd),
1985                              smp->prnd);
1986                 SMP_ALLOW_CMD(smp, SMP_CMD_DHKEY_CHECK);
1987         }
1988
1989 mackey_and_ltk:
1990         /* Generate MacKey and LTK */
1991         err = sc_mackey_and_ltk(smp, smp->mackey, smp->tk);
1992         if (err)
1993                 return SMP_UNSPECIFIED;
1994
1995         if (smp->method == JUST_WORKS || smp->method == REQ_OOB) {
1996                 if (hcon->out) {
1997                         sc_dhkey_check(smp);
1998                         SMP_ALLOW_CMD(smp, SMP_CMD_DHKEY_CHECK);
1999                 }
2000                 return 0;
2001         }
2002
2003         err = smp_g2(smp->tfm_cmac, pkax, pkbx, na, nb, &passkey);
2004         if (err)
2005                 return SMP_UNSPECIFIED;
2006
2007         err = mgmt_user_confirm_request(hcon->hdev, &hcon->dst, hcon->type,
2008                                         hcon->dst_type, passkey, 0);
2009         if (err)
2010                 return SMP_UNSPECIFIED;
2011
2012         set_bit(SMP_FLAG_WAIT_USER, &smp->flags);
2013
2014         return 0;
2015 }
2016
2017 static bool smp_ltk_encrypt(struct l2cap_conn *conn, u8 sec_level)
2018 {
2019         struct smp_ltk *key;
2020         struct hci_conn *hcon = conn->hcon;
2021
2022         key = hci_find_ltk(hcon->hdev, &hcon->dst, hcon->dst_type, hcon->role);
2023         if (!key)
2024                 return false;
2025
2026         if (smp_ltk_sec_level(key) < sec_level)
2027                 return false;
2028
2029         if (test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &hcon->flags))
2030                 return true;
2031
2032         hci_le_start_enc(hcon, key->ediv, key->rand, key->val);
2033         hcon->enc_key_size = key->enc_size;
2034
2035         /* We never store STKs for master role, so clear this flag */
2036         clear_bit(HCI_CONN_STK_ENCRYPT, &hcon->flags);
2037
2038         return true;
2039 }
2040
2041 bool smp_sufficient_security(struct hci_conn *hcon, u8 sec_level,
2042                              enum smp_key_pref key_pref)
2043 {
2044         if (sec_level == BT_SECURITY_LOW)
2045                 return true;
2046
2047         /* If we're encrypted with an STK but the caller prefers using
2048          * LTK claim insufficient security. This way we allow the
2049          * connection to be re-encrypted with an LTK, even if the LTK
2050          * provides the same level of security. Only exception is if we
2051          * don't have an LTK (e.g. because of key distribution bits).
2052          */
2053         if (key_pref == SMP_USE_LTK &&
2054             test_bit(HCI_CONN_STK_ENCRYPT, &hcon->flags) &&
2055             hci_find_ltk(hcon->hdev, &hcon->dst, hcon->dst_type, hcon->role))
2056                 return false;
2057
2058         if (hcon->sec_level >= sec_level)
2059                 return true;
2060
2061         return false;
2062 }
2063
2064 static u8 smp_cmd_security_req(struct l2cap_conn *conn, struct sk_buff *skb)
2065 {
2066         struct smp_cmd_security_req *rp = (void *) skb->data;
2067         struct smp_cmd_pairing cp;
2068         struct hci_conn *hcon = conn->hcon;
2069         struct hci_dev *hdev = hcon->hdev;
2070         struct smp_chan *smp;
2071         u8 sec_level, auth;
2072
2073         BT_DBG("conn %p", conn);
2074
2075         if (skb->len < sizeof(*rp))
2076                 return SMP_INVALID_PARAMS;
2077
2078         if (hcon->role != HCI_ROLE_MASTER)
2079                 return SMP_CMD_NOTSUPP;
2080
2081         auth = rp->auth_req & AUTH_REQ_MASK(hdev);
2082
2083         if (test_bit(HCI_SC_ONLY, &hdev->dev_flags) && !(auth & SMP_AUTH_SC))
2084                 return SMP_AUTH_REQUIREMENTS;
2085
2086         if (hcon->io_capability == HCI_IO_NO_INPUT_OUTPUT)
2087                 sec_level = BT_SECURITY_MEDIUM;
2088         else
2089                 sec_level = authreq_to_seclevel(auth);
2090
2091         if (smp_sufficient_security(hcon, sec_level, SMP_USE_LTK))
2092                 return 0;
2093
2094         if (sec_level > hcon->pending_sec_level)
2095                 hcon->pending_sec_level = sec_level;
2096
2097         if (smp_ltk_encrypt(conn, hcon->pending_sec_level))
2098                 return 0;
2099
2100         smp = smp_chan_create(conn);
2101         if (!smp)
2102                 return SMP_UNSPECIFIED;
2103
2104         if (!test_bit(HCI_BONDABLE, &hcon->hdev->dev_flags) &&
2105             (auth & SMP_AUTH_BONDING))
2106                 return SMP_PAIRING_NOTSUPP;
2107
2108         skb_pull(skb, sizeof(*rp));
2109
2110         memset(&cp, 0, sizeof(cp));
2111         build_pairing_cmd(conn, &cp, NULL, auth);
2112
2113         smp->preq[0] = SMP_CMD_PAIRING_REQ;
2114         memcpy(&smp->preq[1], &cp, sizeof(cp));
2115
2116         smp_send_cmd(conn, SMP_CMD_PAIRING_REQ, sizeof(cp), &cp);
2117         SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_RSP);
2118
2119         return 0;
2120 }
2121
2122 int smp_conn_security(struct hci_conn *hcon, __u8 sec_level)
2123 {
2124         struct l2cap_conn *conn = hcon->l2cap_data;
2125         struct l2cap_chan *chan;
2126         struct smp_chan *smp;
2127         __u8 authreq;
2128         int ret;
2129
2130         BT_DBG("conn %p hcon %p level 0x%2.2x", conn, hcon, sec_level);
2131
2132         /* This may be NULL if there's an unexpected disconnection */
2133         if (!conn)
2134                 return 1;
2135
2136         chan = conn->smp;
2137
2138         if (!test_bit(HCI_LE_ENABLED, &hcon->hdev->dev_flags))
2139                 return 1;
2140
2141         if (smp_sufficient_security(hcon, sec_level, SMP_USE_LTK))
2142                 return 1;
2143
2144         if (sec_level > hcon->pending_sec_level)
2145                 hcon->pending_sec_level = sec_level;
2146
2147         if (hcon->role == HCI_ROLE_MASTER)
2148                 if (smp_ltk_encrypt(conn, hcon->pending_sec_level))
2149                         return 0;
2150
2151         l2cap_chan_lock(chan);
2152
2153         /* If SMP is already in progress ignore this request */
2154         if (chan->data) {
2155                 ret = 0;
2156                 goto unlock;
2157         }
2158
2159         smp = smp_chan_create(conn);
2160         if (!smp) {
2161                 ret = 1;
2162                 goto unlock;
2163         }
2164
2165         authreq = seclevel_to_authreq(sec_level);
2166
2167         if (test_bit(HCI_SC_ENABLED, &hcon->hdev->dev_flags))
2168                 authreq |= SMP_AUTH_SC;
2169
2170         /* Require MITM if IO Capability allows or the security level
2171          * requires it.
2172          */
2173         if (hcon->io_capability != HCI_IO_NO_INPUT_OUTPUT ||
2174             hcon->pending_sec_level > BT_SECURITY_MEDIUM)
2175                 authreq |= SMP_AUTH_MITM;
2176
2177         if (hcon->role == HCI_ROLE_MASTER) {
2178                 struct smp_cmd_pairing cp;
2179
2180                 build_pairing_cmd(conn, &cp, NULL, authreq);
2181                 smp->preq[0] = SMP_CMD_PAIRING_REQ;
2182                 memcpy(&smp->preq[1], &cp, sizeof(cp));
2183
2184                 smp_send_cmd(conn, SMP_CMD_PAIRING_REQ, sizeof(cp), &cp);
2185                 SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_RSP);
2186         } else {
2187                 struct smp_cmd_security_req cp;
2188                 cp.auth_req = authreq;
2189                 smp_send_cmd(conn, SMP_CMD_SECURITY_REQ, sizeof(cp), &cp);
2190                 SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_REQ);
2191         }
2192
2193         set_bit(SMP_FLAG_INITIATOR, &smp->flags);
2194         ret = 0;
2195
2196 unlock:
2197         l2cap_chan_unlock(chan);
2198         return ret;
2199 }
2200
2201 static int smp_cmd_encrypt_info(struct l2cap_conn *conn, struct sk_buff *skb)
2202 {
2203         struct smp_cmd_encrypt_info *rp = (void *) skb->data;
2204         struct l2cap_chan *chan = conn->smp;
2205         struct smp_chan *smp = chan->data;
2206
2207         BT_DBG("conn %p", conn);
2208
2209         if (skb->len < sizeof(*rp))
2210                 return SMP_INVALID_PARAMS;
2211
2212         SMP_ALLOW_CMD(smp, SMP_CMD_MASTER_IDENT);
2213
2214         skb_pull(skb, sizeof(*rp));
2215
2216         memcpy(smp->tk, rp->ltk, sizeof(smp->tk));
2217
2218         return 0;
2219 }
2220
2221 static int smp_cmd_master_ident(struct l2cap_conn *conn, struct sk_buff *skb)
2222 {
2223         struct smp_cmd_master_ident *rp = (void *) skb->data;
2224         struct l2cap_chan *chan = conn->smp;
2225         struct smp_chan *smp = chan->data;
2226         struct hci_dev *hdev = conn->hcon->hdev;
2227         struct hci_conn *hcon = conn->hcon;
2228         struct smp_ltk *ltk;
2229         u8 authenticated;
2230
2231         BT_DBG("conn %p", conn);
2232
2233         if (skb->len < sizeof(*rp))
2234                 return SMP_INVALID_PARAMS;
2235
2236         /* Mark the information as received */
2237         smp->remote_key_dist &= ~SMP_DIST_ENC_KEY;
2238
2239         if (smp->remote_key_dist & SMP_DIST_ID_KEY)
2240                 SMP_ALLOW_CMD(smp, SMP_CMD_IDENT_INFO);
2241         else if (smp->remote_key_dist & SMP_DIST_SIGN)
2242                 SMP_ALLOW_CMD(smp, SMP_CMD_SIGN_INFO);
2243
2244         skb_pull(skb, sizeof(*rp));
2245
2246         authenticated = (hcon->sec_level == BT_SECURITY_HIGH);
2247         ltk = hci_add_ltk(hdev, &hcon->dst, hcon->dst_type, SMP_LTK,
2248                           authenticated, smp->tk, smp->enc_key_size,
2249                           rp->ediv, rp->rand);
2250         smp->ltk = ltk;
2251         if (!(smp->remote_key_dist & KEY_DIST_MASK))
2252                 smp_distribute_keys(smp);
2253
2254         return 0;
2255 }
2256
2257 static int smp_cmd_ident_info(struct l2cap_conn *conn, struct sk_buff *skb)
2258 {
2259         struct smp_cmd_ident_info *info = (void *) skb->data;
2260         struct l2cap_chan *chan = conn->smp;
2261         struct smp_chan *smp = chan->data;
2262
2263         BT_DBG("");
2264
2265         if (skb->len < sizeof(*info))
2266                 return SMP_INVALID_PARAMS;
2267
2268         SMP_ALLOW_CMD(smp, SMP_CMD_IDENT_ADDR_INFO);
2269
2270         skb_pull(skb, sizeof(*info));
2271
2272         memcpy(smp->irk, info->irk, 16);
2273
2274         return 0;
2275 }
2276
2277 static int smp_cmd_ident_addr_info(struct l2cap_conn *conn,
2278                                    struct sk_buff *skb)
2279 {
2280         struct smp_cmd_ident_addr_info *info = (void *) skb->data;
2281         struct l2cap_chan *chan = conn->smp;
2282         struct smp_chan *smp = chan->data;
2283         struct hci_conn *hcon = conn->hcon;
2284         bdaddr_t rpa;
2285
2286         BT_DBG("");
2287
2288         if (skb->len < sizeof(*info))
2289                 return SMP_INVALID_PARAMS;
2290
2291         /* Mark the information as received */
2292         smp->remote_key_dist &= ~SMP_DIST_ID_KEY;
2293
2294         if (smp->remote_key_dist & SMP_DIST_SIGN)
2295                 SMP_ALLOW_CMD(smp, SMP_CMD_SIGN_INFO);
2296
2297         skb_pull(skb, sizeof(*info));
2298
2299         /* Strictly speaking the Core Specification (4.1) allows sending
2300          * an empty address which would force us to rely on just the IRK
2301          * as "identity information". However, since such
2302          * implementations are not known of and in order to not over
2303          * complicate our implementation, simply pretend that we never
2304          * received an IRK for such a device.
2305          */
2306         if (!bacmp(&info->bdaddr, BDADDR_ANY)) {
2307                 BT_ERR("Ignoring IRK with no identity address");
2308                 goto distribute;
2309         }
2310
2311         bacpy(&smp->id_addr, &info->bdaddr);
2312         smp->id_addr_type = info->addr_type;
2313
2314         if (hci_bdaddr_is_rpa(&hcon->dst, hcon->dst_type))
2315                 bacpy(&rpa, &hcon->dst);
2316         else
2317                 bacpy(&rpa, BDADDR_ANY);
2318
2319         smp->remote_irk = hci_add_irk(conn->hcon->hdev, &smp->id_addr,
2320                                       smp->id_addr_type, smp->irk, &rpa);
2321
2322 distribute:
2323         if (!(smp->remote_key_dist & KEY_DIST_MASK))
2324                 smp_distribute_keys(smp);
2325
2326         return 0;
2327 }
2328
2329 static int smp_cmd_sign_info(struct l2cap_conn *conn, struct sk_buff *skb)
2330 {
2331         struct smp_cmd_sign_info *rp = (void *) skb->data;
2332         struct l2cap_chan *chan = conn->smp;
2333         struct smp_chan *smp = chan->data;
2334         struct smp_csrk *csrk;
2335
2336         BT_DBG("conn %p", conn);
2337
2338         if (skb->len < sizeof(*rp))
2339                 return SMP_INVALID_PARAMS;
2340
2341         /* Mark the information as received */
2342         smp->remote_key_dist &= ~SMP_DIST_SIGN;
2343
2344         skb_pull(skb, sizeof(*rp));
2345
2346         csrk = kzalloc(sizeof(*csrk), GFP_KERNEL);
2347         if (csrk) {
2348                 csrk->master = 0x01;
2349                 memcpy(csrk->val, rp->csrk, sizeof(csrk->val));
2350         }
2351         smp->csrk = csrk;
2352         smp_distribute_keys(smp);
2353
2354         return 0;
2355 }
2356
2357 static u8 sc_select_method(struct smp_chan *smp)
2358 {
2359         struct l2cap_conn *conn = smp->conn;
2360         struct hci_conn *hcon = conn->hcon;
2361         struct smp_cmd_pairing *local, *remote;
2362         u8 local_mitm, remote_mitm, local_io, remote_io, method;
2363
2364         if (test_bit(SMP_FLAG_OOB, &smp->flags))
2365                 return REQ_OOB;
2366
2367         /* The preq/prsp contain the raw Pairing Request/Response PDUs
2368          * which are needed as inputs to some crypto functions. To get
2369          * the "struct smp_cmd_pairing" from them we need to skip the
2370          * first byte which contains the opcode.
2371          */
2372         if (hcon->out) {
2373                 local = (void *) &smp->preq[1];
2374                 remote = (void *) &smp->prsp[1];
2375         } else {
2376                 local = (void *) &smp->prsp[1];
2377                 remote = (void *) &smp->preq[1];
2378         }
2379
2380         local_io = local->io_capability;
2381         remote_io = remote->io_capability;
2382
2383         local_mitm = (local->auth_req & SMP_AUTH_MITM);
2384         remote_mitm = (remote->auth_req & SMP_AUTH_MITM);
2385
2386         /* If either side wants MITM, look up the method from the table,
2387          * otherwise use JUST WORKS.
2388          */
2389         if (local_mitm || remote_mitm)
2390                 method = get_auth_method(smp, local_io, remote_io);
2391         else
2392                 method = JUST_WORKS;
2393
2394         /* Don't confirm locally initiated pairing attempts */
2395         if (method == JUST_CFM && test_bit(SMP_FLAG_INITIATOR, &smp->flags))
2396                 method = JUST_WORKS;
2397
2398         return method;
2399 }
2400
2401 static int smp_cmd_public_key(struct l2cap_conn *conn, struct sk_buff *skb)
2402 {
2403         struct smp_cmd_public_key *key = (void *) skb->data;
2404         struct hci_conn *hcon = conn->hcon;
2405         struct l2cap_chan *chan = conn->smp;
2406         struct smp_chan *smp = chan->data;
2407         struct hci_dev *hdev = hcon->hdev;
2408         struct smp_cmd_pairing_confirm cfm;
2409         int err;
2410
2411         BT_DBG("conn %p", conn);
2412
2413         if (skb->len < sizeof(*key))
2414                 return SMP_INVALID_PARAMS;
2415
2416         memcpy(smp->remote_pk, key, 64);
2417
2418         /* Non-initiating device sends its public key after receiving
2419          * the key from the initiating device.
2420          */
2421         if (!hcon->out) {
2422                 err = sc_send_public_key(smp);
2423                 if (err)
2424                         return err;
2425         }
2426
2427         SMP_DBG("Remote Public Key X: %32phN", smp->remote_pk);
2428         SMP_DBG("Remote Public Key Y: %32phN", &smp->remote_pk[32]);
2429
2430         if (!ecdh_shared_secret(smp->remote_pk, smp->local_sk, smp->dhkey))
2431                 return SMP_UNSPECIFIED;
2432
2433         SMP_DBG("DHKey %32phN", smp->dhkey);
2434
2435         set_bit(SMP_FLAG_REMOTE_PK, &smp->flags);
2436
2437         smp->method = sc_select_method(smp);
2438
2439         BT_DBG("%s selected method 0x%02x", hdev->name, smp->method);
2440
2441         /* JUST_WORKS and JUST_CFM result in an unauthenticated key */
2442         if (smp->method == JUST_WORKS || smp->method == JUST_CFM)
2443                 hcon->pending_sec_level = BT_SECURITY_MEDIUM;
2444         else
2445                 hcon->pending_sec_level = BT_SECURITY_FIPS;
2446
2447         if (!memcmp(debug_pk, smp->remote_pk, 64))
2448                 set_bit(SMP_FLAG_DEBUG_KEY, &smp->flags);
2449
2450         if (smp->method == DSP_PASSKEY) {
2451                 get_random_bytes(&hcon->passkey_notify,
2452                                  sizeof(hcon->passkey_notify));
2453                 hcon->passkey_notify %= 1000000;
2454                 hcon->passkey_entered = 0;
2455                 smp->passkey_round = 0;
2456                 if (mgmt_user_passkey_notify(hdev, &hcon->dst, hcon->type,
2457                                              hcon->dst_type,
2458                                              hcon->passkey_notify,
2459                                              hcon->passkey_entered))
2460                         return SMP_UNSPECIFIED;
2461                 SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_CONFIRM);
2462                 return sc_passkey_round(smp, SMP_CMD_PUBLIC_KEY);
2463         }
2464
2465         if (smp->method == REQ_OOB) {
2466                 err = smp_f4(smp->tfm_cmac, smp->remote_pk, smp->remote_pk,
2467                              smp->rr, 0, cfm.confirm_val);
2468                 if (err)
2469                         return SMP_UNSPECIFIED;
2470
2471                 if (memcmp(cfm.confirm_val, smp->pcnf, 16))
2472                         return SMP_CONFIRM_FAILED;
2473
2474                 if (hcon->out)
2475                         smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM,
2476                                      sizeof(smp->prnd), smp->prnd);
2477
2478                 SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_RANDOM);
2479
2480                 return 0;
2481         }
2482
2483         if (hcon->out)
2484                 SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_CONFIRM);
2485
2486         if (smp->method == REQ_PASSKEY) {
2487                 if (mgmt_user_passkey_request(hdev, &hcon->dst, hcon->type,
2488                                               hcon->dst_type))
2489                         return SMP_UNSPECIFIED;
2490                 SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_CONFIRM);
2491                 set_bit(SMP_FLAG_WAIT_USER, &smp->flags);
2492                 return 0;
2493         }
2494
2495         /* The Initiating device waits for the non-initiating device to
2496          * send the confirm value.
2497          */
2498         if (conn->hcon->out)
2499                 return 0;
2500
2501         err = smp_f4(smp->tfm_cmac, smp->local_pk, smp->remote_pk, smp->prnd,
2502                      0, cfm.confirm_val);
2503         if (err)
2504                 return SMP_UNSPECIFIED;
2505
2506         smp_send_cmd(conn, SMP_CMD_PAIRING_CONFIRM, sizeof(cfm), &cfm);
2507         SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_RANDOM);
2508
2509         return 0;
2510 }
2511
2512 static int smp_cmd_dhkey_check(struct l2cap_conn *conn, struct sk_buff *skb)
2513 {
2514         struct smp_cmd_dhkey_check *check = (void *) skb->data;
2515         struct l2cap_chan *chan = conn->smp;
2516         struct hci_conn *hcon = conn->hcon;
2517         struct smp_chan *smp = chan->data;
2518         u8 a[7], b[7], *local_addr, *remote_addr;
2519         u8 io_cap[3], r[16], e[16];
2520         int err;
2521
2522         BT_DBG("conn %p", conn);
2523
2524         if (skb->len < sizeof(*check))
2525                 return SMP_INVALID_PARAMS;
2526
2527         memcpy(a, &hcon->init_addr, 6);
2528         memcpy(b, &hcon->resp_addr, 6);
2529         a[6] = hcon->init_addr_type;
2530         b[6] = hcon->resp_addr_type;
2531
2532         if (hcon->out) {
2533                 local_addr = a;
2534                 remote_addr = b;
2535                 memcpy(io_cap, &smp->prsp[1], 3);
2536         } else {
2537                 local_addr = b;
2538                 remote_addr = a;
2539                 memcpy(io_cap, &smp->preq[1], 3);
2540         }
2541
2542         memset(r, 0, sizeof(r));
2543
2544         if (smp->method == REQ_PASSKEY || smp->method == DSP_PASSKEY)
2545                 put_unaligned_le32(hcon->passkey_notify, r);
2546
2547         err = smp_f6(smp->tfm_cmac, smp->mackey, smp->rrnd, smp->prnd, r,
2548                      io_cap, remote_addr, local_addr, e);
2549         if (err)
2550                 return SMP_UNSPECIFIED;
2551
2552         if (memcmp(check->e, e, 16))
2553                 return SMP_DHKEY_CHECK_FAILED;
2554
2555         if (!hcon->out) {
2556                 if (test_bit(SMP_FLAG_WAIT_USER, &smp->flags)) {
2557                         set_bit(SMP_FLAG_DHKEY_PENDING, &smp->flags);
2558                         return 0;
2559                 }
2560
2561                 /* Slave sends DHKey check as response to master */
2562                 sc_dhkey_check(smp);
2563         }
2564
2565         sc_add_ltk(smp);
2566
2567         if (hcon->out) {
2568                 hci_le_start_enc(hcon, 0, 0, smp->tk);
2569                 hcon->enc_key_size = smp->enc_key_size;
2570         }
2571
2572         return 0;
2573 }
2574
2575 static int smp_cmd_keypress_notify(struct l2cap_conn *conn,
2576                                    struct sk_buff *skb)
2577 {
2578         struct smp_cmd_keypress_notify *kp = (void *) skb->data;
2579
2580         BT_DBG("value 0x%02x", kp->value);
2581
2582         return 0;
2583 }
2584
2585 static int smp_sig_channel(struct l2cap_chan *chan, struct sk_buff *skb)
2586 {
2587         struct l2cap_conn *conn = chan->conn;
2588         struct hci_conn *hcon = conn->hcon;
2589         struct smp_chan *smp;
2590         __u8 code, reason;
2591         int err = 0;
2592
2593         if (skb->len < 1)
2594                 return -EILSEQ;
2595
2596         if (!test_bit(HCI_LE_ENABLED, &hcon->hdev->dev_flags)) {
2597                 reason = SMP_PAIRING_NOTSUPP;
2598                 goto done;
2599         }
2600
2601         code = skb->data[0];
2602         skb_pull(skb, sizeof(code));
2603
2604         smp = chan->data;
2605
2606         if (code > SMP_CMD_MAX)
2607                 goto drop;
2608
2609         if (smp && !test_and_clear_bit(code, &smp->allow_cmd))
2610                 goto drop;
2611
2612         /* If we don't have a context the only allowed commands are
2613          * pairing request and security request.
2614          */
2615         if (!smp && code != SMP_CMD_PAIRING_REQ && code != SMP_CMD_SECURITY_REQ)
2616                 goto drop;
2617
2618         switch (code) {
2619         case SMP_CMD_PAIRING_REQ:
2620                 reason = smp_cmd_pairing_req(conn, skb);
2621                 break;
2622
2623         case SMP_CMD_PAIRING_FAIL:
2624                 smp_failure(conn, 0);
2625                 err = -EPERM;
2626                 break;
2627
2628         case SMP_CMD_PAIRING_RSP:
2629                 reason = smp_cmd_pairing_rsp(conn, skb);
2630                 break;
2631
2632         case SMP_CMD_SECURITY_REQ:
2633                 reason = smp_cmd_security_req(conn, skb);
2634                 break;
2635
2636         case SMP_CMD_PAIRING_CONFIRM:
2637                 reason = smp_cmd_pairing_confirm(conn, skb);
2638                 break;
2639
2640         case SMP_CMD_PAIRING_RANDOM:
2641                 reason = smp_cmd_pairing_random(conn, skb);
2642                 break;
2643
2644         case SMP_CMD_ENCRYPT_INFO:
2645                 reason = smp_cmd_encrypt_info(conn, skb);
2646                 break;
2647
2648         case SMP_CMD_MASTER_IDENT:
2649                 reason = smp_cmd_master_ident(conn, skb);
2650                 break;
2651
2652         case SMP_CMD_IDENT_INFO:
2653                 reason = smp_cmd_ident_info(conn, skb);
2654                 break;
2655
2656         case SMP_CMD_IDENT_ADDR_INFO:
2657                 reason = smp_cmd_ident_addr_info(conn, skb);
2658                 break;
2659
2660         case SMP_CMD_SIGN_INFO:
2661                 reason = smp_cmd_sign_info(conn, skb);
2662                 break;
2663
2664         case SMP_CMD_PUBLIC_KEY:
2665                 reason = smp_cmd_public_key(conn, skb);
2666                 break;
2667
2668         case SMP_CMD_DHKEY_CHECK:
2669                 reason = smp_cmd_dhkey_check(conn, skb);
2670                 break;
2671
2672         case SMP_CMD_KEYPRESS_NOTIFY:
2673                 reason = smp_cmd_keypress_notify(conn, skb);
2674                 break;
2675
2676         default:
2677                 BT_DBG("Unknown command code 0x%2.2x", code);
2678                 reason = SMP_CMD_NOTSUPP;
2679                 goto done;
2680         }
2681
2682 done:
2683         if (!err) {
2684                 if (reason)
2685                         smp_failure(conn, reason);
2686                 kfree_skb(skb);
2687         }
2688
2689         return err;
2690
2691 drop:
2692         BT_ERR("%s unexpected SMP command 0x%02x from %pMR", hcon->hdev->name,
2693                code, &hcon->dst);
2694         kfree_skb(skb);
2695         return 0;
2696 }
2697
2698 static void smp_teardown_cb(struct l2cap_chan *chan, int err)
2699 {
2700         struct l2cap_conn *conn = chan->conn;
2701
2702         BT_DBG("chan %p", chan);
2703
2704         if (chan->data)
2705                 smp_chan_destroy(conn);
2706
2707         conn->smp = NULL;
2708         l2cap_chan_put(chan);
2709 }
2710
2711 static void bredr_pairing(struct l2cap_chan *chan)
2712 {
2713         struct l2cap_conn *conn = chan->conn;
2714         struct hci_conn *hcon = conn->hcon;
2715         struct hci_dev *hdev = hcon->hdev;
2716         struct smp_cmd_pairing req;
2717         struct smp_chan *smp;
2718
2719         BT_DBG("chan %p", chan);
2720
2721         /* Only new pairings are interesting */
2722         if (!test_bit(HCI_CONN_NEW_LINK_KEY, &hcon->flags))
2723                 return;
2724
2725         /* Don't bother if we're not encrypted */
2726         if (!test_bit(HCI_CONN_ENCRYPT, &hcon->flags))
2727                 return;
2728
2729         /* Only master may initiate SMP over BR/EDR */
2730         if (hcon->role != HCI_ROLE_MASTER)
2731                 return;
2732
2733         /* Secure Connections support must be enabled */
2734         if (!test_bit(HCI_SC_ENABLED, &hdev->dev_flags))
2735                 return;
2736
2737         /* BR/EDR must use Secure Connections for SMP */
2738         if (!test_bit(HCI_CONN_AES_CCM, &hcon->flags) &&
2739             !test_bit(HCI_FORCE_LESC, &hdev->dbg_flags))
2740                 return;
2741
2742         /* If our LE support is not enabled don't do anything */
2743         if (!test_bit(HCI_LE_ENABLED, &hdev->dev_flags))
2744                 return;
2745
2746         /* Don't bother if remote LE support is not enabled */
2747         if (!lmp_host_le_capable(hcon))
2748                 return;
2749
2750         /* Remote must support SMP fixed chan for BR/EDR */
2751         if (!(conn->remote_fixed_chan & L2CAP_FC_SMP_BREDR))
2752                 return;
2753
2754         /* Don't bother if SMP is already ongoing */
2755         if (chan->data)
2756                 return;
2757
2758         smp = smp_chan_create(conn);
2759         if (!smp) {
2760                 BT_ERR("%s unable to create SMP context for BR/EDR",
2761                        hdev->name);
2762                 return;
2763         }
2764
2765         set_bit(SMP_FLAG_SC, &smp->flags);
2766
2767         BT_DBG("%s starting SMP over BR/EDR", hdev->name);
2768
2769         /* Prepare and send the BR/EDR SMP Pairing Request */
2770         build_bredr_pairing_cmd(smp, &req, NULL);
2771
2772         smp->preq[0] = SMP_CMD_PAIRING_REQ;
2773         memcpy(&smp->preq[1], &req, sizeof(req));
2774
2775         smp_send_cmd(conn, SMP_CMD_PAIRING_REQ, sizeof(req), &req);
2776         SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_RSP);
2777 }
2778
2779 static void smp_resume_cb(struct l2cap_chan *chan)
2780 {
2781         struct smp_chan *smp = chan->data;
2782         struct l2cap_conn *conn = chan->conn;
2783         struct hci_conn *hcon = conn->hcon;
2784
2785         BT_DBG("chan %p", chan);
2786
2787         if (hcon->type == ACL_LINK) {
2788                 bredr_pairing(chan);
2789                 return;
2790         }
2791
2792         if (!smp)
2793                 return;
2794
2795         if (!test_bit(HCI_CONN_ENCRYPT, &hcon->flags))
2796                 return;
2797
2798         cancel_delayed_work(&smp->security_timer);
2799
2800         smp_distribute_keys(smp);
2801 }
2802
2803 static void smp_ready_cb(struct l2cap_chan *chan)
2804 {
2805         struct l2cap_conn *conn = chan->conn;
2806         struct hci_conn *hcon = conn->hcon;
2807
2808         BT_DBG("chan %p", chan);
2809
2810         conn->smp = chan;
2811         l2cap_chan_hold(chan);
2812
2813         if (hcon->type == ACL_LINK && test_bit(HCI_CONN_ENCRYPT, &hcon->flags))
2814                 bredr_pairing(chan);
2815 }
2816
2817 static int smp_recv_cb(struct l2cap_chan *chan, struct sk_buff *skb)
2818 {
2819         int err;
2820
2821         BT_DBG("chan %p", chan);
2822
2823         err = smp_sig_channel(chan, skb);
2824         if (err) {
2825                 struct smp_chan *smp = chan->data;
2826
2827                 if (smp)
2828                         cancel_delayed_work_sync(&smp->security_timer);
2829
2830                 hci_disconnect(chan->conn->hcon, HCI_ERROR_AUTH_FAILURE);
2831         }
2832
2833         return err;
2834 }
2835
2836 static struct sk_buff *smp_alloc_skb_cb(struct l2cap_chan *chan,
2837                                         unsigned long hdr_len,
2838                                         unsigned long len, int nb)
2839 {
2840         struct sk_buff *skb;
2841
2842         skb = bt_skb_alloc(hdr_len + len, GFP_KERNEL);
2843         if (!skb)
2844                 return ERR_PTR(-ENOMEM);
2845
2846         skb->priority = HCI_PRIO_MAX;
2847         bt_cb(skb)->chan = chan;
2848
2849         return skb;
2850 }
2851
2852 static const struct l2cap_ops smp_chan_ops = {
2853         .name                   = "Security Manager",
2854         .ready                  = smp_ready_cb,
2855         .recv                   = smp_recv_cb,
2856         .alloc_skb              = smp_alloc_skb_cb,
2857         .teardown               = smp_teardown_cb,
2858         .resume                 = smp_resume_cb,
2859
2860         .new_connection         = l2cap_chan_no_new_connection,
2861         .state_change           = l2cap_chan_no_state_change,
2862         .close                  = l2cap_chan_no_close,
2863         .defer                  = l2cap_chan_no_defer,
2864         .suspend                = l2cap_chan_no_suspend,
2865         .set_shutdown           = l2cap_chan_no_set_shutdown,
2866         .get_sndtimeo           = l2cap_chan_no_get_sndtimeo,
2867 };
2868
2869 static inline struct l2cap_chan *smp_new_conn_cb(struct l2cap_chan *pchan)
2870 {
2871         struct l2cap_chan *chan;
2872
2873         BT_DBG("pchan %p", pchan);
2874
2875         chan = l2cap_chan_create();
2876         if (!chan)
2877                 return NULL;
2878
2879         chan->chan_type = pchan->chan_type;
2880         chan->ops       = &smp_chan_ops;
2881         chan->scid      = pchan->scid;
2882         chan->dcid      = chan->scid;
2883         chan->imtu      = pchan->imtu;
2884         chan->omtu      = pchan->omtu;
2885         chan->mode      = pchan->mode;
2886
2887         /* Other L2CAP channels may request SMP routines in order to
2888          * change the security level. This means that the SMP channel
2889          * lock must be considered in its own category to avoid lockdep
2890          * warnings.
2891          */
2892         atomic_set(&chan->nesting, L2CAP_NESTING_SMP);
2893
2894         BT_DBG("created chan %p", chan);
2895
2896         return chan;
2897 }
2898
2899 static const struct l2cap_ops smp_root_chan_ops = {
2900         .name                   = "Security Manager Root",
2901         .new_connection         = smp_new_conn_cb,
2902
2903         /* None of these are implemented for the root channel */
2904         .close                  = l2cap_chan_no_close,
2905         .alloc_skb              = l2cap_chan_no_alloc_skb,
2906         .recv                   = l2cap_chan_no_recv,
2907         .state_change           = l2cap_chan_no_state_change,
2908         .teardown               = l2cap_chan_no_teardown,
2909         .ready                  = l2cap_chan_no_ready,
2910         .defer                  = l2cap_chan_no_defer,
2911         .suspend                = l2cap_chan_no_suspend,
2912         .resume                 = l2cap_chan_no_resume,
2913         .set_shutdown           = l2cap_chan_no_set_shutdown,
2914         .get_sndtimeo           = l2cap_chan_no_get_sndtimeo,
2915 };
2916
2917 static struct l2cap_chan *smp_add_cid(struct hci_dev *hdev, u16 cid)
2918 {
2919         struct l2cap_chan *chan;
2920         struct crypto_blkcipher *tfm_aes;
2921
2922         if (cid == L2CAP_CID_SMP_BREDR) {
2923                 tfm_aes = NULL;
2924                 goto create_chan;
2925         }
2926
2927         tfm_aes = crypto_alloc_blkcipher("ecb(aes)", 0, 0);
2928         if (IS_ERR(tfm_aes)) {
2929                 BT_ERR("Unable to create crypto context");
2930                 return ERR_PTR(PTR_ERR(tfm_aes));
2931         }
2932
2933 create_chan:
2934         chan = l2cap_chan_create();
2935         if (!chan) {
2936                 crypto_free_blkcipher(tfm_aes);
2937                 return ERR_PTR(-ENOMEM);
2938         }
2939
2940         chan->data = tfm_aes;
2941
2942         l2cap_add_scid(chan, cid);
2943
2944         l2cap_chan_set_defaults(chan);
2945
2946         bacpy(&chan->src, &hdev->bdaddr);
2947         if (cid == L2CAP_CID_SMP)
2948                 chan->src_type = BDADDR_LE_PUBLIC;
2949         else
2950                 chan->src_type = BDADDR_BREDR;
2951         chan->state = BT_LISTEN;
2952         chan->mode = L2CAP_MODE_BASIC;
2953         chan->imtu = L2CAP_DEFAULT_MTU;
2954         chan->ops = &smp_root_chan_ops;
2955
2956         /* Set correct nesting level for a parent/listening channel */
2957         atomic_set(&chan->nesting, L2CAP_NESTING_PARENT);
2958
2959         return chan;
2960 }
2961
2962 static void smp_del_chan(struct l2cap_chan *chan)
2963 {
2964         struct crypto_blkcipher *tfm_aes;
2965
2966         BT_DBG("chan %p", chan);
2967
2968         tfm_aes = chan->data;
2969         if (tfm_aes) {
2970                 chan->data = NULL;
2971                 crypto_free_blkcipher(tfm_aes);
2972         }
2973
2974         l2cap_chan_put(chan);
2975 }
2976
2977 int smp_register(struct hci_dev *hdev)
2978 {
2979         struct l2cap_chan *chan;
2980
2981         BT_DBG("%s", hdev->name);
2982
2983         chan = smp_add_cid(hdev, L2CAP_CID_SMP);
2984         if (IS_ERR(chan))
2985                 return PTR_ERR(chan);
2986
2987         hdev->smp_data = chan;
2988
2989         if (!lmp_sc_capable(hdev) &&
2990             !test_bit(HCI_FORCE_LESC, &hdev->dbg_flags))
2991                 return 0;
2992
2993         chan = smp_add_cid(hdev, L2CAP_CID_SMP_BREDR);
2994         if (IS_ERR(chan)) {
2995                 int err = PTR_ERR(chan);
2996                 chan = hdev->smp_data;
2997                 hdev->smp_data = NULL;
2998                 smp_del_chan(chan);
2999                 return err;
3000         }
3001
3002         hdev->smp_bredr_data = chan;
3003
3004         return 0;
3005 }
3006
3007 void smp_unregister(struct hci_dev *hdev)
3008 {
3009         struct l2cap_chan *chan;
3010
3011         if (hdev->smp_bredr_data) {
3012                 chan = hdev->smp_bredr_data;
3013                 hdev->smp_bredr_data = NULL;
3014                 smp_del_chan(chan);
3015         }
3016
3017         if (hdev->smp_data) {
3018                 chan = hdev->smp_data;
3019                 hdev->smp_data = NULL;
3020                 smp_del_chan(chan);
3021         }
3022 }