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