Bluetooth: Make AES crypto context private to SMP
[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
defce9e8 142bool smp_irk_matches(struct hci_dev *hdev, u8 irk[16], bdaddr_t *bdaddr)
60478054 143{
defce9e8
JH
144 struct l2cap_chan *chan = hdev->smp_data;
145 struct crypto_blkcipher *tfm;
60478054
JH
146 u8 hash[3];
147 int err;
148
defce9e8
JH
149 if (!chan || !chan->data)
150 return false;
151
152 tfm = chan->data;
153
60478054
JH
154 BT_DBG("RPA %pMR IRK %*phN", bdaddr, 16, irk);
155
156 err = smp_ah(tfm, irk, &bdaddr->b[3], hash);
157 if (err)
158 return false;
159
160 return !memcmp(bdaddr->b, hash, 3);
161}
162
defce9e8 163int smp_generate_rpa(struct hci_dev *hdev, u8 irk[16], bdaddr_t *rpa)
b1e2b3ae 164{
defce9e8
JH
165 struct l2cap_chan *chan = hdev->smp_data;
166 struct crypto_blkcipher *tfm;
b1e2b3ae
JH
167 int err;
168
defce9e8
JH
169 if (!chan || !chan->data)
170 return -EOPNOTSUPP;
171
172 tfm = chan->data;
173
b1e2b3ae
JH
174 get_random_bytes(&rpa->b[3], 3);
175
176 rpa->b[5] &= 0x3f; /* Clear two most significant bits */
177 rpa->b[5] |= 0x40; /* Set second most significant bit */
178
179 err = smp_ah(tfm, irk, &rpa->b[3], rpa->b);
180 if (err < 0)
181 return err;
182
183 BT_DBG("RPA %pMR", rpa);
184
185 return 0;
186}
187
ec70f36f
JH
188static int smp_c1(struct smp_chan *smp, u8 k[16], u8 r[16], u8 preq[7],
189 u8 pres[7], u8 _iat, bdaddr_t *ia, u8 _rat, bdaddr_t *ra,
190 u8 res[16])
d22ef0bc 191{
ec70f36f 192 struct hci_dev *hdev = smp->conn->hcon->hdev;
d22ef0bc
AB
193 u8 p1[16], p2[16];
194 int err;
195
ec70f36f
JH
196 BT_DBG("%s", hdev->name);
197
d22ef0bc
AB
198 memset(p1, 0, 16);
199
200 /* p1 = pres || preq || _rat || _iat */
943a732a
JH
201 p1[0] = _iat;
202 p1[1] = _rat;
203 memcpy(p1 + 2, preq, 7);
204 memcpy(p1 + 9, pres, 7);
d22ef0bc
AB
205
206 /* p2 = padding || ia || ra */
943a732a
JH
207 memcpy(p2, ra, 6);
208 memcpy(p2 + 6, ia, 6);
209 memset(p2 + 12, 0, 4);
d22ef0bc
AB
210
211 /* res = r XOR p1 */
212 u128_xor((u128 *) res, (u128 *) r, (u128 *) p1);
213
214 /* res = e(k, res) */
ec70f36f 215 err = smp_e(smp->tfm_aes, k, res);
d22ef0bc
AB
216 if (err) {
217 BT_ERR("Encrypt data error");
218 return err;
219 }
220
221 /* res = res XOR p2 */
222 u128_xor((u128 *) res, (u128 *) res, (u128 *) p2);
223
224 /* res = e(k, res) */
ec70f36f 225 err = smp_e(smp->tfm_aes, k, res);
d22ef0bc
AB
226 if (err)
227 BT_ERR("Encrypt data error");
228
229 return err;
230}
231
ec70f36f
JH
232static int smp_s1(struct smp_chan *smp, u8 k[16], u8 r1[16], u8 r2[16],
233 u8 _r[16])
d22ef0bc 234{
ec70f36f 235 struct hci_dev *hdev = smp->conn->hcon->hdev;
d22ef0bc
AB
236 int err;
237
ec70f36f
JH
238 BT_DBG("%s", hdev->name);
239
d22ef0bc 240 /* Just least significant octets from r1 and r2 are considered */
943a732a
JH
241 memcpy(_r, r2, 8);
242 memcpy(_r + 8, r1, 8);
d22ef0bc 243
ec70f36f 244 err = smp_e(smp->tfm_aes, k, _r);
d22ef0bc
AB
245 if (err)
246 BT_ERR("Encrypt data error");
247
248 return err;
249}
250
eb492e01 251static struct sk_buff *smp_build_cmd(struct l2cap_conn *conn, u8 code,
f1560463 252 u16 dlen, void *data)
eb492e01
AB
253{
254 struct sk_buff *skb;
255 struct l2cap_hdr *lh;
256 int len;
257
258 len = L2CAP_HDR_SIZE + sizeof(code) + dlen;
259
260 if (len > conn->mtu)
261 return NULL;
262
263 skb = bt_skb_alloc(len, GFP_ATOMIC);
264 if (!skb)
265 return NULL;
266
267 lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
268 lh->len = cpu_to_le16(sizeof(code) + dlen);
dcf4adbf 269 lh->cid = cpu_to_le16(L2CAP_CID_SMP);
eb492e01
AB
270
271 memcpy(skb_put(skb, sizeof(code)), &code, sizeof(code));
272
273 memcpy(skb_put(skb, dlen), data, dlen);
274
275 return skb;
276}
277
278static void smp_send_cmd(struct l2cap_conn *conn, u8 code, u16 len, void *data)
279{
280 struct sk_buff *skb = smp_build_cmd(conn, code, len, data);
281
282 BT_DBG("code 0x%2.2x", code);
283
284 if (!skb)
285 return;
286
73d80deb
LAD
287 skb->priority = HCI_PRIO_MAX;
288 hci_send_acl(conn->hchan, skb, 0);
e2dcd113 289
6c9d42a1 290 cancel_delayed_work_sync(&conn->security_timer);
17b02e62 291 schedule_delayed_work(&conn->security_timer, SMP_TIMEOUT);
eb492e01
AB
292}
293
2b64d153
BG
294static __u8 authreq_to_seclevel(__u8 authreq)
295{
296 if (authreq & SMP_AUTH_MITM)
297 return BT_SECURITY_HIGH;
298 else
299 return BT_SECURITY_MEDIUM;
300}
301
302static __u8 seclevel_to_authreq(__u8 sec_level)
303{
304 switch (sec_level) {
305 case BT_SECURITY_HIGH:
306 return SMP_AUTH_MITM | SMP_AUTH_BONDING;
307 case BT_SECURITY_MEDIUM:
308 return SMP_AUTH_BONDING;
309 default:
310 return SMP_AUTH_NONE;
311 }
312}
313
b8e66eac 314static void build_pairing_cmd(struct l2cap_conn *conn,
f1560463
MH
315 struct smp_cmd_pairing *req,
316 struct smp_cmd_pairing *rsp, __u8 authreq)
b8e66eac 317{
fd349c02
JH
318 struct smp_chan *smp = conn->smp_chan;
319 struct hci_conn *hcon = conn->hcon;
320 struct hci_dev *hdev = hcon->hdev;
321 u8 local_dist = 0, remote_dist = 0;
54790f73 322
b6ae8457 323 if (test_bit(HCI_BONDABLE, &conn->hcon->hdev->dev_flags)) {
7ee4ea36
MH
324 local_dist = SMP_DIST_ENC_KEY | SMP_DIST_SIGN;
325 remote_dist = SMP_DIST_ENC_KEY | SMP_DIST_SIGN;
54790f73 326 authreq |= SMP_AUTH_BONDING;
2b64d153
BG
327 } else {
328 authreq &= ~SMP_AUTH_BONDING;
54790f73
VCG
329 }
330
fd349c02
JH
331 if (test_bit(HCI_RPA_RESOLVING, &hdev->dev_flags))
332 remote_dist |= SMP_DIST_ID_KEY;
333
863efaf2
JH
334 if (test_bit(HCI_PRIVACY, &hdev->dev_flags))
335 local_dist |= SMP_DIST_ID_KEY;
336
54790f73
VCG
337 if (rsp == NULL) {
338 req->io_capability = conn->hcon->io_capability;
339 req->oob_flag = SMP_OOB_NOT_PRESENT;
340 req->max_key_size = SMP_MAX_ENC_KEY_SIZE;
fd349c02
JH
341 req->init_key_dist = local_dist;
342 req->resp_key_dist = remote_dist;
065a13e2 343 req->auth_req = (authreq & AUTH_REQ_MASK);
fd349c02
JH
344
345 smp->remote_key_dist = remote_dist;
54790f73
VCG
346 return;
347 }
348
349 rsp->io_capability = conn->hcon->io_capability;
350 rsp->oob_flag = SMP_OOB_NOT_PRESENT;
351 rsp->max_key_size = SMP_MAX_ENC_KEY_SIZE;
fd349c02
JH
352 rsp->init_key_dist = req->init_key_dist & remote_dist;
353 rsp->resp_key_dist = req->resp_key_dist & local_dist;
065a13e2 354 rsp->auth_req = (authreq & AUTH_REQ_MASK);
fd349c02
JH
355
356 smp->remote_key_dist = rsp->init_key_dist;
b8e66eac
VCG
357}
358
3158c50c
VCG
359static u8 check_enc_key_size(struct l2cap_conn *conn, __u8 max_key_size)
360{
1c1def09
VCG
361 struct smp_chan *smp = conn->smp_chan;
362
3158c50c 363 if ((max_key_size > SMP_MAX_ENC_KEY_SIZE) ||
f1560463 364 (max_key_size < SMP_MIN_ENC_KEY_SIZE))
3158c50c
VCG
365 return SMP_ENC_KEY_SIZE;
366
f7aa611a 367 smp->enc_key_size = max_key_size;
3158c50c
VCG
368
369 return 0;
370}
371
84794e11 372static void smp_failure(struct l2cap_conn *conn, u8 reason)
4f957a76 373{
bab73cb6
JH
374 struct hci_conn *hcon = conn->hcon;
375
84794e11 376 if (reason)
4f957a76 377 smp_send_cmd(conn, SMP_CMD_PAIRING_FAIL, sizeof(reason),
f1560463 378 &reason);
4f957a76 379
ce39fb4e
MH
380 clear_bit(HCI_CONN_ENCRYPT_PEND, &hcon->flags);
381 mgmt_auth_failed(hcon->hdev, &hcon->dst, hcon->type, hcon->dst_type,
382 HCI_ERROR_AUTH_FAILURE);
f1c09c07 383
61a0cfb0
AG
384 cancel_delayed_work_sync(&conn->security_timer);
385
ce39fb4e 386 if (test_and_clear_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags))
f1c09c07 387 smp_chan_destroy(conn);
4f957a76
BG
388}
389
2b64d153
BG
390#define JUST_WORKS 0x00
391#define JUST_CFM 0x01
392#define REQ_PASSKEY 0x02
393#define CFM_PASSKEY 0x03
394#define REQ_OOB 0x04
395#define OVERLAP 0xFF
396
397static const u8 gen_method[5][5] = {
398 { JUST_WORKS, JUST_CFM, REQ_PASSKEY, JUST_WORKS, REQ_PASSKEY },
399 { JUST_WORKS, JUST_CFM, REQ_PASSKEY, JUST_WORKS, REQ_PASSKEY },
400 { CFM_PASSKEY, CFM_PASSKEY, REQ_PASSKEY, JUST_WORKS, CFM_PASSKEY },
401 { JUST_WORKS, JUST_CFM, JUST_WORKS, JUST_WORKS, JUST_CFM },
402 { CFM_PASSKEY, CFM_PASSKEY, REQ_PASSKEY, JUST_WORKS, OVERLAP },
403};
404
581370cc
JH
405static u8 get_auth_method(struct smp_chan *smp, u8 local_io, u8 remote_io)
406{
2bcd4003
JH
407 /* If either side has unknown io_caps, use JUST_CFM (which gets
408 * converted later to JUST_WORKS if we're initiators.
409 */
581370cc
JH
410 if (local_io > SMP_IO_KEYBOARD_DISPLAY ||
411 remote_io > SMP_IO_KEYBOARD_DISPLAY)
2bcd4003 412 return JUST_CFM;
581370cc
JH
413
414 return gen_method[remote_io][local_io];
415}
416
2b64d153
BG
417static int tk_request(struct l2cap_conn *conn, u8 remote_oob, u8 auth,
418 u8 local_io, u8 remote_io)
419{
420 struct hci_conn *hcon = conn->hcon;
421 struct smp_chan *smp = conn->smp_chan;
422 u8 method;
423 u32 passkey = 0;
424 int ret = 0;
425
426 /* Initialize key for JUST WORKS */
427 memset(smp->tk, 0, sizeof(smp->tk));
4a74d658 428 clear_bit(SMP_FLAG_TK_VALID, &smp->flags);
2b64d153
BG
429
430 BT_DBG("tk_request: auth:%d lcl:%d rem:%d", auth, local_io, remote_io);
431
2bcd4003
JH
432 /* If neither side wants MITM, either "just" confirm an incoming
433 * request or use just-works for outgoing ones. The JUST_CFM
434 * will be converted to JUST_WORKS if necessary later in this
435 * function. If either side has MITM look up the method from the
436 * table.
437 */
581370cc 438 if (!(auth & SMP_AUTH_MITM))
2bcd4003 439 method = JUST_CFM;
2b64d153 440 else
581370cc 441 method = get_auth_method(smp, local_io, remote_io);
2b64d153 442
a82505c7 443 /* Don't confirm locally initiated pairing attempts */
4a74d658 444 if (method == JUST_CFM && test_bit(SMP_FLAG_INITIATOR, &smp->flags))
a82505c7
JH
445 method = JUST_WORKS;
446
02f3e254
JH
447 /* Don't bother user space with no IO capabilities */
448 if (method == JUST_CFM && hcon->io_capability == HCI_IO_NO_INPUT_OUTPUT)
449 method = JUST_WORKS;
450
2b64d153
BG
451 /* If Just Works, Continue with Zero TK */
452 if (method == JUST_WORKS) {
4a74d658 453 set_bit(SMP_FLAG_TK_VALID, &smp->flags);
2b64d153
BG
454 return 0;
455 }
456
457 /* Not Just Works/Confirm results in MITM Authentication */
458 if (method != JUST_CFM)
4a74d658 459 set_bit(SMP_FLAG_MITM_AUTH, &smp->flags);
2b64d153
BG
460
461 /* If both devices have Keyoard-Display I/O, the master
462 * Confirms and the slave Enters the passkey.
463 */
464 if (method == OVERLAP) {
40bef302 465 if (hcon->role == HCI_ROLE_MASTER)
2b64d153
BG
466 method = CFM_PASSKEY;
467 else
468 method = REQ_PASSKEY;
469 }
470
01ad34d2 471 /* Generate random passkey. */
2b64d153 472 if (method == CFM_PASSKEY) {
943a732a 473 memset(smp->tk, 0, sizeof(smp->tk));
2b64d153
BG
474 get_random_bytes(&passkey, sizeof(passkey));
475 passkey %= 1000000;
943a732a 476 put_unaligned_le32(passkey, smp->tk);
2b64d153 477 BT_DBG("PassKey: %d", passkey);
4a74d658 478 set_bit(SMP_FLAG_TK_VALID, &smp->flags);
2b64d153
BG
479 }
480
481 hci_dev_lock(hcon->hdev);
482
483 if (method == REQ_PASSKEY)
ce39fb4e 484 ret = mgmt_user_passkey_request(hcon->hdev, &hcon->dst,
272d90df 485 hcon->type, hcon->dst_type);
4eb65e66
JH
486 else if (method == JUST_CFM)
487 ret = mgmt_user_confirm_request(hcon->hdev, &hcon->dst,
488 hcon->type, hcon->dst_type,
489 passkey, 1);
2b64d153 490 else
01ad34d2 491 ret = mgmt_user_passkey_notify(hcon->hdev, &hcon->dst,
272d90df 492 hcon->type, hcon->dst_type,
39adbffe 493 passkey, 0);
2b64d153
BG
494
495 hci_dev_unlock(hcon->hdev);
496
497 return ret;
498}
499
1cc61144 500static u8 smp_confirm(struct smp_chan *smp)
8aab4757 501{
8aab4757 502 struct l2cap_conn *conn = smp->conn;
8aab4757
VCG
503 struct smp_cmd_pairing_confirm cp;
504 int ret;
8aab4757
VCG
505
506 BT_DBG("conn %p", conn);
507
ec70f36f 508 ret = smp_c1(smp, smp->tk, smp->prnd, smp->preq, smp->prsp,
b1cd5fd9 509 conn->hcon->init_addr_type, &conn->hcon->init_addr,
943a732a
JH
510 conn->hcon->resp_addr_type, &conn->hcon->resp_addr,
511 cp.confirm_val);
1cc61144
JH
512 if (ret)
513 return SMP_UNSPECIFIED;
8aab4757 514
4a74d658 515 clear_bit(SMP_FLAG_CFM_PENDING, &smp->flags);
2b64d153 516
8aab4757
VCG
517 smp_send_cmd(smp->conn, SMP_CMD_PAIRING_CONFIRM, sizeof(cp), &cp);
518
1cc61144 519 return 0;
8aab4757
VCG
520}
521
861580a9 522static u8 smp_random(struct smp_chan *smp)
8aab4757 523{
8aab4757
VCG
524 struct l2cap_conn *conn = smp->conn;
525 struct hci_conn *hcon = conn->hcon;
861580a9 526 u8 confirm[16];
8aab4757
VCG
527 int ret;
528
ec70f36f 529 if (IS_ERR_OR_NULL(smp->tfm_aes))
861580a9 530 return SMP_UNSPECIFIED;
8aab4757
VCG
531
532 BT_DBG("conn %p %s", conn, conn->hcon->out ? "master" : "slave");
533
ec70f36f 534 ret = smp_c1(smp, smp->tk, smp->rrnd, smp->preq, smp->prsp,
b1cd5fd9 535 hcon->init_addr_type, &hcon->init_addr,
943a732a 536 hcon->resp_addr_type, &hcon->resp_addr, confirm);
861580a9
JH
537 if (ret)
538 return SMP_UNSPECIFIED;
8aab4757 539
8aab4757
VCG
540 if (memcmp(smp->pcnf, confirm, sizeof(smp->pcnf)) != 0) {
541 BT_ERR("Pairing failed (confirmation values mismatch)");
861580a9 542 return SMP_CONFIRM_FAILED;
8aab4757
VCG
543 }
544
545 if (hcon->out) {
fe39c7b2
MH
546 u8 stk[16];
547 __le64 rand = 0;
548 __le16 ediv = 0;
8aab4757 549
ec70f36f 550 smp_s1(smp, smp->tk, smp->rrnd, smp->prnd, stk);
8aab4757 551
f7aa611a 552 memset(stk + smp->enc_key_size, 0,
04124681 553 SMP_MAX_ENC_KEY_SIZE - smp->enc_key_size);
8aab4757 554
861580a9
JH
555 if (test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &hcon->flags))
556 return SMP_UNSPECIFIED;
8aab4757
VCG
557
558 hci_le_start_enc(hcon, ediv, rand, stk);
f7aa611a 559 hcon->enc_key_size = smp->enc_key_size;
fe59a05f 560 set_bit(HCI_CONN_STK_ENCRYPT, &hcon->flags);
8aab4757 561 } else {
fff3490f 562 u8 stk[16], auth;
fe39c7b2
MH
563 __le64 rand = 0;
564 __le16 ediv = 0;
8aab4757 565
943a732a
JH
566 smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM, sizeof(smp->prnd),
567 smp->prnd);
8aab4757 568
ec70f36f 569 smp_s1(smp, smp->tk, smp->prnd, smp->rrnd, stk);
8aab4757 570
f7aa611a 571 memset(stk + smp->enc_key_size, 0,
f1560463 572 SMP_MAX_ENC_KEY_SIZE - smp->enc_key_size);
8aab4757 573
fff3490f
JH
574 if (hcon->pending_sec_level == BT_SECURITY_HIGH)
575 auth = 1;
576 else
577 auth = 0;
578
7d5843b7
JH
579 /* Even though there's no _SLAVE suffix this is the
580 * slave STK we're adding for later lookup (the master
581 * STK never needs to be stored).
582 */
ce39fb4e 583 hci_add_ltk(hcon->hdev, &hcon->dst, hcon->dst_type,
2ceba539 584 SMP_STK, auth, stk, smp->enc_key_size, ediv, rand);
8aab4757
VCG
585 }
586
861580a9 587 return 0;
8aab4757
VCG
588}
589
590static struct smp_chan *smp_chan_create(struct l2cap_conn *conn)
591{
592 struct smp_chan *smp;
593
f1560463 594 smp = kzalloc(sizeof(*smp), GFP_ATOMIC);
616d55be
JH
595 if (!smp) {
596 clear_bit(HCI_CONN_LE_SMP_PEND, &conn->hcon->flags);
8aab4757 597 return NULL;
616d55be 598 }
8aab4757 599
6a7bd103
JH
600 smp->tfm_aes = crypto_alloc_blkcipher("ecb(aes)", 0, CRYPTO_ALG_ASYNC);
601 if (IS_ERR(smp->tfm_aes)) {
602 BT_ERR("Unable to create ECB crypto context");
603 kfree(smp);
616d55be 604 clear_bit(HCI_CONN_LE_SMP_PEND, &conn->hcon->flags);
6a7bd103
JH
605 return NULL;
606 }
607
8aab4757
VCG
608 smp->conn = conn;
609 conn->smp_chan = smp;
610
611 hci_conn_hold(conn->hcon);
612
613 return smp;
614}
615
616void smp_chan_destroy(struct l2cap_conn *conn)
617{
c8eb9690 618 struct smp_chan *smp = conn->smp_chan;
f4a407be 619 bool complete;
c8eb9690 620
f1c09c07 621 BUG_ON(!smp);
c8eb9690 622
4a74d658 623 complete = test_bit(SMP_FLAG_COMPLETE, &smp->flags);
f4a407be
JH
624 mgmt_smp_complete(conn->hcon, complete);
625
7ee4ea36
MH
626 kfree(smp->csrk);
627 kfree(smp->slave_csrk);
628
6a7bd103
JH
629 crypto_free_blkcipher(smp->tfm_aes);
630
759331d7
JH
631 /* If pairing failed clean up any keys we might have */
632 if (!complete) {
633 if (smp->ltk) {
634 list_del(&smp->ltk->list);
635 kfree(smp->ltk);
636 }
637
638 if (smp->slave_ltk) {
639 list_del(&smp->slave_ltk->list);
640 kfree(smp->slave_ltk);
641 }
642
643 if (smp->remote_irk) {
644 list_del(&smp->remote_irk->list);
645 kfree(smp->remote_irk);
646 }
647 }
648
c8eb9690
BG
649 kfree(smp);
650 conn->smp_chan = NULL;
76a68ba0 651 hci_conn_drop(conn->hcon);
8aab4757
VCG
652}
653
2b64d153
BG
654int smp_user_confirm_reply(struct hci_conn *hcon, u16 mgmt_op, __le32 passkey)
655{
b10e8017 656 struct l2cap_conn *conn = hcon->l2cap_data;
2b64d153
BG
657 struct smp_chan *smp;
658 u32 value;
2b64d153
BG
659
660 BT_DBG("");
661
642ac774 662 if (!conn || !test_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags))
2b64d153
BG
663 return -ENOTCONN;
664
665 smp = conn->smp_chan;
666
667 switch (mgmt_op) {
668 case MGMT_OP_USER_PASSKEY_REPLY:
669 value = le32_to_cpu(passkey);
943a732a 670 memset(smp->tk, 0, sizeof(smp->tk));
2b64d153 671 BT_DBG("PassKey: %d", value);
943a732a 672 put_unaligned_le32(value, smp->tk);
2b64d153
BG
673 /* Fall Through */
674 case MGMT_OP_USER_CONFIRM_REPLY:
4a74d658 675 set_bit(SMP_FLAG_TK_VALID, &smp->flags);
2b64d153
BG
676 break;
677 case MGMT_OP_USER_PASSKEY_NEG_REPLY:
678 case MGMT_OP_USER_CONFIRM_NEG_REPLY:
84794e11 679 smp_failure(conn, SMP_PASSKEY_ENTRY_FAILED);
2b64d153
BG
680 return 0;
681 default:
84794e11 682 smp_failure(conn, SMP_PASSKEY_ENTRY_FAILED);
2b64d153
BG
683 return -EOPNOTSUPP;
684 }
685
686 /* If it is our turn to send Pairing Confirm, do so now */
1cc61144
JH
687 if (test_bit(SMP_FLAG_CFM_PENDING, &smp->flags)) {
688 u8 rsp = smp_confirm(smp);
689 if (rsp)
690 smp_failure(conn, rsp);
691 }
2b64d153
BG
692
693 return 0;
694}
695
da85e5e5 696static u8 smp_cmd_pairing_req(struct l2cap_conn *conn, struct sk_buff *skb)
88ba43b6 697{
3158c50c 698 struct smp_cmd_pairing rsp, *req = (void *) skb->data;
b3c6410b 699 struct hci_dev *hdev = conn->hcon->hdev;
8aab4757 700 struct smp_chan *smp;
c7262e71 701 u8 key_size, auth, sec_level;
8aab4757 702 int ret;
88ba43b6
AB
703
704 BT_DBG("conn %p", conn);
705
c46b98be 706 if (skb->len < sizeof(*req))
38e4a915 707 return SMP_INVALID_PARAMS;
c46b98be 708
40bef302 709 if (conn->hcon->role != HCI_ROLE_SLAVE)
2b64d153
BG
710 return SMP_CMD_NOTSUPP;
711
51a8efd7 712 if (!test_and_set_bit(HCI_CONN_LE_SMP_PEND, &conn->hcon->flags))
8aab4757 713 smp = smp_chan_create(conn);
d08fd0e7
AE
714 else
715 smp = conn->smp_chan;
8aab4757 716
d08fd0e7
AE
717 if (!smp)
718 return SMP_UNSPECIFIED;
d26a2345 719
b6ae8457 720 if (!test_bit(HCI_BONDABLE, &hdev->dev_flags) &&
b3c6410b
JH
721 (req->auth_req & SMP_AUTH_BONDING))
722 return SMP_PAIRING_NOTSUPP;
723
1c1def09
VCG
724 smp->preq[0] = SMP_CMD_PAIRING_REQ;
725 memcpy(&smp->preq[1], req, sizeof(*req));
3158c50c 726 skb_pull(skb, sizeof(*req));
88ba43b6 727
2b64d153 728 /* We didn't start the pairing, so match remote */
1ef35827 729 auth = req->auth_req;
da85e5e5 730
c7262e71
JH
731 sec_level = authreq_to_seclevel(auth);
732 if (sec_level > conn->hcon->pending_sec_level)
733 conn->hcon->pending_sec_level = sec_level;
fdde0a26 734
2ed8f65c
JH
735 /* If we need MITM check that it can be acheived */
736 if (conn->hcon->pending_sec_level >= BT_SECURITY_HIGH) {
737 u8 method;
738
739 method = get_auth_method(smp, conn->hcon->io_capability,
740 req->io_capability);
741 if (method == JUST_WORKS || method == JUST_CFM)
742 return SMP_AUTH_REQUIREMENTS;
743 }
744
2b64d153 745 build_pairing_cmd(conn, req, &rsp, auth);
3158c50c
VCG
746
747 key_size = min(req->max_key_size, rsp.max_key_size);
748 if (check_enc_key_size(conn, key_size))
749 return SMP_ENC_KEY_SIZE;
88ba43b6 750
e84a6b13 751 get_random_bytes(smp->prnd, sizeof(smp->prnd));
8aab4757 752
1c1def09
VCG
753 smp->prsp[0] = SMP_CMD_PAIRING_RSP;
754 memcpy(&smp->prsp[1], &rsp, sizeof(rsp));
f01ead31 755
3158c50c 756 smp_send_cmd(conn, SMP_CMD_PAIRING_RSP, sizeof(rsp), &rsp);
da85e5e5 757
2b64d153
BG
758 /* Request setup of TK */
759 ret = tk_request(conn, 0, auth, rsp.io_capability, req->io_capability);
760 if (ret)
761 return SMP_UNSPECIFIED;
762
da85e5e5 763 return 0;
88ba43b6
AB
764}
765
da85e5e5 766static u8 smp_cmd_pairing_rsp(struct l2cap_conn *conn, struct sk_buff *skb)
88ba43b6 767{
3158c50c 768 struct smp_cmd_pairing *req, *rsp = (void *) skb->data;
1c1def09 769 struct smp_chan *smp = conn->smp_chan;
2b64d153 770 u8 key_size, auth = SMP_AUTH_NONE;
7d24ddcc 771 int ret;
88ba43b6
AB
772
773 BT_DBG("conn %p", conn);
774
c46b98be 775 if (skb->len < sizeof(*rsp))
38e4a915 776 return SMP_INVALID_PARAMS;
c46b98be 777
40bef302 778 if (conn->hcon->role != HCI_ROLE_MASTER)
2b64d153
BG
779 return SMP_CMD_NOTSUPP;
780
3158c50c
VCG
781 skb_pull(skb, sizeof(*rsp));
782
1c1def09 783 req = (void *) &smp->preq[1];
da85e5e5 784
3158c50c
VCG
785 key_size = min(req->max_key_size, rsp->max_key_size);
786 if (check_enc_key_size(conn, key_size))
787 return SMP_ENC_KEY_SIZE;
788
2ed8f65c
JH
789 /* If we need MITM check that it can be acheived */
790 if (conn->hcon->pending_sec_level >= BT_SECURITY_HIGH) {
791 u8 method;
792
793 method = get_auth_method(smp, req->io_capability,
794 rsp->io_capability);
795 if (method == JUST_WORKS || method == JUST_CFM)
796 return SMP_AUTH_REQUIREMENTS;
797 }
798
e84a6b13 799 get_random_bytes(smp->prnd, sizeof(smp->prnd));
7d24ddcc 800
8aab4757
VCG
801 smp->prsp[0] = SMP_CMD_PAIRING_RSP;
802 memcpy(&smp->prsp[1], rsp, sizeof(*rsp));
7d24ddcc 803
fdcc4bec
JH
804 /* Update remote key distribution in case the remote cleared
805 * some bits that we had enabled in our request.
806 */
807 smp->remote_key_dist &= rsp->resp_key_dist;
808
2b64d153 809 if ((req->auth_req & SMP_AUTH_BONDING) &&
f1560463 810 (rsp->auth_req & SMP_AUTH_BONDING))
2b64d153
BG
811 auth = SMP_AUTH_BONDING;
812
813 auth |= (req->auth_req | rsp->auth_req) & SMP_AUTH_MITM;
814
476585ec 815 ret = tk_request(conn, 0, auth, req->io_capability, rsp->io_capability);
2b64d153
BG
816 if (ret)
817 return SMP_UNSPECIFIED;
818
4a74d658 819 set_bit(SMP_FLAG_CFM_PENDING, &smp->flags);
2b64d153
BG
820
821 /* Can't compose response until we have been confirmed */
4a74d658 822 if (test_bit(SMP_FLAG_TK_VALID, &smp->flags))
1cc61144 823 return smp_confirm(smp);
da85e5e5
VCG
824
825 return 0;
88ba43b6
AB
826}
827
da85e5e5 828static u8 smp_cmd_pairing_confirm(struct l2cap_conn *conn, struct sk_buff *skb)
88ba43b6 829{
1c1def09 830 struct smp_chan *smp = conn->smp_chan;
7d24ddcc 831
88ba43b6
AB
832 BT_DBG("conn %p %s", conn, conn->hcon->out ? "master" : "slave");
833
c46b98be 834 if (skb->len < sizeof(smp->pcnf))
38e4a915 835 return SMP_INVALID_PARAMS;
c46b98be 836
1c1def09
VCG
837 memcpy(smp->pcnf, skb->data, sizeof(smp->pcnf));
838 skb_pull(skb, sizeof(smp->pcnf));
88ba43b6 839
943a732a
JH
840 if (conn->hcon->out)
841 smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM, sizeof(smp->prnd),
842 smp->prnd);
4a74d658 843 else if (test_bit(SMP_FLAG_TK_VALID, &smp->flags))
1cc61144 844 return smp_confirm(smp);
943a732a 845 else
4a74d658 846 set_bit(SMP_FLAG_CFM_PENDING, &smp->flags);
da85e5e5
VCG
847
848 return 0;
88ba43b6
AB
849}
850
da85e5e5 851static u8 smp_cmd_pairing_random(struct l2cap_conn *conn, struct sk_buff *skb)
88ba43b6 852{
1c1def09 853 struct smp_chan *smp = conn->smp_chan;
7d24ddcc 854
8aab4757 855 BT_DBG("conn %p", conn);
3158c50c 856
c46b98be 857 if (skb->len < sizeof(smp->rrnd))
38e4a915 858 return SMP_INVALID_PARAMS;
c46b98be 859
943a732a 860 memcpy(smp->rrnd, skb->data, sizeof(smp->rrnd));
8aab4757 861 skb_pull(skb, sizeof(smp->rrnd));
e7e62c85 862
861580a9 863 return smp_random(smp);
88ba43b6
AB
864}
865
f81cd823 866static bool smp_ltk_encrypt(struct l2cap_conn *conn, u8 sec_level)
988c5997 867{
c9839a11 868 struct smp_ltk *key;
988c5997
VCG
869 struct hci_conn *hcon = conn->hcon;
870
98a0b845 871 key = hci_find_ltk_by_addr(hcon->hdev, &hcon->dst, hcon->dst_type,
e804d25d 872 hcon->role);
988c5997 873 if (!key)
f81cd823 874 return false;
988c5997 875
4dab7864 876 if (sec_level > BT_SECURITY_MEDIUM && !key->authenticated)
f81cd823 877 return false;
4dab7864 878
51a8efd7 879 if (test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &hcon->flags))
f81cd823 880 return true;
988c5997 881
c9839a11
VCG
882 hci_le_start_enc(hcon, key->ediv, key->rand, key->val);
883 hcon->enc_key_size = key->enc_size;
988c5997 884
fe59a05f
JH
885 /* We never store STKs for master role, so clear this flag */
886 clear_bit(HCI_CONN_STK_ENCRYPT, &hcon->flags);
887
f81cd823 888 return true;
988c5997 889}
f1560463 890
854f4727
JH
891bool smp_sufficient_security(struct hci_conn *hcon, u8 sec_level)
892{
893 if (sec_level == BT_SECURITY_LOW)
894 return true;
895
9ab65d60
JH
896 /* If we're encrypted with an STK always claim insufficient
897 * security. This way we allow the connection to be re-encrypted
898 * with an LTK, even if the LTK provides the same level of
b2d5e254
JH
899 * security. Only exception is if we don't have an LTK (e.g.
900 * because of key distribution bits).
9ab65d60 901 */
b2d5e254
JH
902 if (test_bit(HCI_CONN_STK_ENCRYPT, &hcon->flags) &&
903 hci_find_ltk_by_addr(hcon->hdev, &hcon->dst, hcon->dst_type,
e804d25d 904 hcon->role))
9ab65d60
JH
905 return false;
906
854f4727
JH
907 if (hcon->sec_level >= sec_level)
908 return true;
909
910 return false;
911}
912
da85e5e5 913static u8 smp_cmd_security_req(struct l2cap_conn *conn, struct sk_buff *skb)
88ba43b6
AB
914{
915 struct smp_cmd_security_req *rp = (void *) skb->data;
916 struct smp_cmd_pairing cp;
f1cb9af5 917 struct hci_conn *hcon = conn->hcon;
8aab4757 918 struct smp_chan *smp;
c7262e71 919 u8 sec_level;
88ba43b6
AB
920
921 BT_DBG("conn %p", conn);
922
c46b98be 923 if (skb->len < sizeof(*rp))
38e4a915 924 return SMP_INVALID_PARAMS;
c46b98be 925
40bef302 926 if (hcon->role != HCI_ROLE_MASTER)
86ca9eac
JH
927 return SMP_CMD_NOTSUPP;
928
c7262e71 929 sec_level = authreq_to_seclevel(rp->auth_req);
854f4727
JH
930 if (smp_sufficient_security(hcon, sec_level))
931 return 0;
932
c7262e71
JH
933 if (sec_level > hcon->pending_sec_level)
934 hcon->pending_sec_level = sec_level;
feb45eb5 935
4dab7864 936 if (smp_ltk_encrypt(conn, hcon->pending_sec_level))
988c5997
VCG
937 return 0;
938
51a8efd7 939 if (test_and_set_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags))
da85e5e5 940 return 0;
f1cb9af5 941
8aab4757 942 smp = smp_chan_create(conn);
c29d2444
JH
943 if (!smp)
944 return SMP_UNSPECIFIED;
d26a2345 945
b6ae8457 946 if (!test_bit(HCI_BONDABLE, &hcon->hdev->dev_flags) &&
616d55be
JH
947 (rp->auth_req & SMP_AUTH_BONDING))
948 return SMP_PAIRING_NOTSUPP;
949
88ba43b6 950 skb_pull(skb, sizeof(*rp));
88ba43b6 951
da85e5e5 952 memset(&cp, 0, sizeof(cp));
54790f73 953 build_pairing_cmd(conn, &cp, NULL, rp->auth_req);
88ba43b6 954
1c1def09
VCG
955 smp->preq[0] = SMP_CMD_PAIRING_REQ;
956 memcpy(&smp->preq[1], &cp, sizeof(cp));
f01ead31 957
88ba43b6 958 smp_send_cmd(conn, SMP_CMD_PAIRING_REQ, sizeof(cp), &cp);
f1cb9af5 959
da85e5e5 960 return 0;
88ba43b6
AB
961}
962
cc110922 963int smp_conn_security(struct hci_conn *hcon, __u8 sec_level)
eb492e01 964{
cc110922 965 struct l2cap_conn *conn = hcon->l2cap_data;
0a66cf20 966 struct smp_chan *smp;
2b64d153 967 __u8 authreq;
eb492e01 968
3a0259bb
VCG
969 BT_DBG("conn %p hcon %p level 0x%2.2x", conn, hcon, sec_level);
970
0a66cf20
JH
971 /* This may be NULL if there's an unexpected disconnection */
972 if (!conn)
973 return 1;
974
757aee0f 975 if (!test_bit(HCI_LE_ENABLED, &hcon->hdev->dev_flags))
2e65c9d2
AG
976 return 1;
977
ad32a2f5 978 if (smp_sufficient_security(hcon, sec_level))
eb492e01 979 return 1;
f1cb9af5 980
c7262e71
JH
981 if (sec_level > hcon->pending_sec_level)
982 hcon->pending_sec_level = sec_level;
983
40bef302 984 if (hcon->role == HCI_ROLE_MASTER)
c7262e71
JH
985 if (smp_ltk_encrypt(conn, hcon->pending_sec_level))
986 return 0;
d26a2345 987
51a8efd7 988 if (test_and_set_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags))
d26a2345
VCG
989 return 0;
990
8aab4757 991 smp = smp_chan_create(conn);
2b64d153
BG
992 if (!smp)
993 return 1;
994
995 authreq = seclevel_to_authreq(sec_level);
d26a2345 996
79897d20
JH
997 /* Require MITM if IO Capability allows or the security level
998 * requires it.
2e233644 999 */
79897d20 1000 if (hcon->io_capability != HCI_IO_NO_INPUT_OUTPUT ||
c7262e71 1001 hcon->pending_sec_level > BT_SECURITY_MEDIUM)
2e233644
JH
1002 authreq |= SMP_AUTH_MITM;
1003
40bef302 1004 if (hcon->role == HCI_ROLE_MASTER) {
d26a2345 1005 struct smp_cmd_pairing cp;
f01ead31 1006
2b64d153 1007 build_pairing_cmd(conn, &cp, NULL, authreq);
1c1def09
VCG
1008 smp->preq[0] = SMP_CMD_PAIRING_REQ;
1009 memcpy(&smp->preq[1], &cp, sizeof(cp));
f01ead31 1010
eb492e01
AB
1011 smp_send_cmd(conn, SMP_CMD_PAIRING_REQ, sizeof(cp), &cp);
1012 } else {
1013 struct smp_cmd_security_req cp;
2b64d153 1014 cp.auth_req = authreq;
eb492e01
AB
1015 smp_send_cmd(conn, SMP_CMD_SECURITY_REQ, sizeof(cp), &cp);
1016 }
1017
4a74d658 1018 set_bit(SMP_FLAG_INITIATOR, &smp->flags);
edca792c 1019
eb492e01
AB
1020 return 0;
1021}
1022
7034b911
VCG
1023static int smp_cmd_encrypt_info(struct l2cap_conn *conn, struct sk_buff *skb)
1024{
16b90839 1025 struct smp_cmd_encrypt_info *rp = (void *) skb->data;
1c1def09 1026 struct smp_chan *smp = conn->smp_chan;
16b90839 1027
c46b98be
JH
1028 BT_DBG("conn %p", conn);
1029
1030 if (skb->len < sizeof(*rp))
38e4a915 1031 return SMP_INVALID_PARAMS;
c46b98be 1032
6131ddc8
JH
1033 /* Ignore this PDU if it wasn't requested */
1034 if (!(smp->remote_key_dist & SMP_DIST_ENC_KEY))
1035 return 0;
1036
16b90839
VCG
1037 skb_pull(skb, sizeof(*rp));
1038
1c1def09 1039 memcpy(smp->tk, rp->ltk, sizeof(smp->tk));
16b90839 1040
7034b911
VCG
1041 return 0;
1042}
1043
1044static int smp_cmd_master_ident(struct l2cap_conn *conn, struct sk_buff *skb)
1045{
16b90839 1046 struct smp_cmd_master_ident *rp = (void *) skb->data;
1c1def09 1047 struct smp_chan *smp = conn->smp_chan;
c9839a11
VCG
1048 struct hci_dev *hdev = conn->hcon->hdev;
1049 struct hci_conn *hcon = conn->hcon;
23d0e128 1050 struct smp_ltk *ltk;
c9839a11 1051 u8 authenticated;
16b90839 1052
c46b98be
JH
1053 BT_DBG("conn %p", conn);
1054
1055 if (skb->len < sizeof(*rp))
38e4a915 1056 return SMP_INVALID_PARAMS;
c46b98be 1057
6131ddc8
JH
1058 /* Ignore this PDU if it wasn't requested */
1059 if (!(smp->remote_key_dist & SMP_DIST_ENC_KEY))
1060 return 0;
1061
9747a9f3
JH
1062 /* Mark the information as received */
1063 smp->remote_key_dist &= ~SMP_DIST_ENC_KEY;
1064
16b90839 1065 skb_pull(skb, sizeof(*rp));
7034b911 1066
c9839a11 1067 hci_dev_lock(hdev);
ce39fb4e 1068 authenticated = (hcon->sec_level == BT_SECURITY_HIGH);
2ceba539 1069 ltk = hci_add_ltk(hdev, &hcon->dst, hcon->dst_type, SMP_LTK,
23d0e128
JH
1070 authenticated, smp->tk, smp->enc_key_size,
1071 rp->ediv, rp->rand);
1072 smp->ltk = ltk;
fd349c02 1073 if (!(smp->remote_key_dist & SMP_DIST_ID_KEY))
4bd6d38e 1074 smp_distribute_keys(conn);
c9839a11 1075 hci_dev_unlock(hdev);
7034b911
VCG
1076
1077 return 0;
1078}
1079
fd349c02
JH
1080static int smp_cmd_ident_info(struct l2cap_conn *conn, struct sk_buff *skb)
1081{
1082 struct smp_cmd_ident_info *info = (void *) skb->data;
1083 struct smp_chan *smp = conn->smp_chan;
1084
1085 BT_DBG("");
1086
1087 if (skb->len < sizeof(*info))
38e4a915 1088 return SMP_INVALID_PARAMS;
fd349c02 1089
6131ddc8
JH
1090 /* Ignore this PDU if it wasn't requested */
1091 if (!(smp->remote_key_dist & SMP_DIST_ID_KEY))
1092 return 0;
1093
fd349c02
JH
1094 skb_pull(skb, sizeof(*info));
1095
1096 memcpy(smp->irk, info->irk, 16);
1097
1098 return 0;
1099}
1100
1101static int smp_cmd_ident_addr_info(struct l2cap_conn *conn,
1102 struct sk_buff *skb)
1103{
1104 struct smp_cmd_ident_addr_info *info = (void *) skb->data;
1105 struct smp_chan *smp = conn->smp_chan;
1106 struct hci_conn *hcon = conn->hcon;
1107 bdaddr_t rpa;
1108
1109 BT_DBG("");
1110
1111 if (skb->len < sizeof(*info))
38e4a915 1112 return SMP_INVALID_PARAMS;
fd349c02 1113
6131ddc8
JH
1114 /* Ignore this PDU if it wasn't requested */
1115 if (!(smp->remote_key_dist & SMP_DIST_ID_KEY))
1116 return 0;
1117
9747a9f3
JH
1118 /* Mark the information as received */
1119 smp->remote_key_dist &= ~SMP_DIST_ID_KEY;
1120
fd349c02
JH
1121 skb_pull(skb, sizeof(*info));
1122
31dd624e
JH
1123 hci_dev_lock(hcon->hdev);
1124
a9a58f86
JH
1125 /* Strictly speaking the Core Specification (4.1) allows sending
1126 * an empty address which would force us to rely on just the IRK
1127 * as "identity information". However, since such
1128 * implementations are not known of and in order to not over
1129 * complicate our implementation, simply pretend that we never
1130 * received an IRK for such a device.
1131 */
1132 if (!bacmp(&info->bdaddr, BDADDR_ANY)) {
1133 BT_ERR("Ignoring IRK with no identity address");
31dd624e 1134 goto distribute;
a9a58f86
JH
1135 }
1136
fd349c02
JH
1137 bacpy(&smp->id_addr, &info->bdaddr);
1138 smp->id_addr_type = info->addr_type;
1139
1140 if (hci_bdaddr_is_rpa(&hcon->dst, hcon->dst_type))
1141 bacpy(&rpa, &hcon->dst);
1142 else
1143 bacpy(&rpa, BDADDR_ANY);
1144
23d0e128
JH
1145 smp->remote_irk = hci_add_irk(conn->hcon->hdev, &smp->id_addr,
1146 smp->id_addr_type, smp->irk, &rpa);
fd349c02 1147
31dd624e 1148distribute:
4bd6d38e 1149 smp_distribute_keys(conn);
fd349c02 1150
31dd624e
JH
1151 hci_dev_unlock(hcon->hdev);
1152
fd349c02
JH
1153 return 0;
1154}
1155
7ee4ea36
MH
1156static int smp_cmd_sign_info(struct l2cap_conn *conn, struct sk_buff *skb)
1157{
1158 struct smp_cmd_sign_info *rp = (void *) skb->data;
1159 struct smp_chan *smp = conn->smp_chan;
1160 struct hci_dev *hdev = conn->hcon->hdev;
1161 struct smp_csrk *csrk;
1162
1163 BT_DBG("conn %p", conn);
1164
1165 if (skb->len < sizeof(*rp))
38e4a915 1166 return SMP_INVALID_PARAMS;
7ee4ea36
MH
1167
1168 /* Ignore this PDU if it wasn't requested */
1169 if (!(smp->remote_key_dist & SMP_DIST_SIGN))
1170 return 0;
1171
1172 /* Mark the information as received */
1173 smp->remote_key_dist &= ~SMP_DIST_SIGN;
1174
1175 skb_pull(skb, sizeof(*rp));
1176
1177 hci_dev_lock(hdev);
1178 csrk = kzalloc(sizeof(*csrk), GFP_KERNEL);
1179 if (csrk) {
1180 csrk->master = 0x01;
1181 memcpy(csrk->val, rp->csrk, sizeof(csrk->val));
1182 }
1183 smp->csrk = csrk;
5fcb9347 1184 smp_distribute_keys(conn);
7ee4ea36
MH
1185 hci_dev_unlock(hdev);
1186
1187 return 0;
1188}
1189
eb492e01
AB
1190int smp_sig_channel(struct l2cap_conn *conn, struct sk_buff *skb)
1191{
7b9899db 1192 struct hci_conn *hcon = conn->hcon;
92381f5c 1193 __u8 code, reason;
eb492e01
AB
1194 int err = 0;
1195
7b9899db
MH
1196 if (hcon->type != LE_LINK) {
1197 kfree_skb(skb);
3432711f 1198 return 0;
7b9899db
MH
1199 }
1200
92381f5c
MH
1201 if (skb->len < 1) {
1202 kfree_skb(skb);
1203 return -EILSEQ;
1204 }
1205
06ae3314 1206 if (!test_bit(HCI_LE_ENABLED, &hcon->hdev->dev_flags)) {
beb19e4c 1207 err = -EOPNOTSUPP;
2e65c9d2
AG
1208 reason = SMP_PAIRING_NOTSUPP;
1209 goto done;
1210 }
1211
92381f5c 1212 code = skb->data[0];
eb492e01
AB
1213 skb_pull(skb, sizeof(code));
1214
8cf9fa12
JH
1215 /*
1216 * The SMP context must be initialized for all other PDUs except
1217 * pairing and security requests. If we get any other PDU when
1218 * not initialized simply disconnect (done if this function
1219 * returns an error).
1220 */
1221 if (code != SMP_CMD_PAIRING_REQ && code != SMP_CMD_SECURITY_REQ &&
d3368605 1222 !test_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags)) {
8cf9fa12
JH
1223 BT_ERR("Unexpected SMP command 0x%02x. Disconnecting.", code);
1224 kfree_skb(skb);
beb19e4c 1225 return -EOPNOTSUPP;
8cf9fa12
JH
1226 }
1227
eb492e01
AB
1228 switch (code) {
1229 case SMP_CMD_PAIRING_REQ:
da85e5e5 1230 reason = smp_cmd_pairing_req(conn, skb);
eb492e01
AB
1231 break;
1232
1233 case SMP_CMD_PAIRING_FAIL:
84794e11 1234 smp_failure(conn, 0);
da85e5e5
VCG
1235 reason = 0;
1236 err = -EPERM;
eb492e01
AB
1237 break;
1238
1239 case SMP_CMD_PAIRING_RSP:
da85e5e5 1240 reason = smp_cmd_pairing_rsp(conn, skb);
88ba43b6
AB
1241 break;
1242
1243 case SMP_CMD_SECURITY_REQ:
da85e5e5 1244 reason = smp_cmd_security_req(conn, skb);
88ba43b6
AB
1245 break;
1246
eb492e01 1247 case SMP_CMD_PAIRING_CONFIRM:
da85e5e5 1248 reason = smp_cmd_pairing_confirm(conn, skb);
88ba43b6
AB
1249 break;
1250
eb492e01 1251 case SMP_CMD_PAIRING_RANDOM:
da85e5e5 1252 reason = smp_cmd_pairing_random(conn, skb);
88ba43b6
AB
1253 break;
1254
eb492e01 1255 case SMP_CMD_ENCRYPT_INFO:
7034b911
VCG
1256 reason = smp_cmd_encrypt_info(conn, skb);
1257 break;
1258
eb492e01 1259 case SMP_CMD_MASTER_IDENT:
7034b911
VCG
1260 reason = smp_cmd_master_ident(conn, skb);
1261 break;
1262
eb492e01 1263 case SMP_CMD_IDENT_INFO:
fd349c02
JH
1264 reason = smp_cmd_ident_info(conn, skb);
1265 break;
1266
eb492e01 1267 case SMP_CMD_IDENT_ADDR_INFO:
fd349c02
JH
1268 reason = smp_cmd_ident_addr_info(conn, skb);
1269 break;
1270
eb492e01 1271 case SMP_CMD_SIGN_INFO:
7ee4ea36 1272 reason = smp_cmd_sign_info(conn, skb);
7034b911
VCG
1273 break;
1274
eb492e01
AB
1275 default:
1276 BT_DBG("Unknown command code 0x%2.2x", code);
1277
1278 reason = SMP_CMD_NOTSUPP;
eb492e01 1279 err = -EOPNOTSUPP;
3a0259bb 1280 goto done;
eb492e01
AB
1281 }
1282
3a0259bb
VCG
1283done:
1284 if (reason)
84794e11 1285 smp_failure(conn, reason);
3a0259bb 1286
eb492e01
AB
1287 kfree_skb(skb);
1288 return err;
1289}
7034b911 1290
35d70271
JH
1291static void smp_notify_keys(struct l2cap_conn *conn)
1292{
1293 struct smp_chan *smp = conn->smp_chan;
1294 struct hci_conn *hcon = conn->hcon;
1295 struct hci_dev *hdev = hcon->hdev;
53ac6ab6
MH
1296 struct smp_cmd_pairing *req = (void *) &smp->preq[1];
1297 struct smp_cmd_pairing *rsp = (void *) &smp->prsp[1];
1298 bool persistent;
35d70271 1299
61b1a7fb 1300 if (smp->remote_irk) {
95fbac8a 1301 mgmt_new_irk(hdev, smp->remote_irk);
61b1a7fb
JH
1302 /* Now that user space can be considered to know the
1303 * identity address track the connection based on it
1304 * from now on.
1305 */
1306 bacpy(&hcon->dst, &smp->remote_irk->bdaddr);
1307 hcon->dst_type = smp->remote_irk->addr_type;
1308 l2cap_conn_update_id_addr(hcon);
66d8e837
MH
1309
1310 /* When receiving an indentity resolving key for
1311 * a remote device that does not use a resolvable
1312 * private address, just remove the key so that
1313 * it is possible to use the controller white
1314 * list for scanning.
1315 *
1316 * Userspace will have been told to not store
1317 * this key at this point. So it is safe to
1318 * just remove it.
1319 */
1320 if (!bacmp(&smp->remote_irk->rpa, BDADDR_ANY)) {
1321 list_del(&smp->remote_irk->list);
1322 kfree(smp->remote_irk);
1323 smp->remote_irk = NULL;
1324 }
61b1a7fb 1325 }
95fbac8a 1326
53ac6ab6
MH
1327 /* The LTKs and CSRKs should be persistent only if both sides
1328 * had the bonding bit set in their authentication requests.
1329 */
1330 persistent = !!((req->auth_req & rsp->auth_req) & SMP_AUTH_BONDING);
1331
7ee4ea36
MH
1332 if (smp->csrk) {
1333 smp->csrk->bdaddr_type = hcon->dst_type;
1334 bacpy(&smp->csrk->bdaddr, &hcon->dst);
53ac6ab6 1335 mgmt_new_csrk(hdev, smp->csrk, persistent);
7ee4ea36
MH
1336 }
1337
1338 if (smp->slave_csrk) {
1339 smp->slave_csrk->bdaddr_type = hcon->dst_type;
1340 bacpy(&smp->slave_csrk->bdaddr, &hcon->dst);
53ac6ab6 1341 mgmt_new_csrk(hdev, smp->slave_csrk, persistent);
7ee4ea36
MH
1342 }
1343
35d70271
JH
1344 if (smp->ltk) {
1345 smp->ltk->bdaddr_type = hcon->dst_type;
1346 bacpy(&smp->ltk->bdaddr, &hcon->dst);
53ac6ab6 1347 mgmt_new_ltk(hdev, smp->ltk, persistent);
35d70271
JH
1348 }
1349
1350 if (smp->slave_ltk) {
1351 smp->slave_ltk->bdaddr_type = hcon->dst_type;
1352 bacpy(&smp->slave_ltk->bdaddr, &hcon->dst);
53ac6ab6 1353 mgmt_new_ltk(hdev, smp->slave_ltk, persistent);
35d70271
JH
1354 }
1355}
1356
4bd6d38e 1357int smp_distribute_keys(struct l2cap_conn *conn)
7034b911
VCG
1358{
1359 struct smp_cmd_pairing *req, *rsp;
1c1def09 1360 struct smp_chan *smp = conn->smp_chan;
524237cb
JH
1361 struct hci_conn *hcon = conn->hcon;
1362 struct hci_dev *hdev = hcon->hdev;
7034b911
VCG
1363 __u8 *keydist;
1364
4bd6d38e 1365 BT_DBG("conn %p", conn);
7034b911 1366
524237cb 1367 if (!test_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags))
d26a2345
VCG
1368 return 0;
1369
1c1def09 1370 rsp = (void *) &smp->prsp[1];
7034b911
VCG
1371
1372 /* The responder sends its keys first */
efabba37 1373 if (hcon->out && (smp->remote_key_dist & 0x07))
7034b911
VCG
1374 return 0;
1375
1c1def09 1376 req = (void *) &smp->preq[1];
7034b911 1377
524237cb 1378 if (hcon->out) {
7034b911
VCG
1379 keydist = &rsp->init_key_dist;
1380 *keydist &= req->init_key_dist;
1381 } else {
1382 keydist = &rsp->resp_key_dist;
1383 *keydist &= req->resp_key_dist;
1384 }
1385
7034b911
VCG
1386 BT_DBG("keydist 0x%x", *keydist);
1387
1388 if (*keydist & SMP_DIST_ENC_KEY) {
1389 struct smp_cmd_encrypt_info enc;
1390 struct smp_cmd_master_ident ident;
23d0e128 1391 struct smp_ltk *ltk;
c9839a11 1392 u8 authenticated;
7034b911 1393 __le16 ediv;
fe39c7b2 1394 __le64 rand;
7034b911
VCG
1395
1396 get_random_bytes(enc.ltk, sizeof(enc.ltk));
1397 get_random_bytes(&ediv, sizeof(ediv));
fe39c7b2 1398 get_random_bytes(&rand, sizeof(rand));
7034b911
VCG
1399
1400 smp_send_cmd(conn, SMP_CMD_ENCRYPT_INFO, sizeof(enc), &enc);
1401
c9839a11 1402 authenticated = hcon->sec_level == BT_SECURITY_HIGH;
524237cb 1403 ltk = hci_add_ltk(hdev, &hcon->dst, hcon->dst_type,
2ceba539 1404 SMP_LTK_SLAVE, authenticated, enc.ltk,
fe39c7b2 1405 smp->enc_key_size, ediv, rand);
23d0e128 1406 smp->slave_ltk = ltk;
16b90839 1407
58115373 1408 ident.ediv = ediv;
fe39c7b2 1409 ident.rand = rand;
7034b911
VCG
1410
1411 smp_send_cmd(conn, SMP_CMD_MASTER_IDENT, sizeof(ident), &ident);
1412
1413 *keydist &= ~SMP_DIST_ENC_KEY;
1414 }
1415
1416 if (*keydist & SMP_DIST_ID_KEY) {
1417 struct smp_cmd_ident_addr_info addrinfo;
1418 struct smp_cmd_ident_info idinfo;
1419
863efaf2 1420 memcpy(idinfo.irk, hdev->irk, sizeof(idinfo.irk));
7034b911
VCG
1421
1422 smp_send_cmd(conn, SMP_CMD_IDENT_INFO, sizeof(idinfo), &idinfo);
1423
82d4b359
JH
1424 /* The hci_conn contains the local identity address
1425 * after the connection has been established.
1426 *
1427 * This is true even when the connection has been
1428 * established using a resolvable random address.
1429 */
524237cb 1430 bacpy(&addrinfo.bdaddr, &hcon->src);
82d4b359 1431 addrinfo.addr_type = hcon->src_type;
7034b911
VCG
1432
1433 smp_send_cmd(conn, SMP_CMD_IDENT_ADDR_INFO, sizeof(addrinfo),
f1560463 1434 &addrinfo);
7034b911
VCG
1435
1436 *keydist &= ~SMP_DIST_ID_KEY;
1437 }
1438
1439 if (*keydist & SMP_DIST_SIGN) {
1440 struct smp_cmd_sign_info sign;
7ee4ea36 1441 struct smp_csrk *csrk;
7034b911 1442
7ee4ea36 1443 /* Generate a new random key */
7034b911
VCG
1444 get_random_bytes(sign.csrk, sizeof(sign.csrk));
1445
7ee4ea36
MH
1446 csrk = kzalloc(sizeof(*csrk), GFP_KERNEL);
1447 if (csrk) {
1448 csrk->master = 0x00;
1449 memcpy(csrk->val, sign.csrk, sizeof(csrk->val));
1450 }
1451 smp->slave_csrk = csrk;
1452
7034b911
VCG
1453 smp_send_cmd(conn, SMP_CMD_SIGN_INFO, sizeof(sign), &sign);
1454
1455 *keydist &= ~SMP_DIST_SIGN;
1456 }
1457
efabba37
JH
1458 /* If there are still keys to be received wait for them */
1459 if ((smp->remote_key_dist & 0x07))
1460 return 0;
1461
1d98bf4f
JH
1462 clear_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags);
1463 cancel_delayed_work_sync(&conn->security_timer);
4a74d658 1464 set_bit(SMP_FLAG_COMPLETE, &smp->flags);
1d98bf4f 1465 smp_notify_keys(conn);
efabba37 1466
1d98bf4f 1467 smp_chan_destroy(conn);
d26a2345 1468
7034b911
VCG
1469 return 0;
1470}
711eafe3 1471
70db83c4
JH
1472static void smp_teardown_cb(struct l2cap_chan *chan, int err)
1473{
1474 struct l2cap_conn *conn = chan->conn;
1475
1476 BT_DBG("chan %p", chan);
1477
1478 conn->smp = NULL;
1479 l2cap_chan_put(chan);
1480}
1481
1482static void smp_ready_cb(struct l2cap_chan *chan)
1483{
1484 struct l2cap_conn *conn = chan->conn;
1485
1486 BT_DBG("chan %p", chan);
1487
1488 conn->smp = chan;
1489 l2cap_chan_hold(chan);
1490}
1491
1492static struct sk_buff *smp_alloc_skb_cb(struct l2cap_chan *chan,
1493 unsigned long hdr_len,
1494 unsigned long len, int nb)
1495{
1496 struct sk_buff *skb;
1497
1498 skb = bt_skb_alloc(hdr_len + len, GFP_KERNEL);
1499 if (!skb)
1500 return ERR_PTR(-ENOMEM);
1501
1502 skb->priority = HCI_PRIO_MAX;
1503 bt_cb(skb)->chan = chan;
1504
1505 return skb;
1506}
1507
1508static const struct l2cap_ops smp_chan_ops = {
1509 .name = "Security Manager",
1510 .ready = smp_ready_cb,
1511 .alloc_skb = smp_alloc_skb_cb,
1512 .teardown = smp_teardown_cb,
1513
1514 .new_connection = l2cap_chan_no_new_connection,
1515 .recv = l2cap_chan_no_recv,
1516 .state_change = l2cap_chan_no_state_change,
1517 .close = l2cap_chan_no_close,
1518 .defer = l2cap_chan_no_defer,
1519 .suspend = l2cap_chan_no_suspend,
1520 .resume = l2cap_chan_no_resume,
1521 .set_shutdown = l2cap_chan_no_set_shutdown,
1522 .get_sndtimeo = l2cap_chan_no_get_sndtimeo,
1523 .memcpy_fromiovec = l2cap_chan_no_memcpy_fromiovec,
1524};
1525
1526static inline struct l2cap_chan *smp_new_conn_cb(struct l2cap_chan *pchan)
1527{
1528 struct l2cap_chan *chan;
1529
1530 BT_DBG("pchan %p", pchan);
1531
1532 chan = l2cap_chan_create();
1533 if (!chan)
1534 return NULL;
1535
1536 chan->chan_type = pchan->chan_type;
1537 chan->ops = &smp_chan_ops;
1538 chan->scid = pchan->scid;
1539 chan->dcid = chan->scid;
1540 chan->imtu = pchan->imtu;
1541 chan->omtu = pchan->omtu;
1542 chan->mode = pchan->mode;
1543
1544 BT_DBG("created chan %p", chan);
1545
1546 return chan;
1547}
1548
1549static const struct l2cap_ops smp_root_chan_ops = {
1550 .name = "Security Manager Root",
1551 .new_connection = smp_new_conn_cb,
1552
1553 /* None of these are implemented for the root channel */
1554 .close = l2cap_chan_no_close,
1555 .alloc_skb = l2cap_chan_no_alloc_skb,
1556 .recv = l2cap_chan_no_recv,
1557 .state_change = l2cap_chan_no_state_change,
1558 .teardown = l2cap_chan_no_teardown,
1559 .ready = l2cap_chan_no_ready,
1560 .defer = l2cap_chan_no_defer,
1561 .suspend = l2cap_chan_no_suspend,
1562 .resume = l2cap_chan_no_resume,
1563 .set_shutdown = l2cap_chan_no_set_shutdown,
1564 .get_sndtimeo = l2cap_chan_no_get_sndtimeo,
1565 .memcpy_fromiovec = l2cap_chan_no_memcpy_fromiovec,
1566};
1567
711eafe3
JH
1568int smp_register(struct hci_dev *hdev)
1569{
70db83c4 1570 struct l2cap_chan *chan;
defce9e8 1571 struct crypto_blkcipher *tfm_aes;
70db83c4 1572
711eafe3
JH
1573 BT_DBG("%s", hdev->name);
1574
defce9e8
JH
1575 tfm_aes = crypto_alloc_blkcipher("ecb(aes)", 0, CRYPTO_ALG_ASYNC);
1576 if (IS_ERR(tfm_aes)) {
1577 int err = PTR_ERR(tfm_aes);
711eafe3 1578 BT_ERR("Unable to create crypto context");
711eafe3
JH
1579 return err;
1580 }
1581
70db83c4
JH
1582 chan = l2cap_chan_create();
1583 if (!chan) {
defce9e8 1584 crypto_free_blkcipher(tfm_aes);
70db83c4
JH
1585 return -ENOMEM;
1586 }
1587
defce9e8
JH
1588 chan->data = tfm_aes;
1589
70db83c4
JH
1590 /* FIXME: Using reserved 0x1f value for now - to be changed to
1591 * L2CAP_CID_SMP once all functionality is in place.
1592 */
1593 l2cap_add_scid(chan, 0x1f);
1594
1595 l2cap_chan_set_defaults(chan);
1596
1597 bacpy(&chan->src, &hdev->bdaddr);
1598 chan->src_type = BDADDR_LE_PUBLIC;
1599 chan->state = BT_LISTEN;
1600 chan->mode = L2CAP_MODE_BASIC;
1601 chan->imtu = L2CAP_DEFAULT_MTU;
1602 chan->ops = &smp_root_chan_ops;
1603
1604 hdev->smp_data = chan;
1605
711eafe3
JH
1606 return 0;
1607}
1608
1609void smp_unregister(struct hci_dev *hdev)
1610{
70db83c4 1611 struct l2cap_chan *chan = hdev->smp_data;
defce9e8 1612 struct crypto_blkcipher *tfm_aes;
70db83c4
JH
1613
1614 if (!chan)
1615 return;
1616
1617 BT_DBG("%s chan %p", hdev->name, chan);
711eafe3 1618
defce9e8
JH
1619 tfm_aes = chan->data;
1620 if (tfm_aes) {
1621 chan->data = NULL;
1622 crypto_free_blkcipher(tfm_aes);
711eafe3 1623 }
70db83c4
JH
1624
1625 hdev->smp_data = NULL;
1626 l2cap_chan_put(chan);
711eafe3 1627}
This page took 0.431677 seconds and 5 git commands to generate.