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