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