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