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