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