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