skge: fix warning when CONFIG_PM is defined but not CONFIG_PM_SLEEP
[firefly-linux-kernel-4.4.55.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 <net/bluetooth/bluetooth.h>
24 #include <net/bluetooth/hci_core.h>
25 #include <net/bluetooth/l2cap.h>
26 #include <net/bluetooth/smp.h>
27 #include <linux/crypto.h>
28 #include <linux/scatterlist.h>
29 #include <crypto/b128ops.h>
30
31 #define SMP_TIMEOUT 30000 /* 30 seconds */
32
33 static inline void swap128(u8 src[16], u8 dst[16])
34 {
35         int i;
36         for (i = 0; i < 16; i++)
37                 dst[15 - i] = src[i];
38 }
39
40 static inline void swap56(u8 src[7], u8 dst[7])
41 {
42         int i;
43         for (i = 0; i < 7; i++)
44                 dst[6 - i] = src[i];
45 }
46
47 static int smp_e(struct crypto_blkcipher *tfm, const u8 *k, u8 *r)
48 {
49         struct blkcipher_desc desc;
50         struct scatterlist sg;
51         int err, iv_len;
52         unsigned char iv[128];
53
54         if (tfm == NULL) {
55                 BT_ERR("tfm %p", tfm);
56                 return -EINVAL;
57         }
58
59         desc.tfm = tfm;
60         desc.flags = 0;
61
62         err = crypto_blkcipher_setkey(tfm, k, 16);
63         if (err) {
64                 BT_ERR("cipher setkey failed: %d", err);
65                 return err;
66         }
67
68         sg_init_one(&sg, r, 16);
69
70         iv_len = crypto_blkcipher_ivsize(tfm);
71         if (iv_len) {
72                 memset(&iv, 0xff, iv_len);
73                 crypto_blkcipher_set_iv(tfm, iv, iv_len);
74         }
75
76         err = crypto_blkcipher_encrypt(&desc, &sg, &sg, 16);
77         if (err)
78                 BT_ERR("Encrypt data error %d", err);
79
80         return err;
81 }
82
83 static int smp_c1(struct crypto_blkcipher *tfm, u8 k[16], u8 r[16],
84                 u8 preq[7], u8 pres[7], u8 _iat, bdaddr_t *ia,
85                 u8 _rat, bdaddr_t *ra, u8 res[16])
86 {
87         u8 p1[16], p2[16];
88         int err;
89
90         memset(p1, 0, 16);
91
92         /* p1 = pres || preq || _rat || _iat */
93         swap56(pres, p1);
94         swap56(preq, p1 + 7);
95         p1[14] = _rat;
96         p1[15] = _iat;
97
98         memset(p2, 0, 16);
99
100         /* p2 = padding || ia || ra */
101         baswap((bdaddr_t *) (p2 + 4), ia);
102         baswap((bdaddr_t *) (p2 + 10), ra);
103
104         /* res = r XOR p1 */
105         u128_xor((u128 *) res, (u128 *) r, (u128 *) p1);
106
107         /* res = e(k, res) */
108         err = smp_e(tfm, k, res);
109         if (err) {
110                 BT_ERR("Encrypt data error");
111                 return err;
112         }
113
114         /* res = res XOR p2 */
115         u128_xor((u128 *) res, (u128 *) res, (u128 *) p2);
116
117         /* res = e(k, res) */
118         err = smp_e(tfm, k, res);
119         if (err)
120                 BT_ERR("Encrypt data error");
121
122         return err;
123 }
124
125 static int smp_s1(struct crypto_blkcipher *tfm, u8 k[16],
126                         u8 r1[16], u8 r2[16], u8 _r[16])
127 {
128         int err;
129
130         /* Just least significant octets from r1 and r2 are considered */
131         memcpy(_r, r1 + 8, 8);
132         memcpy(_r + 8, r2 + 8, 8);
133
134         err = smp_e(tfm, k, _r);
135         if (err)
136                 BT_ERR("Encrypt data error");
137
138         return err;
139 }
140
141 static int smp_rand(u8 *buf)
142 {
143         get_random_bytes(buf, 16);
144
145         return 0;
146 }
147
148 static struct sk_buff *smp_build_cmd(struct l2cap_conn *conn, u8 code,
149                                                 u16 dlen, void *data)
150 {
151         struct sk_buff *skb;
152         struct l2cap_hdr *lh;
153         int len;
154
155         len = L2CAP_HDR_SIZE + sizeof(code) + dlen;
156
157         if (len > conn->mtu)
158                 return NULL;
159
160         skb = bt_skb_alloc(len, GFP_ATOMIC);
161         if (!skb)
162                 return NULL;
163
164         lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
165         lh->len = cpu_to_le16(sizeof(code) + dlen);
166         lh->cid = cpu_to_le16(L2CAP_CID_SMP);
167
168         memcpy(skb_put(skb, sizeof(code)), &code, sizeof(code));
169
170         memcpy(skb_put(skb, dlen), data, dlen);
171
172         return skb;
173 }
174
175 static void smp_send_cmd(struct l2cap_conn *conn, u8 code, u16 len, void *data)
176 {
177         struct sk_buff *skb = smp_build_cmd(conn, code, len, data);
178
179         BT_DBG("code 0x%2.2x", code);
180
181         if (!skb)
182                 return;
183
184         skb->priority = HCI_PRIO_MAX;
185         hci_send_acl(conn->hchan, skb, 0);
186
187         mod_timer(&conn->security_timer, jiffies +
188                                         msecs_to_jiffies(SMP_TIMEOUT));
189 }
190
191 static void build_pairing_cmd(struct l2cap_conn *conn,
192                                 struct smp_cmd_pairing *req,
193                                 struct smp_cmd_pairing *rsp,
194                                 __u8 authreq)
195 {
196         u8 dist_keys;
197
198         dist_keys = 0;
199         if (test_bit(HCI_PAIRABLE, &conn->hcon->hdev->flags)) {
200                 dist_keys = SMP_DIST_ENC_KEY;
201                 authreq |= SMP_AUTH_BONDING;
202         }
203
204         if (rsp == NULL) {
205                 req->io_capability = conn->hcon->io_capability;
206                 req->oob_flag = SMP_OOB_NOT_PRESENT;
207                 req->max_key_size = SMP_MAX_ENC_KEY_SIZE;
208                 req->init_key_dist = dist_keys;
209                 req->resp_key_dist = dist_keys;
210                 req->auth_req = authreq;
211                 return;
212         }
213
214         rsp->io_capability = conn->hcon->io_capability;
215         rsp->oob_flag = SMP_OOB_NOT_PRESENT;
216         rsp->max_key_size = SMP_MAX_ENC_KEY_SIZE;
217         rsp->init_key_dist = req->init_key_dist & dist_keys;
218         rsp->resp_key_dist = req->resp_key_dist & dist_keys;
219         rsp->auth_req = authreq;
220 }
221
222 static u8 check_enc_key_size(struct l2cap_conn *conn, __u8 max_key_size)
223 {
224         struct smp_chan *smp = conn->smp_chan;
225
226         if ((max_key_size > SMP_MAX_ENC_KEY_SIZE) ||
227                         (max_key_size < SMP_MIN_ENC_KEY_SIZE))
228                 return SMP_ENC_KEY_SIZE;
229
230         smp->smp_key_size = max_key_size;
231
232         return 0;
233 }
234
235 static void smp_failure(struct l2cap_conn *conn, u8 reason, u8 send)
236 {
237         if (send)
238                 smp_send_cmd(conn, SMP_CMD_PAIRING_FAIL, sizeof(reason),
239                                                                 &reason);
240
241         clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->hcon->pend);
242         mgmt_auth_failed(conn->hcon->hdev, conn->dst, reason);
243         del_timer(&conn->security_timer);
244         smp_chan_destroy(conn);
245 }
246
247 static void confirm_work(struct work_struct *work)
248 {
249         struct smp_chan *smp = container_of(work, struct smp_chan, confirm);
250         struct l2cap_conn *conn = smp->conn;
251         struct crypto_blkcipher *tfm;
252         struct smp_cmd_pairing_confirm cp;
253         int ret;
254         u8 res[16], reason;
255
256         BT_DBG("conn %p", conn);
257
258         tfm = crypto_alloc_blkcipher("ecb(aes)", 0, CRYPTO_ALG_ASYNC);
259         if (IS_ERR(tfm)) {
260                 reason = SMP_UNSPECIFIED;
261                 goto error;
262         }
263
264         smp->tfm = tfm;
265
266         if (conn->hcon->out)
267                 ret = smp_c1(tfm, smp->tk, smp->prnd, smp->preq, smp->prsp, 0,
268                                 conn->src, conn->hcon->dst_type, conn->dst,
269                                 res);
270         else
271                 ret = smp_c1(tfm, smp->tk, smp->prnd, smp->preq, smp->prsp,
272                                 conn->hcon->dst_type, conn->dst, 0, conn->src,
273                                 res);
274         if (ret) {
275                 reason = SMP_UNSPECIFIED;
276                 goto error;
277         }
278
279         swap128(res, cp.confirm_val);
280         smp_send_cmd(smp->conn, SMP_CMD_PAIRING_CONFIRM, sizeof(cp), &cp);
281
282         return;
283
284 error:
285         smp_failure(conn, reason, 1);
286 }
287
288 static void random_work(struct work_struct *work)
289 {
290         struct smp_chan *smp = container_of(work, struct smp_chan, random);
291         struct l2cap_conn *conn = smp->conn;
292         struct hci_conn *hcon = conn->hcon;
293         struct crypto_blkcipher *tfm = smp->tfm;
294         u8 reason, confirm[16], res[16], key[16];
295         int ret;
296
297         if (IS_ERR_OR_NULL(tfm)) {
298                 reason = SMP_UNSPECIFIED;
299                 goto error;
300         }
301
302         BT_DBG("conn %p %s", conn, conn->hcon->out ? "master" : "slave");
303
304         if (hcon->out)
305                 ret = smp_c1(tfm, smp->tk, smp->rrnd, smp->preq, smp->prsp, 0,
306                                 conn->src, hcon->dst_type, conn->dst,
307                                 res);
308         else
309                 ret = smp_c1(tfm, smp->tk, smp->rrnd, smp->preq, smp->prsp,
310                                 hcon->dst_type, conn->dst, 0, conn->src,
311                                 res);
312         if (ret) {
313                 reason = SMP_UNSPECIFIED;
314                 goto error;
315         }
316
317         swap128(res, confirm);
318
319         if (memcmp(smp->pcnf, confirm, sizeof(smp->pcnf)) != 0) {
320                 BT_ERR("Pairing failed (confirmation values mismatch)");
321                 reason = SMP_CONFIRM_FAILED;
322                 goto error;
323         }
324
325         if (hcon->out) {
326                 u8 stk[16], rand[8];
327                 __le16 ediv;
328
329                 memset(rand, 0, sizeof(rand));
330                 ediv = 0;
331
332                 smp_s1(tfm, smp->tk, smp->rrnd, smp->prnd, key);
333                 swap128(key, stk);
334
335                 memset(stk + smp->smp_key_size, 0,
336                                 SMP_MAX_ENC_KEY_SIZE - smp->smp_key_size);
337
338                 if (test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &hcon->pend)) {
339                         reason = SMP_UNSPECIFIED;
340                         goto error;
341                 }
342
343                 hci_le_start_enc(hcon, ediv, rand, stk);
344                 hcon->enc_key_size = smp->smp_key_size;
345         } else {
346                 u8 stk[16], r[16], rand[8];
347                 __le16 ediv;
348
349                 memset(rand, 0, sizeof(rand));
350                 ediv = 0;
351
352                 swap128(smp->prnd, r);
353                 smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM, sizeof(r), r);
354
355                 smp_s1(tfm, smp->tk, smp->prnd, smp->rrnd, key);
356                 swap128(key, stk);
357
358                 memset(stk + smp->smp_key_size, 0,
359                                 SMP_MAX_ENC_KEY_SIZE - smp->smp_key_size);
360
361                 hci_add_ltk(hcon->hdev, 0, conn->dst, smp->smp_key_size,
362                                                         ediv, rand, stk);
363         }
364
365         return;
366
367 error:
368         smp_failure(conn, reason, 1);
369 }
370
371 static struct smp_chan *smp_chan_create(struct l2cap_conn *conn)
372 {
373         struct smp_chan *smp;
374
375         smp = kzalloc(sizeof(struct smp_chan), GFP_ATOMIC);
376         if (!smp)
377                 return NULL;
378
379         INIT_WORK(&smp->confirm, confirm_work);
380         INIT_WORK(&smp->random, random_work);
381
382         smp->conn = conn;
383         conn->smp_chan = smp;
384
385         hci_conn_hold(conn->hcon);
386
387         return smp;
388 }
389
390 void smp_chan_destroy(struct l2cap_conn *conn)
391 {
392         struct smp_chan *smp = conn->smp_chan;
393
394         clear_bit(HCI_CONN_LE_SMP_PEND, &conn->hcon->pend);
395
396         if (smp->tfm)
397                 crypto_free_blkcipher(smp->tfm);
398
399         kfree(smp);
400         conn->smp_chan = NULL;
401         hci_conn_put(conn->hcon);
402 }
403
404 static u8 smp_cmd_pairing_req(struct l2cap_conn *conn, struct sk_buff *skb)
405 {
406         struct smp_cmd_pairing rsp, *req = (void *) skb->data;
407         struct smp_chan *smp;
408         u8 key_size;
409         int ret;
410
411         BT_DBG("conn %p", conn);
412
413         if (!test_and_set_bit(HCI_CONN_LE_SMP_PEND, &conn->hcon->pend))
414                 smp = smp_chan_create(conn);
415
416         smp = conn->smp_chan;
417
418         smp->preq[0] = SMP_CMD_PAIRING_REQ;
419         memcpy(&smp->preq[1], req, sizeof(*req));
420         skb_pull(skb, sizeof(*req));
421
422         if (req->oob_flag)
423                 return SMP_OOB_NOT_AVAIL;
424
425         /* We didn't start the pairing, so no requirements */
426         build_pairing_cmd(conn, req, &rsp, SMP_AUTH_NONE);
427
428         key_size = min(req->max_key_size, rsp.max_key_size);
429         if (check_enc_key_size(conn, key_size))
430                 return SMP_ENC_KEY_SIZE;
431
432         /* Just works */
433         memset(smp->tk, 0, sizeof(smp->tk));
434
435         ret = smp_rand(smp->prnd);
436         if (ret)
437                 return SMP_UNSPECIFIED;
438
439         smp->prsp[0] = SMP_CMD_PAIRING_RSP;
440         memcpy(&smp->prsp[1], &rsp, sizeof(rsp));
441
442         smp_send_cmd(conn, SMP_CMD_PAIRING_RSP, sizeof(rsp), &rsp);
443
444         return 0;
445 }
446
447 static u8 smp_cmd_pairing_rsp(struct l2cap_conn *conn, struct sk_buff *skb)
448 {
449         struct smp_cmd_pairing *req, *rsp = (void *) skb->data;
450         struct smp_chan *smp = conn->smp_chan;
451         struct hci_dev *hdev = conn->hcon->hdev;
452         u8 key_size;
453         int ret;
454
455         BT_DBG("conn %p", conn);
456
457         skb_pull(skb, sizeof(*rsp));
458
459         req = (void *) &smp->preq[1];
460
461         key_size = min(req->max_key_size, rsp->max_key_size);
462         if (check_enc_key_size(conn, key_size))
463                 return SMP_ENC_KEY_SIZE;
464
465         if (rsp->oob_flag)
466                 return SMP_OOB_NOT_AVAIL;
467
468         /* Just works */
469         memset(smp->tk, 0, sizeof(smp->tk));
470
471         ret = smp_rand(smp->prnd);
472         if (ret)
473                 return SMP_UNSPECIFIED;
474
475         smp->prsp[0] = SMP_CMD_PAIRING_RSP;
476         memcpy(&smp->prsp[1], rsp, sizeof(*rsp));
477
478         queue_work(hdev->workqueue, &smp->confirm);
479
480         return 0;
481 }
482
483 static u8 smp_cmd_pairing_confirm(struct l2cap_conn *conn, struct sk_buff *skb)
484 {
485         struct smp_chan *smp = conn->smp_chan;
486         struct hci_dev *hdev = conn->hcon->hdev;
487
488         BT_DBG("conn %p %s", conn, conn->hcon->out ? "master" : "slave");
489
490         memcpy(smp->pcnf, skb->data, sizeof(smp->pcnf));
491         skb_pull(skb, sizeof(smp->pcnf));
492
493         if (conn->hcon->out) {
494                 u8 random[16];
495
496                 swap128(smp->prnd, random);
497                 smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM, sizeof(random),
498                                                                 random);
499         } else {
500                 queue_work(hdev->workqueue, &smp->confirm);
501         }
502
503         return 0;
504 }
505
506 static u8 smp_cmd_pairing_random(struct l2cap_conn *conn, struct sk_buff *skb)
507 {
508         struct smp_chan *smp = conn->smp_chan;
509         struct hci_dev *hdev = conn->hcon->hdev;
510
511         BT_DBG("conn %p", conn);
512
513         swap128(skb->data, smp->rrnd);
514         skb_pull(skb, sizeof(smp->rrnd));
515
516         queue_work(hdev->workqueue, &smp->random);
517
518         return 0;
519 }
520
521 static u8 smp_ltk_encrypt(struct l2cap_conn *conn)
522 {
523         struct link_key *key;
524         struct key_master_id *master;
525         struct hci_conn *hcon = conn->hcon;
526
527         key = hci_find_link_key_type(hcon->hdev, conn->dst,
528                                                 HCI_LK_SMP_LTK);
529         if (!key)
530                 return 0;
531
532         if (test_and_set_bit(HCI_CONN_ENCRYPT_PEND,
533                                         &hcon->pend))
534                 return 1;
535
536         master = (void *) key->data;
537         hci_le_start_enc(hcon, master->ediv, master->rand,
538                                                 key->val);
539         hcon->enc_key_size = key->pin_len;
540
541         return 1;
542
543 }
544 static u8 smp_cmd_security_req(struct l2cap_conn *conn, struct sk_buff *skb)
545 {
546         struct smp_cmd_security_req *rp = (void *) skb->data;
547         struct smp_cmd_pairing cp;
548         struct hci_conn *hcon = conn->hcon;
549         struct smp_chan *smp;
550
551         BT_DBG("conn %p", conn);
552
553         hcon->pending_sec_level = BT_SECURITY_MEDIUM;
554
555         if (smp_ltk_encrypt(conn))
556                 return 0;
557
558         if (test_and_set_bit(HCI_CONN_LE_SMP_PEND, &hcon->pend))
559                 return 0;
560
561         smp = smp_chan_create(conn);
562
563         skb_pull(skb, sizeof(*rp));
564
565         memset(&cp, 0, sizeof(cp));
566         build_pairing_cmd(conn, &cp, NULL, rp->auth_req);
567
568         smp->preq[0] = SMP_CMD_PAIRING_REQ;
569         memcpy(&smp->preq[1], &cp, sizeof(cp));
570
571         smp_send_cmd(conn, SMP_CMD_PAIRING_REQ, sizeof(cp), &cp);
572
573         return 0;
574 }
575
576 int smp_conn_security(struct l2cap_conn *conn, __u8 sec_level)
577 {
578         struct hci_conn *hcon = conn->hcon;
579         struct smp_chan *smp = conn->smp_chan;
580
581         BT_DBG("conn %p hcon %p level 0x%2.2x", conn, hcon, sec_level);
582
583         if (!lmp_host_le_capable(hcon->hdev))
584                 return 1;
585
586         if (sec_level == BT_SECURITY_LOW)
587                 return 1;
588
589         if (hcon->sec_level >= sec_level)
590                 return 1;
591
592         if (hcon->link_mode & HCI_LM_MASTER)
593                 if (smp_ltk_encrypt(conn))
594                         goto done;
595
596         if (test_and_set_bit(HCI_CONN_LE_SMP_PEND, &hcon->pend))
597                 return 0;
598
599         smp = smp_chan_create(conn);
600
601         if (hcon->link_mode & HCI_LM_MASTER) {
602                 struct smp_cmd_pairing cp;
603
604                 build_pairing_cmd(conn, &cp, NULL, SMP_AUTH_NONE);
605                 smp->preq[0] = SMP_CMD_PAIRING_REQ;
606                 memcpy(&smp->preq[1], &cp, sizeof(cp));
607
608                 smp_send_cmd(conn, SMP_CMD_PAIRING_REQ, sizeof(cp), &cp);
609         } else {
610                 struct smp_cmd_security_req cp;
611                 cp.auth_req = SMP_AUTH_NONE;
612                 smp_send_cmd(conn, SMP_CMD_SECURITY_REQ, sizeof(cp), &cp);
613         }
614
615 done:
616         hcon->pending_sec_level = sec_level;
617
618         return 0;
619 }
620
621 static int smp_cmd_encrypt_info(struct l2cap_conn *conn, struct sk_buff *skb)
622 {
623         struct smp_cmd_encrypt_info *rp = (void *) skb->data;
624         struct smp_chan *smp = conn->smp_chan;
625
626         skb_pull(skb, sizeof(*rp));
627
628         memcpy(smp->tk, rp->ltk, sizeof(smp->tk));
629
630         return 0;
631 }
632
633 static int smp_cmd_master_ident(struct l2cap_conn *conn, struct sk_buff *skb)
634 {
635         struct smp_cmd_master_ident *rp = (void *) skb->data;
636         struct smp_chan *smp = conn->smp_chan;
637
638         skb_pull(skb, sizeof(*rp));
639
640         hci_add_ltk(conn->hcon->hdev, 1, conn->src, smp->smp_key_size,
641                                                 rp->ediv, rp->rand, smp->tk);
642
643         smp_distribute_keys(conn, 1);
644
645         return 0;
646 }
647
648 int smp_sig_channel(struct l2cap_conn *conn, struct sk_buff *skb)
649 {
650         __u8 code = skb->data[0];
651         __u8 reason;
652         int err = 0;
653
654         if (!lmp_host_le_capable(conn->hcon->hdev)) {
655                 err = -ENOTSUPP;
656                 reason = SMP_PAIRING_NOTSUPP;
657                 goto done;
658         }
659
660         skb_pull(skb, sizeof(code));
661
662         switch (code) {
663         case SMP_CMD_PAIRING_REQ:
664                 reason = smp_cmd_pairing_req(conn, skb);
665                 break;
666
667         case SMP_CMD_PAIRING_FAIL:
668                 smp_failure(conn, skb->data[0], 0);
669                 reason = 0;
670                 err = -EPERM;
671                 break;
672
673         case SMP_CMD_PAIRING_RSP:
674                 reason = smp_cmd_pairing_rsp(conn, skb);
675                 break;
676
677         case SMP_CMD_SECURITY_REQ:
678                 reason = smp_cmd_security_req(conn, skb);
679                 break;
680
681         case SMP_CMD_PAIRING_CONFIRM:
682                 reason = smp_cmd_pairing_confirm(conn, skb);
683                 break;
684
685         case SMP_CMD_PAIRING_RANDOM:
686                 reason = smp_cmd_pairing_random(conn, skb);
687                 break;
688
689         case SMP_CMD_ENCRYPT_INFO:
690                 reason = smp_cmd_encrypt_info(conn, skb);
691                 break;
692
693         case SMP_CMD_MASTER_IDENT:
694                 reason = smp_cmd_master_ident(conn, skb);
695                 break;
696
697         case SMP_CMD_IDENT_INFO:
698         case SMP_CMD_IDENT_ADDR_INFO:
699         case SMP_CMD_SIGN_INFO:
700                 /* Just ignored */
701                 reason = 0;
702                 break;
703
704         default:
705                 BT_DBG("Unknown command code 0x%2.2x", code);
706
707                 reason = SMP_CMD_NOTSUPP;
708                 err = -EOPNOTSUPP;
709                 goto done;
710         }
711
712 done:
713         if (reason)
714                 smp_failure(conn, reason, 1);
715
716         kfree_skb(skb);
717         return err;
718 }
719
720 int smp_distribute_keys(struct l2cap_conn *conn, __u8 force)
721 {
722         struct smp_cmd_pairing *req, *rsp;
723         struct smp_chan *smp = conn->smp_chan;
724         __u8 *keydist;
725
726         BT_DBG("conn %p force %d", conn, force);
727
728         if (!test_bit(HCI_CONN_LE_SMP_PEND, &conn->hcon->pend))
729                 return 0;
730
731         rsp = (void *) &smp->prsp[1];
732
733         /* The responder sends its keys first */
734         if (!force && conn->hcon->out && (rsp->resp_key_dist & 0x07))
735                 return 0;
736
737         req = (void *) &smp->preq[1];
738
739         if (conn->hcon->out) {
740                 keydist = &rsp->init_key_dist;
741                 *keydist &= req->init_key_dist;
742         } else {
743                 keydist = &rsp->resp_key_dist;
744                 *keydist &= req->resp_key_dist;
745         }
746
747
748         BT_DBG("keydist 0x%x", *keydist);
749
750         if (*keydist & SMP_DIST_ENC_KEY) {
751                 struct smp_cmd_encrypt_info enc;
752                 struct smp_cmd_master_ident ident;
753                 __le16 ediv;
754
755                 get_random_bytes(enc.ltk, sizeof(enc.ltk));
756                 get_random_bytes(&ediv, sizeof(ediv));
757                 get_random_bytes(ident.rand, sizeof(ident.rand));
758
759                 smp_send_cmd(conn, SMP_CMD_ENCRYPT_INFO, sizeof(enc), &enc);
760
761                 hci_add_ltk(conn->hcon->hdev, 1, conn->dst, smp->smp_key_size,
762                                                 ediv, ident.rand, enc.ltk);
763
764                 ident.ediv = cpu_to_le16(ediv);
765
766                 smp_send_cmd(conn, SMP_CMD_MASTER_IDENT, sizeof(ident), &ident);
767
768                 *keydist &= ~SMP_DIST_ENC_KEY;
769         }
770
771         if (*keydist & SMP_DIST_ID_KEY) {
772                 struct smp_cmd_ident_addr_info addrinfo;
773                 struct smp_cmd_ident_info idinfo;
774
775                 /* Send a dummy key */
776                 get_random_bytes(idinfo.irk, sizeof(idinfo.irk));
777
778                 smp_send_cmd(conn, SMP_CMD_IDENT_INFO, sizeof(idinfo), &idinfo);
779
780                 /* Just public address */
781                 memset(&addrinfo, 0, sizeof(addrinfo));
782                 bacpy(&addrinfo.bdaddr, conn->src);
783
784                 smp_send_cmd(conn, SMP_CMD_IDENT_ADDR_INFO, sizeof(addrinfo),
785                                                                 &addrinfo);
786
787                 *keydist &= ~SMP_DIST_ID_KEY;
788         }
789
790         if (*keydist & SMP_DIST_SIGN) {
791                 struct smp_cmd_sign_info sign;
792
793                 /* Send a dummy key */
794                 get_random_bytes(sign.csrk, sizeof(sign.csrk));
795
796                 smp_send_cmd(conn, SMP_CMD_SIGN_INFO, sizeof(sign), &sign);
797
798                 *keydist &= ~SMP_DIST_SIGN;
799         }
800
801         if (conn->hcon->out || force) {
802                 clear_bit(HCI_CONN_LE_SMP_PEND, &conn->hcon->pend);
803                 del_timer(&conn->security_timer);
804                 smp_chan_destroy(conn);
805         }
806
807         return 0;
808 }