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