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