Merge branch 'topic/omap3isp' of git://git.kernel.org/pub/scm/linux/kernel/git/mcheha...
[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 "smp.h"
33
34 #define SMP_TIMEOUT     msecs_to_jiffies(30000)
35
36 #define AUTH_REQ_MASK   0x07
37
38 #define SMP_FLAG_TK_VALID       1
39 #define SMP_FLAG_CFM_PENDING    2
40 #define SMP_FLAG_MITM_AUTH      3
41 #define SMP_FLAG_COMPLETE       4
42 #define SMP_FLAG_INITIATOR      5
43
44 struct smp_chan {
45         struct l2cap_conn *conn;
46         u8              preq[7]; /* SMP Pairing Request */
47         u8              prsp[7]; /* SMP Pairing Response */
48         u8              prnd[16]; /* SMP Pairing Random (local) */
49         u8              rrnd[16]; /* SMP Pairing Random (remote) */
50         u8              pcnf[16]; /* SMP Pairing Confirm */
51         u8              tk[16]; /* SMP Temporary Key */
52         u8              enc_key_size;
53         u8              remote_key_dist;
54         bdaddr_t        id_addr;
55         u8              id_addr_type;
56         u8              irk[16];
57         struct smp_csrk *csrk;
58         struct smp_csrk *slave_csrk;
59         struct smp_ltk  *ltk;
60         struct smp_ltk  *slave_ltk;
61         struct smp_irk  *remote_irk;
62         unsigned long   flags;
63 };
64
65 static inline void swap128(const u8 src[16], u8 dst[16])
66 {
67         int i;
68         for (i = 0; i < 16; i++)
69                 dst[15 - i] = src[i];
70 }
71
72 static inline void swap56(const u8 src[7], u8 dst[7])
73 {
74         int i;
75         for (i = 0; i < 7; i++)
76                 dst[6 - i] = src[i];
77 }
78
79 static int smp_e(struct crypto_blkcipher *tfm, const u8 *k, u8 *r)
80 {
81         struct blkcipher_desc desc;
82         struct scatterlist sg;
83         uint8_t tmp[16], data[16];
84         int err;
85
86         if (tfm == NULL) {
87                 BT_ERR("tfm %p", tfm);
88                 return -EINVAL;
89         }
90
91         desc.tfm = tfm;
92         desc.flags = 0;
93
94         /* The most significant octet of key corresponds to k[0] */
95         swap128(k, tmp);
96
97         err = crypto_blkcipher_setkey(tfm, tmp, 16);
98         if (err) {
99                 BT_ERR("cipher setkey failed: %d", err);
100                 return err;
101         }
102
103         /* Most significant octet of plaintextData corresponds to data[0] */
104         swap128(r, data);
105
106         sg_init_one(&sg, data, 16);
107
108         err = crypto_blkcipher_encrypt(&desc, &sg, &sg, 16);
109         if (err)
110                 BT_ERR("Encrypt data error %d", err);
111
112         /* Most significant octet of encryptedData corresponds to data[0] */
113         swap128(data, r);
114
115         return err;
116 }
117
118 static int smp_ah(struct crypto_blkcipher *tfm, u8 irk[16], u8 r[3], u8 res[3])
119 {
120         u8 _res[16];
121         int err;
122
123         /* r' = padding || r */
124         memcpy(_res, r, 3);
125         memset(_res + 3, 0, 13);
126
127         err = smp_e(tfm, irk, _res);
128         if (err) {
129                 BT_ERR("Encrypt error");
130                 return err;
131         }
132
133         /* The output of the random address function ah is:
134          *      ah(h, r) = e(k, r') mod 2^24
135          * The output of the security function e is then truncated to 24 bits
136          * by taking the least significant 24 bits of the output of e as the
137          * result of ah.
138          */
139         memcpy(res, _res, 3);
140
141         return 0;
142 }
143
144 bool smp_irk_matches(struct crypto_blkcipher *tfm, u8 irk[16],
145                      bdaddr_t *bdaddr)
146 {
147         u8 hash[3];
148         int err;
149
150         BT_DBG("RPA %pMR IRK %*phN", bdaddr, 16, irk);
151
152         err = smp_ah(tfm, irk, &bdaddr->b[3], hash);
153         if (err)
154                 return false;
155
156         return !memcmp(bdaddr->b, hash, 3);
157 }
158
159 int smp_generate_rpa(struct crypto_blkcipher *tfm, u8 irk[16], bdaddr_t *rpa)
160 {
161         int err;
162
163         get_random_bytes(&rpa->b[3], 3);
164
165         rpa->b[5] &= 0x3f;      /* Clear two most significant bits */
166         rpa->b[5] |= 0x40;      /* Set second most significant bit */
167
168         err = smp_ah(tfm, irk, &rpa->b[3], rpa->b);
169         if (err < 0)
170                 return err;
171
172         BT_DBG("RPA %pMR", rpa);
173
174         return 0;
175 }
176
177 static int smp_c1(struct crypto_blkcipher *tfm, u8 k[16], u8 r[16],
178                   u8 preq[7], u8 pres[7], u8 _iat, bdaddr_t *ia,
179                   u8 _rat, bdaddr_t *ra, u8 res[16])
180 {
181         u8 p1[16], p2[16];
182         int err;
183
184         memset(p1, 0, 16);
185
186         /* p1 = pres || preq || _rat || _iat */
187         p1[0] = _iat;
188         p1[1] = _rat;
189         memcpy(p1 + 2, preq, 7);
190         memcpy(p1 + 9, pres, 7);
191
192         /* p2 = padding || ia || ra */
193         memcpy(p2, ra, 6);
194         memcpy(p2 + 6, ia, 6);
195         memset(p2 + 12, 0, 4);
196
197         /* res = r XOR p1 */
198         u128_xor((u128 *) res, (u128 *) r, (u128 *) p1);
199
200         /* res = e(k, res) */
201         err = smp_e(tfm, k, res);
202         if (err) {
203                 BT_ERR("Encrypt data error");
204                 return err;
205         }
206
207         /* res = res XOR p2 */
208         u128_xor((u128 *) res, (u128 *) res, (u128 *) p2);
209
210         /* res = e(k, res) */
211         err = smp_e(tfm, k, res);
212         if (err)
213                 BT_ERR("Encrypt data error");
214
215         return err;
216 }
217
218 static int smp_s1(struct crypto_blkcipher *tfm, u8 k[16], u8 r1[16],
219                   u8 r2[16], u8 _r[16])
220 {
221         int err;
222
223         /* Just least significant octets from r1 and r2 are considered */
224         memcpy(_r, r2, 8);
225         memcpy(_r + 8, r1, 8);
226
227         err = smp_e(tfm, k, _r);
228         if (err)
229                 BT_ERR("Encrypt data error");
230
231         return err;
232 }
233
234 static struct sk_buff *smp_build_cmd(struct l2cap_conn *conn, u8 code,
235                                      u16 dlen, void *data)
236 {
237         struct sk_buff *skb;
238         struct l2cap_hdr *lh;
239         int len;
240
241         len = L2CAP_HDR_SIZE + sizeof(code) + dlen;
242
243         if (len > conn->mtu)
244                 return NULL;
245
246         skb = bt_skb_alloc(len, GFP_ATOMIC);
247         if (!skb)
248                 return NULL;
249
250         lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
251         lh->len = cpu_to_le16(sizeof(code) + dlen);
252         lh->cid = cpu_to_le16(L2CAP_CID_SMP);
253
254         memcpy(skb_put(skb, sizeof(code)), &code, sizeof(code));
255
256         memcpy(skb_put(skb, dlen), data, dlen);
257
258         return skb;
259 }
260
261 static void smp_send_cmd(struct l2cap_conn *conn, u8 code, u16 len, void *data)
262 {
263         struct sk_buff *skb = smp_build_cmd(conn, code, len, data);
264
265         BT_DBG("code 0x%2.2x", code);
266
267         if (!skb)
268                 return;
269
270         skb->priority = HCI_PRIO_MAX;
271         hci_send_acl(conn->hchan, skb, 0);
272
273         cancel_delayed_work_sync(&conn->security_timer);
274         schedule_delayed_work(&conn->security_timer, SMP_TIMEOUT);
275 }
276
277 static __u8 authreq_to_seclevel(__u8 authreq)
278 {
279         if (authreq & SMP_AUTH_MITM)
280                 return BT_SECURITY_HIGH;
281         else
282                 return BT_SECURITY_MEDIUM;
283 }
284
285 static __u8 seclevel_to_authreq(__u8 sec_level)
286 {
287         switch (sec_level) {
288         case BT_SECURITY_HIGH:
289                 return SMP_AUTH_MITM | SMP_AUTH_BONDING;
290         case BT_SECURITY_MEDIUM:
291                 return SMP_AUTH_BONDING;
292         default:
293                 return SMP_AUTH_NONE;
294         }
295 }
296
297 static void build_pairing_cmd(struct l2cap_conn *conn,
298                               struct smp_cmd_pairing *req,
299                               struct smp_cmd_pairing *rsp, __u8 authreq)
300 {
301         struct smp_chan *smp = conn->smp_chan;
302         struct hci_conn *hcon = conn->hcon;
303         struct hci_dev *hdev = hcon->hdev;
304         u8 local_dist = 0, remote_dist = 0;
305
306         if (test_bit(HCI_PAIRABLE, &conn->hcon->hdev->dev_flags)) {
307                 local_dist = SMP_DIST_ENC_KEY | SMP_DIST_SIGN;
308                 remote_dist = SMP_DIST_ENC_KEY | SMP_DIST_SIGN;
309                 authreq |= SMP_AUTH_BONDING;
310         } else {
311                 authreq &= ~SMP_AUTH_BONDING;
312         }
313
314         if (test_bit(HCI_RPA_RESOLVING, &hdev->dev_flags))
315                 remote_dist |= SMP_DIST_ID_KEY;
316
317         if (test_bit(HCI_PRIVACY, &hdev->dev_flags))
318                 local_dist |= SMP_DIST_ID_KEY;
319
320         if (rsp == NULL) {
321                 req->io_capability = conn->hcon->io_capability;
322                 req->oob_flag = SMP_OOB_NOT_PRESENT;
323                 req->max_key_size = SMP_MAX_ENC_KEY_SIZE;
324                 req->init_key_dist = local_dist;
325                 req->resp_key_dist = remote_dist;
326                 req->auth_req = (authreq & AUTH_REQ_MASK);
327
328                 smp->remote_key_dist = remote_dist;
329                 return;
330         }
331
332         rsp->io_capability = conn->hcon->io_capability;
333         rsp->oob_flag = SMP_OOB_NOT_PRESENT;
334         rsp->max_key_size = SMP_MAX_ENC_KEY_SIZE;
335         rsp->init_key_dist = req->init_key_dist & remote_dist;
336         rsp->resp_key_dist = req->resp_key_dist & local_dist;
337         rsp->auth_req = (authreq & AUTH_REQ_MASK);
338
339         smp->remote_key_dist = rsp->init_key_dist;
340 }
341
342 static u8 check_enc_key_size(struct l2cap_conn *conn, __u8 max_key_size)
343 {
344         struct smp_chan *smp = conn->smp_chan;
345
346         if ((max_key_size > SMP_MAX_ENC_KEY_SIZE) ||
347             (max_key_size < SMP_MIN_ENC_KEY_SIZE))
348                 return SMP_ENC_KEY_SIZE;
349
350         smp->enc_key_size = max_key_size;
351
352         return 0;
353 }
354
355 static void smp_failure(struct l2cap_conn *conn, u8 reason)
356 {
357         struct hci_conn *hcon = conn->hcon;
358
359         if (reason)
360                 smp_send_cmd(conn, SMP_CMD_PAIRING_FAIL, sizeof(reason),
361                              &reason);
362
363         clear_bit(HCI_CONN_ENCRYPT_PEND, &hcon->flags);
364         mgmt_auth_failed(hcon->hdev, &hcon->dst, hcon->type, hcon->dst_type,
365                          HCI_ERROR_AUTH_FAILURE);
366
367         cancel_delayed_work_sync(&conn->security_timer);
368
369         if (test_and_clear_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags))
370                 smp_chan_destroy(conn);
371 }
372
373 #define JUST_WORKS      0x00
374 #define JUST_CFM        0x01
375 #define REQ_PASSKEY     0x02
376 #define CFM_PASSKEY     0x03
377 #define REQ_OOB         0x04
378 #define OVERLAP         0xFF
379
380 static const u8 gen_method[5][5] = {
381         { JUST_WORKS,  JUST_CFM,    REQ_PASSKEY, JUST_WORKS, REQ_PASSKEY },
382         { JUST_WORKS,  JUST_CFM,    REQ_PASSKEY, JUST_WORKS, REQ_PASSKEY },
383         { CFM_PASSKEY, CFM_PASSKEY, REQ_PASSKEY, JUST_WORKS, CFM_PASSKEY },
384         { JUST_WORKS,  JUST_CFM,    JUST_WORKS,  JUST_WORKS, JUST_CFM    },
385         { CFM_PASSKEY, CFM_PASSKEY, REQ_PASSKEY, JUST_WORKS, OVERLAP     },
386 };
387
388 static int tk_request(struct l2cap_conn *conn, u8 remote_oob, u8 auth,
389                                                 u8 local_io, u8 remote_io)
390 {
391         struct hci_conn *hcon = conn->hcon;
392         struct smp_chan *smp = conn->smp_chan;
393         u8 method;
394         u32 passkey = 0;
395         int ret = 0;
396
397         /* Initialize key for JUST WORKS */
398         memset(smp->tk, 0, sizeof(smp->tk));
399         clear_bit(SMP_FLAG_TK_VALID, &smp->flags);
400
401         BT_DBG("tk_request: auth:%d lcl:%d rem:%d", auth, local_io, remote_io);
402
403         /* If neither side wants MITM, use JUST WORKS */
404         /* If either side has unknown io_caps, use JUST WORKS */
405         /* Otherwise, look up method from the table */
406         if (!(auth & SMP_AUTH_MITM) ||
407             local_io > SMP_IO_KEYBOARD_DISPLAY ||
408             remote_io > SMP_IO_KEYBOARD_DISPLAY)
409                 method = JUST_WORKS;
410         else
411                 method = gen_method[remote_io][local_io];
412
413         /* If not bonding, don't ask user to confirm a Zero TK */
414         if (!(auth & SMP_AUTH_BONDING) && method == JUST_CFM)
415                 method = JUST_WORKS;
416
417         /* Don't confirm locally initiated pairing attempts */
418         if (method == JUST_CFM && test_bit(SMP_FLAG_INITIATOR, &smp->flags))
419                 method = JUST_WORKS;
420
421         /* If Just Works, Continue with Zero TK */
422         if (method == JUST_WORKS) {
423                 set_bit(SMP_FLAG_TK_VALID, &smp->flags);
424                 return 0;
425         }
426
427         /* Not Just Works/Confirm results in MITM Authentication */
428         if (method != JUST_CFM)
429                 set_bit(SMP_FLAG_MITM_AUTH, &smp->flags);
430
431         /* If both devices have Keyoard-Display I/O, the master
432          * Confirms and the slave Enters the passkey.
433          */
434         if (method == OVERLAP) {
435                 if (hcon->link_mode & HCI_LM_MASTER)
436                         method = CFM_PASSKEY;
437                 else
438                         method = REQ_PASSKEY;
439         }
440
441         /* Generate random passkey. */
442         if (method == CFM_PASSKEY) {
443                 memset(smp->tk, 0, sizeof(smp->tk));
444                 get_random_bytes(&passkey, sizeof(passkey));
445                 passkey %= 1000000;
446                 put_unaligned_le32(passkey, smp->tk);
447                 BT_DBG("PassKey: %d", passkey);
448                 set_bit(SMP_FLAG_TK_VALID, &smp->flags);
449         }
450
451         hci_dev_lock(hcon->hdev);
452
453         if (method == REQ_PASSKEY)
454                 ret = mgmt_user_passkey_request(hcon->hdev, &hcon->dst,
455                                                 hcon->type, hcon->dst_type);
456         else if (method == JUST_CFM)
457                 ret = mgmt_user_confirm_request(hcon->hdev, &hcon->dst,
458                                                 hcon->type, hcon->dst_type,
459                                                 passkey, 1);
460         else
461                 ret = mgmt_user_passkey_notify(hcon->hdev, &hcon->dst,
462                                                 hcon->type, hcon->dst_type,
463                                                 passkey, 0);
464
465         hci_dev_unlock(hcon->hdev);
466
467         return ret;
468 }
469
470 static u8 smp_confirm(struct smp_chan *smp)
471 {
472         struct l2cap_conn *conn = smp->conn;
473         struct hci_dev *hdev = conn->hcon->hdev;
474         struct crypto_blkcipher *tfm = hdev->tfm_aes;
475         struct smp_cmd_pairing_confirm cp;
476         int ret;
477
478         BT_DBG("conn %p", conn);
479
480         /* Prevent mutual access to hdev->tfm_aes */
481         hci_dev_lock(hdev);
482
483         ret = smp_c1(tfm, smp->tk, smp->prnd, smp->preq, smp->prsp,
484                      conn->hcon->init_addr_type, &conn->hcon->init_addr,
485                      conn->hcon->resp_addr_type, &conn->hcon->resp_addr,
486                      cp.confirm_val);
487
488         hci_dev_unlock(hdev);
489
490         if (ret)
491                 return SMP_UNSPECIFIED;
492
493         clear_bit(SMP_FLAG_CFM_PENDING, &smp->flags);
494
495         smp_send_cmd(smp->conn, SMP_CMD_PAIRING_CONFIRM, sizeof(cp), &cp);
496
497         return 0;
498 }
499
500 static u8 smp_random(struct smp_chan *smp)
501 {
502         struct l2cap_conn *conn = smp->conn;
503         struct hci_conn *hcon = conn->hcon;
504         struct hci_dev *hdev = hcon->hdev;
505         struct crypto_blkcipher *tfm = hdev->tfm_aes;
506         u8 confirm[16];
507         int ret;
508
509         if (IS_ERR_OR_NULL(tfm))
510                 return SMP_UNSPECIFIED;
511
512         BT_DBG("conn %p %s", conn, conn->hcon->out ? "master" : "slave");
513
514         /* Prevent mutual access to hdev->tfm_aes */
515         hci_dev_lock(hdev);
516
517         ret = smp_c1(tfm, smp->tk, smp->rrnd, smp->preq, smp->prsp,
518                      hcon->init_addr_type, &hcon->init_addr,
519                      hcon->resp_addr_type, &hcon->resp_addr, confirm);
520
521         hci_dev_unlock(hdev);
522
523         if (ret)
524                 return SMP_UNSPECIFIED;
525
526         if (memcmp(smp->pcnf, confirm, sizeof(smp->pcnf)) != 0) {
527                 BT_ERR("Pairing failed (confirmation values mismatch)");
528                 return SMP_CONFIRM_FAILED;
529         }
530
531         if (hcon->out) {
532                 u8 stk[16];
533                 __le64 rand = 0;
534                 __le16 ediv = 0;
535
536                 smp_s1(tfm, smp->tk, smp->rrnd, smp->prnd, stk);
537
538                 memset(stk + smp->enc_key_size, 0,
539                        SMP_MAX_ENC_KEY_SIZE - smp->enc_key_size);
540
541                 if (test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &hcon->flags))
542                         return SMP_UNSPECIFIED;
543
544                 hci_le_start_enc(hcon, ediv, rand, stk);
545                 hcon->enc_key_size = smp->enc_key_size;
546         } else {
547                 u8 stk[16];
548                 __le64 rand = 0;
549                 __le16 ediv = 0;
550
551                 smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM, sizeof(smp->prnd),
552                              smp->prnd);
553
554                 smp_s1(tfm, smp->tk, smp->prnd, smp->rrnd, stk);
555
556                 memset(stk + smp->enc_key_size, 0,
557                        SMP_MAX_ENC_KEY_SIZE - smp->enc_key_size);
558
559                 hci_add_ltk(hcon->hdev, &hcon->dst, hcon->dst_type,
560                             HCI_SMP_STK_SLAVE, 0, stk, smp->enc_key_size,
561                             ediv, rand);
562         }
563
564         return 0;
565 }
566
567 static struct smp_chan *smp_chan_create(struct l2cap_conn *conn)
568 {
569         struct smp_chan *smp;
570
571         smp = kzalloc(sizeof(*smp), GFP_ATOMIC);
572         if (!smp)
573                 return NULL;
574
575         smp->conn = conn;
576         conn->smp_chan = smp;
577         conn->hcon->smp_conn = conn;
578
579         hci_conn_hold(conn->hcon);
580
581         return smp;
582 }
583
584 void smp_chan_destroy(struct l2cap_conn *conn)
585 {
586         struct smp_chan *smp = conn->smp_chan;
587         bool complete;
588
589         BUG_ON(!smp);
590
591         complete = test_bit(SMP_FLAG_COMPLETE, &smp->flags);
592         mgmt_smp_complete(conn->hcon, complete);
593
594         kfree(smp->csrk);
595         kfree(smp->slave_csrk);
596
597         /* If pairing failed clean up any keys we might have */
598         if (!complete) {
599                 if (smp->ltk) {
600                         list_del(&smp->ltk->list);
601                         kfree(smp->ltk);
602                 }
603
604                 if (smp->slave_ltk) {
605                         list_del(&smp->slave_ltk->list);
606                         kfree(smp->slave_ltk);
607                 }
608
609                 if (smp->remote_irk) {
610                         list_del(&smp->remote_irk->list);
611                         kfree(smp->remote_irk);
612                 }
613         }
614
615         kfree(smp);
616         conn->smp_chan = NULL;
617         conn->hcon->smp_conn = NULL;
618         hci_conn_drop(conn->hcon);
619 }
620
621 int smp_user_confirm_reply(struct hci_conn *hcon, u16 mgmt_op, __le32 passkey)
622 {
623         struct l2cap_conn *conn = hcon->smp_conn;
624         struct smp_chan *smp;
625         u32 value;
626
627         BT_DBG("");
628
629         if (!conn)
630                 return -ENOTCONN;
631
632         smp = conn->smp_chan;
633
634         switch (mgmt_op) {
635         case MGMT_OP_USER_PASSKEY_REPLY:
636                 value = le32_to_cpu(passkey);
637                 memset(smp->tk, 0, sizeof(smp->tk));
638                 BT_DBG("PassKey: %d", value);
639                 put_unaligned_le32(value, smp->tk);
640                 /* Fall Through */
641         case MGMT_OP_USER_CONFIRM_REPLY:
642                 set_bit(SMP_FLAG_TK_VALID, &smp->flags);
643                 break;
644         case MGMT_OP_USER_PASSKEY_NEG_REPLY:
645         case MGMT_OP_USER_CONFIRM_NEG_REPLY:
646                 smp_failure(conn, SMP_PASSKEY_ENTRY_FAILED);
647                 return 0;
648         default:
649                 smp_failure(conn, SMP_PASSKEY_ENTRY_FAILED);
650                 return -EOPNOTSUPP;
651         }
652
653         /* If it is our turn to send Pairing Confirm, do so now */
654         if (test_bit(SMP_FLAG_CFM_PENDING, &smp->flags)) {
655                 u8 rsp = smp_confirm(smp);
656                 if (rsp)
657                         smp_failure(conn, rsp);
658         }
659
660         return 0;
661 }
662
663 static u8 smp_cmd_pairing_req(struct l2cap_conn *conn, struct sk_buff *skb)
664 {
665         struct smp_cmd_pairing rsp, *req = (void *) skb->data;
666         struct smp_chan *smp;
667         u8 key_size, auth;
668         int ret;
669
670         BT_DBG("conn %p", conn);
671
672         if (skb->len < sizeof(*req))
673                 return SMP_INVALID_PARAMS;
674
675         if (conn->hcon->link_mode & HCI_LM_MASTER)
676                 return SMP_CMD_NOTSUPP;
677
678         if (!test_and_set_bit(HCI_CONN_LE_SMP_PEND, &conn->hcon->flags))
679                 smp = smp_chan_create(conn);
680         else
681                 smp = conn->smp_chan;
682
683         if (!smp)
684                 return SMP_UNSPECIFIED;
685
686         smp->preq[0] = SMP_CMD_PAIRING_REQ;
687         memcpy(&smp->preq[1], req, sizeof(*req));
688         skb_pull(skb, sizeof(*req));
689
690         /* We didn't start the pairing, so match remote */
691         auth = req->auth_req;
692
693         conn->hcon->pending_sec_level = authreq_to_seclevel(auth);
694
695         build_pairing_cmd(conn, req, &rsp, auth);
696
697         key_size = min(req->max_key_size, rsp.max_key_size);
698         if (check_enc_key_size(conn, key_size))
699                 return SMP_ENC_KEY_SIZE;
700
701         get_random_bytes(smp->prnd, sizeof(smp->prnd));
702
703         smp->prsp[0] = SMP_CMD_PAIRING_RSP;
704         memcpy(&smp->prsp[1], &rsp, sizeof(rsp));
705
706         smp_send_cmd(conn, SMP_CMD_PAIRING_RSP, sizeof(rsp), &rsp);
707
708         /* Request setup of TK */
709         ret = tk_request(conn, 0, auth, rsp.io_capability, req->io_capability);
710         if (ret)
711                 return SMP_UNSPECIFIED;
712
713         clear_bit(SMP_FLAG_INITIATOR, &smp->flags);
714
715         return 0;
716 }
717
718 static u8 smp_cmd_pairing_rsp(struct l2cap_conn *conn, struct sk_buff *skb)
719 {
720         struct smp_cmd_pairing *req, *rsp = (void *) skb->data;
721         struct smp_chan *smp = conn->smp_chan;
722         u8 key_size, auth = SMP_AUTH_NONE;
723         int ret;
724
725         BT_DBG("conn %p", conn);
726
727         if (skb->len < sizeof(*rsp))
728                 return SMP_INVALID_PARAMS;
729
730         if (!(conn->hcon->link_mode & HCI_LM_MASTER))
731                 return SMP_CMD_NOTSUPP;
732
733         skb_pull(skb, sizeof(*rsp));
734
735         req = (void *) &smp->preq[1];
736
737         key_size = min(req->max_key_size, rsp->max_key_size);
738         if (check_enc_key_size(conn, key_size))
739                 return SMP_ENC_KEY_SIZE;
740
741         get_random_bytes(smp->prnd, sizeof(smp->prnd));
742
743         smp->prsp[0] = SMP_CMD_PAIRING_RSP;
744         memcpy(&smp->prsp[1], rsp, sizeof(*rsp));
745
746         /* Update remote key distribution in case the remote cleared
747          * some bits that we had enabled in our request.
748          */
749         smp->remote_key_dist &= rsp->resp_key_dist;
750
751         if ((req->auth_req & SMP_AUTH_BONDING) &&
752             (rsp->auth_req & SMP_AUTH_BONDING))
753                 auth = SMP_AUTH_BONDING;
754
755         auth |= (req->auth_req | rsp->auth_req) & SMP_AUTH_MITM;
756
757         ret = tk_request(conn, 0, auth, req->io_capability, rsp->io_capability);
758         if (ret)
759                 return SMP_UNSPECIFIED;
760
761         set_bit(SMP_FLAG_CFM_PENDING, &smp->flags);
762
763         /* Can't compose response until we have been confirmed */
764         if (test_bit(SMP_FLAG_TK_VALID, &smp->flags))
765                 return smp_confirm(smp);
766
767         return 0;
768 }
769
770 static u8 smp_cmd_pairing_confirm(struct l2cap_conn *conn, struct sk_buff *skb)
771 {
772         struct smp_chan *smp = conn->smp_chan;
773
774         BT_DBG("conn %p %s", conn, conn->hcon->out ? "master" : "slave");
775
776         if (skb->len < sizeof(smp->pcnf))
777                 return SMP_INVALID_PARAMS;
778
779         memcpy(smp->pcnf, skb->data, sizeof(smp->pcnf));
780         skb_pull(skb, sizeof(smp->pcnf));
781
782         if (conn->hcon->out)
783                 smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM, sizeof(smp->prnd),
784                              smp->prnd);
785         else if (test_bit(SMP_FLAG_TK_VALID, &smp->flags))
786                 return smp_confirm(smp);
787         else
788                 set_bit(SMP_FLAG_CFM_PENDING, &smp->flags);
789
790         return 0;
791 }
792
793 static u8 smp_cmd_pairing_random(struct l2cap_conn *conn, struct sk_buff *skb)
794 {
795         struct smp_chan *smp = conn->smp_chan;
796
797         BT_DBG("conn %p", conn);
798
799         if (skb->len < sizeof(smp->rrnd))
800                 return SMP_INVALID_PARAMS;
801
802         memcpy(smp->rrnd, skb->data, sizeof(smp->rrnd));
803         skb_pull(skb, sizeof(smp->rrnd));
804
805         return smp_random(smp);
806 }
807
808 static u8 smp_ltk_encrypt(struct l2cap_conn *conn, u8 sec_level)
809 {
810         struct smp_ltk *key;
811         struct hci_conn *hcon = conn->hcon;
812
813         key = hci_find_ltk_by_addr(hcon->hdev, &hcon->dst, hcon->dst_type,
814                                    hcon->out);
815         if (!key)
816                 return 0;
817
818         if (sec_level > BT_SECURITY_MEDIUM && !key->authenticated)
819                 return 0;
820
821         if (test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &hcon->flags))
822                 return 1;
823
824         hci_le_start_enc(hcon, key->ediv, key->rand, key->val);
825         hcon->enc_key_size = key->enc_size;
826
827         return 1;
828 }
829
830 static u8 smp_cmd_security_req(struct l2cap_conn *conn, struct sk_buff *skb)
831 {
832         struct smp_cmd_security_req *rp = (void *) skb->data;
833         struct smp_cmd_pairing cp;
834         struct hci_conn *hcon = conn->hcon;
835         struct smp_chan *smp;
836
837         BT_DBG("conn %p", conn);
838
839         if (skb->len < sizeof(*rp))
840                 return SMP_INVALID_PARAMS;
841
842         if (!(conn->hcon->link_mode & HCI_LM_MASTER))
843                 return SMP_CMD_NOTSUPP;
844
845         hcon->pending_sec_level = authreq_to_seclevel(rp->auth_req);
846
847         if (smp_ltk_encrypt(conn, hcon->pending_sec_level))
848                 return 0;
849
850         if (test_and_set_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags))
851                 return 0;
852
853         smp = smp_chan_create(conn);
854
855         skb_pull(skb, sizeof(*rp));
856
857         memset(&cp, 0, sizeof(cp));
858         build_pairing_cmd(conn, &cp, NULL, rp->auth_req);
859
860         smp->preq[0] = SMP_CMD_PAIRING_REQ;
861         memcpy(&smp->preq[1], &cp, sizeof(cp));
862
863         smp_send_cmd(conn, SMP_CMD_PAIRING_REQ, sizeof(cp), &cp);
864
865         clear_bit(SMP_FLAG_INITIATOR, &smp->flags);
866
867         return 0;
868 }
869
870 bool smp_sufficient_security(struct hci_conn *hcon, u8 sec_level)
871 {
872         if (sec_level == BT_SECURITY_LOW)
873                 return true;
874
875         if (hcon->sec_level >= sec_level)
876                 return true;
877
878         return false;
879 }
880
881 int smp_conn_security(struct hci_conn *hcon, __u8 sec_level)
882 {
883         struct l2cap_conn *conn = hcon->l2cap_data;
884         struct smp_chan *smp;
885         __u8 authreq;
886
887         BT_DBG("conn %p hcon %p level 0x%2.2x", conn, hcon, sec_level);
888
889         /* This may be NULL if there's an unexpected disconnection */
890         if (!conn)
891                 return 1;
892
893         if (!test_bit(HCI_LE_ENABLED, &hcon->hdev->dev_flags))
894                 return 1;
895
896         if (smp_sufficient_security(hcon, sec_level))
897                 return 1;
898
899         if (hcon->link_mode & HCI_LM_MASTER)
900                 if (smp_ltk_encrypt(conn, sec_level))
901                         goto done;
902
903         if (test_and_set_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags))
904                 return 0;
905
906         smp = smp_chan_create(conn);
907         if (!smp)
908                 return 1;
909
910         authreq = seclevel_to_authreq(sec_level);
911
912         /* Require MITM if IO Capability allows or the security level
913          * requires it.
914          */
915         if (hcon->io_capability != HCI_IO_NO_INPUT_OUTPUT ||
916             sec_level > BT_SECURITY_MEDIUM)
917                 authreq |= SMP_AUTH_MITM;
918
919         if (hcon->link_mode & HCI_LM_MASTER) {
920                 struct smp_cmd_pairing cp;
921
922                 build_pairing_cmd(conn, &cp, NULL, authreq);
923                 smp->preq[0] = SMP_CMD_PAIRING_REQ;
924                 memcpy(&smp->preq[1], &cp, sizeof(cp));
925
926                 smp_send_cmd(conn, SMP_CMD_PAIRING_REQ, sizeof(cp), &cp);
927         } else {
928                 struct smp_cmd_security_req cp;
929                 cp.auth_req = authreq;
930                 smp_send_cmd(conn, SMP_CMD_SECURITY_REQ, sizeof(cp), &cp);
931         }
932
933         set_bit(SMP_FLAG_INITIATOR, &smp->flags);
934
935 done:
936         hcon->pending_sec_level = sec_level;
937
938         return 0;
939 }
940
941 static int smp_cmd_encrypt_info(struct l2cap_conn *conn, struct sk_buff *skb)
942 {
943         struct smp_cmd_encrypt_info *rp = (void *) skb->data;
944         struct smp_chan *smp = conn->smp_chan;
945
946         BT_DBG("conn %p", conn);
947
948         if (skb->len < sizeof(*rp))
949                 return SMP_INVALID_PARAMS;
950
951         /* Ignore this PDU if it wasn't requested */
952         if (!(smp->remote_key_dist & SMP_DIST_ENC_KEY))
953                 return 0;
954
955         skb_pull(skb, sizeof(*rp));
956
957         memcpy(smp->tk, rp->ltk, sizeof(smp->tk));
958
959         return 0;
960 }
961
962 static int smp_cmd_master_ident(struct l2cap_conn *conn, struct sk_buff *skb)
963 {
964         struct smp_cmd_master_ident *rp = (void *) skb->data;
965         struct smp_chan *smp = conn->smp_chan;
966         struct hci_dev *hdev = conn->hcon->hdev;
967         struct hci_conn *hcon = conn->hcon;
968         struct smp_ltk *ltk;
969         u8 authenticated;
970
971         BT_DBG("conn %p", conn);
972
973         if (skb->len < sizeof(*rp))
974                 return SMP_INVALID_PARAMS;
975
976         /* Ignore this PDU if it wasn't requested */
977         if (!(smp->remote_key_dist & SMP_DIST_ENC_KEY))
978                 return 0;
979
980         /* Mark the information as received */
981         smp->remote_key_dist &= ~SMP_DIST_ENC_KEY;
982
983         skb_pull(skb, sizeof(*rp));
984
985         hci_dev_lock(hdev);
986         authenticated = (hcon->sec_level == BT_SECURITY_HIGH);
987         ltk = hci_add_ltk(hdev, &hcon->dst, hcon->dst_type, HCI_SMP_LTK,
988                           authenticated, smp->tk, smp->enc_key_size,
989                           rp->ediv, rp->rand);
990         smp->ltk = ltk;
991         if (!(smp->remote_key_dist & SMP_DIST_ID_KEY))
992                 smp_distribute_keys(conn);
993         hci_dev_unlock(hdev);
994
995         return 0;
996 }
997
998 static int smp_cmd_ident_info(struct l2cap_conn *conn, struct sk_buff *skb)
999 {
1000         struct smp_cmd_ident_info *info = (void *) skb->data;
1001         struct smp_chan *smp = conn->smp_chan;
1002
1003         BT_DBG("");
1004
1005         if (skb->len < sizeof(*info))
1006                 return SMP_INVALID_PARAMS;
1007
1008         /* Ignore this PDU if it wasn't requested */
1009         if (!(smp->remote_key_dist & SMP_DIST_ID_KEY))
1010                 return 0;
1011
1012         skb_pull(skb, sizeof(*info));
1013
1014         memcpy(smp->irk, info->irk, 16);
1015
1016         return 0;
1017 }
1018
1019 static int smp_cmd_ident_addr_info(struct l2cap_conn *conn,
1020                                    struct sk_buff *skb)
1021 {
1022         struct smp_cmd_ident_addr_info *info = (void *) skb->data;
1023         struct smp_chan *smp = conn->smp_chan;
1024         struct hci_conn *hcon = conn->hcon;
1025         bdaddr_t rpa;
1026
1027         BT_DBG("");
1028
1029         if (skb->len < sizeof(*info))
1030                 return SMP_INVALID_PARAMS;
1031
1032         /* Ignore this PDU if it wasn't requested */
1033         if (!(smp->remote_key_dist & SMP_DIST_ID_KEY))
1034                 return 0;
1035
1036         /* Mark the information as received */
1037         smp->remote_key_dist &= ~SMP_DIST_ID_KEY;
1038
1039         skb_pull(skb, sizeof(*info));
1040
1041         /* Strictly speaking the Core Specification (4.1) allows sending
1042          * an empty address which would force us to rely on just the IRK
1043          * as "identity information". However, since such
1044          * implementations are not known of and in order to not over
1045          * complicate our implementation, simply pretend that we never
1046          * received an IRK for such a device.
1047          */
1048         if (!bacmp(&info->bdaddr, BDADDR_ANY)) {
1049                 BT_ERR("Ignoring IRK with no identity address");
1050                 smp_distribute_keys(conn);
1051                 return 0;
1052         }
1053
1054         bacpy(&smp->id_addr, &info->bdaddr);
1055         smp->id_addr_type = info->addr_type;
1056
1057         if (hci_bdaddr_is_rpa(&hcon->dst, hcon->dst_type))
1058                 bacpy(&rpa, &hcon->dst);
1059         else
1060                 bacpy(&rpa, BDADDR_ANY);
1061
1062         smp->remote_irk = hci_add_irk(conn->hcon->hdev, &smp->id_addr,
1063                                       smp->id_addr_type, smp->irk, &rpa);
1064
1065         smp_distribute_keys(conn);
1066
1067         return 0;
1068 }
1069
1070 static int smp_cmd_sign_info(struct l2cap_conn *conn, struct sk_buff *skb)
1071 {
1072         struct smp_cmd_sign_info *rp = (void *) skb->data;
1073         struct smp_chan *smp = conn->smp_chan;
1074         struct hci_dev *hdev = conn->hcon->hdev;
1075         struct smp_csrk *csrk;
1076
1077         BT_DBG("conn %p", conn);
1078
1079         if (skb->len < sizeof(*rp))
1080                 return SMP_INVALID_PARAMS;
1081
1082         /* Ignore this PDU if it wasn't requested */
1083         if (!(smp->remote_key_dist & SMP_DIST_SIGN))
1084                 return 0;
1085
1086         /* Mark the information as received */
1087         smp->remote_key_dist &= ~SMP_DIST_SIGN;
1088
1089         skb_pull(skb, sizeof(*rp));
1090
1091         hci_dev_lock(hdev);
1092         csrk = kzalloc(sizeof(*csrk), GFP_KERNEL);
1093         if (csrk) {
1094                 csrk->master = 0x01;
1095                 memcpy(csrk->val, rp->csrk, sizeof(csrk->val));
1096         }
1097         smp->csrk = csrk;
1098         if (!(smp->remote_key_dist & SMP_DIST_SIGN))
1099                 smp_distribute_keys(conn);
1100         hci_dev_unlock(hdev);
1101
1102         return 0;
1103 }
1104
1105 int smp_sig_channel(struct l2cap_conn *conn, struct sk_buff *skb)
1106 {
1107         struct hci_conn *hcon = conn->hcon;
1108         __u8 code, reason;
1109         int err = 0;
1110
1111         if (hcon->type != LE_LINK) {
1112                 kfree_skb(skb);
1113                 return 0;
1114         }
1115
1116         if (skb->len < 1) {
1117                 kfree_skb(skb);
1118                 return -EILSEQ;
1119         }
1120
1121         if (!test_bit(HCI_LE_ENABLED, &hcon->hdev->dev_flags)) {
1122                 err = -ENOTSUPP;
1123                 reason = SMP_PAIRING_NOTSUPP;
1124                 goto done;
1125         }
1126
1127         code = skb->data[0];
1128         skb_pull(skb, sizeof(code));
1129
1130         /*
1131          * The SMP context must be initialized for all other PDUs except
1132          * pairing and security requests. If we get any other PDU when
1133          * not initialized simply disconnect (done if this function
1134          * returns an error).
1135          */
1136         if (code != SMP_CMD_PAIRING_REQ && code != SMP_CMD_SECURITY_REQ &&
1137             !conn->smp_chan) {
1138                 BT_ERR("Unexpected SMP command 0x%02x. Disconnecting.", code);
1139                 kfree_skb(skb);
1140                 return -ENOTSUPP;
1141         }
1142
1143         switch (code) {
1144         case SMP_CMD_PAIRING_REQ:
1145                 reason = smp_cmd_pairing_req(conn, skb);
1146                 break;
1147
1148         case SMP_CMD_PAIRING_FAIL:
1149                 smp_failure(conn, 0);
1150                 reason = 0;
1151                 err = -EPERM;
1152                 break;
1153
1154         case SMP_CMD_PAIRING_RSP:
1155                 reason = smp_cmd_pairing_rsp(conn, skb);
1156                 break;
1157
1158         case SMP_CMD_SECURITY_REQ:
1159                 reason = smp_cmd_security_req(conn, skb);
1160                 break;
1161
1162         case SMP_CMD_PAIRING_CONFIRM:
1163                 reason = smp_cmd_pairing_confirm(conn, skb);
1164                 break;
1165
1166         case SMP_CMD_PAIRING_RANDOM:
1167                 reason = smp_cmd_pairing_random(conn, skb);
1168                 break;
1169
1170         case SMP_CMD_ENCRYPT_INFO:
1171                 reason = smp_cmd_encrypt_info(conn, skb);
1172                 break;
1173
1174         case SMP_CMD_MASTER_IDENT:
1175                 reason = smp_cmd_master_ident(conn, skb);
1176                 break;
1177
1178         case SMP_CMD_IDENT_INFO:
1179                 reason = smp_cmd_ident_info(conn, skb);
1180                 break;
1181
1182         case SMP_CMD_IDENT_ADDR_INFO:
1183                 reason = smp_cmd_ident_addr_info(conn, skb);
1184                 break;
1185
1186         case SMP_CMD_SIGN_INFO:
1187                 reason = smp_cmd_sign_info(conn, skb);
1188                 break;
1189
1190         default:
1191                 BT_DBG("Unknown command code 0x%2.2x", code);
1192
1193                 reason = SMP_CMD_NOTSUPP;
1194                 err = -EOPNOTSUPP;
1195                 goto done;
1196         }
1197
1198 done:
1199         if (reason)
1200                 smp_failure(conn, reason);
1201
1202         kfree_skb(skb);
1203         return err;
1204 }
1205
1206 static void smp_notify_keys(struct l2cap_conn *conn)
1207 {
1208         struct smp_chan *smp = conn->smp_chan;
1209         struct hci_conn *hcon = conn->hcon;
1210         struct hci_dev *hdev = hcon->hdev;
1211         struct smp_cmd_pairing *req = (void *) &smp->preq[1];
1212         struct smp_cmd_pairing *rsp = (void *) &smp->prsp[1];
1213         bool persistent;
1214
1215         if (smp->remote_irk) {
1216                 mgmt_new_irk(hdev, smp->remote_irk);
1217                 /* Now that user space can be considered to know the
1218                  * identity address track the connection based on it
1219                  * from now on.
1220                  */
1221                 bacpy(&hcon->dst, &smp->remote_irk->bdaddr);
1222                 hcon->dst_type = smp->remote_irk->addr_type;
1223                 l2cap_conn_update_id_addr(hcon);
1224         }
1225
1226         /* The LTKs and CSRKs should be persistent only if both sides
1227          * had the bonding bit set in their authentication requests.
1228          */
1229         persistent = !!((req->auth_req & rsp->auth_req) & SMP_AUTH_BONDING);
1230
1231         if (smp->csrk) {
1232                 smp->csrk->bdaddr_type = hcon->dst_type;
1233                 bacpy(&smp->csrk->bdaddr, &hcon->dst);
1234                 mgmt_new_csrk(hdev, smp->csrk, persistent);
1235         }
1236
1237         if (smp->slave_csrk) {
1238                 smp->slave_csrk->bdaddr_type = hcon->dst_type;
1239                 bacpy(&smp->slave_csrk->bdaddr, &hcon->dst);
1240                 mgmt_new_csrk(hdev, smp->slave_csrk, persistent);
1241         }
1242
1243         if (smp->ltk) {
1244                 smp->ltk->bdaddr_type = hcon->dst_type;
1245                 bacpy(&smp->ltk->bdaddr, &hcon->dst);
1246                 mgmt_new_ltk(hdev, smp->ltk, persistent);
1247         }
1248
1249         if (smp->slave_ltk) {
1250                 smp->slave_ltk->bdaddr_type = hcon->dst_type;
1251                 bacpy(&smp->slave_ltk->bdaddr, &hcon->dst);
1252                 mgmt_new_ltk(hdev, smp->slave_ltk, persistent);
1253         }
1254 }
1255
1256 int smp_distribute_keys(struct l2cap_conn *conn)
1257 {
1258         struct smp_cmd_pairing *req, *rsp;
1259         struct smp_chan *smp = conn->smp_chan;
1260         struct hci_conn *hcon = conn->hcon;
1261         struct hci_dev *hdev = hcon->hdev;
1262         __u8 *keydist;
1263
1264         BT_DBG("conn %p", conn);
1265
1266         if (!test_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags))
1267                 return 0;
1268
1269         rsp = (void *) &smp->prsp[1];
1270
1271         /* The responder sends its keys first */
1272         if (hcon->out && (smp->remote_key_dist & 0x07))
1273                 return 0;
1274
1275         req = (void *) &smp->preq[1];
1276
1277         if (hcon->out) {
1278                 keydist = &rsp->init_key_dist;
1279                 *keydist &= req->init_key_dist;
1280         } else {
1281                 keydist = &rsp->resp_key_dist;
1282                 *keydist &= req->resp_key_dist;
1283         }
1284
1285         BT_DBG("keydist 0x%x", *keydist);
1286
1287         if (*keydist & SMP_DIST_ENC_KEY) {
1288                 struct smp_cmd_encrypt_info enc;
1289                 struct smp_cmd_master_ident ident;
1290                 struct smp_ltk *ltk;
1291                 u8 authenticated;
1292                 __le16 ediv;
1293                 __le64 rand;
1294
1295                 get_random_bytes(enc.ltk, sizeof(enc.ltk));
1296                 get_random_bytes(&ediv, sizeof(ediv));
1297                 get_random_bytes(&rand, sizeof(rand));
1298
1299                 smp_send_cmd(conn, SMP_CMD_ENCRYPT_INFO, sizeof(enc), &enc);
1300
1301                 authenticated = hcon->sec_level == BT_SECURITY_HIGH;
1302                 ltk = hci_add_ltk(hdev, &hcon->dst, hcon->dst_type,
1303                                   HCI_SMP_LTK_SLAVE, authenticated, enc.ltk,
1304                                   smp->enc_key_size, ediv, rand);
1305                 smp->slave_ltk = ltk;
1306
1307                 ident.ediv = ediv;
1308                 ident.rand = rand;
1309
1310                 smp_send_cmd(conn, SMP_CMD_MASTER_IDENT, sizeof(ident), &ident);
1311
1312                 *keydist &= ~SMP_DIST_ENC_KEY;
1313         }
1314
1315         if (*keydist & SMP_DIST_ID_KEY) {
1316                 struct smp_cmd_ident_addr_info addrinfo;
1317                 struct smp_cmd_ident_info idinfo;
1318
1319                 memcpy(idinfo.irk, hdev->irk, sizeof(idinfo.irk));
1320
1321                 smp_send_cmd(conn, SMP_CMD_IDENT_INFO, sizeof(idinfo), &idinfo);
1322
1323                 /* The hci_conn contains the local identity address
1324                  * after the connection has been established.
1325                  *
1326                  * This is true even when the connection has been
1327                  * established using a resolvable random address.
1328                  */
1329                 bacpy(&addrinfo.bdaddr, &hcon->src);
1330                 addrinfo.addr_type = hcon->src_type;
1331
1332                 smp_send_cmd(conn, SMP_CMD_IDENT_ADDR_INFO, sizeof(addrinfo),
1333                              &addrinfo);
1334
1335                 *keydist &= ~SMP_DIST_ID_KEY;
1336         }
1337
1338         if (*keydist & SMP_DIST_SIGN) {
1339                 struct smp_cmd_sign_info sign;
1340                 struct smp_csrk *csrk;
1341
1342                 /* Generate a new random key */
1343                 get_random_bytes(sign.csrk, sizeof(sign.csrk));
1344
1345                 csrk = kzalloc(sizeof(*csrk), GFP_KERNEL);
1346                 if (csrk) {
1347                         csrk->master = 0x00;
1348                         memcpy(csrk->val, sign.csrk, sizeof(csrk->val));
1349                 }
1350                 smp->slave_csrk = csrk;
1351
1352                 smp_send_cmd(conn, SMP_CMD_SIGN_INFO, sizeof(sign), &sign);
1353
1354                 *keydist &= ~SMP_DIST_SIGN;
1355         }
1356
1357         /* If there are still keys to be received wait for them */
1358         if ((smp->remote_key_dist & 0x07))
1359                 return 0;
1360
1361         clear_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags);
1362         cancel_delayed_work_sync(&conn->security_timer);
1363         set_bit(SMP_FLAG_COMPLETE, &smp->flags);
1364         smp_notify_keys(conn);
1365
1366         smp_chan_destroy(conn);
1367
1368         return 0;
1369 }