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