smp.c 40.2 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
/*
   BlueZ - Bluetooth protocol stack for Linux
   Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License version 2 as
   published by the Free Software Foundation;

   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
   OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
   IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
   CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

   ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
   COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
   SOFTWARE IS DISCLAIMED.
*/

23 24 25 26
#include <linux/crypto.h>
#include <linux/scatterlist.h>
#include <crypto/b128ops.h>

27 28 29
#include <net/bluetooth/bluetooth.h>
#include <net/bluetooth/hci_core.h>
#include <net/bluetooth/l2cap.h>
30
#include <net/bluetooth/mgmt.h>
31 32

#include "smp.h"
33

34
#define SMP_TIMEOUT	msecs_to_jiffies(30000)
35

36 37
#define AUTH_REQ_MASK   0x07

38 39 40 41 42 43 44
enum {
	SMP_FLAG_TK_VALID,
	SMP_FLAG_CFM_PENDING,
	SMP_FLAG_MITM_AUTH,
	SMP_FLAG_COMPLETE,
	SMP_FLAG_INITIATOR,
};
45 46

struct smp_chan {
47 48 49
	struct l2cap_conn	*conn;
	struct delayed_work	security_timer;

50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
	u8		preq[7]; /* SMP Pairing Request */
	u8		prsp[7]; /* SMP Pairing Response */
	u8		prnd[16]; /* SMP Pairing Random (local) */
	u8		rrnd[16]; /* SMP Pairing Random (remote) */
	u8		pcnf[16]; /* SMP Pairing Confirm */
	u8		tk[16]; /* SMP Temporary Key */
	u8		enc_key_size;
	u8		remote_key_dist;
	bdaddr_t	id_addr;
	u8		id_addr_type;
	u8		irk[16];
	struct smp_csrk	*csrk;
	struct smp_csrk	*slave_csrk;
	struct smp_ltk	*ltk;
	struct smp_ltk	*slave_ltk;
	struct smp_irk	*remote_irk;
66
	unsigned long	flags;
67 68

	struct crypto_blkcipher	*tfm_aes;
69 70
};

71
static inline void swap_buf(const u8 *src, u8 *dst, size_t len)
72
{
73
	size_t i;
74

75 76
	for (i = 0; i < len; i++)
		dst[len - 1 - i] = src[i];
77 78 79 80 81 82
}

static int smp_e(struct crypto_blkcipher *tfm, const u8 *k, u8 *r)
{
	struct blkcipher_desc desc;
	struct scatterlist sg;
83
	uint8_t tmp[16], data[16];
84
	int err;
85 86 87 88 89 90 91 92 93

	if (tfm == NULL) {
		BT_ERR("tfm %p", tfm);
		return -EINVAL;
	}

	desc.tfm = tfm;
	desc.flags = 0;

94
	/* The most significant octet of key corresponds to k[0] */
95
	swap_buf(k, tmp, 16);
96 97

	err = crypto_blkcipher_setkey(tfm, tmp, 16);
98 99 100 101 102
	if (err) {
		BT_ERR("cipher setkey failed: %d", err);
		return err;
	}

103
	/* Most significant octet of plaintextData corresponds to data[0] */
104
	swap_buf(r, data, 16);
105 106

	sg_init_one(&sg, data, 16);
107 108 109 110 111

	err = crypto_blkcipher_encrypt(&desc, &sg, &sg, 16);
	if (err)
		BT_ERR("Encrypt data error %d", err);

112
	/* Most significant octet of encryptedData corresponds to data[0] */
113
	swap_buf(data, r, 16);
114

115 116 117
	return err;
}

118 119
static int smp_ah(struct crypto_blkcipher *tfm, u8 irk[16], u8 r[3], u8 res[3])
{
120
	u8 _res[16];
121 122 123
	int err;

	/* r' = padding || r */
124 125
	memcpy(_res, r, 3);
	memset(_res + 3, 0, 13);
126

127
	err = smp_e(tfm, irk, _res);
128 129 130 131 132 133 134 135 136 137 138
	if (err) {
		BT_ERR("Encrypt error");
		return err;
	}

	/* The output of the random address function ah is:
	 *	ah(h, r) = e(k, r') mod 2^24
	 * The output of the security function e is then truncated to 24 bits
	 * by taking the least significant 24 bits of the output of e as the
	 * result of ah.
	 */
139
	memcpy(res, _res, 3);
140 141 142 143

	return 0;
}

144
bool smp_irk_matches(struct hci_dev *hdev, u8 irk[16], bdaddr_t *bdaddr)
145
{
146 147
	struct l2cap_chan *chan = hdev->smp_data;
	struct crypto_blkcipher *tfm;
148 149 150
	u8 hash[3];
	int err;

151 152 153 154 155
	if (!chan || !chan->data)
		return false;

	tfm = chan->data;

156 157 158 159 160 161 162 163 164
	BT_DBG("RPA %pMR IRK %*phN", bdaddr, 16, irk);

	err = smp_ah(tfm, irk, &bdaddr->b[3], hash);
	if (err)
		return false;

	return !memcmp(bdaddr->b, hash, 3);
}

165
int smp_generate_rpa(struct hci_dev *hdev, u8 irk[16], bdaddr_t *rpa)
166
{
167 168
	struct l2cap_chan *chan = hdev->smp_data;
	struct crypto_blkcipher *tfm;
169 170
	int err;

171 172 173 174 175
	if (!chan || !chan->data)
		return -EOPNOTSUPP;

	tfm = chan->data;

176 177 178 179 180 181 182 183 184 185 186 187 188 189
	get_random_bytes(&rpa->b[3], 3);

	rpa->b[5] &= 0x3f;	/* Clear two most significant bits */
	rpa->b[5] |= 0x40;	/* Set second most significant bit */

	err = smp_ah(tfm, irk, &rpa->b[3], rpa->b);
	if (err < 0)
		return err;

	BT_DBG("RPA %pMR", rpa);

	return 0;
}

190 191 192
static int smp_c1(struct smp_chan *smp, u8 k[16], u8 r[16], u8 preq[7],
		  u8 pres[7], u8 _iat, bdaddr_t *ia, u8 _rat, bdaddr_t *ra,
		  u8 res[16])
193
{
194
	struct hci_dev *hdev = smp->conn->hcon->hdev;
195 196 197
	u8 p1[16], p2[16];
	int err;

198 199
	BT_DBG("%s", hdev->name);

200 201 202
	memset(p1, 0, 16);

	/* p1 = pres || preq || _rat || _iat */
203 204 205 206
	p1[0] = _iat;
	p1[1] = _rat;
	memcpy(p1 + 2, preq, 7);
	memcpy(p1 + 9, pres, 7);
207 208

	/* p2 = padding || ia || ra */
209 210 211
	memcpy(p2, ra, 6);
	memcpy(p2 + 6, ia, 6);
	memset(p2 + 12, 0, 4);
212 213 214 215 216

	/* res = r XOR p1 */
	u128_xor((u128 *) res, (u128 *) r, (u128 *) p1);

	/* res = e(k, res) */
217
	err = smp_e(smp->tfm_aes, k, res);
218 219 220 221 222 223 224 225 226
	if (err) {
		BT_ERR("Encrypt data error");
		return err;
	}

	/* res = res XOR p2 */
	u128_xor((u128 *) res, (u128 *) res, (u128 *) p2);

	/* res = e(k, res) */
227
	err = smp_e(smp->tfm_aes, k, res);
228 229 230 231 232 233
	if (err)
		BT_ERR("Encrypt data error");

	return err;
}

234 235
static int smp_s1(struct smp_chan *smp, u8 k[16], u8 r1[16], u8 r2[16],
		  u8 _r[16])
236
{
237
	struct hci_dev *hdev = smp->conn->hcon->hdev;
238 239
	int err;

240 241
	BT_DBG("%s", hdev->name);

242
	/* Just least significant octets from r1 and r2 are considered */
243 244
	memcpy(_r, r2, 8);
	memcpy(_r + 8, r1, 8);
245

246
	err = smp_e(smp->tfm_aes, k, _r);
247 248 249 250 251 252
	if (err)
		BT_ERR("Encrypt data error");

	return err;
}

253
static void smp_send_cmd(struct l2cap_conn *conn, u8 code, u16 len, void *data)
254
{
255
	struct l2cap_chan *chan = conn->smp;
256
	struct smp_chan *smp;
257 258
	struct kvec iv[2];
	struct msghdr msg;
259

260 261
	if (!chan)
		return;
262

263
	BT_DBG("code 0x%2.2x", code);
264

265 266
	iv[0].iov_base = &code;
	iv[0].iov_len = 1;
267

268 269
	iv[1].iov_base = data;
	iv[1].iov_len = len;
270

271
	memset(&msg, 0, sizeof(msg));
272

273 274
	msg.msg_iov = (struct iovec *) &iv;
	msg.msg_iovlen = 2;
275

276
	l2cap_chan_send(chan, &msg, 1 + len);
277

278 279 280 281 282 283 284 285
	if (!chan->data)
		return;

	smp = chan->data;

	cancel_delayed_work_sync(&smp->security_timer);
	if (test_bit(HCI_CONN_LE_SMP_PEND, &conn->hcon->flags))
		schedule_delayed_work(&smp->security_timer, SMP_TIMEOUT);
286 287
}

288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307
static __u8 authreq_to_seclevel(__u8 authreq)
{
	if (authreq & SMP_AUTH_MITM)
		return BT_SECURITY_HIGH;
	else
		return BT_SECURITY_MEDIUM;
}

static __u8 seclevel_to_authreq(__u8 sec_level)
{
	switch (sec_level) {
	case BT_SECURITY_HIGH:
		return SMP_AUTH_MITM | SMP_AUTH_BONDING;
	case BT_SECURITY_MEDIUM:
		return SMP_AUTH_BONDING;
	default:
		return SMP_AUTH_NONE;
	}
}

308
static void build_pairing_cmd(struct l2cap_conn *conn,
309 310
			      struct smp_cmd_pairing *req,
			      struct smp_cmd_pairing *rsp, __u8 authreq)
311
{
312 313
	struct l2cap_chan *chan = conn->smp;
	struct smp_chan *smp = chan->data;
314 315 316
	struct hci_conn *hcon = conn->hcon;
	struct hci_dev *hdev = hcon->hdev;
	u8 local_dist = 0, remote_dist = 0;
317

318
	if (test_bit(HCI_BONDABLE, &conn->hcon->hdev->dev_flags)) {
319 320
		local_dist = SMP_DIST_ENC_KEY | SMP_DIST_SIGN;
		remote_dist = SMP_DIST_ENC_KEY | SMP_DIST_SIGN;
321
		authreq |= SMP_AUTH_BONDING;
322 323
	} else {
		authreq &= ~SMP_AUTH_BONDING;
324 325
	}

326 327 328
	if (test_bit(HCI_RPA_RESOLVING, &hdev->dev_flags))
		remote_dist |= SMP_DIST_ID_KEY;

329 330 331
	if (test_bit(HCI_PRIVACY, &hdev->dev_flags))
		local_dist |= SMP_DIST_ID_KEY;

332 333 334 335
	if (rsp == NULL) {
		req->io_capability = conn->hcon->io_capability;
		req->oob_flag = SMP_OOB_NOT_PRESENT;
		req->max_key_size = SMP_MAX_ENC_KEY_SIZE;
336 337
		req->init_key_dist = local_dist;
		req->resp_key_dist = remote_dist;
338
		req->auth_req = (authreq & AUTH_REQ_MASK);
339 340

		smp->remote_key_dist = remote_dist;
341 342 343 344 345 346
		return;
	}

	rsp->io_capability = conn->hcon->io_capability;
	rsp->oob_flag = SMP_OOB_NOT_PRESENT;
	rsp->max_key_size = SMP_MAX_ENC_KEY_SIZE;
347 348
	rsp->init_key_dist = req->init_key_dist & remote_dist;
	rsp->resp_key_dist = req->resp_key_dist & local_dist;
349
	rsp->auth_req = (authreq & AUTH_REQ_MASK);
350 351

	smp->remote_key_dist = rsp->init_key_dist;
352 353
}

354 355
static u8 check_enc_key_size(struct l2cap_conn *conn, __u8 max_key_size)
{
356 357
	struct l2cap_chan *chan = conn->smp;
	struct smp_chan *smp = chan->data;
358

359
	if ((max_key_size > SMP_MAX_ENC_KEY_SIZE) ||
360
	    (max_key_size < SMP_MIN_ENC_KEY_SIZE))
361 362
		return SMP_ENC_KEY_SIZE;

363
	smp->enc_key_size = max_key_size;
364 365 366 367

	return 0;
}

368
static void smp_failure(struct l2cap_conn *conn, u8 reason)
369
{
370
	struct hci_conn *hcon = conn->hcon;
371 372
	struct l2cap_chan *chan = conn->smp;
	struct smp_chan *smp;
373

374
	if (reason)
375
		smp_send_cmd(conn, SMP_CMD_PAIRING_FAIL, sizeof(reason),
376
			     &reason);
377

378 379 380
	clear_bit(HCI_CONN_ENCRYPT_PEND, &hcon->flags);
	mgmt_auth_failed(hcon->hdev, &hcon->dst, hcon->type, hcon->dst_type,
			 HCI_ERROR_AUTH_FAILURE);
381

382 383 384 385 386
	if (!chan->data)
		return;

	smp = chan->data;

387
	if (test_and_clear_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags))
388
		smp_chan_destroy(conn);
389 390
}

391 392 393 394 395 396 397 398 399 400 401 402 403 404 405
#define JUST_WORKS	0x00
#define JUST_CFM	0x01
#define REQ_PASSKEY	0x02
#define CFM_PASSKEY	0x03
#define REQ_OOB		0x04
#define OVERLAP		0xFF

static const u8 gen_method[5][5] = {
	{ JUST_WORKS,  JUST_CFM,    REQ_PASSKEY, JUST_WORKS, REQ_PASSKEY },
	{ JUST_WORKS,  JUST_CFM,    REQ_PASSKEY, JUST_WORKS, REQ_PASSKEY },
	{ CFM_PASSKEY, CFM_PASSKEY, REQ_PASSKEY, JUST_WORKS, CFM_PASSKEY },
	{ JUST_WORKS,  JUST_CFM,    JUST_WORKS,  JUST_WORKS, JUST_CFM    },
	{ CFM_PASSKEY, CFM_PASSKEY, REQ_PASSKEY, JUST_WORKS, OVERLAP     },
};

406 407
static u8 get_auth_method(struct smp_chan *smp, u8 local_io, u8 remote_io)
{
408 409 410
	/* If either side has unknown io_caps, use JUST_CFM (which gets
	 * converted later to JUST_WORKS if we're initiators.
	 */
411 412
	if (local_io > SMP_IO_KEYBOARD_DISPLAY ||
	    remote_io > SMP_IO_KEYBOARD_DISPLAY)
413
		return JUST_CFM;
414 415 416 417

	return gen_method[remote_io][local_io];
}

418 419 420 421
static int tk_request(struct l2cap_conn *conn, u8 remote_oob, u8 auth,
						u8 local_io, u8 remote_io)
{
	struct hci_conn *hcon = conn->hcon;
422 423
	struct l2cap_chan *chan = conn->smp;
	struct smp_chan *smp = chan->data;
424 425 426 427 428 429
	u8 method;
	u32 passkey = 0;
	int ret = 0;

	/* Initialize key for JUST WORKS */
	memset(smp->tk, 0, sizeof(smp->tk));
430
	clear_bit(SMP_FLAG_TK_VALID, &smp->flags);
431 432 433

	BT_DBG("tk_request: auth:%d lcl:%d rem:%d", auth, local_io, remote_io);

434 435 436 437 438 439
	/* If neither side wants MITM, either "just" confirm an incoming
	 * request or use just-works for outgoing ones. The JUST_CFM
	 * will be converted to JUST_WORKS if necessary later in this
	 * function. If either side has MITM look up the method from the
	 * table.
	 */
440
	if (!(auth & SMP_AUTH_MITM))
441
		method = JUST_CFM;
442
	else
443
		method = get_auth_method(smp, local_io, remote_io);
444

445
	/* Don't confirm locally initiated pairing attempts */
446
	if (method == JUST_CFM && test_bit(SMP_FLAG_INITIATOR, &smp->flags))
447 448
		method = JUST_WORKS;

449 450 451 452
	/* Don't bother user space with no IO capabilities */
	if (method == JUST_CFM && hcon->io_capability == HCI_IO_NO_INPUT_OUTPUT)
		method = JUST_WORKS;

453 454
	/* If Just Works, Continue with Zero TK */
	if (method == JUST_WORKS) {
455
		set_bit(SMP_FLAG_TK_VALID, &smp->flags);
456 457 458 459 460
		return 0;
	}

	/* Not Just Works/Confirm results in MITM Authentication */
	if (method != JUST_CFM)
461
		set_bit(SMP_FLAG_MITM_AUTH, &smp->flags);
462 463 464 465 466

	/* If both devices have Keyoard-Display I/O, the master
	 * Confirms and the slave Enters the passkey.
	 */
	if (method == OVERLAP) {
467
		if (hcon->role == HCI_ROLE_MASTER)
468 469 470 471 472
			method = CFM_PASSKEY;
		else
			method = REQ_PASSKEY;
	}

473
	/* Generate random passkey. */
474
	if (method == CFM_PASSKEY) {
475
		memset(smp->tk, 0, sizeof(smp->tk));
476 477
		get_random_bytes(&passkey, sizeof(passkey));
		passkey %= 1000000;
478
		put_unaligned_le32(passkey, smp->tk);
479
		BT_DBG("PassKey: %d", passkey);
480
		set_bit(SMP_FLAG_TK_VALID, &smp->flags);
481 482 483 484 485
	}

	hci_dev_lock(hcon->hdev);

	if (method == REQ_PASSKEY)
486
		ret = mgmt_user_passkey_request(hcon->hdev, &hcon->dst,
487
						hcon->type, hcon->dst_type);
488 489 490 491
	else if (method == JUST_CFM)
		ret = mgmt_user_confirm_request(hcon->hdev, &hcon->dst,
						hcon->type, hcon->dst_type,
						passkey, 1);
492
	else
493
		ret = mgmt_user_passkey_notify(hcon->hdev, &hcon->dst,
494
						hcon->type, hcon->dst_type,
495
						passkey, 0);
496 497 498 499 500 501

	hci_dev_unlock(hcon->hdev);

	return ret;
}

502
static u8 smp_confirm(struct smp_chan *smp)
503 504 505 506 507 508 509
{
	struct l2cap_conn *conn = smp->conn;
	struct smp_cmd_pairing_confirm cp;
	int ret;

	BT_DBG("conn %p", conn);

510
	ret = smp_c1(smp, smp->tk, smp->prnd, smp->preq, smp->prsp,
511
		     conn->hcon->init_addr_type, &conn->hcon->init_addr,
512 513
		     conn->hcon->resp_addr_type, &conn->hcon->resp_addr,
		     cp.confirm_val);
514 515
	if (ret)
		return SMP_UNSPECIFIED;
516

517
	clear_bit(SMP_FLAG_CFM_PENDING, &smp->flags);
518

519 520
	smp_send_cmd(smp->conn, SMP_CMD_PAIRING_CONFIRM, sizeof(cp), &cp);

521
	return 0;
522 523
}

524
static u8 smp_random(struct smp_chan *smp)
525 526 527
{
	struct l2cap_conn *conn = smp->conn;
	struct hci_conn *hcon = conn->hcon;
528
	u8 confirm[16];
529 530
	int ret;

531
	if (IS_ERR_OR_NULL(smp->tfm_aes))
532
		return SMP_UNSPECIFIED;
533 534 535

	BT_DBG("conn %p %s", conn, conn->hcon->out ? "master" : "slave");

536
	ret = smp_c1(smp, smp->tk, smp->rrnd, smp->preq, smp->prsp,
537
		     hcon->init_addr_type, &hcon->init_addr,
538
		     hcon->resp_addr_type, &hcon->resp_addr, confirm);
539 540
	if (ret)
		return SMP_UNSPECIFIED;
541 542 543

	if (memcmp(smp->pcnf, confirm, sizeof(smp->pcnf)) != 0) {
		BT_ERR("Pairing failed (confirmation values mismatch)");
544
		return SMP_CONFIRM_FAILED;
545 546 547
	}

	if (hcon->out) {
548 549 550
		u8 stk[16];
		__le64 rand = 0;
		__le16 ediv = 0;
551

552
		smp_s1(smp, smp->tk, smp->rrnd, smp->prnd, stk);
553

554
		memset(stk + smp->enc_key_size, 0,
555
		       SMP_MAX_ENC_KEY_SIZE - smp->enc_key_size);
556

557 558
		if (test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &hcon->flags))
			return SMP_UNSPECIFIED;
559 560

		hci_le_start_enc(hcon, ediv, rand, stk);
561
		hcon->enc_key_size = smp->enc_key_size;
562
		set_bit(HCI_CONN_STK_ENCRYPT, &hcon->flags);
563
	} else {
564
		u8 stk[16], auth;
565 566
		__le64 rand = 0;
		__le16 ediv = 0;
567

568 569
		smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM, sizeof(smp->prnd),
			     smp->prnd);
570

571
		smp_s1(smp, smp->tk, smp->prnd, smp->rrnd, stk);
572

573
		memset(stk + smp->enc_key_size, 0,
574
		       SMP_MAX_ENC_KEY_SIZE - smp->enc_key_size);
575

576 577 578 579 580
		if (hcon->pending_sec_level == BT_SECURITY_HIGH)
			auth = 1;
		else
			auth = 0;

581 582 583 584
		/* Even though there's no _SLAVE suffix this is the
		 * slave STK we're adding for later lookup (the master
		 * STK never needs to be stored).
		 */
585
		hci_add_ltk(hcon->hdev, &hcon->dst, hcon->dst_type,
586
			    SMP_STK, auth, stk, smp->enc_key_size, ediv, rand);
587 588
	}

589
	return 0;
590 591
}

592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773
static void smp_notify_keys(struct l2cap_conn *conn)
{
	struct l2cap_chan *chan = conn->smp;
	struct smp_chan *smp = chan->data;
	struct hci_conn *hcon = conn->hcon;
	struct hci_dev *hdev = hcon->hdev;
	struct smp_cmd_pairing *req = (void *) &smp->preq[1];
	struct smp_cmd_pairing *rsp = (void *) &smp->prsp[1];
	bool persistent;

	if (smp->remote_irk) {
		mgmt_new_irk(hdev, smp->remote_irk);
		/* Now that user space can be considered to know the
		 * identity address track the connection based on it
		 * from now on.
		 */
		bacpy(&hcon->dst, &smp->remote_irk->bdaddr);
		hcon->dst_type = smp->remote_irk->addr_type;
		l2cap_conn_update_id_addr(hcon);

		/* When receiving an indentity resolving key for
		 * a remote device that does not use a resolvable
		 * private address, just remove the key so that
		 * it is possible to use the controller white
		 * list for scanning.
		 *
		 * Userspace will have been told to not store
		 * this key at this point. So it is safe to
		 * just remove it.
		 */
		if (!bacmp(&smp->remote_irk->rpa, BDADDR_ANY)) {
			list_del(&smp->remote_irk->list);
			kfree(smp->remote_irk);
			smp->remote_irk = NULL;
		}
	}

	/* The LTKs and CSRKs should be persistent only if both sides
	 * had the bonding bit set in their authentication requests.
	 */
	persistent = !!((req->auth_req & rsp->auth_req) & SMP_AUTH_BONDING);

	if (smp->csrk) {
		smp->csrk->bdaddr_type = hcon->dst_type;
		bacpy(&smp->csrk->bdaddr, &hcon->dst);
		mgmt_new_csrk(hdev, smp->csrk, persistent);
	}

	if (smp->slave_csrk) {
		smp->slave_csrk->bdaddr_type = hcon->dst_type;
		bacpy(&smp->slave_csrk->bdaddr, &hcon->dst);
		mgmt_new_csrk(hdev, smp->slave_csrk, persistent);
	}

	if (smp->ltk) {
		smp->ltk->bdaddr_type = hcon->dst_type;
		bacpy(&smp->ltk->bdaddr, &hcon->dst);
		mgmt_new_ltk(hdev, smp->ltk, persistent);
	}

	if (smp->slave_ltk) {
		smp->slave_ltk->bdaddr_type = hcon->dst_type;
		bacpy(&smp->slave_ltk->bdaddr, &hcon->dst);
		mgmt_new_ltk(hdev, smp->slave_ltk, persistent);
	}
}

static int smp_distribute_keys(struct l2cap_conn *conn)
{
	struct smp_cmd_pairing *req, *rsp;
	struct l2cap_chan *chan = conn->smp;
	struct smp_chan *smp = chan->data;
	struct hci_conn *hcon = conn->hcon;
	struct hci_dev *hdev = hcon->hdev;
	__u8 *keydist;

	BT_DBG("conn %p", conn);

	if (!test_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags))
		return 0;

	rsp = (void *) &smp->prsp[1];

	/* The responder sends its keys first */
	if (hcon->out && (smp->remote_key_dist & 0x07))
		return 0;

	req = (void *) &smp->preq[1];

	if (hcon->out) {
		keydist = &rsp->init_key_dist;
		*keydist &= req->init_key_dist;
	} else {
		keydist = &rsp->resp_key_dist;
		*keydist &= req->resp_key_dist;
	}

	BT_DBG("keydist 0x%x", *keydist);

	if (*keydist & SMP_DIST_ENC_KEY) {
		struct smp_cmd_encrypt_info enc;
		struct smp_cmd_master_ident ident;
		struct smp_ltk *ltk;
		u8 authenticated;
		__le16 ediv;
		__le64 rand;

		get_random_bytes(enc.ltk, sizeof(enc.ltk));
		get_random_bytes(&ediv, sizeof(ediv));
		get_random_bytes(&rand, sizeof(rand));

		smp_send_cmd(conn, SMP_CMD_ENCRYPT_INFO, sizeof(enc), &enc);

		authenticated = hcon->sec_level == BT_SECURITY_HIGH;
		ltk = hci_add_ltk(hdev, &hcon->dst, hcon->dst_type,
				  SMP_LTK_SLAVE, authenticated, enc.ltk,
				  smp->enc_key_size, ediv, rand);
		smp->slave_ltk = ltk;

		ident.ediv = ediv;
		ident.rand = rand;

		smp_send_cmd(conn, SMP_CMD_MASTER_IDENT, sizeof(ident), &ident);

		*keydist &= ~SMP_DIST_ENC_KEY;
	}

	if (*keydist & SMP_DIST_ID_KEY) {
		struct smp_cmd_ident_addr_info addrinfo;
		struct smp_cmd_ident_info idinfo;

		memcpy(idinfo.irk, hdev->irk, sizeof(idinfo.irk));

		smp_send_cmd(conn, SMP_CMD_IDENT_INFO, sizeof(idinfo), &idinfo);

		/* The hci_conn contains the local identity address
		 * after the connection has been established.
		 *
		 * This is true even when the connection has been
		 * established using a resolvable random address.
		 */
		bacpy(&addrinfo.bdaddr, &hcon->src);
		addrinfo.addr_type = hcon->src_type;

		smp_send_cmd(conn, SMP_CMD_IDENT_ADDR_INFO, sizeof(addrinfo),
			     &addrinfo);

		*keydist &= ~SMP_DIST_ID_KEY;
	}

	if (*keydist & SMP_DIST_SIGN) {
		struct smp_cmd_sign_info sign;
		struct smp_csrk *csrk;

		/* Generate a new random key */
		get_random_bytes(sign.csrk, sizeof(sign.csrk));

		csrk = kzalloc(sizeof(*csrk), GFP_KERNEL);
		if (csrk) {
			csrk->master = 0x00;
			memcpy(csrk->val, sign.csrk, sizeof(csrk->val));
		}
		smp->slave_csrk = csrk;

		smp_send_cmd(conn, SMP_CMD_SIGN_INFO, sizeof(sign), &sign);

		*keydist &= ~SMP_DIST_SIGN;
	}

	/* If there are still keys to be received wait for them */
	if ((smp->remote_key_dist & 0x07))
		return 0;

	clear_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags);
	set_bit(SMP_FLAG_COMPLETE, &smp->flags);
	smp_notify_keys(conn);

	smp_chan_destroy(conn);

	return 0;
}

774 775 776 777 778 779 780 781 782 783 784
static void smp_timeout(struct work_struct *work)
{
	struct smp_chan *smp = container_of(work, struct smp_chan,
					    security_timer.work);
	struct l2cap_conn *conn = smp->conn;

	BT_DBG("conn %p", conn);

	l2cap_conn_shutdown(conn, ETIMEDOUT);
}

785 786
static struct smp_chan *smp_chan_create(struct l2cap_conn *conn)
{
787
	struct l2cap_chan *chan = conn->smp;
788 789
	struct smp_chan *smp;

790
	smp = kzalloc(sizeof(*smp), GFP_ATOMIC);
791 792
	if (!smp) {
		clear_bit(HCI_CONN_LE_SMP_PEND, &conn->hcon->flags);
793
		return NULL;
794
	}
795

796 797 798 799
	smp->tfm_aes = crypto_alloc_blkcipher("ecb(aes)", 0, CRYPTO_ALG_ASYNC);
	if (IS_ERR(smp->tfm_aes)) {
		BT_ERR("Unable to create ECB crypto context");
		kfree(smp);
800
		clear_bit(HCI_CONN_LE_SMP_PEND, &conn->hcon->flags);
801 802 803
		return NULL;
	}

804
	smp->conn = conn;
805
	chan->data = smp;
806

807 808
	INIT_DELAYED_WORK(&smp->security_timer, smp_timeout);

809 810 811 812 813 814 815
	hci_conn_hold(conn->hcon);

	return smp;
}

void smp_chan_destroy(struct l2cap_conn *conn)
{
816 817
	struct l2cap_chan *chan = conn->smp;
	struct smp_chan *smp = chan->data;
818
	bool complete;
819

820
	BUG_ON(!smp);
821

822 823 824 825 826
	cancel_delayed_work_sync(&smp->security_timer);
	/* In case the timeout freed the SMP context */
	if (!chan->data)
		return;

827
	complete = test_bit(SMP_FLAG_COMPLETE, &smp->flags);
828 829
	mgmt_smp_complete(conn->hcon, complete);

830 831 832
	kfree(smp->csrk);
	kfree(smp->slave_csrk);

833 834
	crypto_free_blkcipher(smp->tfm_aes);

835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852
	/* If pairing failed clean up any keys we might have */
	if (!complete) {
		if (smp->ltk) {
			list_del(&smp->ltk->list);
			kfree(smp->ltk);
		}

		if (smp->slave_ltk) {
			list_del(&smp->slave_ltk->list);
			kfree(smp->slave_ltk);
		}

		if (smp->remote_irk) {
			list_del(&smp->remote_irk->list);
			kfree(smp->remote_irk);
		}
	}

853
	chan->data = NULL;
854
	kfree(smp);
855
	hci_conn_drop(conn->hcon);
856 857
}

858 859
int smp_user_confirm_reply(struct hci_conn *hcon, u16 mgmt_op, __le32 passkey)
{
860
	struct l2cap_conn *conn = hcon->l2cap_data;
861
	struct l2cap_chan *chan;
862 863 864 865 866
	struct smp_chan *smp;
	u32 value;

	BT_DBG("");

867
	if (!conn || !test_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags))
868 869
		return -ENOTCONN;

870 871 872 873 874
	chan = conn->smp;
	if (!chan)
		return -ENOTCONN;

	smp = chan->data;
875 876 877 878

	switch (mgmt_op) {
	case MGMT_OP_USER_PASSKEY_REPLY:
		value = le32_to_cpu(passkey);
879
		memset(smp->tk, 0, sizeof(smp->tk));
880
		BT_DBG("PassKey: %d", value);
881
		put_unaligned_le32(value, smp->tk);
882 883
		/* Fall Through */
	case MGMT_OP_USER_CONFIRM_REPLY:
884
		set_bit(SMP_FLAG_TK_VALID, &smp->flags);
885 886 887
		break;
	case MGMT_OP_USER_PASSKEY_NEG_REPLY:
	case MGMT_OP_USER_CONFIRM_NEG_REPLY:
888
		smp_failure(conn, SMP_PASSKEY_ENTRY_FAILED);
889 890
		return 0;
	default:
891
		smp_failure(conn, SMP_PASSKEY_ENTRY_FAILED);
892 893 894 895
		return -EOPNOTSUPP;
	}

	/* If it is our turn to send Pairing Confirm, do so now */
896 897 898 899 900
	if (test_bit(SMP_FLAG_CFM_PENDING, &smp->flags)) {
		u8 rsp = smp_confirm(smp);
		if (rsp)
			smp_failure(conn, rsp);
	}
901 902 903 904

	return 0;
}

905
static u8 smp_cmd_pairing_req(struct l2cap_conn *conn, struct sk_buff *skb)
906
{
907
	struct smp_cmd_pairing rsp, *req = (void *) skb->data;
908
	struct hci_dev *hdev = conn->hcon->hdev;
909
	struct smp_chan *smp;
910
	u8 key_size, auth, sec_level;
911
	int ret;
912 913 914

	BT_DBG("conn %p", conn);

915
	if (skb->len < sizeof(*req))
916
		return SMP_INVALID_PARAMS;
917

918
	if (conn->hcon->role != HCI_ROLE_SLAVE)
919 920
		return SMP_CMD_NOTSUPP;

921
	if (!test_and_set_bit(HCI_CONN_LE_SMP_PEND, &conn->hcon->flags)) {
922
		smp = smp_chan_create(conn);
923 924 925 926
	} else {
		struct l2cap_chan *chan = conn->smp;
		smp = chan->data;
	}
927

928 929
	if (!smp)
		return SMP_UNSPECIFIED;
930

931
	if (!test_bit(HCI_BONDABLE, &hdev->dev_flags) &&
932 933 934
	    (req->auth_req & SMP_AUTH_BONDING))
		return SMP_PAIRING_NOTSUPP;

935 936
	smp->preq[0] = SMP_CMD_PAIRING_REQ;
	memcpy(&smp->preq[1], req, sizeof(*req));
937
	skb_pull(skb, sizeof(*req));
938

939
	/* We didn't start the pairing, so match remote */
940
	auth = req->auth_req;
941

942 943 944
	sec_level = authreq_to_seclevel(auth);
	if (sec_level > conn->hcon->pending_sec_level)
		conn->hcon->pending_sec_level = sec_level;
945

946 947 948 949 950 951 952 953 954 955
	/* If we need MITM check that it can be acheived */
	if (conn->hcon->pending_sec_level >= BT_SECURITY_HIGH) {
		u8 method;

		method = get_auth_method(smp, conn->hcon->io_capability,
					 req->io_capability);
		if (method == JUST_WORKS || method == JUST_CFM)
			return SMP_AUTH_REQUIREMENTS;
	}

956
	build_pairing_cmd(conn, req, &rsp, auth);
957 958 959 960

	key_size = min(req->max_key_size, rsp.max_key_size);
	if (check_enc_key_size(conn, key_size))
		return SMP_ENC_KEY_SIZE;
961

962
	get_random_bytes(smp->prnd, sizeof(smp->prnd));
963

964 965
	smp->prsp[0] = SMP_CMD_PAIRING_RSP;
	memcpy(&smp->prsp[1], &rsp, sizeof(rsp));
966

967
	smp_send_cmd(conn, SMP_CMD_PAIRING_RSP, sizeof(rsp), &rsp);
968

969 970 971 972 973
	/* Request setup of TK */
	ret = tk_request(conn, 0, auth, rsp.io_capability, req->io_capability);
	if (ret)
		return SMP_UNSPECIFIED;

974
	return 0;
975 976
}

977
static u8 smp_cmd_pairing_rsp(struct l2cap_conn *conn, struct sk_buff *skb)
978
{
979
	struct smp_cmd_pairing *req, *rsp = (void *) skb->data;
980 981
	struct l2cap_chan *chan = conn->smp;
	struct smp_chan *smp = chan->data;
982
	u8 key_size, auth = SMP_AUTH_NONE;
983
	int ret;
984 985 986

	BT_DBG("conn %p", conn);

987
	if (skb->len < sizeof(*rsp))
988
		return SMP_INVALID_PARAMS;
989

990
	if (conn->hcon->role != HCI_ROLE_MASTER)
991 992
		return SMP_CMD_NOTSUPP;

993 994
	skb_pull(skb, sizeof(*rsp));

995
	req = (void *) &smp->preq[1];
996

997 998 999 1000
	key_size = min(req->max_key_size, rsp->max_key_size);
	if (check_enc_key_size(conn, key_size))
		return SMP_ENC_KEY_SIZE;

1001 1002 1003 1004 1005 1006 1007 1008 1009 1010
	/* If we need MITM check that it can be acheived */
	if (conn->hcon->pending_sec_level >= BT_SECURITY_HIGH) {
		u8 method;

		method = get_auth_method(smp, req->io_capability,
					 rsp->io_capability);
		if (method == JUST_WORKS || method == JUST_CFM)
			return SMP_AUTH_REQUIREMENTS;
	}

1011
	get_random_bytes(smp->prnd, sizeof(smp->prnd));
1012

1013 1014
	smp->prsp[0] = SMP_CMD_PAIRING_RSP;
	memcpy(&smp->prsp[1], rsp, sizeof(*rsp));
1015

1016 1017 1018 1019 1020
	/* Update remote key distribution in case the remote cleared
	 * some bits that we had enabled in our request.
	 */
	smp->remote_key_dist &= rsp->resp_key_dist;

1021
	if ((req->auth_req & SMP_AUTH_BONDING) &&
1022
	    (rsp->auth_req & SMP_AUTH_BONDING))
1023 1024 1025 1026
		auth = SMP_AUTH_BONDING;

	auth |= (req->auth_req | rsp->auth_req) & SMP_AUTH_MITM;

1027
	ret = tk_request(conn, 0, auth, req->io_capability, rsp->io_capability);
1028 1029 1030
	if (ret)
		return SMP_UNSPECIFIED;

1031
	set_bit(SMP_FLAG_CFM_PENDING, &smp->flags);
1032 1033

	/* Can't compose response until we have been confirmed */
1034
	if (test_bit(SMP_FLAG_TK_VALID, &smp->flags))
1035
		return smp_confirm(smp);
1036 1037

	return 0;
1038 1039
}

1040
static u8 smp_cmd_pairing_confirm(struct l2cap_conn *conn, struct sk_buff *skb)
1041
{
1042 1043
	struct l2cap_chan *chan = conn->smp;
	struct smp_chan *smp = chan->data;
1044

1045 1046
	BT_DBG("conn %p %s", conn, conn->hcon->out ? "master" : "slave");

1047
	if (skb->len < sizeof(smp->pcnf))
1048
		return SMP_INVALID_PARAMS;
1049

1050 1051
	memcpy(smp->pcnf, skb->data, sizeof(smp->pcnf));
	skb_pull(skb, sizeof(smp->pcnf));
1052

1053 1054 1055
	if (conn->hcon->out)
		smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM, sizeof(smp->prnd),
			     smp->prnd);
1056
	else if (test_bit(SMP_FLAG_TK_VALID, &smp->flags))
1057
		return smp_confirm(smp);
1058
	else
1059
		set_bit(SMP_FLAG_CFM_PENDING, &smp->flags);
1060 1061

	return 0;
1062 1063
}

1064
static u8 smp_cmd_pairing_random(struct l2cap_conn *conn, struct sk_buff *skb)
1065
{
1066 1067
	struct l2cap_chan *chan = conn->smp;
	struct smp_chan *smp = chan->data;
1068

1069
	BT_DBG("conn %p", conn);
1070

1071
	if (skb->len < sizeof(smp->rrnd))
1072
		return SMP_INVALID_PARAMS;
1073

1074
	memcpy(smp->rrnd, skb->data, sizeof(smp->rrnd));
1075
	skb_pull(skb, sizeof(smp->rrnd));
1076

1077
	return smp_random(smp);
1078 1079
}

1080
static bool smp_ltk_encrypt(struct l2cap_conn *conn, u8 sec_level)
1081
{
1082
	struct smp_ltk *key;
1083 1084
	struct hci_conn *hcon = conn->hcon;

1085
	key = hci_find_ltk_by_addr(hcon->hdev, &hcon->dst, hcon->dst_type,
1086
				   hcon->role);
1087
	if (!key)
1088
		return false;
1089

1090
	if (sec_level > BT_SECURITY_MEDIUM && !key->authenticated)
1091
		return false;
1092

1093
	if (test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &hcon->flags))
1094
		return true;
1095

1096 1097
	hci_le_start_enc(hcon, key->ediv, key->rand, key->val);
	hcon->enc_key_size = key->enc_size;
1098

1099 1100 1101
	/* We never store STKs for master role, so clear this flag */
	clear_bit(HCI_CONN_STK_ENCRYPT, &hcon->flags);

1102
	return true;
1103
}
1104

1105 1106 1107 1108 1109
bool smp_sufficient_security(struct hci_conn *hcon, u8 sec_level)
{
	if (sec_level == BT_SECURITY_LOW)
		return true;

1110 1111 1112
	/* If we're encrypted with an STK always claim insufficient
	 * security. This way we allow the connection to be re-encrypted
	 * with an LTK, even if the LTK provides the same level of
1113 1114
	 * security. Only exception is if we don't have an LTK (e.g.
	 * because of key distribution bits).
1115
	 */
1116 1117
	if (test_bit(HCI_CONN_STK_ENCRYPT, &hcon->flags) &&
	    hci_find_ltk_by_addr(hcon->hdev, &hcon->dst, hcon->dst_type,
1118
				 hcon->role))
1119 1120
		return false;

1121 1122 1123 1124 1125 1126
	if (hcon->sec_level >= sec_level)
		return true;

	return false;
}

1127
static u8 smp_cmd_security_req(struct l2cap_conn *conn, struct sk_buff *skb)
1128 1129 1130
{
	struct smp_cmd_security_req *rp = (void *) skb->data;
	struct smp_cmd_pairing cp;
1131
	struct hci_conn *hcon = conn->hcon;
1132
	struct smp_chan *smp;
1133
	u8 sec_level;
1134 1135 1136

	BT_DBG("conn %p", conn);

1137
	if (skb->len < sizeof(*rp))
1138
		return SMP_INVALID_PARAMS;
1139

1140
	if (hcon->role != HCI_ROLE_MASTER)
1141 1142
		return SMP_CMD_NOTSUPP;

1143
	sec_level = authreq_to_seclevel(rp->auth_req);
1144 1145 1146
	if (smp_sufficient_security(hcon, sec_level))
		return 0;

1147 1148
	if (sec_level > hcon->pending_sec_level)
		hcon->pending_sec_level = sec_level;
1149

1150
	if (smp_ltk_encrypt(conn, hcon->pending_sec_level))
1151 1152
		return 0;

1153
	if (test_and_set_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags))
1154
		return 0;
1155

1156
	smp = smp_chan_create(conn);
1157 1158
	if (!smp)
		return SMP_UNSPECIFIED;
1159

1160
	if (!test_bit(HCI_BONDABLE, &hcon->hdev->dev_flags) &&
1161 1162 1163
	    (rp->auth_req & SMP_AUTH_BONDING))
		return SMP_PAIRING_NOTSUPP;

1164 1165
	skb_pull(skb, sizeof(*rp));

1166
	memset(&cp, 0, sizeof(cp));
1167
	build_pairing_cmd(conn, &cp, NULL, rp->auth_req);
1168

1169 1170
	smp->preq[0] = SMP_CMD_PAIRING_REQ;
	memcpy(&smp->preq[1], &cp, sizeof(cp));
1171

1172
	smp_send_cmd(conn, SMP_CMD_PAIRING_REQ, sizeof(cp), &cp);
1173

1174
	return 0;
1175 1176
}

1177
int smp_conn_security(struct hci_conn *hcon, __u8 sec_level)
1178
{
1179
	struct l2cap_conn *conn = hcon->l2cap_data;
1180
	struct smp_chan *smp;
1181
	__u8 authreq;
1182

1183 1184
	BT_DBG("conn %p hcon %p level 0x%2.2x", conn, hcon, sec_level);

1185 1186 1187 1188
	/* This may be NULL if there's an unexpected disconnection */
	if (!conn)
		return 1;

1189
	if (!test_bit(HCI_LE_ENABLED, &hcon->hdev->dev_flags))
1190 1191
		return 1;

1192
	if (smp_sufficient_security(hcon, sec_level))
1193
		return 1;
1194

1195 1196 1197
	if (sec_level > hcon->pending_sec_level)
		hcon->pending_sec_level = sec_level;

1198
	if (hcon->role == HCI_ROLE_MASTER)
1199 1200
		if (smp_ltk_encrypt(conn, hcon->pending_sec_level))
			return 0;
1201

1202
	if (test_and_set_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags))
1203 1204
		return 0;

1205
	smp = smp_chan_create(conn);
1206 1207 1208 1209
	if (!smp)
		return 1;

	authreq = seclevel_to_authreq(sec_level);
1210

1211 1212
	/* Require MITM if IO Capability allows or the security level
	 * requires it.
1213
	 */
1214
	if (hcon->io_capability != HCI_IO_NO_INPUT_OUTPUT ||
1215
	    hcon->pending_sec_level > BT_SECURITY_MEDIUM)
1216 1217
		authreq |= SMP_AUTH_MITM;

1218
	if (hcon->role == HCI_ROLE_MASTER) {
1219
		struct smp_cmd_pairing cp;
1220

1221
		build_pairing_cmd(conn, &cp, NULL, authreq);
1222 1223
		smp->preq[0] = SMP_CMD_PAIRING_REQ;
		memcpy(&smp->preq[1], &cp, sizeof(cp));
1224

1225 1226 1227
		smp_send_cmd(conn, SMP_CMD_PAIRING_REQ, sizeof(cp), &cp);
	} else {
		struct smp_cmd_security_req cp;
1228
		cp.auth_req = authreq;
1229 1230 1231
		smp_send_cmd(conn, SMP_CMD_SECURITY_REQ, sizeof(cp), &cp);
	}

1232
	set_bit(SMP_FLAG_INITIATOR, &smp->flags);
1233

1234 1235 1236
	return 0;
}

1237 1238
static int smp_cmd_encrypt_info(struct l2cap_conn *conn, struct sk_buff *skb)
{
1239
	struct smp_cmd_encrypt_info *rp = (void *) skb->data;
1240 1241
	struct l2cap_chan *chan = conn->smp;
	struct smp_chan *smp = chan->data;
1242

1243 1244 1245
	BT_DBG("conn %p", conn);

	if (skb->len < sizeof(*rp))
1246
		return SMP_INVALID_PARAMS;
1247

1248 1249 1250 1251
	/* Ignore this PDU if it wasn't requested */
	if (!(smp->remote_key_dist & SMP_DIST_ENC_KEY))
		return 0;

1252 1253
	skb_pull(skb, sizeof(*rp));

1254
	memcpy(smp->tk, rp->ltk, sizeof(smp->tk));
1255

1256 1257 1258 1259 1260
	return 0;
}

static int smp_cmd_master_ident(struct l2cap_conn *conn, struct sk_buff *skb)
{
1261
	struct smp_cmd_master_ident *rp = (void *) skb->data;
1262 1263
	struct l2cap_chan *chan = conn->smp;
	struct smp_chan *smp = chan->data;
1264 1265
	struct hci_dev *hdev = conn->hcon->hdev;
	struct hci_conn *hcon = conn->hcon;
1266
	struct smp_ltk *ltk;
1267
	u8 authenticated;
1268

1269 1270 1271
	BT_DBG("conn %p", conn);

	if (skb->len < sizeof(*rp))
1272
		return SMP_INVALID_PARAMS;
1273

1274 1275 1276 1277
	/* Ignore this PDU if it wasn't requested */
	if (!(smp->remote_key_dist & SMP_DIST_ENC_KEY))
		return 0;

1278 1279 1280
	/* Mark the information as received */
	smp->remote_key_dist &= ~SMP_DIST_ENC_KEY;

1281
	skb_pull(skb, sizeof(*rp));
1282

1283
	hci_dev_lock(hdev);
1284
	authenticated = (hcon->sec_level == BT_SECURITY_HIGH);
1285
	ltk = hci_add_ltk(hdev, &hcon->dst, hcon->dst_type, SMP_LTK,
1286 1287 1288
			  authenticated, smp->tk, smp->enc_key_size,
			  rp->ediv, rp->rand);
	smp->ltk = ltk;
1289
	if (!(smp->remote_key_dist & SMP_DIST_ID_KEY))
1290
		smp_distribute_keys(conn);
1291
	hci_dev_unlock(hdev);
1292 1293 1294 1295

	return 0;
}

1296 1297 1298
static int smp_cmd_ident_info(struct l2cap_conn *conn, struct sk_buff *skb)
{
	struct smp_cmd_ident_info *info = (void *) skb->data;
1299 1300
	struct l2cap_chan *chan = conn->smp;
	struct smp_chan *smp = chan->data;
1301 1302 1303 1304

	BT_DBG("");

	if (skb->len < sizeof(*info))
1305
		return SMP_INVALID_PARAMS;
1306

1307 1308 1309 1310
	/* Ignore this PDU if it wasn't requested */
	if (!(smp->remote_key_dist & SMP_DIST_ID_KEY))
		return 0;

1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321
	skb_pull(skb, sizeof(*info));

	memcpy(smp->irk, info->irk, 16);

	return 0;
}

static int smp_cmd_ident_addr_info(struct l2cap_conn *conn,
				   struct sk_buff *skb)
{
	struct smp_cmd_ident_addr_info *info = (void *) skb->data;
1322 1323
	struct l2cap_chan *chan = conn->smp;
	struct smp_chan *smp = chan->data;
1324 1325 1326 1327 1328 1329
	struct hci_conn *hcon = conn->hcon;
	bdaddr_t rpa;

	BT_DBG("");

	if (skb->len < sizeof(*info))
1330
		return SMP_INVALID_PARAMS;
1331

1332 1333 1334 1335
	/* Ignore this PDU if it wasn't requested */
	if (!(smp->remote_key_dist & SMP_DIST_ID_KEY))
		return 0;

1336 1337 1338
	/* Mark the information as received */
	smp->remote_key_dist &= ~SMP_DIST_ID_KEY;

1339 1340
	skb_pull(skb, sizeof(*info));

1341 1342
	hci_dev_lock(hcon->hdev);

1343 1344 1345 1346 1347 1348 1349 1350 1351
	/* Strictly speaking the Core Specification (4.1) allows sending
	 * an empty address which would force us to rely on just the IRK
	 * as "identity information". However, since such
	 * implementations are not known of and in order to not over
	 * complicate our implementation, simply pretend that we never
	 * received an IRK for such a device.
	 */
	if (!bacmp(&info->bdaddr, BDADDR_ANY)) {
		BT_ERR("Ignoring IRK with no identity address");
1352
		goto distribute;
1353 1354
	}

1355 1356 1357 1358 1359 1360 1361 1362
	bacpy(&smp->id_addr, &info->bdaddr);
	smp->id_addr_type = info->addr_type;

	if (hci_bdaddr_is_rpa(&hcon->dst, hcon->dst_type))
		bacpy(&rpa, &hcon->dst);
	else
		bacpy(&rpa, BDADDR_ANY);

1363 1364
	smp->remote_irk = hci_add_irk(conn->hcon->hdev, &smp->id_addr,
				      smp->id_addr_type, smp->irk, &rpa);
1365

1366
distribute:
1367
	smp_distribute_keys(conn);
1368

1369 1370
	hci_dev_unlock(hcon->hdev);

1371 1372 1373
	return 0;
}

1374 1375 1376
static int smp_cmd_sign_info(struct l2cap_conn *conn, struct sk_buff *skb)
{
	struct smp_cmd_sign_info *rp = (void *) skb->data;
1377 1378
	struct l2cap_chan *chan = conn->smp;
	struct smp_chan *smp = chan->data;
1379 1380 1381 1382 1383 1384
	struct hci_dev *hdev = conn->hcon->hdev;
	struct smp_csrk *csrk;

	BT_DBG("conn %p", conn);

	if (skb->len < sizeof(*rp))
1385
		return SMP_INVALID_PARAMS;
1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402

	/* Ignore this PDU if it wasn't requested */
	if (!(smp->remote_key_dist & SMP_DIST_SIGN))
		return 0;

	/* Mark the information as received */
	smp->remote_key_dist &= ~SMP_DIST_SIGN;

	skb_pull(skb, sizeof(*rp));

	hci_dev_lock(hdev);
	csrk = kzalloc(sizeof(*csrk), GFP_KERNEL);
	if (csrk) {
		csrk->master = 0x01;
		memcpy(csrk->val, rp->csrk, sizeof(csrk->val));
	}
	smp->csrk = csrk;
1403
	smp_distribute_keys(conn);
1404 1405 1406 1407 1408
	hci_dev_unlock(hdev);

	return 0;
}

1409
static int smp_sig_channel(struct l2cap_chan *chan, struct sk_buff *skb)
1410
{
1411
	struct l2cap_conn *conn = chan->conn;
1412
	struct hci_conn *hcon = conn->hcon;
1413
	__u8 code, reason;
1414 1415
	int err = 0;

1416 1417
	if (hcon->type != LE_LINK) {
		kfree_skb(skb);
1418
		return 0;
1419 1420
	}

1421
	if (skb->len < 1)
1422 1423
		return -EILSEQ;

1424
	if (!test_bit(HCI_LE_ENABLED, &hcon->hdev->dev_flags)) {
1425
		err = -EOPNOTSUPP;
1426 1427 1428 1429
		reason = SMP_PAIRING_NOTSUPP;
		goto done;
	}

1430
	code = skb->data[0];
1431 1432
	skb_pull(skb, sizeof(code));

1433 1434 1435 1436 1437 1438 1439
	/*
	 * The SMP context must be initialized for all other PDUs except
	 * pairing and security requests. If we get any other PDU when
	 * not initialized simply disconnect (done if this function
	 * returns an error).
	 */
	if (code != SMP_CMD_PAIRING_REQ && code != SMP_CMD_SECURITY_REQ &&
1440
	    !test_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags)) {
1441
		BT_ERR("Unexpected SMP command 0x%02x. Disconnecting.", code);
1442 1443 1444
		reason = SMP_CMD_NOTSUPP;
		err = -EOPNOTSUPP;
		goto done;
1445 1446
	}

1447 1448
	switch (code) {
	case SMP_CMD_PAIRING_REQ:
1449
		reason = smp_cmd_pairing_req(conn, skb);
1450 1451 1452
		break;

	case SMP_CMD_PAIRING_FAIL:
1453
		smp_failure(conn, 0);
1454 1455
		reason = 0;
		err = -EPERM;
1456 1457 1458
		break;

	case SMP_CMD_PAIRING_RSP:
1459
		reason = smp_cmd_pairing_rsp(conn, skb);
1460 1461 1462
		break;

	case SMP_CMD_SECURITY_REQ:
1463
		reason = smp_cmd_security_req(conn, skb);
1464 1465
		break;

1466
	case SMP_CMD_PAIRING_CONFIRM:
1467
		reason = smp_cmd_pairing_confirm(conn, skb);
1468 1469
		break;

1470
	case SMP_CMD_PAIRING_RANDOM:
1471
		reason = smp_cmd_pairing_random(conn, skb);
1472 1473
		break;

1474
	case SMP_CMD_ENCRYPT_INFO:
1475 1476 1477
		reason = smp_cmd_encrypt_info(conn, skb);
		break;

1478
	case SMP_CMD_MASTER_IDENT:
1479 1480 1481
		reason = smp_cmd_master_ident(conn, skb);
		break;

1482
	case SMP_CMD_IDENT_INFO:
1483 1484 1485
		reason = smp_cmd_ident_info(conn, skb);
		break;

1486
	case SMP_CMD_IDENT_ADDR_INFO:
1487 1488 1489
		reason = smp_cmd_ident_addr_info(conn, skb);
		break;

1490
	case SMP_CMD_SIGN_INFO:
1491
		reason = smp_cmd_sign_info(conn, skb);
1492 1493
		break;

1494 1495 1496 1497 1498
	default:
		BT_DBG("Unknown command code 0x%2.2x", code);

		reason = SMP_CMD_NOTSUPP;
		err = -EOPNOTSUPP;
1499
		goto done;
1500 1501
	}

1502 1503
done:
	if (reason)
1504
		smp_failure(conn, reason);
1505 1506
	if (!err)
		kfree_skb(skb);
1507 1508
	return err;
}
1509

1510 1511 1512
static void smp_teardown_cb(struct l2cap_chan *chan, int err)
{
	struct l2cap_conn *conn = chan->conn;
1513
	struct smp_chan *smp = chan->data;
1514 1515 1516

	BT_DBG("chan %p", chan);

1517
	if (test_and_clear_bit(HCI_CONN_LE_SMP_PEND, &conn->hcon->flags))
1518 1519
		smp_chan_destroy(conn);

1520 1521 1522 1523
	conn->smp = NULL;
	l2cap_chan_put(chan);
}

1524 1525
static void smp_resume_cb(struct l2cap_chan *chan)
{
1526
	struct smp_chan *smp = chan->data;
1527 1528 1529 1530 1531 1532 1533
	struct l2cap_conn *conn = chan->conn;
	struct hci_conn *hcon = conn->hcon;

	BT_DBG("chan %p", chan);

	if (test_bit(HCI_CONN_ENCRYPT, &hcon->flags))
		smp_distribute_keys(conn);
1534 1535 1536

	if (smp)
		cancel_delayed_work(&smp->security_timer);
1537 1538
}

1539 1540 1541 1542 1543 1544 1545 1546 1547 1548
static void smp_ready_cb(struct l2cap_chan *chan)
{
	struct l2cap_conn *conn = chan->conn;

	BT_DBG("chan %p", chan);

	conn->smp = chan;
	l2cap_chan_hold(chan);
}

1549 1550 1551 1552 1553 1554 1555 1556
static int smp_recv_cb(struct l2cap_chan *chan, struct sk_buff *skb)
{
	int err;

	BT_DBG("chan %p", chan);

	err = smp_sig_channel(chan, skb);
	if (err) {
1557
		struct smp_chan *smp = chan->data;
1558

1559 1560
		if (smp)
			cancel_delayed_work_sync(&smp->security_timer);
1561 1562 1563 1564 1565 1566 1567

		l2cap_conn_shutdown(chan->conn, -err);
	}

	return err;
}

1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586
static struct sk_buff *smp_alloc_skb_cb(struct l2cap_chan *chan,
					unsigned long hdr_len,
					unsigned long len, int nb)
{
	struct sk_buff *skb;

	skb = bt_skb_alloc(hdr_len + len, GFP_KERNEL);
	if (!skb)
		return ERR_PTR(-ENOMEM);

	skb->priority = HCI_PRIO_MAX;
	bt_cb(skb)->chan = chan;

	return skb;
}

static const struct l2cap_ops smp_chan_ops = {
	.name			= "Security Manager",
	.ready			= smp_ready_cb,
1587
	.recv			= smp_recv_cb,
1588 1589
	.alloc_skb		= smp_alloc_skb_cb,
	.teardown		= smp_teardown_cb,
1590
	.resume			= smp_resume_cb,
1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643

	.new_connection		= l2cap_chan_no_new_connection,
	.state_change		= l2cap_chan_no_state_change,
	.close			= l2cap_chan_no_close,
	.defer			= l2cap_chan_no_defer,
	.suspend		= l2cap_chan_no_suspend,
	.set_shutdown		= l2cap_chan_no_set_shutdown,
	.get_sndtimeo		= l2cap_chan_no_get_sndtimeo,
	.memcpy_fromiovec	= l2cap_chan_no_memcpy_fromiovec,
};

static inline struct l2cap_chan *smp_new_conn_cb(struct l2cap_chan *pchan)
{
	struct l2cap_chan *chan;

	BT_DBG("pchan %p", pchan);

	chan = l2cap_chan_create();
	if (!chan)
		return NULL;

	chan->chan_type	= pchan->chan_type;
	chan->ops	= &smp_chan_ops;
	chan->scid	= pchan->scid;
	chan->dcid	= chan->scid;
	chan->imtu	= pchan->imtu;
	chan->omtu	= pchan->omtu;
	chan->mode	= pchan->mode;

	BT_DBG("created chan %p", chan);

	return chan;
}

static const struct l2cap_ops smp_root_chan_ops = {
	.name			= "Security Manager Root",
	.new_connection		= smp_new_conn_cb,

	/* None of these are implemented for the root channel */
	.close			= l2cap_chan_no_close,
	.alloc_skb		= l2cap_chan_no_alloc_skb,
	.recv			= l2cap_chan_no_recv,
	.state_change		= l2cap_chan_no_state_change,
	.teardown		= l2cap_chan_no_teardown,
	.ready			= l2cap_chan_no_ready,
	.defer			= l2cap_chan_no_defer,
	.suspend		= l2cap_chan_no_suspend,
	.resume			= l2cap_chan_no_resume,
	.set_shutdown		= l2cap_chan_no_set_shutdown,
	.get_sndtimeo		= l2cap_chan_no_get_sndtimeo,
	.memcpy_fromiovec	= l2cap_chan_no_memcpy_fromiovec,
};

1644 1645
int smp_register(struct hci_dev *hdev)
{
1646
	struct l2cap_chan *chan;
1647
	struct crypto_blkcipher	*tfm_aes;
1648

1649 1650
	BT_DBG("%s", hdev->name);

1651 1652 1653
	tfm_aes = crypto_alloc_blkcipher("ecb(aes)", 0, CRYPTO_ALG_ASYNC);
	if (IS_ERR(tfm_aes)) {
		int err = PTR_ERR(tfm_aes);
1654 1655 1656 1657
		BT_ERR("Unable to create crypto context");
		return err;
	}

1658 1659
	chan = l2cap_chan_create();
	if (!chan) {
1660
		crypto_free_blkcipher(tfm_aes);
1661 1662 1663
		return -ENOMEM;
	}

1664 1665
	chan->data = tfm_aes;

1666
	l2cap_add_scid(chan, L2CAP_CID_SMP);
1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678

	l2cap_chan_set_defaults(chan);

	bacpy(&chan->src, &hdev->bdaddr);
	chan->src_type = BDADDR_LE_PUBLIC;
	chan->state = BT_LISTEN;
	chan->mode = L2CAP_MODE_BASIC;
	chan->imtu = L2CAP_DEFAULT_MTU;
	chan->ops = &smp_root_chan_ops;

	hdev->smp_data = chan;

1679 1680 1681 1682 1683
	return 0;
}

void smp_unregister(struct hci_dev *hdev)
{
1684
	struct l2cap_chan *chan = hdev->smp_data;
1685
	struct crypto_blkcipher *tfm_aes;
1686 1687 1688 1689 1690

	if (!chan)
		return;

	BT_DBG("%s chan %p", hdev->name, chan);
1691

1692 1693 1694 1695
	tfm_aes = chan->data;
	if (tfm_aes) {
		chan->data = NULL;
		crypto_free_blkcipher(tfm_aes);
1696
	}
1697 1698 1699

	hdev->smp_data = NULL;
	l2cap_chan_put(chan);
1700
}