Bluetooth: Re-encrypt link after receiving an LTK
[deliverable/linux.git] / net / bluetooth / smp.c
CommitLineData
eb492e01
AB
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
8c520a59
GP
23#include <linux/crypto.h>
24#include <linux/scatterlist.h>
25#include <crypto/b128ops.h>
26
eb492e01
AB
27#include <net/bluetooth/bluetooth.h>
28#include <net/bluetooth/hci_core.h>
29#include <net/bluetooth/l2cap.h>
2b64d153 30#include <net/bluetooth/mgmt.h>
ac4b7236
MH
31
32#include "smp.h"
d22ef0bc 33
17b02e62 34#define SMP_TIMEOUT msecs_to_jiffies(30000)
5d3de7df 35
065a13e2
JH
36#define AUTH_REQ_MASK 0x07
37
d22ef0bc
AB
38static inline void swap128(u8 src[16], u8 dst[16])
39{
40 int i;
41 for (i = 0; i < 16; i++)
42 dst[15 - i] = src[i];
43}
44
45static inline void swap56(u8 src[7], u8 dst[7])
46{
47 int i;
48 for (i = 0; i < 7; i++)
49 dst[6 - i] = src[i];
50}
51
52static int smp_e(struct crypto_blkcipher *tfm, const u8 *k, u8 *r)
53{
54 struct blkcipher_desc desc;
55 struct scatterlist sg;
201a5929 56 int err;
d22ef0bc
AB
57
58 if (tfm == NULL) {
59 BT_ERR("tfm %p", tfm);
60 return -EINVAL;
61 }
62
63 desc.tfm = tfm;
64 desc.flags = 0;
65
66 err = crypto_blkcipher_setkey(tfm, k, 16);
67 if (err) {
68 BT_ERR("cipher setkey failed: %d", err);
69 return err;
70 }
71
72 sg_init_one(&sg, r, 16);
73
d22ef0bc
AB
74 err = crypto_blkcipher_encrypt(&desc, &sg, &sg, 16);
75 if (err)
76 BT_ERR("Encrypt data error %d", err);
77
78 return err;
79}
80
60478054
JH
81static int smp_ah(struct crypto_blkcipher *tfm, u8 irk[16], u8 r[3], u8 res[3])
82{
83 u8 _res[16], k[16];
84 int err;
85
86 /* r' = padding || r */
87 memset(_res, 0, 13);
88 _res[13] = r[2];
89 _res[14] = r[1];
90 _res[15] = r[0];
91
92 swap128(irk, k);
93 err = smp_e(tfm, k, _res);
94 if (err) {
95 BT_ERR("Encrypt error");
96 return err;
97 }
98
99 /* The output of the random address function ah is:
100 * ah(h, r) = e(k, r') mod 2^24
101 * The output of the security function e is then truncated to 24 bits
102 * by taking the least significant 24 bits of the output of e as the
103 * result of ah.
104 */
105 res[0] = _res[15];
106 res[1] = _res[14];
107 res[2] = _res[13];
108
109 return 0;
110}
111
112bool smp_irk_matches(struct crypto_blkcipher *tfm, u8 irk[16],
113 bdaddr_t *bdaddr)
114{
115 u8 hash[3];
116 int err;
117
118 BT_DBG("RPA %pMR IRK %*phN", bdaddr, 16, irk);
119
120 err = smp_ah(tfm, irk, &bdaddr->b[3], hash);
121 if (err)
122 return false;
123
124 return !memcmp(bdaddr->b, hash, 3);
125}
126
b1e2b3ae
JH
127int smp_generate_rpa(struct crypto_blkcipher *tfm, u8 irk[16], bdaddr_t *rpa)
128{
129 int err;
130
131 get_random_bytes(&rpa->b[3], 3);
132
133 rpa->b[5] &= 0x3f; /* Clear two most significant bits */
134 rpa->b[5] |= 0x40; /* Set second most significant bit */
135
136 err = smp_ah(tfm, irk, &rpa->b[3], rpa->b);
137 if (err < 0)
138 return err;
139
140 BT_DBG("RPA %pMR", rpa);
141
142 return 0;
143}
144
d22ef0bc 145static int smp_c1(struct crypto_blkcipher *tfm, u8 k[16], u8 r[16],
f1560463
MH
146 u8 preq[7], u8 pres[7], u8 _iat, bdaddr_t *ia,
147 u8 _rat, bdaddr_t *ra, u8 res[16])
d22ef0bc
AB
148{
149 u8 p1[16], p2[16];
150 int err;
151
152 memset(p1, 0, 16);
153
154 /* p1 = pres || preq || _rat || _iat */
155 swap56(pres, p1);
156 swap56(preq, p1 + 7);
157 p1[14] = _rat;
158 p1[15] = _iat;
159
160 memset(p2, 0, 16);
161
162 /* p2 = padding || ia || ra */
163 baswap((bdaddr_t *) (p2 + 4), ia);
164 baswap((bdaddr_t *) (p2 + 10), ra);
165
166 /* res = r XOR p1 */
167 u128_xor((u128 *) res, (u128 *) r, (u128 *) p1);
168
169 /* res = e(k, res) */
170 err = smp_e(tfm, k, res);
171 if (err) {
172 BT_ERR("Encrypt data error");
173 return err;
174 }
175
176 /* res = res XOR p2 */
177 u128_xor((u128 *) res, (u128 *) res, (u128 *) p2);
178
179 /* res = e(k, res) */
180 err = smp_e(tfm, k, res);
181 if (err)
182 BT_ERR("Encrypt data error");
183
184 return err;
185}
186
f1560463
MH
187static int smp_s1(struct crypto_blkcipher *tfm, u8 k[16], u8 r1[16],
188 u8 r2[16], u8 _r[16])
d22ef0bc
AB
189{
190 int err;
191
192 /* Just least significant octets from r1 and r2 are considered */
193 memcpy(_r, r1 + 8, 8);
194 memcpy(_r + 8, r2 + 8, 8);
195
196 err = smp_e(tfm, k, _r);
197 if (err)
198 BT_ERR("Encrypt data error");
199
200 return err;
201}
202
eb492e01 203static struct sk_buff *smp_build_cmd(struct l2cap_conn *conn, u8 code,
f1560463 204 u16 dlen, void *data)
eb492e01
AB
205{
206 struct sk_buff *skb;
207 struct l2cap_hdr *lh;
208 int len;
209
210 len = L2CAP_HDR_SIZE + sizeof(code) + dlen;
211
212 if (len > conn->mtu)
213 return NULL;
214
215 skb = bt_skb_alloc(len, GFP_ATOMIC);
216 if (!skb)
217 return NULL;
218
219 lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
220 lh->len = cpu_to_le16(sizeof(code) + dlen);
d8aece2a 221 lh->cid = __constant_cpu_to_le16(L2CAP_CID_SMP);
eb492e01
AB
222
223 memcpy(skb_put(skb, sizeof(code)), &code, sizeof(code));
224
225 memcpy(skb_put(skb, dlen), data, dlen);
226
227 return skb;
228}
229
230static void smp_send_cmd(struct l2cap_conn *conn, u8 code, u16 len, void *data)
231{
232 struct sk_buff *skb = smp_build_cmd(conn, code, len, data);
233
234 BT_DBG("code 0x%2.2x", code);
235
236 if (!skb)
237 return;
238
73d80deb
LAD
239 skb->priority = HCI_PRIO_MAX;
240 hci_send_acl(conn->hchan, skb, 0);
e2dcd113 241
6c9d42a1 242 cancel_delayed_work_sync(&conn->security_timer);
17b02e62 243 schedule_delayed_work(&conn->security_timer, SMP_TIMEOUT);
eb492e01
AB
244}
245
2b64d153
BG
246static __u8 authreq_to_seclevel(__u8 authreq)
247{
248 if (authreq & SMP_AUTH_MITM)
249 return BT_SECURITY_HIGH;
250 else
251 return BT_SECURITY_MEDIUM;
252}
253
254static __u8 seclevel_to_authreq(__u8 sec_level)
255{
256 switch (sec_level) {
257 case BT_SECURITY_HIGH:
258 return SMP_AUTH_MITM | SMP_AUTH_BONDING;
259 case BT_SECURITY_MEDIUM:
260 return SMP_AUTH_BONDING;
261 default:
262 return SMP_AUTH_NONE;
263 }
264}
265
b8e66eac 266static void build_pairing_cmd(struct l2cap_conn *conn,
f1560463
MH
267 struct smp_cmd_pairing *req,
268 struct smp_cmd_pairing *rsp, __u8 authreq)
b8e66eac 269{
fd349c02
JH
270 struct smp_chan *smp = conn->smp_chan;
271 struct hci_conn *hcon = conn->hcon;
272 struct hci_dev *hdev = hcon->hdev;
273 u8 local_dist = 0, remote_dist = 0;
54790f73 274
a8b2d5c2 275 if (test_bit(HCI_PAIRABLE, &conn->hcon->hdev->dev_flags)) {
fd349c02
JH
276 local_dist = SMP_DIST_ENC_KEY;
277 remote_dist = SMP_DIST_ENC_KEY;
54790f73 278 authreq |= SMP_AUTH_BONDING;
2b64d153
BG
279 } else {
280 authreq &= ~SMP_AUTH_BONDING;
54790f73
VCG
281 }
282
fd349c02
JH
283 if (test_bit(HCI_RPA_RESOLVING, &hdev->dev_flags))
284 remote_dist |= SMP_DIST_ID_KEY;
285
863efaf2
JH
286 if (test_bit(HCI_PRIVACY, &hdev->dev_flags))
287 local_dist |= SMP_DIST_ID_KEY;
288
54790f73
VCG
289 if (rsp == NULL) {
290 req->io_capability = conn->hcon->io_capability;
291 req->oob_flag = SMP_OOB_NOT_PRESENT;
292 req->max_key_size = SMP_MAX_ENC_KEY_SIZE;
fd349c02
JH
293 req->init_key_dist = local_dist;
294 req->resp_key_dist = remote_dist;
065a13e2 295 req->auth_req = (authreq & AUTH_REQ_MASK);
fd349c02
JH
296
297 smp->remote_key_dist = remote_dist;
54790f73
VCG
298 return;
299 }
300
301 rsp->io_capability = conn->hcon->io_capability;
302 rsp->oob_flag = SMP_OOB_NOT_PRESENT;
303 rsp->max_key_size = SMP_MAX_ENC_KEY_SIZE;
fd349c02
JH
304 rsp->init_key_dist = req->init_key_dist & remote_dist;
305 rsp->resp_key_dist = req->resp_key_dist & local_dist;
065a13e2 306 rsp->auth_req = (authreq & AUTH_REQ_MASK);
fd349c02
JH
307
308 smp->remote_key_dist = rsp->init_key_dist;
b8e66eac
VCG
309}
310
3158c50c
VCG
311static u8 check_enc_key_size(struct l2cap_conn *conn, __u8 max_key_size)
312{
1c1def09
VCG
313 struct smp_chan *smp = conn->smp_chan;
314
3158c50c 315 if ((max_key_size > SMP_MAX_ENC_KEY_SIZE) ||
f1560463 316 (max_key_size < SMP_MIN_ENC_KEY_SIZE))
3158c50c
VCG
317 return SMP_ENC_KEY_SIZE;
318
f7aa611a 319 smp->enc_key_size = max_key_size;
3158c50c
VCG
320
321 return 0;
322}
323
84794e11 324static void smp_failure(struct l2cap_conn *conn, u8 reason)
4f957a76 325{
bab73cb6
JH
326 struct hci_conn *hcon = conn->hcon;
327
84794e11 328 if (reason)
4f957a76 329 smp_send_cmd(conn, SMP_CMD_PAIRING_FAIL, sizeof(reason),
f1560463 330 &reason);
4f957a76 331
ce39fb4e
MH
332 clear_bit(HCI_CONN_ENCRYPT_PEND, &hcon->flags);
333 mgmt_auth_failed(hcon->hdev, &hcon->dst, hcon->type, hcon->dst_type,
334 HCI_ERROR_AUTH_FAILURE);
f1c09c07 335
61a0cfb0
AG
336 cancel_delayed_work_sync(&conn->security_timer);
337
ce39fb4e 338 if (test_and_clear_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags))
f1c09c07 339 smp_chan_destroy(conn);
4f957a76
BG
340}
341
2b64d153
BG
342#define JUST_WORKS 0x00
343#define JUST_CFM 0x01
344#define REQ_PASSKEY 0x02
345#define CFM_PASSKEY 0x03
346#define REQ_OOB 0x04
347#define OVERLAP 0xFF
348
349static const u8 gen_method[5][5] = {
350 { JUST_WORKS, JUST_CFM, REQ_PASSKEY, JUST_WORKS, REQ_PASSKEY },
351 { JUST_WORKS, JUST_CFM, REQ_PASSKEY, JUST_WORKS, REQ_PASSKEY },
352 { CFM_PASSKEY, CFM_PASSKEY, REQ_PASSKEY, JUST_WORKS, CFM_PASSKEY },
353 { JUST_WORKS, JUST_CFM, JUST_WORKS, JUST_WORKS, JUST_CFM },
354 { CFM_PASSKEY, CFM_PASSKEY, REQ_PASSKEY, JUST_WORKS, OVERLAP },
355};
356
357static int tk_request(struct l2cap_conn *conn, u8 remote_oob, u8 auth,
358 u8 local_io, u8 remote_io)
359{
360 struct hci_conn *hcon = conn->hcon;
361 struct smp_chan *smp = conn->smp_chan;
362 u8 method;
363 u32 passkey = 0;
364 int ret = 0;
365
366 /* Initialize key for JUST WORKS */
367 memset(smp->tk, 0, sizeof(smp->tk));
368 clear_bit(SMP_FLAG_TK_VALID, &smp->smp_flags);
369
370 BT_DBG("tk_request: auth:%d lcl:%d rem:%d", auth, local_io, remote_io);
371
372 /* If neither side wants MITM, use JUST WORKS */
373 /* If either side has unknown io_caps, use JUST WORKS */
374 /* Otherwise, look up method from the table */
375 if (!(auth & SMP_AUTH_MITM) ||
f1560463
MH
376 local_io > SMP_IO_KEYBOARD_DISPLAY ||
377 remote_io > SMP_IO_KEYBOARD_DISPLAY)
2b64d153
BG
378 method = JUST_WORKS;
379 else
b3ff53ff 380 method = gen_method[remote_io][local_io];
2b64d153
BG
381
382 /* If not bonding, don't ask user to confirm a Zero TK */
383 if (!(auth & SMP_AUTH_BONDING) && method == JUST_CFM)
384 method = JUST_WORKS;
385
386 /* If Just Works, Continue with Zero TK */
387 if (method == JUST_WORKS) {
388 set_bit(SMP_FLAG_TK_VALID, &smp->smp_flags);
389 return 0;
390 }
391
392 /* Not Just Works/Confirm results in MITM Authentication */
393 if (method != JUST_CFM)
394 set_bit(SMP_FLAG_MITM_AUTH, &smp->smp_flags);
395
396 /* If both devices have Keyoard-Display I/O, the master
397 * Confirms and the slave Enters the passkey.
398 */
399 if (method == OVERLAP) {
400 if (hcon->link_mode & HCI_LM_MASTER)
401 method = CFM_PASSKEY;
402 else
403 method = REQ_PASSKEY;
404 }
405
406 /* Generate random passkey. Not valid until confirmed. */
407 if (method == CFM_PASSKEY) {
408 u8 key[16];
409
410 memset(key, 0, sizeof(key));
411 get_random_bytes(&passkey, sizeof(passkey));
412 passkey %= 1000000;
413 put_unaligned_le32(passkey, key);
414 swap128(key, smp->tk);
415 BT_DBG("PassKey: %d", passkey);
416 }
417
418 hci_dev_lock(hcon->hdev);
419
420 if (method == REQ_PASSKEY)
ce39fb4e 421 ret = mgmt_user_passkey_request(hcon->hdev, &hcon->dst,
272d90df 422 hcon->type, hcon->dst_type);
2b64d153 423 else
ce39fb4e 424 ret = mgmt_user_confirm_request(hcon->hdev, &hcon->dst,
272d90df 425 hcon->type, hcon->dst_type,
2b64d153
BG
426 cpu_to_le32(passkey), 0);
427
428 hci_dev_unlock(hcon->hdev);
429
430 return ret;
431}
432
8aab4757
VCG
433static void confirm_work(struct work_struct *work)
434{
435 struct smp_chan *smp = container_of(work, struct smp_chan, confirm);
436 struct l2cap_conn *conn = smp->conn;
893ce8b1
JH
437 struct hci_dev *hdev = conn->hcon->hdev;
438 struct crypto_blkcipher *tfm = hdev->tfm_aes;
8aab4757
VCG
439 struct smp_cmd_pairing_confirm cp;
440 int ret;
441 u8 res[16], reason;
442
443 BT_DBG("conn %p", conn);
444
893ce8b1
JH
445 /* Prevent mutual access to hdev->tfm_aes */
446 hci_dev_lock(hdev);
8aab4757 447
b1cd5fd9
JH
448 ret = smp_c1(tfm, smp->tk, smp->prnd, smp->preq, smp->prsp,
449 conn->hcon->init_addr_type, &conn->hcon->init_addr,
450 conn->hcon->resp_addr_type, &conn->hcon->resp_addr, res);
893ce8b1
JH
451
452 hci_dev_unlock(hdev);
453
8aab4757
VCG
454 if (ret) {
455 reason = SMP_UNSPECIFIED;
456 goto error;
457 }
458
2b64d153
BG
459 clear_bit(SMP_FLAG_CFM_PENDING, &smp->smp_flags);
460
8aab4757
VCG
461 swap128(res, cp.confirm_val);
462 smp_send_cmd(smp->conn, SMP_CMD_PAIRING_CONFIRM, sizeof(cp), &cp);
463
464 return;
465
466error:
84794e11 467 smp_failure(conn, reason);
8aab4757
VCG
468}
469
470static void random_work(struct work_struct *work)
471{
472 struct smp_chan *smp = container_of(work, struct smp_chan, random);
473 struct l2cap_conn *conn = smp->conn;
474 struct hci_conn *hcon = conn->hcon;
893ce8b1
JH
475 struct hci_dev *hdev = hcon->hdev;
476 struct crypto_blkcipher *tfm = hdev->tfm_aes;
8aab4757
VCG
477 u8 reason, confirm[16], res[16], key[16];
478 int ret;
479
480 if (IS_ERR_OR_NULL(tfm)) {
481 reason = SMP_UNSPECIFIED;
482 goto error;
483 }
484
485 BT_DBG("conn %p %s", conn, conn->hcon->out ? "master" : "slave");
486
893ce8b1
JH
487 /* Prevent mutual access to hdev->tfm_aes */
488 hci_dev_lock(hdev);
489
b1cd5fd9
JH
490 ret = smp_c1(tfm, smp->tk, smp->rrnd, smp->preq, smp->prsp,
491 hcon->init_addr_type, &hcon->init_addr,
492 hcon->resp_addr_type, &hcon->resp_addr, res);
893ce8b1
JH
493
494 hci_dev_unlock(hdev);
495
8aab4757
VCG
496 if (ret) {
497 reason = SMP_UNSPECIFIED;
498 goto error;
499 }
500
501 swap128(res, confirm);
502
503 if (memcmp(smp->pcnf, confirm, sizeof(smp->pcnf)) != 0) {
504 BT_ERR("Pairing failed (confirmation values mismatch)");
505 reason = SMP_CONFIRM_FAILED;
506 goto error;
507 }
508
509 if (hcon->out) {
fe39c7b2
MH
510 u8 stk[16];
511 __le64 rand = 0;
512 __le16 ediv = 0;
8aab4757
VCG
513
514 smp_s1(tfm, smp->tk, smp->rrnd, smp->prnd, key);
515 swap128(key, stk);
516
f7aa611a 517 memset(stk + smp->enc_key_size, 0,
04124681 518 SMP_MAX_ENC_KEY_SIZE - smp->enc_key_size);
8aab4757 519
51a8efd7 520 if (test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &hcon->flags)) {
8aab4757
VCG
521 reason = SMP_UNSPECIFIED;
522 goto error;
523 }
524
525 hci_le_start_enc(hcon, ediv, rand, stk);
f7aa611a 526 hcon->enc_key_size = smp->enc_key_size;
8aab4757 527 } else {
fe39c7b2
MH
528 u8 stk[16], r[16];
529 __le64 rand = 0;
530 __le16 ediv = 0;
8aab4757
VCG
531
532 swap128(smp->prnd, r);
533 smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM, sizeof(r), r);
534
535 smp_s1(tfm, smp->tk, smp->prnd, smp->rrnd, key);
536 swap128(key, stk);
537
f7aa611a 538 memset(stk + smp->enc_key_size, 0,
f1560463 539 SMP_MAX_ENC_KEY_SIZE - smp->enc_key_size);
8aab4757 540
ce39fb4e 541 hci_add_ltk(hcon->hdev, &hcon->dst, hcon->dst_type,
35d70271 542 HCI_SMP_STK_SLAVE, 0, stk, smp->enc_key_size,
04124681 543 ediv, rand);
8aab4757
VCG
544 }
545
546 return;
547
548error:
84794e11 549 smp_failure(conn, reason);
8aab4757
VCG
550}
551
552static struct smp_chan *smp_chan_create(struct l2cap_conn *conn)
553{
554 struct smp_chan *smp;
555
f1560463 556 smp = kzalloc(sizeof(*smp), GFP_ATOMIC);
8aab4757
VCG
557 if (!smp)
558 return NULL;
559
560 INIT_WORK(&smp->confirm, confirm_work);
561 INIT_WORK(&smp->random, random_work);
562
563 smp->conn = conn;
564 conn->smp_chan = smp;
2b64d153 565 conn->hcon->smp_conn = conn;
8aab4757
VCG
566
567 hci_conn_hold(conn->hcon);
568
569 return smp;
570}
571
572void smp_chan_destroy(struct l2cap_conn *conn)
573{
c8eb9690 574 struct smp_chan *smp = conn->smp_chan;
f4a407be 575 bool complete;
c8eb9690 576
f1c09c07 577 BUG_ON(!smp);
c8eb9690 578
f4a407be
JH
579 complete = test_bit(SMP_FLAG_COMPLETE, &smp->smp_flags);
580 mgmt_smp_complete(conn->hcon, complete);
581
759331d7
JH
582 /* If pairing failed clean up any keys we might have */
583 if (!complete) {
584 if (smp->ltk) {
585 list_del(&smp->ltk->list);
586 kfree(smp->ltk);
587 }
588
589 if (smp->slave_ltk) {
590 list_del(&smp->slave_ltk->list);
591 kfree(smp->slave_ltk);
592 }
593
594 if (smp->remote_irk) {
595 list_del(&smp->remote_irk->list);
596 kfree(smp->remote_irk);
597 }
598 }
599
c8eb9690
BG
600 kfree(smp);
601 conn->smp_chan = NULL;
2b64d153 602 conn->hcon->smp_conn = NULL;
76a68ba0 603 hci_conn_drop(conn->hcon);
8aab4757
VCG
604}
605
2b64d153
BG
606int smp_user_confirm_reply(struct hci_conn *hcon, u16 mgmt_op, __le32 passkey)
607{
608 struct l2cap_conn *conn = hcon->smp_conn;
609 struct smp_chan *smp;
610 u32 value;
611 u8 key[16];
612
613 BT_DBG("");
614
615 if (!conn)
616 return -ENOTCONN;
617
618 smp = conn->smp_chan;
619
620 switch (mgmt_op) {
621 case MGMT_OP_USER_PASSKEY_REPLY:
622 value = le32_to_cpu(passkey);
623 memset(key, 0, sizeof(key));
624 BT_DBG("PassKey: %d", value);
625 put_unaligned_le32(value, key);
626 swap128(key, smp->tk);
627 /* Fall Through */
628 case MGMT_OP_USER_CONFIRM_REPLY:
629 set_bit(SMP_FLAG_TK_VALID, &smp->smp_flags);
630 break;
631 case MGMT_OP_USER_PASSKEY_NEG_REPLY:
632 case MGMT_OP_USER_CONFIRM_NEG_REPLY:
84794e11 633 smp_failure(conn, SMP_PASSKEY_ENTRY_FAILED);
2b64d153
BG
634 return 0;
635 default:
84794e11 636 smp_failure(conn, SMP_PASSKEY_ENTRY_FAILED);
2b64d153
BG
637 return -EOPNOTSUPP;
638 }
639
640 /* If it is our turn to send Pairing Confirm, do so now */
641 if (test_bit(SMP_FLAG_CFM_PENDING, &smp->smp_flags))
642 queue_work(hcon->hdev->workqueue, &smp->confirm);
643
644 return 0;
645}
646
da85e5e5 647static u8 smp_cmd_pairing_req(struct l2cap_conn *conn, struct sk_buff *skb)
88ba43b6 648{
3158c50c 649 struct smp_cmd_pairing rsp, *req = (void *) skb->data;
8aab4757 650 struct smp_chan *smp;
3158c50c 651 u8 key_size;
2b64d153 652 u8 auth = SMP_AUTH_NONE;
8aab4757 653 int ret;
88ba43b6
AB
654
655 BT_DBG("conn %p", conn);
656
c46b98be
JH
657 if (skb->len < sizeof(*req))
658 return SMP_UNSPECIFIED;
659
2b64d153
BG
660 if (conn->hcon->link_mode & HCI_LM_MASTER)
661 return SMP_CMD_NOTSUPP;
662
51a8efd7 663 if (!test_and_set_bit(HCI_CONN_LE_SMP_PEND, &conn->hcon->flags))
8aab4757 664 smp = smp_chan_create(conn);
d08fd0e7
AE
665 else
666 smp = conn->smp_chan;
8aab4757 667
d08fd0e7
AE
668 if (!smp)
669 return SMP_UNSPECIFIED;
d26a2345 670
1c1def09
VCG
671 smp->preq[0] = SMP_CMD_PAIRING_REQ;
672 memcpy(&smp->preq[1], req, sizeof(*req));
3158c50c 673 skb_pull(skb, sizeof(*req));
88ba43b6 674
2b64d153
BG
675 /* We didn't start the pairing, so match remote */
676 if (req->auth_req & SMP_AUTH_BONDING)
677 auth = req->auth_req;
da85e5e5 678
fdde0a26
IY
679 conn->hcon->pending_sec_level = authreq_to_seclevel(auth);
680
2b64d153 681 build_pairing_cmd(conn, req, &rsp, auth);
3158c50c
VCG
682
683 key_size = min(req->max_key_size, rsp.max_key_size);
684 if (check_enc_key_size(conn, key_size))
685 return SMP_ENC_KEY_SIZE;
88ba43b6 686
e84a6b13 687 get_random_bytes(smp->prnd, sizeof(smp->prnd));
8aab4757 688
1c1def09
VCG
689 smp->prsp[0] = SMP_CMD_PAIRING_RSP;
690 memcpy(&smp->prsp[1], &rsp, sizeof(rsp));
f01ead31 691
3158c50c 692 smp_send_cmd(conn, SMP_CMD_PAIRING_RSP, sizeof(rsp), &rsp);
da85e5e5 693
2b64d153
BG
694 /* Request setup of TK */
695 ret = tk_request(conn, 0, auth, rsp.io_capability, req->io_capability);
696 if (ret)
697 return SMP_UNSPECIFIED;
698
da85e5e5 699 return 0;
88ba43b6
AB
700}
701
da85e5e5 702static u8 smp_cmd_pairing_rsp(struct l2cap_conn *conn, struct sk_buff *skb)
88ba43b6 703{
3158c50c 704 struct smp_cmd_pairing *req, *rsp = (void *) skb->data;
1c1def09 705 struct smp_chan *smp = conn->smp_chan;
8aab4757 706 struct hci_dev *hdev = conn->hcon->hdev;
2b64d153 707 u8 key_size, auth = SMP_AUTH_NONE;
7d24ddcc 708 int ret;
88ba43b6
AB
709
710 BT_DBG("conn %p", conn);
711
c46b98be
JH
712 if (skb->len < sizeof(*rsp))
713 return SMP_UNSPECIFIED;
714
2b64d153
BG
715 if (!(conn->hcon->link_mode & HCI_LM_MASTER))
716 return SMP_CMD_NOTSUPP;
717
3158c50c
VCG
718 skb_pull(skb, sizeof(*rsp));
719
1c1def09 720 req = (void *) &smp->preq[1];
da85e5e5 721
3158c50c
VCG
722 key_size = min(req->max_key_size, rsp->max_key_size);
723 if (check_enc_key_size(conn, key_size))
724 return SMP_ENC_KEY_SIZE;
725
e84a6b13 726 get_random_bytes(smp->prnd, sizeof(smp->prnd));
7d24ddcc 727
8aab4757
VCG
728 smp->prsp[0] = SMP_CMD_PAIRING_RSP;
729 memcpy(&smp->prsp[1], rsp, sizeof(*rsp));
7d24ddcc 730
2b64d153 731 if ((req->auth_req & SMP_AUTH_BONDING) &&
f1560463 732 (rsp->auth_req & SMP_AUTH_BONDING))
2b64d153
BG
733 auth = SMP_AUTH_BONDING;
734
735 auth |= (req->auth_req | rsp->auth_req) & SMP_AUTH_MITM;
736
476585ec 737 ret = tk_request(conn, 0, auth, req->io_capability, rsp->io_capability);
2b64d153
BG
738 if (ret)
739 return SMP_UNSPECIFIED;
740
741 set_bit(SMP_FLAG_CFM_PENDING, &smp->smp_flags);
742
743 /* Can't compose response until we have been confirmed */
744 if (!test_bit(SMP_FLAG_TK_VALID, &smp->smp_flags))
745 return 0;
746
8aab4757 747 queue_work(hdev->workqueue, &smp->confirm);
da85e5e5
VCG
748
749 return 0;
88ba43b6
AB
750}
751
da85e5e5 752static u8 smp_cmd_pairing_confirm(struct l2cap_conn *conn, struct sk_buff *skb)
88ba43b6 753{
1c1def09 754 struct smp_chan *smp = conn->smp_chan;
8aab4757 755 struct hci_dev *hdev = conn->hcon->hdev;
7d24ddcc 756
88ba43b6
AB
757 BT_DBG("conn %p %s", conn, conn->hcon->out ? "master" : "slave");
758
c46b98be
JH
759 if (skb->len < sizeof(smp->pcnf))
760 return SMP_UNSPECIFIED;
761
1c1def09
VCG
762 memcpy(smp->pcnf, skb->data, sizeof(smp->pcnf));
763 skb_pull(skb, sizeof(smp->pcnf));
88ba43b6 764
7d24ddcc
AB
765 if (conn->hcon->out) {
766 u8 random[16];
88ba43b6 767
1c1def09 768 swap128(smp->prnd, random);
88ba43b6 769 smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM, sizeof(random),
f1560463 770 random);
2b64d153 771 } else if (test_bit(SMP_FLAG_TK_VALID, &smp->smp_flags)) {
8aab4757 772 queue_work(hdev->workqueue, &smp->confirm);
2b64d153
BG
773 } else {
774 set_bit(SMP_FLAG_CFM_PENDING, &smp->smp_flags);
88ba43b6 775 }
da85e5e5
VCG
776
777 return 0;
88ba43b6
AB
778}
779
da85e5e5 780static u8 smp_cmd_pairing_random(struct l2cap_conn *conn, struct sk_buff *skb)
88ba43b6 781{
1c1def09 782 struct smp_chan *smp = conn->smp_chan;
8aab4757 783 struct hci_dev *hdev = conn->hcon->hdev;
7d24ddcc 784
8aab4757 785 BT_DBG("conn %p", conn);
3158c50c 786
c46b98be
JH
787 if (skb->len < sizeof(smp->rrnd))
788 return SMP_UNSPECIFIED;
789
8aab4757
VCG
790 swap128(skb->data, smp->rrnd);
791 skb_pull(skb, sizeof(smp->rrnd));
e7e62c85 792
8aab4757 793 queue_work(hdev->workqueue, &smp->random);
da85e5e5
VCG
794
795 return 0;
88ba43b6
AB
796}
797
4dab7864 798static u8 smp_ltk_encrypt(struct l2cap_conn *conn, u8 sec_level)
988c5997 799{
c9839a11 800 struct smp_ltk *key;
988c5997
VCG
801 struct hci_conn *hcon = conn->hcon;
802
98a0b845
JH
803 key = hci_find_ltk_by_addr(hcon->hdev, &hcon->dst, hcon->dst_type,
804 hcon->out);
988c5997
VCG
805 if (!key)
806 return 0;
807
4dab7864
JH
808 if (sec_level > BT_SECURITY_MEDIUM && !key->authenticated)
809 return 0;
810
51a8efd7 811 if (test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &hcon->flags))
988c5997
VCG
812 return 1;
813
c9839a11
VCG
814 hci_le_start_enc(hcon, key->ediv, key->rand, key->val);
815 hcon->enc_key_size = key->enc_size;
988c5997
VCG
816
817 return 1;
988c5997 818}
f1560463 819
da85e5e5 820static u8 smp_cmd_security_req(struct l2cap_conn *conn, struct sk_buff *skb)
88ba43b6
AB
821{
822 struct smp_cmd_security_req *rp = (void *) skb->data;
823 struct smp_cmd_pairing cp;
f1cb9af5 824 struct hci_conn *hcon = conn->hcon;
8aab4757 825 struct smp_chan *smp;
88ba43b6
AB
826
827 BT_DBG("conn %p", conn);
828
c46b98be
JH
829 if (skb->len < sizeof(*rp))
830 return SMP_UNSPECIFIED;
831
86ca9eac
JH
832 if (!(conn->hcon->link_mode & HCI_LM_MASTER))
833 return SMP_CMD_NOTSUPP;
834
2b64d153 835 hcon->pending_sec_level = authreq_to_seclevel(rp->auth_req);
feb45eb5 836
4dab7864 837 if (smp_ltk_encrypt(conn, hcon->pending_sec_level))
988c5997
VCG
838 return 0;
839
51a8efd7 840 if (test_and_set_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags))
da85e5e5 841 return 0;
f1cb9af5 842
8aab4757 843 smp = smp_chan_create(conn);
d26a2345 844
88ba43b6 845 skb_pull(skb, sizeof(*rp));
88ba43b6 846
da85e5e5 847 memset(&cp, 0, sizeof(cp));
54790f73 848 build_pairing_cmd(conn, &cp, NULL, rp->auth_req);
88ba43b6 849
1c1def09
VCG
850 smp->preq[0] = SMP_CMD_PAIRING_REQ;
851 memcpy(&smp->preq[1], &cp, sizeof(cp));
f01ead31 852
88ba43b6 853 smp_send_cmd(conn, SMP_CMD_PAIRING_REQ, sizeof(cp), &cp);
f1cb9af5 854
da85e5e5 855 return 0;
88ba43b6
AB
856}
857
ad32a2f5
JH
858bool smp_sufficient_security(struct hci_conn *hcon, u8 sec_level)
859{
860 if (sec_level == BT_SECURITY_LOW)
861 return true;
862
863 if (hcon->sec_level >= sec_level)
864 return true;
865
866 return false;
867}
868
cc110922 869int smp_conn_security(struct hci_conn *hcon, __u8 sec_level)
eb492e01 870{
cc110922 871 struct l2cap_conn *conn = hcon->l2cap_data;
1c1def09 872 struct smp_chan *smp = conn->smp_chan;
2b64d153 873 __u8 authreq;
eb492e01 874
3a0259bb
VCG
875 BT_DBG("conn %p hcon %p level 0x%2.2x", conn, hcon, sec_level);
876
757aee0f 877 if (!test_bit(HCI_LE_ENABLED, &hcon->hdev->dev_flags))
2e65c9d2
AG
878 return 1;
879
ad32a2f5 880 if (smp_sufficient_security(hcon, sec_level))
eb492e01 881 return 1;
f1cb9af5 882
988c5997 883 if (hcon->link_mode & HCI_LM_MASTER)
4dab7864 884 if (smp_ltk_encrypt(conn, sec_level))
02bc7455 885 goto done;
d26a2345 886
51a8efd7 887 if (test_and_set_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags))
d26a2345
VCG
888 return 0;
889
8aab4757 890 smp = smp_chan_create(conn);
2b64d153
BG
891 if (!smp)
892 return 1;
893
894 authreq = seclevel_to_authreq(sec_level);
d26a2345 895
d26a2345
VCG
896 if (hcon->link_mode & HCI_LM_MASTER) {
897 struct smp_cmd_pairing cp;
f01ead31 898
2b64d153 899 build_pairing_cmd(conn, &cp, NULL, authreq);
1c1def09
VCG
900 smp->preq[0] = SMP_CMD_PAIRING_REQ;
901 memcpy(&smp->preq[1], &cp, sizeof(cp));
f01ead31 902
eb492e01
AB
903 smp_send_cmd(conn, SMP_CMD_PAIRING_REQ, sizeof(cp), &cp);
904 } else {
905 struct smp_cmd_security_req cp;
2b64d153 906 cp.auth_req = authreq;
eb492e01
AB
907 smp_send_cmd(conn, SMP_CMD_SECURITY_REQ, sizeof(cp), &cp);
908 }
909
02bc7455 910done:
f1cb9af5 911 hcon->pending_sec_level = sec_level;
f1cb9af5 912
eb492e01
AB
913 return 0;
914}
915
7034b911
VCG
916static int smp_cmd_encrypt_info(struct l2cap_conn *conn, struct sk_buff *skb)
917{
16b90839 918 struct smp_cmd_encrypt_info *rp = (void *) skb->data;
1c1def09 919 struct smp_chan *smp = conn->smp_chan;
16b90839 920
c46b98be
JH
921 BT_DBG("conn %p", conn);
922
923 if (skb->len < sizeof(*rp))
924 return SMP_UNSPECIFIED;
925
6131ddc8
JH
926 /* Ignore this PDU if it wasn't requested */
927 if (!(smp->remote_key_dist & SMP_DIST_ENC_KEY))
928 return 0;
929
16b90839
VCG
930 skb_pull(skb, sizeof(*rp));
931
1c1def09 932 memcpy(smp->tk, rp->ltk, sizeof(smp->tk));
16b90839 933
7034b911
VCG
934 return 0;
935}
936
937static int smp_cmd_master_ident(struct l2cap_conn *conn, struct sk_buff *skb)
938{
16b90839 939 struct smp_cmd_master_ident *rp = (void *) skb->data;
1c1def09 940 struct smp_chan *smp = conn->smp_chan;
c9839a11
VCG
941 struct hci_dev *hdev = conn->hcon->hdev;
942 struct hci_conn *hcon = conn->hcon;
23d0e128 943 struct smp_ltk *ltk;
c9839a11 944 u8 authenticated;
16b90839 945
c46b98be
JH
946 BT_DBG("conn %p", conn);
947
948 if (skb->len < sizeof(*rp))
949 return SMP_UNSPECIFIED;
950
6131ddc8
JH
951 /* Ignore this PDU if it wasn't requested */
952 if (!(smp->remote_key_dist & SMP_DIST_ENC_KEY))
953 return 0;
954
9747a9f3
JH
955 /* Mark the information as received */
956 smp->remote_key_dist &= ~SMP_DIST_ENC_KEY;
957
16b90839 958 skb_pull(skb, sizeof(*rp));
7034b911 959
c9839a11 960 hci_dev_lock(hdev);
ce39fb4e 961 authenticated = (hcon->sec_level == BT_SECURITY_HIGH);
35d70271 962 ltk = hci_add_ltk(hdev, &hcon->dst, hcon->dst_type, HCI_SMP_LTK,
23d0e128
JH
963 authenticated, smp->tk, smp->enc_key_size,
964 rp->ediv, rp->rand);
965 smp->ltk = ltk;
fd349c02 966 if (!(smp->remote_key_dist & SMP_DIST_ID_KEY))
4bd6d38e 967 smp_distribute_keys(conn);
c9839a11 968 hci_dev_unlock(hdev);
7034b911
VCG
969
970 return 0;
971}
972
fd349c02
JH
973static int smp_cmd_ident_info(struct l2cap_conn *conn, struct sk_buff *skb)
974{
975 struct smp_cmd_ident_info *info = (void *) skb->data;
976 struct smp_chan *smp = conn->smp_chan;
977
978 BT_DBG("");
979
980 if (skb->len < sizeof(*info))
981 return SMP_UNSPECIFIED;
982
6131ddc8
JH
983 /* Ignore this PDU if it wasn't requested */
984 if (!(smp->remote_key_dist & SMP_DIST_ID_KEY))
985 return 0;
986
fd349c02
JH
987 skb_pull(skb, sizeof(*info));
988
989 memcpy(smp->irk, info->irk, 16);
990
991 return 0;
992}
993
994static int smp_cmd_ident_addr_info(struct l2cap_conn *conn,
995 struct sk_buff *skb)
996{
997 struct smp_cmd_ident_addr_info *info = (void *) skb->data;
998 struct smp_chan *smp = conn->smp_chan;
999 struct hci_conn *hcon = conn->hcon;
1000 bdaddr_t rpa;
1001
1002 BT_DBG("");
1003
1004 if (skb->len < sizeof(*info))
1005 return SMP_UNSPECIFIED;
1006
6131ddc8
JH
1007 /* Ignore this PDU if it wasn't requested */
1008 if (!(smp->remote_key_dist & SMP_DIST_ID_KEY))
1009 return 0;
1010
9747a9f3
JH
1011 /* Mark the information as received */
1012 smp->remote_key_dist &= ~SMP_DIST_ID_KEY;
1013
fd349c02
JH
1014 skb_pull(skb, sizeof(*info));
1015
a9a58f86
JH
1016 /* Strictly speaking the Core Specification (4.1) allows sending
1017 * an empty address which would force us to rely on just the IRK
1018 * as "identity information". However, since such
1019 * implementations are not known of and in order to not over
1020 * complicate our implementation, simply pretend that we never
1021 * received an IRK for such a device.
1022 */
1023 if (!bacmp(&info->bdaddr, BDADDR_ANY)) {
1024 BT_ERR("Ignoring IRK with no identity address");
4bd6d38e 1025 smp_distribute_keys(conn);
a9a58f86
JH
1026 return 0;
1027 }
1028
fd349c02
JH
1029 bacpy(&smp->id_addr, &info->bdaddr);
1030 smp->id_addr_type = info->addr_type;
1031
1032 if (hci_bdaddr_is_rpa(&hcon->dst, hcon->dst_type))
1033 bacpy(&rpa, &hcon->dst);
1034 else
1035 bacpy(&rpa, BDADDR_ANY);
1036
23d0e128
JH
1037 smp->remote_irk = hci_add_irk(conn->hcon->hdev, &smp->id_addr,
1038 smp->id_addr_type, smp->irk, &rpa);
fd349c02 1039
68d6f6de
JH
1040 /* Track the connection based on the Identity Address from now on */
1041 bacpy(&hcon->dst, &smp->id_addr);
1042 hcon->dst_type = smp->id_addr_type;
1043
387a33e3
JH
1044 l2cap_conn_update_id_addr(hcon);
1045
4bd6d38e 1046 smp_distribute_keys(conn);
fd349c02
JH
1047
1048 return 0;
1049}
1050
eb492e01
AB
1051int smp_sig_channel(struct l2cap_conn *conn, struct sk_buff *skb)
1052{
7b9899db 1053 struct hci_conn *hcon = conn->hcon;
92381f5c 1054 __u8 code, reason;
eb492e01
AB
1055 int err = 0;
1056
7b9899db
MH
1057 if (hcon->type != LE_LINK) {
1058 kfree_skb(skb);
3432711f 1059 return 0;
7b9899db
MH
1060 }
1061
92381f5c
MH
1062 if (skb->len < 1) {
1063 kfree_skb(skb);
1064 return -EILSEQ;
1065 }
1066
06ae3314 1067 if (!test_bit(HCI_LE_ENABLED, &hcon->hdev->dev_flags)) {
2e65c9d2
AG
1068 err = -ENOTSUPP;
1069 reason = SMP_PAIRING_NOTSUPP;
1070 goto done;
1071 }
1072
92381f5c 1073 code = skb->data[0];
eb492e01
AB
1074 skb_pull(skb, sizeof(code));
1075
8cf9fa12
JH
1076 /*
1077 * The SMP context must be initialized for all other PDUs except
1078 * pairing and security requests. If we get any other PDU when
1079 * not initialized simply disconnect (done if this function
1080 * returns an error).
1081 */
1082 if (code != SMP_CMD_PAIRING_REQ && code != SMP_CMD_SECURITY_REQ &&
1083 !conn->smp_chan) {
1084 BT_ERR("Unexpected SMP command 0x%02x. Disconnecting.", code);
1085 kfree_skb(skb);
1086 return -ENOTSUPP;
1087 }
1088
eb492e01
AB
1089 switch (code) {
1090 case SMP_CMD_PAIRING_REQ:
da85e5e5 1091 reason = smp_cmd_pairing_req(conn, skb);
eb492e01
AB
1092 break;
1093
1094 case SMP_CMD_PAIRING_FAIL:
84794e11 1095 smp_failure(conn, 0);
da85e5e5
VCG
1096 reason = 0;
1097 err = -EPERM;
eb492e01
AB
1098 break;
1099
1100 case SMP_CMD_PAIRING_RSP:
da85e5e5 1101 reason = smp_cmd_pairing_rsp(conn, skb);
88ba43b6
AB
1102 break;
1103
1104 case SMP_CMD_SECURITY_REQ:
da85e5e5 1105 reason = smp_cmd_security_req(conn, skb);
88ba43b6
AB
1106 break;
1107
eb492e01 1108 case SMP_CMD_PAIRING_CONFIRM:
da85e5e5 1109 reason = smp_cmd_pairing_confirm(conn, skb);
88ba43b6
AB
1110 break;
1111
eb492e01 1112 case SMP_CMD_PAIRING_RANDOM:
da85e5e5 1113 reason = smp_cmd_pairing_random(conn, skb);
88ba43b6
AB
1114 break;
1115
eb492e01 1116 case SMP_CMD_ENCRYPT_INFO:
7034b911
VCG
1117 reason = smp_cmd_encrypt_info(conn, skb);
1118 break;
1119
eb492e01 1120 case SMP_CMD_MASTER_IDENT:
7034b911
VCG
1121 reason = smp_cmd_master_ident(conn, skb);
1122 break;
1123
eb492e01 1124 case SMP_CMD_IDENT_INFO:
fd349c02
JH
1125 reason = smp_cmd_ident_info(conn, skb);
1126 break;
1127
eb492e01 1128 case SMP_CMD_IDENT_ADDR_INFO:
fd349c02
JH
1129 reason = smp_cmd_ident_addr_info(conn, skb);
1130 break;
1131
eb492e01 1132 case SMP_CMD_SIGN_INFO:
7034b911
VCG
1133 /* Just ignored */
1134 reason = 0;
1135 break;
1136
eb492e01
AB
1137 default:
1138 BT_DBG("Unknown command code 0x%2.2x", code);
1139
1140 reason = SMP_CMD_NOTSUPP;
eb492e01 1141 err = -EOPNOTSUPP;
3a0259bb 1142 goto done;
eb492e01
AB
1143 }
1144
3a0259bb
VCG
1145done:
1146 if (reason)
84794e11 1147 smp_failure(conn, reason);
3a0259bb 1148
eb492e01
AB
1149 kfree_skb(skb);
1150 return err;
1151}
7034b911 1152
35d70271
JH
1153static void smp_notify_keys(struct l2cap_conn *conn)
1154{
1155 struct smp_chan *smp = conn->smp_chan;
1156 struct hci_conn *hcon = conn->hcon;
1157 struct hci_dev *hdev = hcon->hdev;
1158
95fbac8a
JH
1159 if (smp->remote_irk)
1160 mgmt_new_irk(hdev, smp->remote_irk);
1161
35d70271
JH
1162 if (smp->ltk) {
1163 smp->ltk->bdaddr_type = hcon->dst_type;
1164 bacpy(&smp->ltk->bdaddr, &hcon->dst);
1165 mgmt_new_ltk(hdev, smp->ltk);
1166 }
1167
1168 if (smp->slave_ltk) {
1169 smp->slave_ltk->bdaddr_type = hcon->dst_type;
1170 bacpy(&smp->slave_ltk->bdaddr, &hcon->dst);
1171 mgmt_new_ltk(hdev, smp->slave_ltk);
1172 }
1173}
1174
4bd6d38e 1175int smp_distribute_keys(struct l2cap_conn *conn)
7034b911
VCG
1176{
1177 struct smp_cmd_pairing *req, *rsp;
1c1def09 1178 struct smp_chan *smp = conn->smp_chan;
524237cb
JH
1179 struct hci_conn *hcon = conn->hcon;
1180 struct hci_dev *hdev = hcon->hdev;
38ccdc93 1181 bool ltk_encrypt;
7034b911
VCG
1182 __u8 *keydist;
1183
4bd6d38e 1184 BT_DBG("conn %p", conn);
7034b911 1185
524237cb 1186 if (!test_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags))
d26a2345
VCG
1187 return 0;
1188
1c1def09 1189 rsp = (void *) &smp->prsp[1];
7034b911
VCG
1190
1191 /* The responder sends its keys first */
efabba37 1192 if (hcon->out && (smp->remote_key_dist & 0x07))
7034b911
VCG
1193 return 0;
1194
1c1def09 1195 req = (void *) &smp->preq[1];
7034b911 1196
524237cb 1197 if (hcon->out) {
7034b911
VCG
1198 keydist = &rsp->init_key_dist;
1199 *keydist &= req->init_key_dist;
1200 } else {
1201 keydist = &rsp->resp_key_dist;
1202 *keydist &= req->resp_key_dist;
1203 }
1204
7034b911
VCG
1205 BT_DBG("keydist 0x%x", *keydist);
1206
1207 if (*keydist & SMP_DIST_ENC_KEY) {
1208 struct smp_cmd_encrypt_info enc;
1209 struct smp_cmd_master_ident ident;
23d0e128 1210 struct smp_ltk *ltk;
c9839a11 1211 u8 authenticated;
7034b911 1212 __le16 ediv;
fe39c7b2 1213 __le64 rand;
7034b911
VCG
1214
1215 get_random_bytes(enc.ltk, sizeof(enc.ltk));
1216 get_random_bytes(&ediv, sizeof(ediv));
fe39c7b2 1217 get_random_bytes(&rand, sizeof(rand));
7034b911
VCG
1218
1219 smp_send_cmd(conn, SMP_CMD_ENCRYPT_INFO, sizeof(enc), &enc);
1220
c9839a11 1221 authenticated = hcon->sec_level == BT_SECURITY_HIGH;
524237cb 1222 ltk = hci_add_ltk(hdev, &hcon->dst, hcon->dst_type,
35d70271 1223 HCI_SMP_LTK_SLAVE, authenticated, enc.ltk,
fe39c7b2 1224 smp->enc_key_size, ediv, rand);
23d0e128 1225 smp->slave_ltk = ltk;
16b90839 1226
58115373 1227 ident.ediv = ediv;
fe39c7b2 1228 ident.rand = rand;
7034b911
VCG
1229
1230 smp_send_cmd(conn, SMP_CMD_MASTER_IDENT, sizeof(ident), &ident);
1231
1232 *keydist &= ~SMP_DIST_ENC_KEY;
1233 }
1234
1235 if (*keydist & SMP_DIST_ID_KEY) {
1236 struct smp_cmd_ident_addr_info addrinfo;
1237 struct smp_cmd_ident_info idinfo;
1238
863efaf2 1239 memcpy(idinfo.irk, hdev->irk, sizeof(idinfo.irk));
7034b911
VCG
1240
1241 smp_send_cmd(conn, SMP_CMD_IDENT_INFO, sizeof(idinfo), &idinfo);
1242
82d4b359
JH
1243 /* The hci_conn contains the local identity address
1244 * after the connection has been established.
1245 *
1246 * This is true even when the connection has been
1247 * established using a resolvable random address.
1248 */
524237cb 1249 bacpy(&addrinfo.bdaddr, &hcon->src);
82d4b359 1250 addrinfo.addr_type = hcon->src_type;
7034b911
VCG
1251
1252 smp_send_cmd(conn, SMP_CMD_IDENT_ADDR_INFO, sizeof(addrinfo),
f1560463 1253 &addrinfo);
7034b911
VCG
1254
1255 *keydist &= ~SMP_DIST_ID_KEY;
1256 }
1257
1258 if (*keydist & SMP_DIST_SIGN) {
1259 struct smp_cmd_sign_info sign;
1260
1261 /* Send a dummy key */
1262 get_random_bytes(sign.csrk, sizeof(sign.csrk));
1263
1264 smp_send_cmd(conn, SMP_CMD_SIGN_INFO, sizeof(sign), &sign);
1265
1266 *keydist &= ~SMP_DIST_SIGN;
1267 }
1268
efabba37
JH
1269 /* If there are still keys to be received wait for them */
1270 if ((smp->remote_key_dist & 0x07))
1271 return 0;
1272
38ccdc93
JH
1273 /* Check if we should try to re-encrypt the link with the LTK.
1274 * SMP_FLAG_LTK_ENCRYPT flag is used to track whether we've
1275 * already tried this (in which case we shouldn't try again).
1276 *
1277 * The request will trigger an encryption key refresh event
1278 * which will cause a call to auth_cfm and eventually lead to
1279 * l2cap_core.c calling this smp_distribute_keys function again
1280 * and thereby completing the process.
1281 */
1282 if (smp->ltk)
1283 ltk_encrypt = !test_and_set_bit(SMP_FLAG_LTK_ENCRYPT,
1284 &smp->smp_flags);
1285 else
1286 ltk_encrypt = false;
efabba37 1287
38ccdc93
JH
1288 /* Re-encrypt the link with LTK if possible */
1289 if (ltk_encrypt && hcon->out) {
1290 struct smp_ltk *ltk = smp->ltk;
1291 hci_le_start_enc(hcon, ltk->ediv, ltk->rand, ltk->val);
1292 hcon->enc_key_size = ltk->enc_size;
1293 } else {
1294 clear_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags);
1295 cancel_delayed_work_sync(&conn->security_timer);
1296 set_bit(SMP_FLAG_COMPLETE, &smp->smp_flags);
1297 smp_notify_keys(conn);
1298 smp_chan_destroy(conn);
1299 }
d26a2345 1300
7034b911
VCG
1301 return 0;
1302}
This page took 0.232326 seconds and 5 git commands to generate.