This is a backport of two upstream (3.13) patches:
[platform/upstream/kernel-adaptation-pc.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 #include <net/bluetooth/smp.h>
32
33 #define SMP_TIMEOUT     msecs_to_jiffies(30000)
34
35 #define AUTH_REQ_MASK   0x07
36
37 static inline void swap128(u8 src[16], u8 dst[16])
38 {
39         int i;
40         for (i = 0; i < 16; i++)
41                 dst[15 - i] = src[i];
42 }
43
44 static inline void swap56(u8 src[7], u8 dst[7])
45 {
46         int i;
47         for (i = 0; i < 7; i++)
48                 dst[6 - i] = src[i];
49 }
50
51 static int smp_e(struct crypto_blkcipher *tfm, const u8 *k, u8 *r)
52 {
53         struct blkcipher_desc desc;
54         struct scatterlist sg;
55         int err, iv_len;
56         unsigned char iv[128];
57
58         if (tfm == NULL) {
59                 BT_ERR("tfm %p", tfm);
60                 return -EINVAL;
61         }
62
63         desc.tfm = tfm;
64         desc.flags = 0;
65
66         err = crypto_blkcipher_setkey(tfm, k, 16);
67         if (err) {
68                 BT_ERR("cipher setkey failed: %d", err);
69                 return err;
70         }
71
72         sg_init_one(&sg, r, 16);
73
74         iv_len = crypto_blkcipher_ivsize(tfm);
75         if (iv_len) {
76                 memset(&iv, 0xff, iv_len);
77                 crypto_blkcipher_set_iv(tfm, iv, iv_len);
78         }
79
80         err = crypto_blkcipher_encrypt(&desc, &sg, &sg, 16);
81         if (err)
82                 BT_ERR("Encrypt data error %d", err);
83
84         return err;
85 }
86
87 static int smp_c1(struct crypto_blkcipher *tfm, u8 k[16], u8 r[16],
88                 u8 preq[7], u8 pres[7], u8 _iat, bdaddr_t *ia,
89                 u8 _rat, bdaddr_t *ra, u8 res[16])
90 {
91         u8 p1[16], p2[16];
92         int err;
93
94         memset(p1, 0, 16);
95
96         /* p1 = pres || preq || _rat || _iat */
97         swap56(pres, p1);
98         swap56(preq, p1 + 7);
99         p1[14] = _rat;
100         p1[15] = _iat;
101
102         memset(p2, 0, 16);
103
104         /* p2 = padding || ia || ra */
105         baswap((bdaddr_t *) (p2 + 4), ia);
106         baswap((bdaddr_t *) (p2 + 10), ra);
107
108         /* res = r XOR p1 */
109         u128_xor((u128 *) res, (u128 *) r, (u128 *) p1);
110
111         /* res = e(k, res) */
112         err = smp_e(tfm, k, res);
113         if (err) {
114                 BT_ERR("Encrypt data error");
115                 return err;
116         }
117
118         /* res = res XOR p2 */
119         u128_xor((u128 *) res, (u128 *) res, (u128 *) p2);
120
121         /* res = e(k, res) */
122         err = smp_e(tfm, k, res);
123         if (err)
124                 BT_ERR("Encrypt data error");
125
126         return err;
127 }
128
129 static int smp_s1(struct crypto_blkcipher *tfm, u8 k[16],
130                         u8 r1[16], u8 r2[16], u8 _r[16])
131 {
132         int err;
133
134         /* Just least significant octets from r1 and r2 are considered */
135         memcpy(_r, r1 + 8, 8);
136         memcpy(_r + 8, r2 + 8, 8);
137
138         err = smp_e(tfm, k, _r);
139         if (err)
140                 BT_ERR("Encrypt data error");
141
142         return err;
143 }
144
145 static int smp_rand(u8 *buf)
146 {
147         get_random_bytes(buf, 16);
148
149         return 0;
150 }
151
152 static struct sk_buff *smp_build_cmd(struct l2cap_conn *conn, u8 code,
153                                                 u16 dlen, void *data)
154 {
155         struct sk_buff *skb;
156         struct l2cap_hdr *lh;
157         int len;
158
159         len = L2CAP_HDR_SIZE + sizeof(code) + dlen;
160
161         if (len > conn->mtu)
162                 return NULL;
163
164         skb = bt_skb_alloc(len, GFP_ATOMIC);
165         if (!skb)
166                 return NULL;
167
168         lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
169         lh->len = cpu_to_le16(sizeof(code) + dlen);
170         lh->cid = __constant_cpu_to_le16(L2CAP_CID_SMP);
171
172         memcpy(skb_put(skb, sizeof(code)), &code, sizeof(code));
173
174         memcpy(skb_put(skb, dlen), data, dlen);
175
176         return skb;
177 }
178
179 static void smp_send_cmd(struct l2cap_conn *conn, u8 code, u16 len, void *data)
180 {
181         struct sk_buff *skb = smp_build_cmd(conn, code, len, data);
182
183         BT_DBG("code 0x%2.2x", code);
184
185         if (!skb)
186                 return;
187
188         skb->priority = HCI_PRIO_MAX;
189         hci_send_acl(conn->hchan, skb, 0);
190
191         cancel_delayed_work_sync(&conn->security_timer);
192         schedule_delayed_work(&conn->security_timer, SMP_TIMEOUT);
193 }
194
195 static __u8 authreq_to_seclevel(__u8 authreq)
196 {
197         if (authreq & SMP_AUTH_MITM)
198                 return BT_SECURITY_HIGH;
199         else
200                 return BT_SECURITY_MEDIUM;
201 }
202
203 static __u8 seclevel_to_authreq(__u8 sec_level)
204 {
205         switch (sec_level) {
206         case BT_SECURITY_HIGH:
207                 return SMP_AUTH_MITM | SMP_AUTH_BONDING;
208         case BT_SECURITY_MEDIUM:
209                 return SMP_AUTH_BONDING;
210         default:
211                 return SMP_AUTH_NONE;
212         }
213 }
214
215 static void build_pairing_cmd(struct l2cap_conn *conn,
216                                 struct smp_cmd_pairing *req,
217                                 struct smp_cmd_pairing *rsp,
218                                 __u8 authreq)
219 {
220         u8 dist_keys = 0;
221
222         if (test_bit(HCI_PAIRABLE, &conn->hcon->hdev->dev_flags)) {
223                 dist_keys = SMP_DIST_ENC_KEY;
224                 authreq |= SMP_AUTH_BONDING;
225         } else {
226                 authreq &= ~SMP_AUTH_BONDING;
227         }
228
229         if (rsp == NULL) {
230                 req->io_capability = conn->hcon->io_capability;
231                 req->oob_flag = SMP_OOB_NOT_PRESENT;
232                 req->max_key_size = SMP_MAX_ENC_KEY_SIZE;
233                 req->init_key_dist = 0;
234                 req->resp_key_dist = dist_keys;
235                 req->auth_req = (authreq & AUTH_REQ_MASK);
236                 return;
237         }
238
239         rsp->io_capability = conn->hcon->io_capability;
240         rsp->oob_flag = SMP_OOB_NOT_PRESENT;
241         rsp->max_key_size = SMP_MAX_ENC_KEY_SIZE;
242         rsp->init_key_dist = 0;
243         rsp->resp_key_dist = req->resp_key_dist & dist_keys;
244         rsp->auth_req = (authreq & AUTH_REQ_MASK);
245 }
246
247 static u8 check_enc_key_size(struct l2cap_conn *conn, __u8 max_key_size)
248 {
249         struct smp_chan *smp = conn->smp_chan;
250
251         if ((max_key_size > SMP_MAX_ENC_KEY_SIZE) ||
252                         (max_key_size < SMP_MIN_ENC_KEY_SIZE))
253                 return SMP_ENC_KEY_SIZE;
254
255         smp->enc_key_size = max_key_size;
256
257         return 0;
258 }
259
260 static void smp_failure(struct l2cap_conn *conn, u8 reason, u8 send)
261 {
262         struct hci_conn *hcon = conn->hcon;
263
264         if (send)
265                 smp_send_cmd(conn, SMP_CMD_PAIRING_FAIL, sizeof(reason),
266                                                                 &reason);
267
268         clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->hcon->flags);
269         mgmt_auth_failed(conn->hcon->hdev, conn->dst, hcon->type,
270                          hcon->dst_type, HCI_ERROR_AUTH_FAILURE);
271
272         cancel_delayed_work_sync(&conn->security_timer);
273
274         if (test_and_clear_bit(HCI_CONN_LE_SMP_PEND, &conn->hcon->flags))
275                 smp_chan_destroy(conn);
276 }
277
278 #define JUST_WORKS      0x00
279 #define JUST_CFM        0x01
280 #define REQ_PASSKEY     0x02
281 #define CFM_PASSKEY     0x03
282 #define REQ_OOB         0x04
283 #define OVERLAP         0xFF
284
285 static const u8 gen_method[5][5] = {
286         { JUST_WORKS,  JUST_CFM,    REQ_PASSKEY, JUST_WORKS, REQ_PASSKEY },
287         { JUST_WORKS,  JUST_CFM,    REQ_PASSKEY, JUST_WORKS, REQ_PASSKEY },
288         { CFM_PASSKEY, CFM_PASSKEY, REQ_PASSKEY, JUST_WORKS, CFM_PASSKEY },
289         { JUST_WORKS,  JUST_CFM,    JUST_WORKS,  JUST_WORKS, JUST_CFM    },
290         { CFM_PASSKEY, CFM_PASSKEY, REQ_PASSKEY, JUST_WORKS, OVERLAP     },
291 };
292
293 static int tk_request(struct l2cap_conn *conn, u8 remote_oob, u8 auth,
294                                                 u8 local_io, u8 remote_io)
295 {
296         struct hci_conn *hcon = conn->hcon;
297         struct smp_chan *smp = conn->smp_chan;
298         u8 method;
299         u32 passkey = 0;
300         int ret = 0;
301
302         /* Initialize key for JUST WORKS */
303         memset(smp->tk, 0, sizeof(smp->tk));
304         clear_bit(SMP_FLAG_TK_VALID, &smp->smp_flags);
305
306         BT_DBG("tk_request: auth:%d lcl:%d rem:%d", auth, local_io, remote_io);
307
308         /* If neither side wants MITM, use JUST WORKS */
309         /* If either side has unknown io_caps, use JUST WORKS */
310         /* Otherwise, look up method from the table */
311         if (!(auth & SMP_AUTH_MITM) ||
312                         local_io > SMP_IO_KEYBOARD_DISPLAY ||
313                         remote_io > SMP_IO_KEYBOARD_DISPLAY)
314                 method = JUST_WORKS;
315         else
316                 method = gen_method[remote_io][local_io];
317
318         /* If not bonding, don't ask user to confirm a Zero TK */
319         if (!(auth & SMP_AUTH_BONDING) && method == JUST_CFM)
320                 method = JUST_WORKS;
321
322         /* If Just Works, Continue with Zero TK */
323         if (method == JUST_WORKS) {
324                 set_bit(SMP_FLAG_TK_VALID, &smp->smp_flags);
325                 return 0;
326         }
327
328         /* Not Just Works/Confirm results in MITM Authentication */
329         if (method != JUST_CFM)
330                 set_bit(SMP_FLAG_MITM_AUTH, &smp->smp_flags);
331
332         /* If both devices have Keyoard-Display I/O, the master
333          * Confirms and the slave Enters the passkey.
334          */
335         if (method == OVERLAP) {
336                 if (hcon->link_mode & HCI_LM_MASTER)
337                         method = CFM_PASSKEY;
338                 else
339                         method = REQ_PASSKEY;
340         }
341
342         /* Generate random passkey. Not valid until confirmed. */
343         if (method == CFM_PASSKEY) {
344                 u8 key[16];
345
346                 memset(key, 0, sizeof(key));
347                 get_random_bytes(&passkey, sizeof(passkey));
348                 passkey %= 1000000;
349                 put_unaligned_le32(passkey, key);
350                 swap128(key, smp->tk);
351                 BT_DBG("PassKey: %d", passkey);
352         }
353
354         hci_dev_lock(hcon->hdev);
355
356         if (method == REQ_PASSKEY)
357                 ret = mgmt_user_passkey_request(hcon->hdev, conn->dst,
358                                                 hcon->type, hcon->dst_type);
359         else
360                 ret = mgmt_user_confirm_request(hcon->hdev, conn->dst,
361                                                 hcon->type, hcon->dst_type,
362                                                 cpu_to_le32(passkey), 0);
363
364         hci_dev_unlock(hcon->hdev);
365
366         return ret;
367 }
368
369 static void confirm_work(struct work_struct *work)
370 {
371         struct smp_chan *smp = container_of(work, struct smp_chan, confirm);
372         struct l2cap_conn *conn = smp->conn;
373         struct crypto_blkcipher *tfm;
374         struct smp_cmd_pairing_confirm cp;
375         int ret;
376         u8 res[16], reason;
377
378         BT_DBG("conn %p", conn);
379
380         tfm = crypto_alloc_blkcipher("ecb(aes)", 0, CRYPTO_ALG_ASYNC);
381         if (IS_ERR(tfm)) {
382                 reason = SMP_UNSPECIFIED;
383                 goto error;
384         }
385
386         smp->tfm = tfm;
387
388         if (conn->hcon->out)
389                 ret = smp_c1(tfm, smp->tk, smp->prnd, smp->preq, smp->prsp, 0,
390                              conn->src, conn->hcon->dst_type, conn->dst, res);
391         else
392                 ret = smp_c1(tfm, smp->tk, smp->prnd, smp->preq, smp->prsp,
393                              conn->hcon->dst_type, conn->dst, 0, conn->src,
394                              res);
395         if (ret) {
396                 reason = SMP_UNSPECIFIED;
397                 goto error;
398         }
399
400         clear_bit(SMP_FLAG_CFM_PENDING, &smp->smp_flags);
401
402         swap128(res, cp.confirm_val);
403         smp_send_cmd(smp->conn, SMP_CMD_PAIRING_CONFIRM, sizeof(cp), &cp);
404
405         return;
406
407 error:
408         smp_failure(conn, reason, 1);
409 }
410
411 static void random_work(struct work_struct *work)
412 {
413         struct smp_chan *smp = container_of(work, struct smp_chan, random);
414         struct l2cap_conn *conn = smp->conn;
415         struct hci_conn *hcon = conn->hcon;
416         struct crypto_blkcipher *tfm = smp->tfm;
417         u8 reason, confirm[16], res[16], key[16];
418         int ret;
419
420         if (IS_ERR_OR_NULL(tfm)) {
421                 reason = SMP_UNSPECIFIED;
422                 goto error;
423         }
424
425         BT_DBG("conn %p %s", conn, conn->hcon->out ? "master" : "slave");
426
427         if (hcon->out)
428                 ret = smp_c1(tfm, smp->tk, smp->rrnd, smp->preq, smp->prsp, 0,
429                              conn->src, hcon->dst_type, conn->dst, res);
430         else
431                 ret = smp_c1(tfm, smp->tk, smp->rrnd, smp->preq, smp->prsp,
432                              hcon->dst_type, conn->dst, 0, conn->src, res);
433         if (ret) {
434                 reason = SMP_UNSPECIFIED;
435                 goto error;
436         }
437
438         swap128(res, confirm);
439
440         if (memcmp(smp->pcnf, confirm, sizeof(smp->pcnf)) != 0) {
441                 BT_ERR("Pairing failed (confirmation values mismatch)");
442                 reason = SMP_CONFIRM_FAILED;
443                 goto error;
444         }
445
446         if (hcon->out) {
447                 u8 stk[16], rand[8];
448                 __le16 ediv;
449
450                 memset(rand, 0, sizeof(rand));
451                 ediv = 0;
452
453                 smp_s1(tfm, smp->tk, smp->rrnd, smp->prnd, key);
454                 swap128(key, stk);
455
456                 memset(stk + smp->enc_key_size, 0,
457                        SMP_MAX_ENC_KEY_SIZE - smp->enc_key_size);
458
459                 if (test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &hcon->flags)) {
460                         reason = SMP_UNSPECIFIED;
461                         goto error;
462                 }
463
464                 hci_le_start_enc(hcon, ediv, rand, stk);
465                 hcon->enc_key_size = smp->enc_key_size;
466         } else {
467                 u8 stk[16], r[16], rand[8];
468                 __le16 ediv;
469
470                 memset(rand, 0, sizeof(rand));
471                 ediv = 0;
472
473                 swap128(smp->prnd, r);
474                 smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM, sizeof(r), r);
475
476                 smp_s1(tfm, smp->tk, smp->prnd, smp->rrnd, key);
477                 swap128(key, stk);
478
479                 memset(stk + smp->enc_key_size, 0,
480                                 SMP_MAX_ENC_KEY_SIZE - smp->enc_key_size);
481
482                 hci_add_ltk(hcon->hdev, conn->dst, hcon->dst_type,
483                             HCI_SMP_STK_SLAVE, 0, 0, stk, smp->enc_key_size,
484                             ediv, rand);
485         }
486
487         return;
488
489 error:
490         smp_failure(conn, reason, 1);
491 }
492
493 static struct smp_chan *smp_chan_create(struct l2cap_conn *conn)
494 {
495         struct smp_chan *smp;
496
497         smp = kzalloc(sizeof(struct smp_chan), GFP_ATOMIC);
498         if (!smp)
499                 return NULL;
500
501         INIT_WORK(&smp->confirm, confirm_work);
502         INIT_WORK(&smp->random, random_work);
503
504         smp->conn = conn;
505         conn->smp_chan = smp;
506         conn->hcon->smp_conn = conn;
507
508         hci_conn_hold(conn->hcon);
509
510         return smp;
511 }
512
513 void smp_chan_destroy(struct l2cap_conn *conn)
514 {
515         struct smp_chan *smp = conn->smp_chan;
516
517         BUG_ON(!smp);
518
519         if (smp->tfm)
520                 crypto_free_blkcipher(smp->tfm);
521
522         kfree(smp);
523         conn->smp_chan = NULL;
524         conn->hcon->smp_conn = NULL;
525         hci_conn_drop(conn->hcon);
526 }
527
528 int smp_user_confirm_reply(struct hci_conn *hcon, u16 mgmt_op, __le32 passkey)
529 {
530         struct l2cap_conn *conn = hcon->smp_conn;
531         struct smp_chan *smp;
532         u32 value;
533         u8 key[16];
534
535         BT_DBG("");
536
537         if (!conn)
538                 return -ENOTCONN;
539
540         smp = conn->smp_chan;
541
542         switch (mgmt_op) {
543         case MGMT_OP_USER_PASSKEY_REPLY:
544                 value = le32_to_cpu(passkey);
545                 memset(key, 0, sizeof(key));
546                 BT_DBG("PassKey: %d", value);
547                 put_unaligned_le32(value, key);
548                 swap128(key, smp->tk);
549                 /* Fall Through */
550         case MGMT_OP_USER_CONFIRM_REPLY:
551                 set_bit(SMP_FLAG_TK_VALID, &smp->smp_flags);
552                 break;
553         case MGMT_OP_USER_PASSKEY_NEG_REPLY:
554         case MGMT_OP_USER_CONFIRM_NEG_REPLY:
555                 smp_failure(conn, SMP_PASSKEY_ENTRY_FAILED, 1);
556                 return 0;
557         default:
558                 smp_failure(conn, SMP_PASSKEY_ENTRY_FAILED, 1);
559                 return -EOPNOTSUPP;
560         }
561
562         /* If it is our turn to send Pairing Confirm, do so now */
563         if (test_bit(SMP_FLAG_CFM_PENDING, &smp->smp_flags))
564                 queue_work(hcon->hdev->workqueue, &smp->confirm);
565
566         return 0;
567 }
568
569 static u8 smp_cmd_pairing_req(struct l2cap_conn *conn, struct sk_buff *skb)
570 {
571         struct smp_cmd_pairing rsp, *req = (void *) skb->data;
572         struct smp_chan *smp;
573         u8 key_size;
574         u8 auth = SMP_AUTH_NONE;
575         int ret;
576
577         BT_DBG("conn %p", conn);
578
579         if (conn->hcon->link_mode & HCI_LM_MASTER)
580                 return SMP_CMD_NOTSUPP;
581
582         if (!test_and_set_bit(HCI_CONN_LE_SMP_PEND, &conn->hcon->flags))
583                 smp = smp_chan_create(conn);
584         else
585                 smp = conn->smp_chan;
586
587         if (!smp)
588                 return SMP_UNSPECIFIED;
589
590         smp->preq[0] = SMP_CMD_PAIRING_REQ;
591         memcpy(&smp->preq[1], req, sizeof(*req));
592         skb_pull(skb, sizeof(*req));
593
594         /* We didn't start the pairing, so match remote */
595         if (req->auth_req & SMP_AUTH_BONDING)
596                 auth = req->auth_req;
597
598         conn->hcon->pending_sec_level = authreq_to_seclevel(auth);
599
600         build_pairing_cmd(conn, req, &rsp, auth);
601
602         key_size = min(req->max_key_size, rsp.max_key_size);
603         if (check_enc_key_size(conn, key_size))
604                 return SMP_ENC_KEY_SIZE;
605
606         ret = smp_rand(smp->prnd);
607         if (ret)
608                 return SMP_UNSPECIFIED;
609
610         smp->prsp[0] = SMP_CMD_PAIRING_RSP;
611         memcpy(&smp->prsp[1], &rsp, sizeof(rsp));
612
613         smp_send_cmd(conn, SMP_CMD_PAIRING_RSP, sizeof(rsp), &rsp);
614
615         /* Request setup of TK */
616         ret = tk_request(conn, 0, auth, rsp.io_capability, req->io_capability);
617         if (ret)
618                 return SMP_UNSPECIFIED;
619
620         return 0;
621 }
622
623 static u8 smp_cmd_pairing_rsp(struct l2cap_conn *conn, struct sk_buff *skb)
624 {
625         struct smp_cmd_pairing *req, *rsp = (void *) skb->data;
626         struct smp_chan *smp = conn->smp_chan;
627         struct hci_dev *hdev = conn->hcon->hdev;
628         u8 key_size, auth = SMP_AUTH_NONE;
629         int ret;
630
631         BT_DBG("conn %p", conn);
632
633         if (!(conn->hcon->link_mode & HCI_LM_MASTER))
634                 return SMP_CMD_NOTSUPP;
635
636         skb_pull(skb, sizeof(*rsp));
637
638         req = (void *) &smp->preq[1];
639
640         key_size = min(req->max_key_size, rsp->max_key_size);
641         if (check_enc_key_size(conn, key_size))
642                 return SMP_ENC_KEY_SIZE;
643
644         ret = smp_rand(smp->prnd);
645         if (ret)
646                 return SMP_UNSPECIFIED;
647
648         smp->prsp[0] = SMP_CMD_PAIRING_RSP;
649         memcpy(&smp->prsp[1], rsp, sizeof(*rsp));
650
651         if ((req->auth_req & SMP_AUTH_BONDING) &&
652                         (rsp->auth_req & SMP_AUTH_BONDING))
653                 auth = SMP_AUTH_BONDING;
654
655         auth |= (req->auth_req | rsp->auth_req) & SMP_AUTH_MITM;
656
657         ret = tk_request(conn, 0, auth, req->io_capability, rsp->io_capability);
658         if (ret)
659                 return SMP_UNSPECIFIED;
660
661         set_bit(SMP_FLAG_CFM_PENDING, &smp->smp_flags);
662
663         /* Can't compose response until we have been confirmed */
664         if (!test_bit(SMP_FLAG_TK_VALID, &smp->smp_flags))
665                 return 0;
666
667         queue_work(hdev->workqueue, &smp->confirm);
668
669         return 0;
670 }
671
672 static u8 smp_cmd_pairing_confirm(struct l2cap_conn *conn, struct sk_buff *skb)
673 {
674         struct smp_chan *smp = conn->smp_chan;
675         struct hci_dev *hdev = conn->hcon->hdev;
676
677         BT_DBG("conn %p %s", conn, conn->hcon->out ? "master" : "slave");
678
679         memcpy(smp->pcnf, skb->data, sizeof(smp->pcnf));
680         skb_pull(skb, sizeof(smp->pcnf));
681
682         if (conn->hcon->out) {
683                 u8 random[16];
684
685                 swap128(smp->prnd, random);
686                 smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM, sizeof(random),
687                                                                 random);
688         } else if (test_bit(SMP_FLAG_TK_VALID, &smp->smp_flags)) {
689                 queue_work(hdev->workqueue, &smp->confirm);
690         } else {
691                 set_bit(SMP_FLAG_CFM_PENDING, &smp->smp_flags);
692         }
693
694         return 0;
695 }
696
697 static u8 smp_cmd_pairing_random(struct l2cap_conn *conn, struct sk_buff *skb)
698 {
699         struct smp_chan *smp = conn->smp_chan;
700         struct hci_dev *hdev = conn->hcon->hdev;
701
702         BT_DBG("conn %p", conn);
703
704         swap128(skb->data, smp->rrnd);
705         skb_pull(skb, sizeof(smp->rrnd));
706
707         queue_work(hdev->workqueue, &smp->random);
708
709         return 0;
710 }
711
712 static u8 smp_ltk_encrypt(struct l2cap_conn *conn, u8 sec_level)
713 {
714         struct smp_ltk *key;
715         struct hci_conn *hcon = conn->hcon;
716
717         key = hci_find_ltk_by_addr(hcon->hdev, conn->dst, hcon->dst_type);
718         if (!key)
719                 return 0;
720
721         if (sec_level > BT_SECURITY_MEDIUM && !key->authenticated)
722                 return 0;
723
724         if (test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &hcon->flags))
725                 return 1;
726
727         hci_le_start_enc(hcon, key->ediv, key->rand, key->val);
728         hcon->enc_key_size = key->enc_size;
729
730         return 1;
731
732 }
733 static u8 smp_cmd_security_req(struct l2cap_conn *conn, struct sk_buff *skb)
734 {
735         struct smp_cmd_security_req *rp = (void *) skb->data;
736         struct smp_cmd_pairing cp;
737         struct hci_conn *hcon = conn->hcon;
738         struct smp_chan *smp;
739
740         BT_DBG("conn %p", conn);
741
742         hcon->pending_sec_level = authreq_to_seclevel(rp->auth_req);
743
744         if (smp_ltk_encrypt(conn, hcon->pending_sec_level))
745                 return 0;
746
747         if (test_and_set_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags))
748                 return 0;
749
750         smp = smp_chan_create(conn);
751
752         skb_pull(skb, sizeof(*rp));
753
754         memset(&cp, 0, sizeof(cp));
755         build_pairing_cmd(conn, &cp, NULL, rp->auth_req);
756
757         smp->preq[0] = SMP_CMD_PAIRING_REQ;
758         memcpy(&smp->preq[1], &cp, sizeof(cp));
759
760         smp_send_cmd(conn, SMP_CMD_PAIRING_REQ, sizeof(cp), &cp);
761
762         return 0;
763 }
764
765 int smp_conn_security(struct hci_conn *hcon, __u8 sec_level)
766 {
767         struct l2cap_conn *conn = hcon->l2cap_data;
768         struct smp_chan *smp = conn->smp_chan;
769         __u8 authreq;
770
771         BT_DBG("conn %p hcon %p level 0x%2.2x", conn, hcon, sec_level);
772
773         if (!test_bit(HCI_LE_ENABLED, &hcon->hdev->dev_flags))
774                 return 1;
775
776         if (sec_level == BT_SECURITY_LOW)
777                 return 1;
778
779         if (hcon->sec_level >= sec_level)
780                 return 1;
781
782         if (hcon->link_mode & HCI_LM_MASTER)
783                 if (smp_ltk_encrypt(conn, sec_level))
784                         goto done;
785
786         if (test_and_set_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags))
787                 return 0;
788
789         smp = smp_chan_create(conn);
790         if (!smp)
791                 return 1;
792
793         authreq = seclevel_to_authreq(sec_level);
794
795         if (hcon->link_mode & HCI_LM_MASTER) {
796                 struct smp_cmd_pairing cp;
797
798                 build_pairing_cmd(conn, &cp, NULL, authreq);
799                 smp->preq[0] = SMP_CMD_PAIRING_REQ;
800                 memcpy(&smp->preq[1], &cp, sizeof(cp));
801
802                 smp_send_cmd(conn, SMP_CMD_PAIRING_REQ, sizeof(cp), &cp);
803         } else {
804                 struct smp_cmd_security_req cp;
805                 cp.auth_req = authreq;
806                 smp_send_cmd(conn, SMP_CMD_SECURITY_REQ, sizeof(cp), &cp);
807         }
808
809 done:
810         hcon->pending_sec_level = sec_level;
811
812         return 0;
813 }
814
815 static int smp_cmd_encrypt_info(struct l2cap_conn *conn, struct sk_buff *skb)
816 {
817         struct smp_cmd_encrypt_info *rp = (void *) skb->data;
818         struct smp_chan *smp = conn->smp_chan;
819
820         skb_pull(skb, sizeof(*rp));
821
822         memcpy(smp->tk, rp->ltk, sizeof(smp->tk));
823
824         return 0;
825 }
826
827 static int smp_cmd_master_ident(struct l2cap_conn *conn, struct sk_buff *skb)
828 {
829         struct smp_cmd_master_ident *rp = (void *) skb->data;
830         struct smp_chan *smp = conn->smp_chan;
831         struct hci_dev *hdev = conn->hcon->hdev;
832         struct hci_conn *hcon = conn->hcon;
833         u8 authenticated;
834
835         skb_pull(skb, sizeof(*rp));
836
837         hci_dev_lock(hdev);
838         authenticated = (conn->hcon->sec_level == BT_SECURITY_HIGH);
839         hci_add_ltk(conn->hcon->hdev, conn->dst, hcon->dst_type,
840                     HCI_SMP_LTK, 1, authenticated, smp->tk, smp->enc_key_size,
841                     rp->ediv, rp->rand);
842         smp_distribute_keys(conn, 1);
843         hci_dev_unlock(hdev);
844
845         return 0;
846 }
847
848 int smp_sig_channel(struct l2cap_conn *conn, struct sk_buff *skb)
849 {
850         __u8 code = skb->data[0];
851         __u8 reason;
852         int err = 0;
853
854         if (!test_bit(HCI_LE_ENABLED, &conn->hcon->hdev->dev_flags)) {
855                 err = -ENOTSUPP;
856                 reason = SMP_PAIRING_NOTSUPP;
857                 goto done;
858         }
859
860         skb_pull(skb, sizeof(code));
861
862         /*
863          * The SMP context must be initialized for all other PDUs except
864          * pairing and security requests. If we get any other PDU when
865          * not initialized simply disconnect (done if this function
866          * returns an error).
867          */
868         if (code != SMP_CMD_PAIRING_REQ && code != SMP_CMD_SECURITY_REQ &&
869             !conn->smp_chan) {
870                 BT_ERR("Unexpected SMP command 0x%02x. Disconnecting.", code);
871                 kfree_skb(skb);
872                 return -ENOTSUPP;
873         }
874
875         switch (code) {
876         case SMP_CMD_PAIRING_REQ:
877                 reason = smp_cmd_pairing_req(conn, skb);
878                 break;
879
880         case SMP_CMD_PAIRING_FAIL:
881                 smp_failure(conn, skb->data[0], 0);
882                 reason = 0;
883                 err = -EPERM;
884                 break;
885
886         case SMP_CMD_PAIRING_RSP:
887                 reason = smp_cmd_pairing_rsp(conn, skb);
888                 break;
889
890         case SMP_CMD_SECURITY_REQ:
891                 reason = smp_cmd_security_req(conn, skb);
892                 break;
893
894         case SMP_CMD_PAIRING_CONFIRM:
895                 reason = smp_cmd_pairing_confirm(conn, skb);
896                 break;
897
898         case SMP_CMD_PAIRING_RANDOM:
899                 reason = smp_cmd_pairing_random(conn, skb);
900                 break;
901
902         case SMP_CMD_ENCRYPT_INFO:
903                 reason = smp_cmd_encrypt_info(conn, skb);
904                 break;
905
906         case SMP_CMD_MASTER_IDENT:
907                 reason = smp_cmd_master_ident(conn, skb);
908                 break;
909
910         case SMP_CMD_IDENT_INFO:
911         case SMP_CMD_IDENT_ADDR_INFO:
912         case SMP_CMD_SIGN_INFO:
913                 /* Just ignored */
914                 reason = 0;
915                 break;
916
917         default:
918                 BT_DBG("Unknown command code 0x%2.2x", code);
919
920                 reason = SMP_CMD_NOTSUPP;
921                 err = -EOPNOTSUPP;
922                 goto done;
923         }
924
925 done:
926         if (reason)
927                 smp_failure(conn, reason, 1);
928
929         kfree_skb(skb);
930         return err;
931 }
932
933 int smp_distribute_keys(struct l2cap_conn *conn, __u8 force)
934 {
935         struct smp_cmd_pairing *req, *rsp;
936         struct smp_chan *smp = conn->smp_chan;
937         __u8 *keydist;
938
939         BT_DBG("conn %p force %d", conn, force);
940
941         if (!test_bit(HCI_CONN_LE_SMP_PEND, &conn->hcon->flags))
942                 return 0;
943
944         rsp = (void *) &smp->prsp[1];
945
946         /* The responder sends its keys first */
947         if (!force && conn->hcon->out && (rsp->resp_key_dist & 0x07))
948                 return 0;
949
950         req = (void *) &smp->preq[1];
951
952         if (conn->hcon->out) {
953                 keydist = &rsp->init_key_dist;
954                 *keydist &= req->init_key_dist;
955         } else {
956                 keydist = &rsp->resp_key_dist;
957                 *keydist &= req->resp_key_dist;
958         }
959
960
961         BT_DBG("keydist 0x%x", *keydist);
962
963         if (*keydist & SMP_DIST_ENC_KEY) {
964                 struct smp_cmd_encrypt_info enc;
965                 struct smp_cmd_master_ident ident;
966                 struct hci_conn *hcon = conn->hcon;
967                 u8 authenticated;
968                 __le16 ediv;
969
970                 get_random_bytes(enc.ltk, sizeof(enc.ltk));
971                 get_random_bytes(&ediv, sizeof(ediv));
972                 get_random_bytes(ident.rand, sizeof(ident.rand));
973
974                 smp_send_cmd(conn, SMP_CMD_ENCRYPT_INFO, sizeof(enc), &enc);
975
976                 authenticated = hcon->sec_level == BT_SECURITY_HIGH;
977                 hci_add_ltk(conn->hcon->hdev, conn->dst, hcon->dst_type,
978                             HCI_SMP_LTK_SLAVE, 1, authenticated,
979                             enc.ltk, smp->enc_key_size, ediv, ident.rand);
980
981                 ident.ediv = ediv;
982
983                 smp_send_cmd(conn, SMP_CMD_MASTER_IDENT, sizeof(ident), &ident);
984
985                 *keydist &= ~SMP_DIST_ENC_KEY;
986         }
987
988         if (*keydist & SMP_DIST_ID_KEY) {
989                 struct smp_cmd_ident_addr_info addrinfo;
990                 struct smp_cmd_ident_info idinfo;
991
992                 /* Send a dummy key */
993                 get_random_bytes(idinfo.irk, sizeof(idinfo.irk));
994
995                 smp_send_cmd(conn, SMP_CMD_IDENT_INFO, sizeof(idinfo), &idinfo);
996
997                 /* Just public address */
998                 memset(&addrinfo, 0, sizeof(addrinfo));
999                 bacpy(&addrinfo.bdaddr, conn->src);
1000
1001                 smp_send_cmd(conn, SMP_CMD_IDENT_ADDR_INFO, sizeof(addrinfo),
1002                                                                 &addrinfo);
1003
1004                 *keydist &= ~SMP_DIST_ID_KEY;
1005         }
1006
1007         if (*keydist & SMP_DIST_SIGN) {
1008                 struct smp_cmd_sign_info sign;
1009
1010                 /* Send a dummy key */
1011                 get_random_bytes(sign.csrk, sizeof(sign.csrk));
1012
1013                 smp_send_cmd(conn, SMP_CMD_SIGN_INFO, sizeof(sign), &sign);
1014
1015                 *keydist &= ~SMP_DIST_SIGN;
1016         }
1017
1018         if (conn->hcon->out || force) {
1019                 clear_bit(HCI_CONN_LE_SMP_PEND, &conn->hcon->flags);
1020                 cancel_delayed_work_sync(&conn->security_timer);
1021                 smp_chan_destroy(conn);
1022         }
1023
1024         return 0;
1025 }