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