Merge tag 'urgent-slab-fix' of git://git.kernel.org/pub/scm/linux/kernel/git/device...
[deliverable/linux.git] / net / bluetooth / smp.c
... / ...
CommitLineData
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
44struct 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
65static 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
72static 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
79static 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
118static 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
144bool 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
159int 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
177static 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
218static 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
234static 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
261static 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
277static __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
285static __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
297static 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
342static 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
355static 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
380static 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
388static u8 get_auth_method(struct smp_chan *smp, u8 local_io, u8 remote_io)
389{
390 /* If either side has unknown io_caps, use JUST WORKS */
391 if (local_io > SMP_IO_KEYBOARD_DISPLAY ||
392 remote_io > SMP_IO_KEYBOARD_DISPLAY)
393 return JUST_WORKS;
394
395 return gen_method[remote_io][local_io];
396}
397
398static int tk_request(struct l2cap_conn *conn, u8 remote_oob, u8 auth,
399 u8 local_io, u8 remote_io)
400{
401 struct hci_conn *hcon = conn->hcon;
402 struct smp_chan *smp = conn->smp_chan;
403 u8 method;
404 u32 passkey = 0;
405 int ret = 0;
406
407 /* Initialize key for JUST WORKS */
408 memset(smp->tk, 0, sizeof(smp->tk));
409 clear_bit(SMP_FLAG_TK_VALID, &smp->flags);
410
411 BT_DBG("tk_request: auth:%d lcl:%d rem:%d", auth, local_io, remote_io);
412
413 /* If neither side wants MITM, use JUST WORKS */
414 /* Otherwise, look up method from the table */
415 if (!(auth & SMP_AUTH_MITM))
416 method = JUST_WORKS;
417 else
418 method = get_auth_method(smp, local_io, remote_io);
419
420 /* If not bonding, don't ask user to confirm a Zero TK */
421 if (!(auth & SMP_AUTH_BONDING) && method == JUST_CFM)
422 method = JUST_WORKS;
423
424 /* Don't confirm locally initiated pairing attempts */
425 if (method == JUST_CFM && test_bit(SMP_FLAG_INITIATOR, &smp->flags))
426 method = JUST_WORKS;
427
428 /* If Just Works, Continue with Zero TK */
429 if (method == JUST_WORKS) {
430 set_bit(SMP_FLAG_TK_VALID, &smp->flags);
431 return 0;
432 }
433
434 /* Not Just Works/Confirm results in MITM Authentication */
435 if (method != JUST_CFM)
436 set_bit(SMP_FLAG_MITM_AUTH, &smp->flags);
437
438 /* If both devices have Keyoard-Display I/O, the master
439 * Confirms and the slave Enters the passkey.
440 */
441 if (method == OVERLAP) {
442 if (hcon->link_mode & HCI_LM_MASTER)
443 method = CFM_PASSKEY;
444 else
445 method = REQ_PASSKEY;
446 }
447
448 /* Generate random passkey. */
449 if (method == CFM_PASSKEY) {
450 memset(smp->tk, 0, sizeof(smp->tk));
451 get_random_bytes(&passkey, sizeof(passkey));
452 passkey %= 1000000;
453 put_unaligned_le32(passkey, smp->tk);
454 BT_DBG("PassKey: %d", passkey);
455 set_bit(SMP_FLAG_TK_VALID, &smp->flags);
456 }
457
458 hci_dev_lock(hcon->hdev);
459
460 if (method == REQ_PASSKEY)
461 ret = mgmt_user_passkey_request(hcon->hdev, &hcon->dst,
462 hcon->type, hcon->dst_type);
463 else if (method == JUST_CFM)
464 ret = mgmt_user_confirm_request(hcon->hdev, &hcon->dst,
465 hcon->type, hcon->dst_type,
466 passkey, 1);
467 else
468 ret = mgmt_user_passkey_notify(hcon->hdev, &hcon->dst,
469 hcon->type, hcon->dst_type,
470 passkey, 0);
471
472 hci_dev_unlock(hcon->hdev);
473
474 return ret;
475}
476
477static u8 smp_confirm(struct smp_chan *smp)
478{
479 struct l2cap_conn *conn = smp->conn;
480 struct hci_dev *hdev = conn->hcon->hdev;
481 struct crypto_blkcipher *tfm = hdev->tfm_aes;
482 struct smp_cmd_pairing_confirm cp;
483 int ret;
484
485 BT_DBG("conn %p", conn);
486
487 /* Prevent mutual access to hdev->tfm_aes */
488 hci_dev_lock(hdev);
489
490 ret = smp_c1(tfm, smp->tk, smp->prnd, smp->preq, smp->prsp,
491 conn->hcon->init_addr_type, &conn->hcon->init_addr,
492 conn->hcon->resp_addr_type, &conn->hcon->resp_addr,
493 cp.confirm_val);
494
495 hci_dev_unlock(hdev);
496
497 if (ret)
498 return SMP_UNSPECIFIED;
499
500 clear_bit(SMP_FLAG_CFM_PENDING, &smp->flags);
501
502 smp_send_cmd(smp->conn, SMP_CMD_PAIRING_CONFIRM, sizeof(cp), &cp);
503
504 return 0;
505}
506
507static u8 smp_random(struct smp_chan *smp)
508{
509 struct l2cap_conn *conn = smp->conn;
510 struct hci_conn *hcon = conn->hcon;
511 struct hci_dev *hdev = hcon->hdev;
512 struct crypto_blkcipher *tfm = hdev->tfm_aes;
513 u8 confirm[16];
514 int ret;
515
516 if (IS_ERR_OR_NULL(tfm))
517 return SMP_UNSPECIFIED;
518
519 BT_DBG("conn %p %s", conn, conn->hcon->out ? "master" : "slave");
520
521 /* Prevent mutual access to hdev->tfm_aes */
522 hci_dev_lock(hdev);
523
524 ret = smp_c1(tfm, smp->tk, smp->rrnd, smp->preq, smp->prsp,
525 hcon->init_addr_type, &hcon->init_addr,
526 hcon->resp_addr_type, &hcon->resp_addr, confirm);
527
528 hci_dev_unlock(hdev);
529
530 if (ret)
531 return SMP_UNSPECIFIED;
532
533 if (memcmp(smp->pcnf, confirm, sizeof(smp->pcnf)) != 0) {
534 BT_ERR("Pairing failed (confirmation values mismatch)");
535 return SMP_CONFIRM_FAILED;
536 }
537
538 if (hcon->out) {
539 u8 stk[16];
540 __le64 rand = 0;
541 __le16 ediv = 0;
542
543 smp_s1(tfm, smp->tk, smp->rrnd, smp->prnd, stk);
544
545 memset(stk + smp->enc_key_size, 0,
546 SMP_MAX_ENC_KEY_SIZE - smp->enc_key_size);
547
548 if (test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &hcon->flags))
549 return SMP_UNSPECIFIED;
550
551 hci_le_start_enc(hcon, ediv, rand, stk);
552 hcon->enc_key_size = smp->enc_key_size;
553 } else {
554 u8 stk[16], auth;
555 __le64 rand = 0;
556 __le16 ediv = 0;
557
558 smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM, sizeof(smp->prnd),
559 smp->prnd);
560
561 smp_s1(tfm, smp->tk, smp->prnd, smp->rrnd, stk);
562
563 memset(stk + smp->enc_key_size, 0,
564 SMP_MAX_ENC_KEY_SIZE - smp->enc_key_size);
565
566 if (hcon->pending_sec_level == BT_SECURITY_HIGH)
567 auth = 1;
568 else
569 auth = 0;
570
571 hci_add_ltk(hcon->hdev, &hcon->dst, hcon->dst_type,
572 HCI_SMP_STK_SLAVE, auth, stk, smp->enc_key_size,
573 ediv, rand);
574 }
575
576 return 0;
577}
578
579static struct smp_chan *smp_chan_create(struct l2cap_conn *conn)
580{
581 struct smp_chan *smp;
582
583 smp = kzalloc(sizeof(*smp), GFP_ATOMIC);
584 if (!smp)
585 return NULL;
586
587 smp->conn = conn;
588 conn->smp_chan = smp;
589 conn->hcon->smp_conn = conn;
590
591 hci_conn_hold(conn->hcon);
592
593 return smp;
594}
595
596void smp_chan_destroy(struct l2cap_conn *conn)
597{
598 struct smp_chan *smp = conn->smp_chan;
599 bool complete;
600
601 BUG_ON(!smp);
602
603 complete = test_bit(SMP_FLAG_COMPLETE, &smp->flags);
604 mgmt_smp_complete(conn->hcon, complete);
605
606 kfree(smp->csrk);
607 kfree(smp->slave_csrk);
608
609 /* If pairing failed clean up any keys we might have */
610 if (!complete) {
611 if (smp->ltk) {
612 list_del(&smp->ltk->list);
613 kfree(smp->ltk);
614 }
615
616 if (smp->slave_ltk) {
617 list_del(&smp->slave_ltk->list);
618 kfree(smp->slave_ltk);
619 }
620
621 if (smp->remote_irk) {
622 list_del(&smp->remote_irk->list);
623 kfree(smp->remote_irk);
624 }
625 }
626
627 kfree(smp);
628 conn->smp_chan = NULL;
629 conn->hcon->smp_conn = NULL;
630 hci_conn_drop(conn->hcon);
631}
632
633int smp_user_confirm_reply(struct hci_conn *hcon, u16 mgmt_op, __le32 passkey)
634{
635 struct l2cap_conn *conn = hcon->smp_conn;
636 struct smp_chan *smp;
637 u32 value;
638
639 BT_DBG("");
640
641 if (!conn)
642 return -ENOTCONN;
643
644 smp = conn->smp_chan;
645
646 switch (mgmt_op) {
647 case MGMT_OP_USER_PASSKEY_REPLY:
648 value = le32_to_cpu(passkey);
649 memset(smp->tk, 0, sizeof(smp->tk));
650 BT_DBG("PassKey: %d", value);
651 put_unaligned_le32(value, smp->tk);
652 /* Fall Through */
653 case MGMT_OP_USER_CONFIRM_REPLY:
654 set_bit(SMP_FLAG_TK_VALID, &smp->flags);
655 break;
656 case MGMT_OP_USER_PASSKEY_NEG_REPLY:
657 case MGMT_OP_USER_CONFIRM_NEG_REPLY:
658 smp_failure(conn, SMP_PASSKEY_ENTRY_FAILED);
659 return 0;
660 default:
661 smp_failure(conn, SMP_PASSKEY_ENTRY_FAILED);
662 return -EOPNOTSUPP;
663 }
664
665 /* If it is our turn to send Pairing Confirm, do so now */
666 if (test_bit(SMP_FLAG_CFM_PENDING, &smp->flags)) {
667 u8 rsp = smp_confirm(smp);
668 if (rsp)
669 smp_failure(conn, rsp);
670 }
671
672 return 0;
673}
674
675static u8 smp_cmd_pairing_req(struct l2cap_conn *conn, struct sk_buff *skb)
676{
677 struct smp_cmd_pairing rsp, *req = (void *) skb->data;
678 struct smp_chan *smp;
679 u8 key_size, auth, sec_level;
680 int ret;
681
682 BT_DBG("conn %p", conn);
683
684 if (skb->len < sizeof(*req))
685 return SMP_INVALID_PARAMS;
686
687 if (conn->hcon->link_mode & HCI_LM_MASTER)
688 return SMP_CMD_NOTSUPP;
689
690 if (!test_and_set_bit(HCI_CONN_LE_SMP_PEND, &conn->hcon->flags))
691 smp = smp_chan_create(conn);
692 else
693 smp = conn->smp_chan;
694
695 if (!smp)
696 return SMP_UNSPECIFIED;
697
698 smp->preq[0] = SMP_CMD_PAIRING_REQ;
699 memcpy(&smp->preq[1], req, sizeof(*req));
700 skb_pull(skb, sizeof(*req));
701
702 /* We didn't start the pairing, so match remote */
703 auth = req->auth_req;
704
705 sec_level = authreq_to_seclevel(auth);
706 if (sec_level > conn->hcon->pending_sec_level)
707 conn->hcon->pending_sec_level = sec_level;
708
709 /* If we need MITM check that it can be acheived */
710 if (conn->hcon->pending_sec_level >= BT_SECURITY_HIGH) {
711 u8 method;
712
713 method = get_auth_method(smp, conn->hcon->io_capability,
714 req->io_capability);
715 if (method == JUST_WORKS || method == JUST_CFM)
716 return SMP_AUTH_REQUIREMENTS;
717 }
718
719 build_pairing_cmd(conn, req, &rsp, auth);
720
721 key_size = min(req->max_key_size, rsp.max_key_size);
722 if (check_enc_key_size(conn, key_size))
723 return SMP_ENC_KEY_SIZE;
724
725 get_random_bytes(smp->prnd, sizeof(smp->prnd));
726
727 smp->prsp[0] = SMP_CMD_PAIRING_RSP;
728 memcpy(&smp->prsp[1], &rsp, sizeof(rsp));
729
730 smp_send_cmd(conn, SMP_CMD_PAIRING_RSP, sizeof(rsp), &rsp);
731
732 /* Request setup of TK */
733 ret = tk_request(conn, 0, auth, rsp.io_capability, req->io_capability);
734 if (ret)
735 return SMP_UNSPECIFIED;
736
737 clear_bit(SMP_FLAG_INITIATOR, &smp->flags);
738
739 return 0;
740}
741
742static u8 smp_cmd_pairing_rsp(struct l2cap_conn *conn, struct sk_buff *skb)
743{
744 struct smp_cmd_pairing *req, *rsp = (void *) skb->data;
745 struct smp_chan *smp = conn->smp_chan;
746 u8 key_size, auth = SMP_AUTH_NONE;
747 int ret;
748
749 BT_DBG("conn %p", conn);
750
751 if (skb->len < sizeof(*rsp))
752 return SMP_INVALID_PARAMS;
753
754 if (!(conn->hcon->link_mode & HCI_LM_MASTER))
755 return SMP_CMD_NOTSUPP;
756
757 skb_pull(skb, sizeof(*rsp));
758
759 req = (void *) &smp->preq[1];
760
761 key_size = min(req->max_key_size, rsp->max_key_size);
762 if (check_enc_key_size(conn, key_size))
763 return SMP_ENC_KEY_SIZE;
764
765 /* If we need MITM check that it can be acheived */
766 if (conn->hcon->pending_sec_level >= BT_SECURITY_HIGH) {
767 u8 method;
768
769 method = get_auth_method(smp, req->io_capability,
770 rsp->io_capability);
771 if (method == JUST_WORKS || method == JUST_CFM)
772 return SMP_AUTH_REQUIREMENTS;
773 }
774
775 get_random_bytes(smp->prnd, sizeof(smp->prnd));
776
777 smp->prsp[0] = SMP_CMD_PAIRING_RSP;
778 memcpy(&smp->prsp[1], rsp, sizeof(*rsp));
779
780 /* Update remote key distribution in case the remote cleared
781 * some bits that we had enabled in our request.
782 */
783 smp->remote_key_dist &= rsp->resp_key_dist;
784
785 if ((req->auth_req & SMP_AUTH_BONDING) &&
786 (rsp->auth_req & SMP_AUTH_BONDING))
787 auth = SMP_AUTH_BONDING;
788
789 auth |= (req->auth_req | rsp->auth_req) & SMP_AUTH_MITM;
790
791 ret = tk_request(conn, 0, auth, req->io_capability, rsp->io_capability);
792 if (ret)
793 return SMP_UNSPECIFIED;
794
795 set_bit(SMP_FLAG_CFM_PENDING, &smp->flags);
796
797 /* Can't compose response until we have been confirmed */
798 if (test_bit(SMP_FLAG_TK_VALID, &smp->flags))
799 return smp_confirm(smp);
800
801 return 0;
802}
803
804static u8 smp_cmd_pairing_confirm(struct l2cap_conn *conn, struct sk_buff *skb)
805{
806 struct smp_chan *smp = conn->smp_chan;
807
808 BT_DBG("conn %p %s", conn, conn->hcon->out ? "master" : "slave");
809
810 if (skb->len < sizeof(smp->pcnf))
811 return SMP_INVALID_PARAMS;
812
813 memcpy(smp->pcnf, skb->data, sizeof(smp->pcnf));
814 skb_pull(skb, sizeof(smp->pcnf));
815
816 if (conn->hcon->out)
817 smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM, sizeof(smp->prnd),
818 smp->prnd);
819 else if (test_bit(SMP_FLAG_TK_VALID, &smp->flags))
820 return smp_confirm(smp);
821 else
822 set_bit(SMP_FLAG_CFM_PENDING, &smp->flags);
823
824 return 0;
825}
826
827static u8 smp_cmd_pairing_random(struct l2cap_conn *conn, struct sk_buff *skb)
828{
829 struct smp_chan *smp = conn->smp_chan;
830
831 BT_DBG("conn %p", conn);
832
833 if (skb->len < sizeof(smp->rrnd))
834 return SMP_INVALID_PARAMS;
835
836 memcpy(smp->rrnd, skb->data, sizeof(smp->rrnd));
837 skb_pull(skb, sizeof(smp->rrnd));
838
839 return smp_random(smp);
840}
841
842static u8 smp_ltk_encrypt(struct l2cap_conn *conn, u8 sec_level)
843{
844 struct smp_ltk *key;
845 struct hci_conn *hcon = conn->hcon;
846
847 key = hci_find_ltk_by_addr(hcon->hdev, &hcon->dst, hcon->dst_type,
848 hcon->out);
849 if (!key)
850 return 0;
851
852 if (sec_level > BT_SECURITY_MEDIUM && !key->authenticated)
853 return 0;
854
855 if (test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &hcon->flags))
856 return 1;
857
858 hci_le_start_enc(hcon, key->ediv, key->rand, key->val);
859 hcon->enc_key_size = key->enc_size;
860
861 return 1;
862}
863
864static u8 smp_cmd_security_req(struct l2cap_conn *conn, struct sk_buff *skb)
865{
866 struct smp_cmd_security_req *rp = (void *) skb->data;
867 struct smp_cmd_pairing cp;
868 struct hci_conn *hcon = conn->hcon;
869 struct smp_chan *smp;
870 u8 sec_level;
871
872 BT_DBG("conn %p", conn);
873
874 if (skb->len < sizeof(*rp))
875 return SMP_INVALID_PARAMS;
876
877 if (!(conn->hcon->link_mode & HCI_LM_MASTER))
878 return SMP_CMD_NOTSUPP;
879
880 sec_level = authreq_to_seclevel(rp->auth_req);
881 if (sec_level > hcon->pending_sec_level)
882 hcon->pending_sec_level = sec_level;
883
884 if (smp_ltk_encrypt(conn, hcon->pending_sec_level))
885 return 0;
886
887 if (test_and_set_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags))
888 return 0;
889
890 smp = smp_chan_create(conn);
891
892 skb_pull(skb, sizeof(*rp));
893
894 memset(&cp, 0, sizeof(cp));
895 build_pairing_cmd(conn, &cp, NULL, rp->auth_req);
896
897 smp->preq[0] = SMP_CMD_PAIRING_REQ;
898 memcpy(&smp->preq[1], &cp, sizeof(cp));
899
900 smp_send_cmd(conn, SMP_CMD_PAIRING_REQ, sizeof(cp), &cp);
901
902 clear_bit(SMP_FLAG_INITIATOR, &smp->flags);
903
904 return 0;
905}
906
907bool smp_sufficient_security(struct hci_conn *hcon, u8 sec_level)
908{
909 if (sec_level == BT_SECURITY_LOW)
910 return true;
911
912 if (hcon->sec_level >= sec_level)
913 return true;
914
915 return false;
916}
917
918int smp_conn_security(struct hci_conn *hcon, __u8 sec_level)
919{
920 struct l2cap_conn *conn = hcon->l2cap_data;
921 struct smp_chan *smp;
922 __u8 authreq;
923
924 BT_DBG("conn %p hcon %p level 0x%2.2x", conn, hcon, sec_level);
925
926 /* This may be NULL if there's an unexpected disconnection */
927 if (!conn)
928 return 1;
929
930 if (!test_bit(HCI_LE_ENABLED, &hcon->hdev->dev_flags))
931 return 1;
932
933 if (smp_sufficient_security(hcon, sec_level))
934 return 1;
935
936 if (sec_level > hcon->pending_sec_level)
937 hcon->pending_sec_level = sec_level;
938
939 if (hcon->link_mode & HCI_LM_MASTER)
940 if (smp_ltk_encrypt(conn, hcon->pending_sec_level))
941 return 0;
942
943 if (test_and_set_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags))
944 return 0;
945
946 smp = smp_chan_create(conn);
947 if (!smp)
948 return 1;
949
950 authreq = seclevel_to_authreq(sec_level);
951
952 /* Require MITM if IO Capability allows or the security level
953 * requires it.
954 */
955 if (hcon->io_capability != HCI_IO_NO_INPUT_OUTPUT ||
956 hcon->pending_sec_level > BT_SECURITY_MEDIUM)
957 authreq |= SMP_AUTH_MITM;
958
959 if (hcon->link_mode & HCI_LM_MASTER) {
960 struct smp_cmd_pairing cp;
961
962 build_pairing_cmd(conn, &cp, NULL, authreq);
963 smp->preq[0] = SMP_CMD_PAIRING_REQ;
964 memcpy(&smp->preq[1], &cp, sizeof(cp));
965
966 smp_send_cmd(conn, SMP_CMD_PAIRING_REQ, sizeof(cp), &cp);
967 } else {
968 struct smp_cmd_security_req cp;
969 cp.auth_req = authreq;
970 smp_send_cmd(conn, SMP_CMD_SECURITY_REQ, sizeof(cp), &cp);
971 }
972
973 set_bit(SMP_FLAG_INITIATOR, &smp->flags);
974
975 return 0;
976}
977
978static int smp_cmd_encrypt_info(struct l2cap_conn *conn, struct sk_buff *skb)
979{
980 struct smp_cmd_encrypt_info *rp = (void *) skb->data;
981 struct smp_chan *smp = conn->smp_chan;
982
983 BT_DBG("conn %p", conn);
984
985 if (skb->len < sizeof(*rp))
986 return SMP_INVALID_PARAMS;
987
988 /* Ignore this PDU if it wasn't requested */
989 if (!(smp->remote_key_dist & SMP_DIST_ENC_KEY))
990 return 0;
991
992 skb_pull(skb, sizeof(*rp));
993
994 memcpy(smp->tk, rp->ltk, sizeof(smp->tk));
995
996 return 0;
997}
998
999static int smp_cmd_master_ident(struct l2cap_conn *conn, struct sk_buff *skb)
1000{
1001 struct smp_cmd_master_ident *rp = (void *) skb->data;
1002 struct smp_chan *smp = conn->smp_chan;
1003 struct hci_dev *hdev = conn->hcon->hdev;
1004 struct hci_conn *hcon = conn->hcon;
1005 struct smp_ltk *ltk;
1006 u8 authenticated;
1007
1008 BT_DBG("conn %p", conn);
1009
1010 if (skb->len < sizeof(*rp))
1011 return SMP_INVALID_PARAMS;
1012
1013 /* Ignore this PDU if it wasn't requested */
1014 if (!(smp->remote_key_dist & SMP_DIST_ENC_KEY))
1015 return 0;
1016
1017 /* Mark the information as received */
1018 smp->remote_key_dist &= ~SMP_DIST_ENC_KEY;
1019
1020 skb_pull(skb, sizeof(*rp));
1021
1022 hci_dev_lock(hdev);
1023 authenticated = (hcon->sec_level == BT_SECURITY_HIGH);
1024 ltk = hci_add_ltk(hdev, &hcon->dst, hcon->dst_type, HCI_SMP_LTK,
1025 authenticated, smp->tk, smp->enc_key_size,
1026 rp->ediv, rp->rand);
1027 smp->ltk = ltk;
1028 if (!(smp->remote_key_dist & SMP_DIST_ID_KEY))
1029 smp_distribute_keys(conn);
1030 hci_dev_unlock(hdev);
1031
1032 return 0;
1033}
1034
1035static int smp_cmd_ident_info(struct l2cap_conn *conn, struct sk_buff *skb)
1036{
1037 struct smp_cmd_ident_info *info = (void *) skb->data;
1038 struct smp_chan *smp = conn->smp_chan;
1039
1040 BT_DBG("");
1041
1042 if (skb->len < sizeof(*info))
1043 return SMP_INVALID_PARAMS;
1044
1045 /* Ignore this PDU if it wasn't requested */
1046 if (!(smp->remote_key_dist & SMP_DIST_ID_KEY))
1047 return 0;
1048
1049 skb_pull(skb, sizeof(*info));
1050
1051 memcpy(smp->irk, info->irk, 16);
1052
1053 return 0;
1054}
1055
1056static int smp_cmd_ident_addr_info(struct l2cap_conn *conn,
1057 struct sk_buff *skb)
1058{
1059 struct smp_cmd_ident_addr_info *info = (void *) skb->data;
1060 struct smp_chan *smp = conn->smp_chan;
1061 struct hci_conn *hcon = conn->hcon;
1062 bdaddr_t rpa;
1063
1064 BT_DBG("");
1065
1066 if (skb->len < sizeof(*info))
1067 return SMP_INVALID_PARAMS;
1068
1069 /* Ignore this PDU if it wasn't requested */
1070 if (!(smp->remote_key_dist & SMP_DIST_ID_KEY))
1071 return 0;
1072
1073 /* Mark the information as received */
1074 smp->remote_key_dist &= ~SMP_DIST_ID_KEY;
1075
1076 skb_pull(skb, sizeof(*info));
1077
1078 /* Strictly speaking the Core Specification (4.1) allows sending
1079 * an empty address which would force us to rely on just the IRK
1080 * as "identity information". However, since such
1081 * implementations are not known of and in order to not over
1082 * complicate our implementation, simply pretend that we never
1083 * received an IRK for such a device.
1084 */
1085 if (!bacmp(&info->bdaddr, BDADDR_ANY)) {
1086 BT_ERR("Ignoring IRK with no identity address");
1087 smp_distribute_keys(conn);
1088 return 0;
1089 }
1090
1091 bacpy(&smp->id_addr, &info->bdaddr);
1092 smp->id_addr_type = info->addr_type;
1093
1094 if (hci_bdaddr_is_rpa(&hcon->dst, hcon->dst_type))
1095 bacpy(&rpa, &hcon->dst);
1096 else
1097 bacpy(&rpa, BDADDR_ANY);
1098
1099 smp->remote_irk = hci_add_irk(conn->hcon->hdev, &smp->id_addr,
1100 smp->id_addr_type, smp->irk, &rpa);
1101
1102 smp_distribute_keys(conn);
1103
1104 return 0;
1105}
1106
1107static int smp_cmd_sign_info(struct l2cap_conn *conn, struct sk_buff *skb)
1108{
1109 struct smp_cmd_sign_info *rp = (void *) skb->data;
1110 struct smp_chan *smp = conn->smp_chan;
1111 struct hci_dev *hdev = conn->hcon->hdev;
1112 struct smp_csrk *csrk;
1113
1114 BT_DBG("conn %p", conn);
1115
1116 if (skb->len < sizeof(*rp))
1117 return SMP_INVALID_PARAMS;
1118
1119 /* Ignore this PDU if it wasn't requested */
1120 if (!(smp->remote_key_dist & SMP_DIST_SIGN))
1121 return 0;
1122
1123 /* Mark the information as received */
1124 smp->remote_key_dist &= ~SMP_DIST_SIGN;
1125
1126 skb_pull(skb, sizeof(*rp));
1127
1128 hci_dev_lock(hdev);
1129 csrk = kzalloc(sizeof(*csrk), GFP_KERNEL);
1130 if (csrk) {
1131 csrk->master = 0x01;
1132 memcpy(csrk->val, rp->csrk, sizeof(csrk->val));
1133 }
1134 smp->csrk = csrk;
1135 if (!(smp->remote_key_dist & SMP_DIST_SIGN))
1136 smp_distribute_keys(conn);
1137 hci_dev_unlock(hdev);
1138
1139 return 0;
1140}
1141
1142int smp_sig_channel(struct l2cap_conn *conn, struct sk_buff *skb)
1143{
1144 struct hci_conn *hcon = conn->hcon;
1145 __u8 code, reason;
1146 int err = 0;
1147
1148 if (hcon->type != LE_LINK) {
1149 kfree_skb(skb);
1150 return 0;
1151 }
1152
1153 if (skb->len < 1) {
1154 kfree_skb(skb);
1155 return -EILSEQ;
1156 }
1157
1158 if (!test_bit(HCI_LE_ENABLED, &hcon->hdev->dev_flags)) {
1159 err = -ENOTSUPP;
1160 reason = SMP_PAIRING_NOTSUPP;
1161 goto done;
1162 }
1163
1164 code = skb->data[0];
1165 skb_pull(skb, sizeof(code));
1166
1167 /*
1168 * The SMP context must be initialized for all other PDUs except
1169 * pairing and security requests. If we get any other PDU when
1170 * not initialized simply disconnect (done if this function
1171 * returns an error).
1172 */
1173 if (code != SMP_CMD_PAIRING_REQ && code != SMP_CMD_SECURITY_REQ &&
1174 !conn->smp_chan) {
1175 BT_ERR("Unexpected SMP command 0x%02x. Disconnecting.", code);
1176 kfree_skb(skb);
1177 return -ENOTSUPP;
1178 }
1179
1180 switch (code) {
1181 case SMP_CMD_PAIRING_REQ:
1182 reason = smp_cmd_pairing_req(conn, skb);
1183 break;
1184
1185 case SMP_CMD_PAIRING_FAIL:
1186 smp_failure(conn, 0);
1187 reason = 0;
1188 err = -EPERM;
1189 break;
1190
1191 case SMP_CMD_PAIRING_RSP:
1192 reason = smp_cmd_pairing_rsp(conn, skb);
1193 break;
1194
1195 case SMP_CMD_SECURITY_REQ:
1196 reason = smp_cmd_security_req(conn, skb);
1197 break;
1198
1199 case SMP_CMD_PAIRING_CONFIRM:
1200 reason = smp_cmd_pairing_confirm(conn, skb);
1201 break;
1202
1203 case SMP_CMD_PAIRING_RANDOM:
1204 reason = smp_cmd_pairing_random(conn, skb);
1205 break;
1206
1207 case SMP_CMD_ENCRYPT_INFO:
1208 reason = smp_cmd_encrypt_info(conn, skb);
1209 break;
1210
1211 case SMP_CMD_MASTER_IDENT:
1212 reason = smp_cmd_master_ident(conn, skb);
1213 break;
1214
1215 case SMP_CMD_IDENT_INFO:
1216 reason = smp_cmd_ident_info(conn, skb);
1217 break;
1218
1219 case SMP_CMD_IDENT_ADDR_INFO:
1220 reason = smp_cmd_ident_addr_info(conn, skb);
1221 break;
1222
1223 case SMP_CMD_SIGN_INFO:
1224 reason = smp_cmd_sign_info(conn, skb);
1225 break;
1226
1227 default:
1228 BT_DBG("Unknown command code 0x%2.2x", code);
1229
1230 reason = SMP_CMD_NOTSUPP;
1231 err = -EOPNOTSUPP;
1232 goto done;
1233 }
1234
1235done:
1236 if (reason)
1237 smp_failure(conn, reason);
1238
1239 kfree_skb(skb);
1240 return err;
1241}
1242
1243static void smp_notify_keys(struct l2cap_conn *conn)
1244{
1245 struct smp_chan *smp = conn->smp_chan;
1246 struct hci_conn *hcon = conn->hcon;
1247 struct hci_dev *hdev = hcon->hdev;
1248 struct smp_cmd_pairing *req = (void *) &smp->preq[1];
1249 struct smp_cmd_pairing *rsp = (void *) &smp->prsp[1];
1250 bool persistent;
1251
1252 if (smp->remote_irk) {
1253 mgmt_new_irk(hdev, smp->remote_irk);
1254 /* Now that user space can be considered to know the
1255 * identity address track the connection based on it
1256 * from now on.
1257 */
1258 bacpy(&hcon->dst, &smp->remote_irk->bdaddr);
1259 hcon->dst_type = smp->remote_irk->addr_type;
1260 l2cap_conn_update_id_addr(hcon);
1261 }
1262
1263 /* The LTKs and CSRKs should be persistent only if both sides
1264 * had the bonding bit set in their authentication requests.
1265 */
1266 persistent = !!((req->auth_req & rsp->auth_req) & SMP_AUTH_BONDING);
1267
1268 if (smp->csrk) {
1269 smp->csrk->bdaddr_type = hcon->dst_type;
1270 bacpy(&smp->csrk->bdaddr, &hcon->dst);
1271 mgmt_new_csrk(hdev, smp->csrk, persistent);
1272 }
1273
1274 if (smp->slave_csrk) {
1275 smp->slave_csrk->bdaddr_type = hcon->dst_type;
1276 bacpy(&smp->slave_csrk->bdaddr, &hcon->dst);
1277 mgmt_new_csrk(hdev, smp->slave_csrk, persistent);
1278 }
1279
1280 if (smp->ltk) {
1281 smp->ltk->bdaddr_type = hcon->dst_type;
1282 bacpy(&smp->ltk->bdaddr, &hcon->dst);
1283 mgmt_new_ltk(hdev, smp->ltk, persistent);
1284 }
1285
1286 if (smp->slave_ltk) {
1287 smp->slave_ltk->bdaddr_type = hcon->dst_type;
1288 bacpy(&smp->slave_ltk->bdaddr, &hcon->dst);
1289 mgmt_new_ltk(hdev, smp->slave_ltk, persistent);
1290 }
1291}
1292
1293int smp_distribute_keys(struct l2cap_conn *conn)
1294{
1295 struct smp_cmd_pairing *req, *rsp;
1296 struct smp_chan *smp = conn->smp_chan;
1297 struct hci_conn *hcon = conn->hcon;
1298 struct hci_dev *hdev = hcon->hdev;
1299 __u8 *keydist;
1300
1301 BT_DBG("conn %p", conn);
1302
1303 if (!test_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags))
1304 return 0;
1305
1306 rsp = (void *) &smp->prsp[1];
1307
1308 /* The responder sends its keys first */
1309 if (hcon->out && (smp->remote_key_dist & 0x07))
1310 return 0;
1311
1312 req = (void *) &smp->preq[1];
1313
1314 if (hcon->out) {
1315 keydist = &rsp->init_key_dist;
1316 *keydist &= req->init_key_dist;
1317 } else {
1318 keydist = &rsp->resp_key_dist;
1319 *keydist &= req->resp_key_dist;
1320 }
1321
1322 BT_DBG("keydist 0x%x", *keydist);
1323
1324 if (*keydist & SMP_DIST_ENC_KEY) {
1325 struct smp_cmd_encrypt_info enc;
1326 struct smp_cmd_master_ident ident;
1327 struct smp_ltk *ltk;
1328 u8 authenticated;
1329 __le16 ediv;
1330 __le64 rand;
1331
1332 get_random_bytes(enc.ltk, sizeof(enc.ltk));
1333 get_random_bytes(&ediv, sizeof(ediv));
1334 get_random_bytes(&rand, sizeof(rand));
1335
1336 smp_send_cmd(conn, SMP_CMD_ENCRYPT_INFO, sizeof(enc), &enc);
1337
1338 authenticated = hcon->sec_level == BT_SECURITY_HIGH;
1339 ltk = hci_add_ltk(hdev, &hcon->dst, hcon->dst_type,
1340 HCI_SMP_LTK_SLAVE, authenticated, enc.ltk,
1341 smp->enc_key_size, ediv, rand);
1342 smp->slave_ltk = ltk;
1343
1344 ident.ediv = ediv;
1345 ident.rand = rand;
1346
1347 smp_send_cmd(conn, SMP_CMD_MASTER_IDENT, sizeof(ident), &ident);
1348
1349 *keydist &= ~SMP_DIST_ENC_KEY;
1350 }
1351
1352 if (*keydist & SMP_DIST_ID_KEY) {
1353 struct smp_cmd_ident_addr_info addrinfo;
1354 struct smp_cmd_ident_info idinfo;
1355
1356 memcpy(idinfo.irk, hdev->irk, sizeof(idinfo.irk));
1357
1358 smp_send_cmd(conn, SMP_CMD_IDENT_INFO, sizeof(idinfo), &idinfo);
1359
1360 /* The hci_conn contains the local identity address
1361 * after the connection has been established.
1362 *
1363 * This is true even when the connection has been
1364 * established using a resolvable random address.
1365 */
1366 bacpy(&addrinfo.bdaddr, &hcon->src);
1367 addrinfo.addr_type = hcon->src_type;
1368
1369 smp_send_cmd(conn, SMP_CMD_IDENT_ADDR_INFO, sizeof(addrinfo),
1370 &addrinfo);
1371
1372 *keydist &= ~SMP_DIST_ID_KEY;
1373 }
1374
1375 if (*keydist & SMP_DIST_SIGN) {
1376 struct smp_cmd_sign_info sign;
1377 struct smp_csrk *csrk;
1378
1379 /* Generate a new random key */
1380 get_random_bytes(sign.csrk, sizeof(sign.csrk));
1381
1382 csrk = kzalloc(sizeof(*csrk), GFP_KERNEL);
1383 if (csrk) {
1384 csrk->master = 0x00;
1385 memcpy(csrk->val, sign.csrk, sizeof(csrk->val));
1386 }
1387 smp->slave_csrk = csrk;
1388
1389 smp_send_cmd(conn, SMP_CMD_SIGN_INFO, sizeof(sign), &sign);
1390
1391 *keydist &= ~SMP_DIST_SIGN;
1392 }
1393
1394 /* If there are still keys to be received wait for them */
1395 if ((smp->remote_key_dist & 0x07))
1396 return 0;
1397
1398 clear_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags);
1399 cancel_delayed_work_sync(&conn->security_timer);
1400 set_bit(SMP_FLAG_COMPLETE, &smp->flags);
1401 smp_notify_keys(conn);
1402
1403 smp_chan_destroy(conn);
1404
1405 return 0;
1406}
This page took 0.032616 seconds and 5 git commands to generate.