Bluetooth: Allow HCI User Channel usage for controllers without address
[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
d22ef0bc
AB
38static inline void swap128(u8 src[16], u8 dst[16])
39{
40 int i;
41 for (i = 0; i < 16; i++)
42 dst[15 - i] = src[i];
43}
44
45static inline void swap56(u8 src[7], u8 dst[7])
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;
201a5929 56 int err;
d22ef0bc
AB
57
58 if (tfm == NULL) {
59 BT_ERR("tfm %p", tfm);
60 return -EINVAL;
61 }
62
63 desc.tfm = tfm;
64 desc.flags = 0;
65
66 err = crypto_blkcipher_setkey(tfm, k, 16);
67 if (err) {
68 BT_ERR("cipher setkey failed: %d", err);
69 return err;
70 }
71
72 sg_init_one(&sg, r, 16);
73
d22ef0bc
AB
74 err = crypto_blkcipher_encrypt(&desc, &sg, &sg, 16);
75 if (err)
76 BT_ERR("Encrypt data error %d", err);
77
78 return err;
79}
80
81static int smp_c1(struct crypto_blkcipher *tfm, u8 k[16], u8 r[16],
f1560463
MH
82 u8 preq[7], u8 pres[7], u8 _iat, bdaddr_t *ia,
83 u8 _rat, bdaddr_t *ra, u8 res[16])
d22ef0bc
AB
84{
85 u8 p1[16], p2[16];
86 int err;
87
88 memset(p1, 0, 16);
89
90 /* p1 = pres || preq || _rat || _iat */
91 swap56(pres, p1);
92 swap56(preq, p1 + 7);
93 p1[14] = _rat;
94 p1[15] = _iat;
95
96 memset(p2, 0, 16);
97
98 /* p2 = padding || ia || ra */
99 baswap((bdaddr_t *) (p2 + 4), ia);
100 baswap((bdaddr_t *) (p2 + 10), ra);
101
102 /* res = r XOR p1 */
103 u128_xor((u128 *) res, (u128 *) r, (u128 *) p1);
104
105 /* res = e(k, res) */
106 err = smp_e(tfm, k, res);
107 if (err) {
108 BT_ERR("Encrypt data error");
109 return err;
110 }
111
112 /* res = res XOR p2 */
113 u128_xor((u128 *) res, (u128 *) res, (u128 *) p2);
114
115 /* res = e(k, res) */
116 err = smp_e(tfm, k, res);
117 if (err)
118 BT_ERR("Encrypt data error");
119
120 return err;
121}
122
f1560463
MH
123static int smp_s1(struct crypto_blkcipher *tfm, u8 k[16], u8 r1[16],
124 u8 r2[16], u8 _r[16])
d22ef0bc
AB
125{
126 int err;
127
128 /* Just least significant octets from r1 and r2 are considered */
129 memcpy(_r, r1 + 8, 8);
130 memcpy(_r + 8, r2 + 8, 8);
131
132 err = smp_e(tfm, k, _r);
133 if (err)
134 BT_ERR("Encrypt data error");
135
136 return err;
137}
138
eb492e01 139static struct sk_buff *smp_build_cmd(struct l2cap_conn *conn, u8 code,
f1560463 140 u16 dlen, void *data)
eb492e01
AB
141{
142 struct sk_buff *skb;
143 struct l2cap_hdr *lh;
144 int len;
145
146 len = L2CAP_HDR_SIZE + sizeof(code) + dlen;
147
148 if (len > conn->mtu)
149 return NULL;
150
151 skb = bt_skb_alloc(len, GFP_ATOMIC);
152 if (!skb)
153 return NULL;
154
155 lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
156 lh->len = cpu_to_le16(sizeof(code) + dlen);
d8aece2a 157 lh->cid = __constant_cpu_to_le16(L2CAP_CID_SMP);
eb492e01
AB
158
159 memcpy(skb_put(skb, sizeof(code)), &code, sizeof(code));
160
161 memcpy(skb_put(skb, dlen), data, dlen);
162
163 return skb;
164}
165
166static void smp_send_cmd(struct l2cap_conn *conn, u8 code, u16 len, void *data)
167{
168 struct sk_buff *skb = smp_build_cmd(conn, code, len, data);
169
170 BT_DBG("code 0x%2.2x", code);
171
172 if (!skb)
173 return;
174
73d80deb
LAD
175 skb->priority = HCI_PRIO_MAX;
176 hci_send_acl(conn->hchan, skb, 0);
e2dcd113 177
6c9d42a1 178 cancel_delayed_work_sync(&conn->security_timer);
17b02e62 179 schedule_delayed_work(&conn->security_timer, SMP_TIMEOUT);
eb492e01
AB
180}
181
2b64d153
BG
182static __u8 authreq_to_seclevel(__u8 authreq)
183{
184 if (authreq & SMP_AUTH_MITM)
185 return BT_SECURITY_HIGH;
186 else
187 return BT_SECURITY_MEDIUM;
188}
189
190static __u8 seclevel_to_authreq(__u8 sec_level)
191{
192 switch (sec_level) {
193 case BT_SECURITY_HIGH:
194 return SMP_AUTH_MITM | SMP_AUTH_BONDING;
195 case BT_SECURITY_MEDIUM:
196 return SMP_AUTH_BONDING;
197 default:
198 return SMP_AUTH_NONE;
199 }
200}
201
b8e66eac 202static void build_pairing_cmd(struct l2cap_conn *conn,
f1560463
MH
203 struct smp_cmd_pairing *req,
204 struct smp_cmd_pairing *rsp, __u8 authreq)
b8e66eac 205{
2b64d153 206 u8 dist_keys = 0;
54790f73 207
a8b2d5c2 208 if (test_bit(HCI_PAIRABLE, &conn->hcon->hdev->dev_flags)) {
ca10b5ee 209 dist_keys = SMP_DIST_ENC_KEY;
54790f73 210 authreq |= SMP_AUTH_BONDING;
2b64d153
BG
211 } else {
212 authreq &= ~SMP_AUTH_BONDING;
54790f73
VCG
213 }
214
215 if (rsp == NULL) {
216 req->io_capability = conn->hcon->io_capability;
217 req->oob_flag = SMP_OOB_NOT_PRESENT;
218 req->max_key_size = SMP_MAX_ENC_KEY_SIZE;
0cf73b9f 219 req->init_key_dist = dist_keys;
54790f73 220 req->resp_key_dist = dist_keys;
065a13e2 221 req->auth_req = (authreq & AUTH_REQ_MASK);
54790f73
VCG
222 return;
223 }
224
225 rsp->io_capability = conn->hcon->io_capability;
226 rsp->oob_flag = SMP_OOB_NOT_PRESENT;
227 rsp->max_key_size = SMP_MAX_ENC_KEY_SIZE;
0cf73b9f 228 rsp->init_key_dist = req->init_key_dist & dist_keys;
54790f73 229 rsp->resp_key_dist = req->resp_key_dist & dist_keys;
065a13e2 230 rsp->auth_req = (authreq & AUTH_REQ_MASK);
b8e66eac
VCG
231}
232
3158c50c
VCG
233static u8 check_enc_key_size(struct l2cap_conn *conn, __u8 max_key_size)
234{
1c1def09
VCG
235 struct smp_chan *smp = conn->smp_chan;
236
3158c50c 237 if ((max_key_size > SMP_MAX_ENC_KEY_SIZE) ||
f1560463 238 (max_key_size < SMP_MIN_ENC_KEY_SIZE))
3158c50c
VCG
239 return SMP_ENC_KEY_SIZE;
240
f7aa611a 241 smp->enc_key_size = max_key_size;
3158c50c
VCG
242
243 return 0;
244}
245
84794e11 246static void smp_failure(struct l2cap_conn *conn, u8 reason)
4f957a76 247{
bab73cb6
JH
248 struct hci_conn *hcon = conn->hcon;
249
84794e11 250 if (reason)
4f957a76 251 smp_send_cmd(conn, SMP_CMD_PAIRING_FAIL, sizeof(reason),
f1560463 252 &reason);
4f957a76 253
ce39fb4e
MH
254 clear_bit(HCI_CONN_ENCRYPT_PEND, &hcon->flags);
255 mgmt_auth_failed(hcon->hdev, &hcon->dst, hcon->type, hcon->dst_type,
256 HCI_ERROR_AUTH_FAILURE);
f1c09c07 257
61a0cfb0
AG
258 cancel_delayed_work_sync(&conn->security_timer);
259
ce39fb4e 260 if (test_and_clear_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags))
f1c09c07 261 smp_chan_destroy(conn);
4f957a76
BG
262}
263
2b64d153
BG
264#define JUST_WORKS 0x00
265#define JUST_CFM 0x01
266#define REQ_PASSKEY 0x02
267#define CFM_PASSKEY 0x03
268#define REQ_OOB 0x04
269#define OVERLAP 0xFF
270
271static const u8 gen_method[5][5] = {
272 { JUST_WORKS, JUST_CFM, REQ_PASSKEY, JUST_WORKS, REQ_PASSKEY },
273 { JUST_WORKS, JUST_CFM, REQ_PASSKEY, JUST_WORKS, REQ_PASSKEY },
274 { CFM_PASSKEY, CFM_PASSKEY, REQ_PASSKEY, JUST_WORKS, CFM_PASSKEY },
275 { JUST_WORKS, JUST_CFM, JUST_WORKS, JUST_WORKS, JUST_CFM },
276 { CFM_PASSKEY, CFM_PASSKEY, REQ_PASSKEY, JUST_WORKS, OVERLAP },
277};
278
279static int tk_request(struct l2cap_conn *conn, u8 remote_oob, u8 auth,
280 u8 local_io, u8 remote_io)
281{
282 struct hci_conn *hcon = conn->hcon;
283 struct smp_chan *smp = conn->smp_chan;
284 u8 method;
285 u32 passkey = 0;
286 int ret = 0;
287
288 /* Initialize key for JUST WORKS */
289 memset(smp->tk, 0, sizeof(smp->tk));
290 clear_bit(SMP_FLAG_TK_VALID, &smp->smp_flags);
291
292 BT_DBG("tk_request: auth:%d lcl:%d rem:%d", auth, local_io, remote_io);
293
294 /* If neither side wants MITM, use JUST WORKS */
295 /* If either side has unknown io_caps, use JUST WORKS */
296 /* Otherwise, look up method from the table */
297 if (!(auth & SMP_AUTH_MITM) ||
f1560463
MH
298 local_io > SMP_IO_KEYBOARD_DISPLAY ||
299 remote_io > SMP_IO_KEYBOARD_DISPLAY)
2b64d153
BG
300 method = JUST_WORKS;
301 else
b3ff53ff 302 method = gen_method[remote_io][local_io];
2b64d153
BG
303
304 /* If not bonding, don't ask user to confirm a Zero TK */
305 if (!(auth & SMP_AUTH_BONDING) && method == JUST_CFM)
306 method = JUST_WORKS;
307
308 /* If Just Works, Continue with Zero TK */
309 if (method == JUST_WORKS) {
310 set_bit(SMP_FLAG_TK_VALID, &smp->smp_flags);
311 return 0;
312 }
313
314 /* Not Just Works/Confirm results in MITM Authentication */
315 if (method != JUST_CFM)
316 set_bit(SMP_FLAG_MITM_AUTH, &smp->smp_flags);
317
318 /* If both devices have Keyoard-Display I/O, the master
319 * Confirms and the slave Enters the passkey.
320 */
321 if (method == OVERLAP) {
322 if (hcon->link_mode & HCI_LM_MASTER)
323 method = CFM_PASSKEY;
324 else
325 method = REQ_PASSKEY;
326 }
327
328 /* Generate random passkey. Not valid until confirmed. */
329 if (method == CFM_PASSKEY) {
330 u8 key[16];
331
332 memset(key, 0, sizeof(key));
333 get_random_bytes(&passkey, sizeof(passkey));
334 passkey %= 1000000;
335 put_unaligned_le32(passkey, key);
336 swap128(key, smp->tk);
337 BT_DBG("PassKey: %d", passkey);
338 }
339
340 hci_dev_lock(hcon->hdev);
341
342 if (method == REQ_PASSKEY)
ce39fb4e 343 ret = mgmt_user_passkey_request(hcon->hdev, &hcon->dst,
272d90df 344 hcon->type, hcon->dst_type);
2b64d153 345 else
ce39fb4e 346 ret = mgmt_user_confirm_request(hcon->hdev, &hcon->dst,
272d90df 347 hcon->type, hcon->dst_type,
2b64d153
BG
348 cpu_to_le32(passkey), 0);
349
350 hci_dev_unlock(hcon->hdev);
351
352 return ret;
353}
354
8aab4757
VCG
355static void confirm_work(struct work_struct *work)
356{
357 struct smp_chan *smp = container_of(work, struct smp_chan, confirm);
358 struct l2cap_conn *conn = smp->conn;
359 struct crypto_blkcipher *tfm;
360 struct smp_cmd_pairing_confirm cp;
361 int ret;
362 u8 res[16], reason;
363
364 BT_DBG("conn %p", conn);
365
366 tfm = crypto_alloc_blkcipher("ecb(aes)", 0, CRYPTO_ALG_ASYNC);
367 if (IS_ERR(tfm)) {
368 reason = SMP_UNSPECIFIED;
369 goto error;
370 }
371
372 smp->tfm = tfm;
373
374 if (conn->hcon->out)
c8462ca6
MH
375 ret = smp_c1(tfm, smp->tk, smp->prnd, smp->preq, smp->prsp,
376 conn->hcon->src_type, &conn->hcon->src,
377 conn->hcon->dst_type, &conn->hcon->dst, res);
8aab4757
VCG
378 else
379 ret = smp_c1(tfm, smp->tk, smp->prnd, smp->preq, smp->prsp,
c8462ca6
MH
380 conn->hcon->dst_type, &conn->hcon->dst,
381 conn->hcon->src_type, &conn->hcon->src, res);
8aab4757
VCG
382 if (ret) {
383 reason = SMP_UNSPECIFIED;
384 goto error;
385 }
386
2b64d153
BG
387 clear_bit(SMP_FLAG_CFM_PENDING, &smp->smp_flags);
388
8aab4757
VCG
389 swap128(res, cp.confirm_val);
390 smp_send_cmd(smp->conn, SMP_CMD_PAIRING_CONFIRM, sizeof(cp), &cp);
391
392 return;
393
394error:
84794e11 395 smp_failure(conn, reason);
8aab4757
VCG
396}
397
398static void random_work(struct work_struct *work)
399{
400 struct smp_chan *smp = container_of(work, struct smp_chan, random);
401 struct l2cap_conn *conn = smp->conn;
402 struct hci_conn *hcon = conn->hcon;
403 struct crypto_blkcipher *tfm = smp->tfm;
404 u8 reason, confirm[16], res[16], key[16];
405 int ret;
406
407 if (IS_ERR_OR_NULL(tfm)) {
408 reason = SMP_UNSPECIFIED;
409 goto error;
410 }
411
412 BT_DBG("conn %p %s", conn, conn->hcon->out ? "master" : "slave");
413
414 if (hcon->out)
c8462ca6
MH
415 ret = smp_c1(tfm, smp->tk, smp->rrnd, smp->preq, smp->prsp,
416 hcon->src_type, &hcon->src,
417 hcon->dst_type, &hcon->dst, res);
8aab4757
VCG
418 else
419 ret = smp_c1(tfm, smp->tk, smp->rrnd, smp->preq, smp->prsp,
c8462ca6
MH
420 hcon->dst_type, &hcon->dst,
421 hcon->src_type, &hcon->src, res);
8aab4757
VCG
422 if (ret) {
423 reason = SMP_UNSPECIFIED;
424 goto error;
425 }
426
427 swap128(res, confirm);
428
429 if (memcmp(smp->pcnf, confirm, sizeof(smp->pcnf)) != 0) {
430 BT_ERR("Pairing failed (confirmation values mismatch)");
431 reason = SMP_CONFIRM_FAILED;
432 goto error;
433 }
434
435 if (hcon->out) {
436 u8 stk[16], rand[8];
437 __le16 ediv;
438
439 memset(rand, 0, sizeof(rand));
440 ediv = 0;
441
442 smp_s1(tfm, smp->tk, smp->rrnd, smp->prnd, key);
443 swap128(key, stk);
444
f7aa611a 445 memset(stk + smp->enc_key_size, 0,
04124681 446 SMP_MAX_ENC_KEY_SIZE - smp->enc_key_size);
8aab4757 447
51a8efd7 448 if (test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &hcon->flags)) {
8aab4757
VCG
449 reason = SMP_UNSPECIFIED;
450 goto error;
451 }
452
453 hci_le_start_enc(hcon, ediv, rand, stk);
f7aa611a 454 hcon->enc_key_size = smp->enc_key_size;
8aab4757
VCG
455 } else {
456 u8 stk[16], r[16], rand[8];
457 __le16 ediv;
458
459 memset(rand, 0, sizeof(rand));
460 ediv = 0;
461
462 swap128(smp->prnd, r);
463 smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM, sizeof(r), r);
464
465 smp_s1(tfm, smp->tk, smp->prnd, smp->rrnd, key);
466 swap128(key, stk);
467
f7aa611a 468 memset(stk + smp->enc_key_size, 0,
f1560463 469 SMP_MAX_ENC_KEY_SIZE - smp->enc_key_size);
8aab4757 470
ce39fb4e 471 hci_add_ltk(hcon->hdev, &hcon->dst, hcon->dst_type,
04124681
GP
472 HCI_SMP_STK_SLAVE, 0, 0, stk, smp->enc_key_size,
473 ediv, rand);
8aab4757
VCG
474 }
475
476 return;
477
478error:
84794e11 479 smp_failure(conn, reason);
8aab4757
VCG
480}
481
482static struct smp_chan *smp_chan_create(struct l2cap_conn *conn)
483{
484 struct smp_chan *smp;
485
f1560463 486 smp = kzalloc(sizeof(*smp), GFP_ATOMIC);
8aab4757
VCG
487 if (!smp)
488 return NULL;
489
490 INIT_WORK(&smp->confirm, confirm_work);
491 INIT_WORK(&smp->random, random_work);
492
493 smp->conn = conn;
494 conn->smp_chan = smp;
2b64d153 495 conn->hcon->smp_conn = conn;
8aab4757
VCG
496
497 hci_conn_hold(conn->hcon);
498
499 return smp;
500}
501
502void smp_chan_destroy(struct l2cap_conn *conn)
503{
c8eb9690
BG
504 struct smp_chan *smp = conn->smp_chan;
505
f1c09c07 506 BUG_ON(!smp);
c8eb9690
BG
507
508 if (smp->tfm)
509 crypto_free_blkcipher(smp->tfm);
510
511 kfree(smp);
512 conn->smp_chan = NULL;
2b64d153 513 conn->hcon->smp_conn = NULL;
76a68ba0 514 hci_conn_drop(conn->hcon);
8aab4757
VCG
515}
516
2b64d153
BG
517int smp_user_confirm_reply(struct hci_conn *hcon, u16 mgmt_op, __le32 passkey)
518{
519 struct l2cap_conn *conn = hcon->smp_conn;
520 struct smp_chan *smp;
521 u32 value;
522 u8 key[16];
523
524 BT_DBG("");
525
526 if (!conn)
527 return -ENOTCONN;
528
529 smp = conn->smp_chan;
530
531 switch (mgmt_op) {
532 case MGMT_OP_USER_PASSKEY_REPLY:
533 value = le32_to_cpu(passkey);
534 memset(key, 0, sizeof(key));
535 BT_DBG("PassKey: %d", value);
536 put_unaligned_le32(value, key);
537 swap128(key, smp->tk);
538 /* Fall Through */
539 case MGMT_OP_USER_CONFIRM_REPLY:
540 set_bit(SMP_FLAG_TK_VALID, &smp->smp_flags);
541 break;
542 case MGMT_OP_USER_PASSKEY_NEG_REPLY:
543 case MGMT_OP_USER_CONFIRM_NEG_REPLY:
84794e11 544 smp_failure(conn, SMP_PASSKEY_ENTRY_FAILED);
2b64d153
BG
545 return 0;
546 default:
84794e11 547 smp_failure(conn, SMP_PASSKEY_ENTRY_FAILED);
2b64d153
BG
548 return -EOPNOTSUPP;
549 }
550
551 /* If it is our turn to send Pairing Confirm, do so now */
552 if (test_bit(SMP_FLAG_CFM_PENDING, &smp->smp_flags))
553 queue_work(hcon->hdev->workqueue, &smp->confirm);
554
555 return 0;
556}
557
da85e5e5 558static u8 smp_cmd_pairing_req(struct l2cap_conn *conn, struct sk_buff *skb)
88ba43b6 559{
3158c50c 560 struct smp_cmd_pairing rsp, *req = (void *) skb->data;
8aab4757 561 struct smp_chan *smp;
3158c50c 562 u8 key_size;
2b64d153 563 u8 auth = SMP_AUTH_NONE;
8aab4757 564 int ret;
88ba43b6
AB
565
566 BT_DBG("conn %p", conn);
567
2b64d153
BG
568 if (conn->hcon->link_mode & HCI_LM_MASTER)
569 return SMP_CMD_NOTSUPP;
570
51a8efd7 571 if (!test_and_set_bit(HCI_CONN_LE_SMP_PEND, &conn->hcon->flags))
8aab4757 572 smp = smp_chan_create(conn);
d08fd0e7
AE
573 else
574 smp = conn->smp_chan;
8aab4757 575
d08fd0e7
AE
576 if (!smp)
577 return SMP_UNSPECIFIED;
d26a2345 578
1c1def09
VCG
579 smp->preq[0] = SMP_CMD_PAIRING_REQ;
580 memcpy(&smp->preq[1], req, sizeof(*req));
3158c50c 581 skb_pull(skb, sizeof(*req));
88ba43b6 582
2b64d153
BG
583 /* We didn't start the pairing, so match remote */
584 if (req->auth_req & SMP_AUTH_BONDING)
585 auth = req->auth_req;
da85e5e5 586
fdde0a26
IY
587 conn->hcon->pending_sec_level = authreq_to_seclevel(auth);
588
2b64d153 589 build_pairing_cmd(conn, req, &rsp, auth);
3158c50c
VCG
590
591 key_size = min(req->max_key_size, rsp.max_key_size);
592 if (check_enc_key_size(conn, key_size))
593 return SMP_ENC_KEY_SIZE;
88ba43b6 594
e84a6b13 595 get_random_bytes(smp->prnd, sizeof(smp->prnd));
8aab4757 596
1c1def09
VCG
597 smp->prsp[0] = SMP_CMD_PAIRING_RSP;
598 memcpy(&smp->prsp[1], &rsp, sizeof(rsp));
f01ead31 599
3158c50c 600 smp_send_cmd(conn, SMP_CMD_PAIRING_RSP, sizeof(rsp), &rsp);
da85e5e5 601
2b64d153
BG
602 /* Request setup of TK */
603 ret = tk_request(conn, 0, auth, rsp.io_capability, req->io_capability);
604 if (ret)
605 return SMP_UNSPECIFIED;
606
da85e5e5 607 return 0;
88ba43b6
AB
608}
609
da85e5e5 610static u8 smp_cmd_pairing_rsp(struct l2cap_conn *conn, struct sk_buff *skb)
88ba43b6 611{
3158c50c 612 struct smp_cmd_pairing *req, *rsp = (void *) skb->data;
1c1def09 613 struct smp_chan *smp = conn->smp_chan;
8aab4757 614 struct hci_dev *hdev = conn->hcon->hdev;
2b64d153 615 u8 key_size, auth = SMP_AUTH_NONE;
7d24ddcc 616 int ret;
88ba43b6
AB
617
618 BT_DBG("conn %p", conn);
619
2b64d153
BG
620 if (!(conn->hcon->link_mode & HCI_LM_MASTER))
621 return SMP_CMD_NOTSUPP;
622
3158c50c
VCG
623 skb_pull(skb, sizeof(*rsp));
624
1c1def09 625 req = (void *) &smp->preq[1];
da85e5e5 626
3158c50c
VCG
627 key_size = min(req->max_key_size, rsp->max_key_size);
628 if (check_enc_key_size(conn, key_size))
629 return SMP_ENC_KEY_SIZE;
630
e84a6b13 631 get_random_bytes(smp->prnd, sizeof(smp->prnd));
7d24ddcc 632
8aab4757
VCG
633 smp->prsp[0] = SMP_CMD_PAIRING_RSP;
634 memcpy(&smp->prsp[1], rsp, sizeof(*rsp));
7d24ddcc 635
2b64d153 636 if ((req->auth_req & SMP_AUTH_BONDING) &&
f1560463 637 (rsp->auth_req & SMP_AUTH_BONDING))
2b64d153
BG
638 auth = SMP_AUTH_BONDING;
639
640 auth |= (req->auth_req | rsp->auth_req) & SMP_AUTH_MITM;
641
476585ec 642 ret = tk_request(conn, 0, auth, req->io_capability, rsp->io_capability);
2b64d153
BG
643 if (ret)
644 return SMP_UNSPECIFIED;
645
646 set_bit(SMP_FLAG_CFM_PENDING, &smp->smp_flags);
647
648 /* Can't compose response until we have been confirmed */
649 if (!test_bit(SMP_FLAG_TK_VALID, &smp->smp_flags))
650 return 0;
651
8aab4757 652 queue_work(hdev->workqueue, &smp->confirm);
da85e5e5
VCG
653
654 return 0;
88ba43b6
AB
655}
656
da85e5e5 657static u8 smp_cmd_pairing_confirm(struct l2cap_conn *conn, struct sk_buff *skb)
88ba43b6 658{
1c1def09 659 struct smp_chan *smp = conn->smp_chan;
8aab4757 660 struct hci_dev *hdev = conn->hcon->hdev;
7d24ddcc 661
88ba43b6
AB
662 BT_DBG("conn %p %s", conn, conn->hcon->out ? "master" : "slave");
663
1c1def09
VCG
664 memcpy(smp->pcnf, skb->data, sizeof(smp->pcnf));
665 skb_pull(skb, sizeof(smp->pcnf));
88ba43b6 666
7d24ddcc
AB
667 if (conn->hcon->out) {
668 u8 random[16];
88ba43b6 669
1c1def09 670 swap128(smp->prnd, random);
88ba43b6 671 smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM, sizeof(random),
f1560463 672 random);
2b64d153 673 } else if (test_bit(SMP_FLAG_TK_VALID, &smp->smp_flags)) {
8aab4757 674 queue_work(hdev->workqueue, &smp->confirm);
2b64d153
BG
675 } else {
676 set_bit(SMP_FLAG_CFM_PENDING, &smp->smp_flags);
88ba43b6 677 }
da85e5e5
VCG
678
679 return 0;
88ba43b6
AB
680}
681
da85e5e5 682static u8 smp_cmd_pairing_random(struct l2cap_conn *conn, struct sk_buff *skb)
88ba43b6 683{
1c1def09 684 struct smp_chan *smp = conn->smp_chan;
8aab4757 685 struct hci_dev *hdev = conn->hcon->hdev;
7d24ddcc 686
8aab4757 687 BT_DBG("conn %p", conn);
3158c50c 688
8aab4757
VCG
689 swap128(skb->data, smp->rrnd);
690 skb_pull(skb, sizeof(smp->rrnd));
e7e62c85 691
8aab4757 692 queue_work(hdev->workqueue, &smp->random);
da85e5e5
VCG
693
694 return 0;
88ba43b6
AB
695}
696
4dab7864 697static u8 smp_ltk_encrypt(struct l2cap_conn *conn, u8 sec_level)
988c5997 698{
c9839a11 699 struct smp_ltk *key;
988c5997
VCG
700 struct hci_conn *hcon = conn->hcon;
701
98a0b845
JH
702 key = hci_find_ltk_by_addr(hcon->hdev, &hcon->dst, hcon->dst_type,
703 hcon->out);
988c5997
VCG
704 if (!key)
705 return 0;
706
4dab7864
JH
707 if (sec_level > BT_SECURITY_MEDIUM && !key->authenticated)
708 return 0;
709
51a8efd7 710 if (test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &hcon->flags))
988c5997
VCG
711 return 1;
712
c9839a11
VCG
713 hci_le_start_enc(hcon, key->ediv, key->rand, key->val);
714 hcon->enc_key_size = key->enc_size;
988c5997
VCG
715
716 return 1;
988c5997 717}
f1560463 718
da85e5e5 719static u8 smp_cmd_security_req(struct l2cap_conn *conn, struct sk_buff *skb)
88ba43b6
AB
720{
721 struct smp_cmd_security_req *rp = (void *) skb->data;
722 struct smp_cmd_pairing cp;
f1cb9af5 723 struct hci_conn *hcon = conn->hcon;
8aab4757 724 struct smp_chan *smp;
88ba43b6
AB
725
726 BT_DBG("conn %p", conn);
727
86ca9eac
JH
728 if (!(conn->hcon->link_mode & HCI_LM_MASTER))
729 return SMP_CMD_NOTSUPP;
730
2b64d153 731 hcon->pending_sec_level = authreq_to_seclevel(rp->auth_req);
feb45eb5 732
4dab7864 733 if (smp_ltk_encrypt(conn, hcon->pending_sec_level))
988c5997
VCG
734 return 0;
735
51a8efd7 736 if (test_and_set_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags))
da85e5e5 737 return 0;
f1cb9af5 738
8aab4757 739 smp = smp_chan_create(conn);
d26a2345 740
88ba43b6 741 skb_pull(skb, sizeof(*rp));
88ba43b6 742
da85e5e5 743 memset(&cp, 0, sizeof(cp));
54790f73 744 build_pairing_cmd(conn, &cp, NULL, rp->auth_req);
88ba43b6 745
1c1def09
VCG
746 smp->preq[0] = SMP_CMD_PAIRING_REQ;
747 memcpy(&smp->preq[1], &cp, sizeof(cp));
f01ead31 748
88ba43b6 749 smp_send_cmd(conn, SMP_CMD_PAIRING_REQ, sizeof(cp), &cp);
f1cb9af5 750
da85e5e5 751 return 0;
88ba43b6
AB
752}
753
ad32a2f5
JH
754bool smp_sufficient_security(struct hci_conn *hcon, u8 sec_level)
755{
756 if (sec_level == BT_SECURITY_LOW)
757 return true;
758
759 if (hcon->sec_level >= sec_level)
760 return true;
761
762 return false;
763}
764
cc110922 765int smp_conn_security(struct hci_conn *hcon, __u8 sec_level)
eb492e01 766{
cc110922 767 struct l2cap_conn *conn = hcon->l2cap_data;
1c1def09 768 struct smp_chan *smp = conn->smp_chan;
2b64d153 769 __u8 authreq;
eb492e01 770
3a0259bb
VCG
771 BT_DBG("conn %p hcon %p level 0x%2.2x", conn, hcon, sec_level);
772
757aee0f 773 if (!test_bit(HCI_LE_ENABLED, &hcon->hdev->dev_flags))
2e65c9d2
AG
774 return 1;
775
ad32a2f5 776 if (smp_sufficient_security(hcon, sec_level))
eb492e01 777 return 1;
f1cb9af5 778
988c5997 779 if (hcon->link_mode & HCI_LM_MASTER)
4dab7864 780 if (smp_ltk_encrypt(conn, sec_level))
02bc7455 781 goto done;
d26a2345 782
51a8efd7 783 if (test_and_set_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags))
d26a2345
VCG
784 return 0;
785
8aab4757 786 smp = smp_chan_create(conn);
2b64d153
BG
787 if (!smp)
788 return 1;
789
790 authreq = seclevel_to_authreq(sec_level);
d26a2345 791
d26a2345
VCG
792 if (hcon->link_mode & HCI_LM_MASTER) {
793 struct smp_cmd_pairing cp;
f01ead31 794
2b64d153 795 build_pairing_cmd(conn, &cp, NULL, authreq);
1c1def09
VCG
796 smp->preq[0] = SMP_CMD_PAIRING_REQ;
797 memcpy(&smp->preq[1], &cp, sizeof(cp));
f01ead31 798
eb492e01
AB
799 smp_send_cmd(conn, SMP_CMD_PAIRING_REQ, sizeof(cp), &cp);
800 } else {
801 struct smp_cmd_security_req cp;
2b64d153 802 cp.auth_req = authreq;
eb492e01
AB
803 smp_send_cmd(conn, SMP_CMD_SECURITY_REQ, sizeof(cp), &cp);
804 }
805
02bc7455 806done:
f1cb9af5 807 hcon->pending_sec_level = sec_level;
f1cb9af5 808
eb492e01
AB
809 return 0;
810}
811
7034b911
VCG
812static int smp_cmd_encrypt_info(struct l2cap_conn *conn, struct sk_buff *skb)
813{
16b90839 814 struct smp_cmd_encrypt_info *rp = (void *) skb->data;
1c1def09 815 struct smp_chan *smp = conn->smp_chan;
16b90839
VCG
816
817 skb_pull(skb, sizeof(*rp));
818
1c1def09 819 memcpy(smp->tk, rp->ltk, sizeof(smp->tk));
16b90839 820
7034b911
VCG
821 return 0;
822}
823
824static int smp_cmd_master_ident(struct l2cap_conn *conn, struct sk_buff *skb)
825{
16b90839 826 struct smp_cmd_master_ident *rp = (void *) skb->data;
1c1def09 827 struct smp_chan *smp = conn->smp_chan;
c9839a11
VCG
828 struct hci_dev *hdev = conn->hcon->hdev;
829 struct hci_conn *hcon = conn->hcon;
830 u8 authenticated;
16b90839
VCG
831
832 skb_pull(skb, sizeof(*rp));
7034b911 833
c9839a11 834 hci_dev_lock(hdev);
ce39fb4e
MH
835 authenticated = (hcon->sec_level == BT_SECURITY_HIGH);
836 hci_add_ltk(hdev, &hcon->dst, hcon->dst_type, HCI_SMP_LTK, 1,
837 authenticated, smp->tk, smp->enc_key_size,
04124681 838 rp->ediv, rp->rand);
7034b911 839 smp_distribute_keys(conn, 1);
c9839a11 840 hci_dev_unlock(hdev);
7034b911
VCG
841
842 return 0;
843}
844
eb492e01
AB
845int smp_sig_channel(struct l2cap_conn *conn, struct sk_buff *skb)
846{
7b9899db 847 struct hci_conn *hcon = conn->hcon;
92381f5c 848 __u8 code, reason;
eb492e01
AB
849 int err = 0;
850
7b9899db
MH
851 if (hcon->type != LE_LINK) {
852 kfree_skb(skb);
3432711f 853 return 0;
7b9899db
MH
854 }
855
92381f5c
MH
856 if (skb->len < 1) {
857 kfree_skb(skb);
858 return -EILSEQ;
859 }
860
06ae3314 861 if (!test_bit(HCI_LE_ENABLED, &hcon->hdev->dev_flags)) {
2e65c9d2
AG
862 err = -ENOTSUPP;
863 reason = SMP_PAIRING_NOTSUPP;
864 goto done;
865 }
866
92381f5c 867 code = skb->data[0];
eb492e01
AB
868 skb_pull(skb, sizeof(code));
869
8cf9fa12
JH
870 /*
871 * The SMP context must be initialized for all other PDUs except
872 * pairing and security requests. If we get any other PDU when
873 * not initialized simply disconnect (done if this function
874 * returns an error).
875 */
876 if (code != SMP_CMD_PAIRING_REQ && code != SMP_CMD_SECURITY_REQ &&
877 !conn->smp_chan) {
878 BT_ERR("Unexpected SMP command 0x%02x. Disconnecting.", code);
879 kfree_skb(skb);
880 return -ENOTSUPP;
881 }
882
eb492e01
AB
883 switch (code) {
884 case SMP_CMD_PAIRING_REQ:
da85e5e5 885 reason = smp_cmd_pairing_req(conn, skb);
eb492e01
AB
886 break;
887
888 case SMP_CMD_PAIRING_FAIL:
84794e11 889 smp_failure(conn, 0);
da85e5e5
VCG
890 reason = 0;
891 err = -EPERM;
eb492e01
AB
892 break;
893
894 case SMP_CMD_PAIRING_RSP:
da85e5e5 895 reason = smp_cmd_pairing_rsp(conn, skb);
88ba43b6
AB
896 break;
897
898 case SMP_CMD_SECURITY_REQ:
da85e5e5 899 reason = smp_cmd_security_req(conn, skb);
88ba43b6
AB
900 break;
901
eb492e01 902 case SMP_CMD_PAIRING_CONFIRM:
da85e5e5 903 reason = smp_cmd_pairing_confirm(conn, skb);
88ba43b6
AB
904 break;
905
eb492e01 906 case SMP_CMD_PAIRING_RANDOM:
da85e5e5 907 reason = smp_cmd_pairing_random(conn, skb);
88ba43b6
AB
908 break;
909
eb492e01 910 case SMP_CMD_ENCRYPT_INFO:
7034b911
VCG
911 reason = smp_cmd_encrypt_info(conn, skb);
912 break;
913
eb492e01 914 case SMP_CMD_MASTER_IDENT:
7034b911
VCG
915 reason = smp_cmd_master_ident(conn, skb);
916 break;
917
eb492e01
AB
918 case SMP_CMD_IDENT_INFO:
919 case SMP_CMD_IDENT_ADDR_INFO:
920 case SMP_CMD_SIGN_INFO:
7034b911
VCG
921 /* Just ignored */
922 reason = 0;
923 break;
924
eb492e01
AB
925 default:
926 BT_DBG("Unknown command code 0x%2.2x", code);
927
928 reason = SMP_CMD_NOTSUPP;
eb492e01 929 err = -EOPNOTSUPP;
3a0259bb 930 goto done;
eb492e01
AB
931 }
932
3a0259bb
VCG
933done:
934 if (reason)
84794e11 935 smp_failure(conn, reason);
3a0259bb 936
eb492e01
AB
937 kfree_skb(skb);
938 return err;
939}
7034b911
VCG
940
941int smp_distribute_keys(struct l2cap_conn *conn, __u8 force)
942{
943 struct smp_cmd_pairing *req, *rsp;
1c1def09 944 struct smp_chan *smp = conn->smp_chan;
7034b911
VCG
945 __u8 *keydist;
946
947 BT_DBG("conn %p force %d", conn, force);
948
51a8efd7 949 if (!test_bit(HCI_CONN_LE_SMP_PEND, &conn->hcon->flags))
d26a2345
VCG
950 return 0;
951
1c1def09 952 rsp = (void *) &smp->prsp[1];
7034b911
VCG
953
954 /* The responder sends its keys first */
955 if (!force && conn->hcon->out && (rsp->resp_key_dist & 0x07))
956 return 0;
957
1c1def09 958 req = (void *) &smp->preq[1];
7034b911
VCG
959
960 if (conn->hcon->out) {
961 keydist = &rsp->init_key_dist;
962 *keydist &= req->init_key_dist;
963 } else {
964 keydist = &rsp->resp_key_dist;
965 *keydist &= req->resp_key_dist;
966 }
967
968
969 BT_DBG("keydist 0x%x", *keydist);
970
971 if (*keydist & SMP_DIST_ENC_KEY) {
972 struct smp_cmd_encrypt_info enc;
973 struct smp_cmd_master_ident ident;
c9839a11
VCG
974 struct hci_conn *hcon = conn->hcon;
975 u8 authenticated;
7034b911
VCG
976 __le16 ediv;
977
978 get_random_bytes(enc.ltk, sizeof(enc.ltk));
979 get_random_bytes(&ediv, sizeof(ediv));
980 get_random_bytes(ident.rand, sizeof(ident.rand));
981
982 smp_send_cmd(conn, SMP_CMD_ENCRYPT_INFO, sizeof(enc), &enc);
983
c9839a11 984 authenticated = hcon->sec_level == BT_SECURITY_HIGH;
ce39fb4e 985 hci_add_ltk(hcon->hdev, &hcon->dst, hcon->dst_type,
04124681
GP
986 HCI_SMP_LTK_SLAVE, 1, authenticated,
987 enc.ltk, smp->enc_key_size, ediv, ident.rand);
16b90839 988
58115373 989 ident.ediv = ediv;
7034b911
VCG
990
991 smp_send_cmd(conn, SMP_CMD_MASTER_IDENT, sizeof(ident), &ident);
992
993 *keydist &= ~SMP_DIST_ENC_KEY;
994 }
995
996 if (*keydist & SMP_DIST_ID_KEY) {
997 struct smp_cmd_ident_addr_info addrinfo;
998 struct smp_cmd_ident_info idinfo;
999
1000 /* Send a dummy key */
1001 get_random_bytes(idinfo.irk, sizeof(idinfo.irk));
1002
1003 smp_send_cmd(conn, SMP_CMD_IDENT_INFO, sizeof(idinfo), &idinfo);
1004
1005 /* Just public address */
1006 memset(&addrinfo, 0, sizeof(addrinfo));
2b36a562 1007 bacpy(&addrinfo.bdaddr, &conn->hcon->src);
7034b911
VCG
1008
1009 smp_send_cmd(conn, SMP_CMD_IDENT_ADDR_INFO, sizeof(addrinfo),
f1560463 1010 &addrinfo);
7034b911
VCG
1011
1012 *keydist &= ~SMP_DIST_ID_KEY;
1013 }
1014
1015 if (*keydist & SMP_DIST_SIGN) {
1016 struct smp_cmd_sign_info sign;
1017
1018 /* Send a dummy key */
1019 get_random_bytes(sign.csrk, sizeof(sign.csrk));
1020
1021 smp_send_cmd(conn, SMP_CMD_SIGN_INFO, sizeof(sign), &sign);
1022
1023 *keydist &= ~SMP_DIST_SIGN;
1024 }
1025
d26a2345 1026 if (conn->hcon->out || force) {
51a8efd7 1027 clear_bit(HCI_CONN_LE_SMP_PEND, &conn->hcon->flags);
6c9d42a1 1028 cancel_delayed_work_sync(&conn->security_timer);
8aab4757 1029 smp_chan_destroy(conn);
d26a2345
VCG
1030 }
1031
7034b911
VCG
1032 return 0;
1033}
This page took 0.208898 seconds and 5 git commands to generate.