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