smp.c 39.0 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 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63

struct smp_chan {
	struct l2cap_conn *conn;
	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;
64
	unsigned long	flags;
65 66

	struct crypto_blkcipher	*tfm_aes;
67 68
};

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

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

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

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

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

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

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

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

	sg_init_one(&sg, data, 16);
105 106 107 108 109

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

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

113 114 115
	return err;
}

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

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

125
	err = smp_e(tfm, irk, _res);
126 127 128 129 130 131 132 133 134 135 136
	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.
	 */
137
	memcpy(res, _res, 3);
138 139 140 141

	return 0;
}

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

149 150 151 152 153
	if (!chan || !chan->data)
		return false;

	tfm = chan->data;

154 155 156 157 158 159 160 161 162
	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);
}

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

169 170 171 172 173
	if (!chan || !chan->data)
		return -EOPNOTSUPP;

	tfm = chan->data;

174 175 176 177 178 179 180 181 182 183 184 185 186 187
	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;
}

188 189 190
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])
191
{
192
	struct hci_dev *hdev = smp->conn->hcon->hdev;
193 194 195
	u8 p1[16], p2[16];
	int err;

196 197
	BT_DBG("%s", hdev->name);

198 199 200
	memset(p1, 0, 16);

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

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

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

	/* res = e(k, res) */
215
	err = smp_e(smp->tfm_aes, k, res);
216 217 218 219 220 221 222 223 224
	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) */
225
	err = smp_e(smp->tfm_aes, k, res);
226 227 228 229 230 231
	if (err)
		BT_ERR("Encrypt data error");

	return err;
}

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

238 239
	BT_DBG("%s", hdev->name);

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

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

	return err;
}

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

257 258
	if (!chan)
		return;
259

260
	BT_DBG("code 0x%2.2x", code);
261

262 263
	iv[0].iov_base = &code;
	iv[0].iov_len = 1;
264

265 266
	iv[1].iov_base = data;
	iv[1].iov_len = len;
267

268
	memset(&msg, 0, sizeof(msg));
269

270 271
	msg.msg_iov = (struct iovec *) &iv;
	msg.msg_iovlen = 2;
272

273
	l2cap_chan_send(chan, &msg, 1 + len);
274

275
	cancel_delayed_work_sync(&conn->security_timer);
276
	schedule_delayed_work(&conn->security_timer, SMP_TIMEOUT);
277 278
}

279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298
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;
	}
}

299
static void build_pairing_cmd(struct l2cap_conn *conn,
300 301
			      struct smp_cmd_pairing *req,
			      struct smp_cmd_pairing *rsp, __u8 authreq)
302
{
303 304
	struct l2cap_chan *chan = conn->smp;
	struct smp_chan *smp = chan->data;
305 306 307
	struct hci_conn *hcon = conn->hcon;
	struct hci_dev *hdev = hcon->hdev;
	u8 local_dist = 0, remote_dist = 0;
308

309
	if (test_bit(HCI_BONDABLE, &conn->hcon->hdev->dev_flags)) {
310 311
		local_dist = SMP_DIST_ENC_KEY | SMP_DIST_SIGN;
		remote_dist = SMP_DIST_ENC_KEY | SMP_DIST_SIGN;
312
		authreq |= SMP_AUTH_BONDING;
313 314
	} else {
		authreq &= ~SMP_AUTH_BONDING;
315 316
	}

317 318 319
	if (test_bit(HCI_RPA_RESOLVING, &hdev->dev_flags))
		remote_dist |= SMP_DIST_ID_KEY;

320 321 322
	if (test_bit(HCI_PRIVACY, &hdev->dev_flags))
		local_dist |= SMP_DIST_ID_KEY;

323 324 325 326
	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;
327 328
		req->init_key_dist = local_dist;
		req->resp_key_dist = remote_dist;
329
		req->auth_req = (authreq & AUTH_REQ_MASK);
330 331

		smp->remote_key_dist = remote_dist;
332 333 334 335 336 337
		return;
	}

	rsp->io_capability = conn->hcon->io_capability;
	rsp->oob_flag = SMP_OOB_NOT_PRESENT;
	rsp->max_key_size = SMP_MAX_ENC_KEY_SIZE;
338 339
	rsp->init_key_dist = req->init_key_dist & remote_dist;
	rsp->resp_key_dist = req->resp_key_dist & local_dist;
340
	rsp->auth_req = (authreq & AUTH_REQ_MASK);
341 342

	smp->remote_key_dist = rsp->init_key_dist;
343 344
}

345 346
static u8 check_enc_key_size(struct l2cap_conn *conn, __u8 max_key_size)
{
347 348
	struct l2cap_chan *chan = conn->smp;
	struct smp_chan *smp = chan->data;
349

350
	if ((max_key_size > SMP_MAX_ENC_KEY_SIZE) ||
351
	    (max_key_size < SMP_MIN_ENC_KEY_SIZE))
352 353
		return SMP_ENC_KEY_SIZE;

354
	smp->enc_key_size = max_key_size;
355 356 357 358

	return 0;
}

359
static void smp_failure(struct l2cap_conn *conn, u8 reason)
360
{
361 362
	struct hci_conn *hcon = conn->hcon;

363
	if (reason)
364
		smp_send_cmd(conn, SMP_CMD_PAIRING_FAIL, sizeof(reason),
365
			     &reason);
366

367 368 369
	clear_bit(HCI_CONN_ENCRYPT_PEND, &hcon->flags);
	mgmt_auth_failed(hcon->hdev, &hcon->dst, hcon->type, hcon->dst_type,
			 HCI_ERROR_AUTH_FAILURE);
370

371 372
	cancel_delayed_work_sync(&conn->security_timer);

373
	if (test_and_clear_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags))
374
		smp_chan_destroy(conn);
375 376
}

377 378 379 380 381 382 383 384 385 386 387 388 389 390 391
#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     },
};

392 393
static u8 get_auth_method(struct smp_chan *smp, u8 local_io, u8 remote_io)
{
394 395 396
	/* If either side has unknown io_caps, use JUST_CFM (which gets
	 * converted later to JUST_WORKS if we're initiators.
	 */
397 398
	if (local_io > SMP_IO_KEYBOARD_DISPLAY ||
	    remote_io > SMP_IO_KEYBOARD_DISPLAY)
399
		return JUST_CFM;
400 401 402 403

	return gen_method[remote_io][local_io];
}

404 405 406 407
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;
408 409
	struct l2cap_chan *chan = conn->smp;
	struct smp_chan *smp = chan->data;
410 411 412 413 414 415
	u8 method;
	u32 passkey = 0;
	int ret = 0;

	/* Initialize key for JUST WORKS */
	memset(smp->tk, 0, sizeof(smp->tk));
416
	clear_bit(SMP_FLAG_TK_VALID, &smp->flags);
417 418 419

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

420 421 422 423 424 425
	/* 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.
	 */
426
	if (!(auth & SMP_AUTH_MITM))
427
		method = JUST_CFM;
428
	else
429
		method = get_auth_method(smp, local_io, remote_io);
430

431
	/* Don't confirm locally initiated pairing attempts */
432
	if (method == JUST_CFM && test_bit(SMP_FLAG_INITIATOR, &smp->flags))
433 434
		method = JUST_WORKS;

435 436 437 438
	/* Don't bother user space with no IO capabilities */
	if (method == JUST_CFM && hcon->io_capability == HCI_IO_NO_INPUT_OUTPUT)
		method = JUST_WORKS;

439 440
	/* If Just Works, Continue with Zero TK */
	if (method == JUST_WORKS) {
441
		set_bit(SMP_FLAG_TK_VALID, &smp->flags);
442 443 444 445 446
		return 0;
	}

	/* Not Just Works/Confirm results in MITM Authentication */
	if (method != JUST_CFM)
447
		set_bit(SMP_FLAG_MITM_AUTH, &smp->flags);
448 449 450 451 452

	/* If both devices have Keyoard-Display I/O, the master
	 * Confirms and the slave Enters the passkey.
	 */
	if (method == OVERLAP) {
453
		if (hcon->role == HCI_ROLE_MASTER)
454 455 456 457 458
			method = CFM_PASSKEY;
		else
			method = REQ_PASSKEY;
	}

459
	/* Generate random passkey. */
460
	if (method == CFM_PASSKEY) {
461
		memset(smp->tk, 0, sizeof(smp->tk));
462 463
		get_random_bytes(&passkey, sizeof(passkey));
		passkey %= 1000000;
464
		put_unaligned_le32(passkey, smp->tk);
465
		BT_DBG("PassKey: %d", passkey);
466
		set_bit(SMP_FLAG_TK_VALID, &smp->flags);
467 468 469 470 471
	}

	hci_dev_lock(hcon->hdev);

	if (method == REQ_PASSKEY)
472
		ret = mgmt_user_passkey_request(hcon->hdev, &hcon->dst,
473
						hcon->type, hcon->dst_type);
474 475 476 477
	else if (method == JUST_CFM)
		ret = mgmt_user_confirm_request(hcon->hdev, &hcon->dst,
						hcon->type, hcon->dst_type,
						passkey, 1);
478
	else
479
		ret = mgmt_user_passkey_notify(hcon->hdev, &hcon->dst,
480
						hcon->type, hcon->dst_type,
481
						passkey, 0);
482 483 484 485 486 487

	hci_dev_unlock(hcon->hdev);

	return ret;
}

488
static u8 smp_confirm(struct smp_chan *smp)
489 490 491 492 493 494 495
{
	struct l2cap_conn *conn = smp->conn;
	struct smp_cmd_pairing_confirm cp;
	int ret;

	BT_DBG("conn %p", conn);

496
	ret = smp_c1(smp, smp->tk, smp->prnd, smp->preq, smp->prsp,
497
		     conn->hcon->init_addr_type, &conn->hcon->init_addr,
498 499
		     conn->hcon->resp_addr_type, &conn->hcon->resp_addr,
		     cp.confirm_val);
500 501
	if (ret)
		return SMP_UNSPECIFIED;
502

503
	clear_bit(SMP_FLAG_CFM_PENDING, &smp->flags);
504

505 506
	smp_send_cmd(smp->conn, SMP_CMD_PAIRING_CONFIRM, sizeof(cp), &cp);

507
	return 0;
508 509
}

510
static u8 smp_random(struct smp_chan *smp)
511 512 513
{
	struct l2cap_conn *conn = smp->conn;
	struct hci_conn *hcon = conn->hcon;
514
	u8 confirm[16];
515 516
	int ret;

517
	if (IS_ERR_OR_NULL(smp->tfm_aes))
518
		return SMP_UNSPECIFIED;
519 520 521

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

522
	ret = smp_c1(smp, smp->tk, smp->rrnd, smp->preq, smp->prsp,
523
		     hcon->init_addr_type, &hcon->init_addr,
524
		     hcon->resp_addr_type, &hcon->resp_addr, confirm);
525 526
	if (ret)
		return SMP_UNSPECIFIED;
527 528 529

	if (memcmp(smp->pcnf, confirm, sizeof(smp->pcnf)) != 0) {
		BT_ERR("Pairing failed (confirmation values mismatch)");
530
		return SMP_CONFIRM_FAILED;
531 532 533
	}

	if (hcon->out) {
534 535 536
		u8 stk[16];
		__le64 rand = 0;
		__le16 ediv = 0;
537

538
		smp_s1(smp, smp->tk, smp->rrnd, smp->prnd, stk);
539

540
		memset(stk + smp->enc_key_size, 0,
541
		       SMP_MAX_ENC_KEY_SIZE - smp->enc_key_size);
542

543 544
		if (test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &hcon->flags))
			return SMP_UNSPECIFIED;
545 546

		hci_le_start_enc(hcon, ediv, rand, stk);
547
		hcon->enc_key_size = smp->enc_key_size;
548
		set_bit(HCI_CONN_STK_ENCRYPT, &hcon->flags);
549
	} else {
550
		u8 stk[16], auth;
551 552
		__le64 rand = 0;
		__le16 ediv = 0;
553

554 555
		smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM, sizeof(smp->prnd),
			     smp->prnd);
556

557
		smp_s1(smp, smp->tk, smp->prnd, smp->rrnd, stk);
558

559
		memset(stk + smp->enc_key_size, 0,
560
		       SMP_MAX_ENC_KEY_SIZE - smp->enc_key_size);
561

562 563 564 565 566
		if (hcon->pending_sec_level == BT_SECURITY_HIGH)
			auth = 1;
		else
			auth = 0;

567 568 569 570
		/* 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).
		 */
571
		hci_add_ltk(hcon->hdev, &hcon->dst, hcon->dst_type,
572
			    SMP_STK, auth, stk, smp->enc_key_size, ediv, rand);
573 574
	}

575
	return 0;
576 577 578 579
}

static struct smp_chan *smp_chan_create(struct l2cap_conn *conn)
{
580
	struct l2cap_chan *chan = conn->smp;
581 582
	struct smp_chan *smp;

583
	smp = kzalloc(sizeof(*smp), GFP_ATOMIC);
584 585
	if (!smp) {
		clear_bit(HCI_CONN_LE_SMP_PEND, &conn->hcon->flags);
586
		return NULL;
587
	}
588

589 590 591 592
	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);
593
		clear_bit(HCI_CONN_LE_SMP_PEND, &conn->hcon->flags);
594 595 596
		return NULL;
	}

597
	smp->conn = conn;
598
	chan->data = smp;
599 600 601 602 603 604 605 606

	hci_conn_hold(conn->hcon);

	return smp;
}

void smp_chan_destroy(struct l2cap_conn *conn)
{
607 608
	struct l2cap_chan *chan = conn->smp;
	struct smp_chan *smp = chan->data;
609
	bool complete;
610

611
	BUG_ON(!smp);
612

613
	complete = test_bit(SMP_FLAG_COMPLETE, &smp->flags);
614 615
	mgmt_smp_complete(conn->hcon, complete);

616 617 618
	kfree(smp->csrk);
	kfree(smp->slave_csrk);

619 620
	crypto_free_blkcipher(smp->tfm_aes);

621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638
	/* 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);
		}
	}

639
	chan->data = NULL;
640
	kfree(smp);
641
	hci_conn_drop(conn->hcon);
642 643
}

644 645
int smp_user_confirm_reply(struct hci_conn *hcon, u16 mgmt_op, __le32 passkey)
{
646
	struct l2cap_conn *conn = hcon->l2cap_data;
647
	struct l2cap_chan *chan;
648 649 650 651 652
	struct smp_chan *smp;
	u32 value;

	BT_DBG("");

653
	if (!conn || !test_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags))
654 655
		return -ENOTCONN;

656 657 658 659 660
	chan = conn->smp;
	if (!chan)
		return -ENOTCONN;

	smp = chan->data;
661 662 663 664

	switch (mgmt_op) {
	case MGMT_OP_USER_PASSKEY_REPLY:
		value = le32_to_cpu(passkey);
665
		memset(smp->tk, 0, sizeof(smp->tk));
666
		BT_DBG("PassKey: %d", value);
667
		put_unaligned_le32(value, smp->tk);
668 669
		/* Fall Through */
	case MGMT_OP_USER_CONFIRM_REPLY:
670
		set_bit(SMP_FLAG_TK_VALID, &smp->flags);
671 672 673
		break;
	case MGMT_OP_USER_PASSKEY_NEG_REPLY:
	case MGMT_OP_USER_CONFIRM_NEG_REPLY:
674
		smp_failure(conn, SMP_PASSKEY_ENTRY_FAILED);
675 676
		return 0;
	default:
677
		smp_failure(conn, SMP_PASSKEY_ENTRY_FAILED);
678 679 680 681
		return -EOPNOTSUPP;
	}

	/* If it is our turn to send Pairing Confirm, do so now */
682 683 684 685 686
	if (test_bit(SMP_FLAG_CFM_PENDING, &smp->flags)) {
		u8 rsp = smp_confirm(smp);
		if (rsp)
			smp_failure(conn, rsp);
	}
687 688 689 690

	return 0;
}

691
static u8 smp_cmd_pairing_req(struct l2cap_conn *conn, struct sk_buff *skb)
692
{
693
	struct smp_cmd_pairing rsp, *req = (void *) skb->data;
694
	struct hci_dev *hdev = conn->hcon->hdev;
695
	struct smp_chan *smp;
696
	u8 key_size, auth, sec_level;
697
	int ret;
698 699 700

	BT_DBG("conn %p", conn);

701
	if (skb->len < sizeof(*req))
702
		return SMP_INVALID_PARAMS;
703

704
	if (conn->hcon->role != HCI_ROLE_SLAVE)
705 706
		return SMP_CMD_NOTSUPP;

707
	if (!test_and_set_bit(HCI_CONN_LE_SMP_PEND, &conn->hcon->flags)) {
708
		smp = smp_chan_create(conn);
709 710 711 712
	} else {
		struct l2cap_chan *chan = conn->smp;
		smp = chan->data;
	}
713

714 715
	if (!smp)
		return SMP_UNSPECIFIED;
716

717
	if (!test_bit(HCI_BONDABLE, &hdev->dev_flags) &&
718 719 720
	    (req->auth_req & SMP_AUTH_BONDING))
		return SMP_PAIRING_NOTSUPP;

721 722
	smp->preq[0] = SMP_CMD_PAIRING_REQ;
	memcpy(&smp->preq[1], req, sizeof(*req));
723
	skb_pull(skb, sizeof(*req));
724

725
	/* We didn't start the pairing, so match remote */
726
	auth = req->auth_req;
727

728 729 730
	sec_level = authreq_to_seclevel(auth);
	if (sec_level > conn->hcon->pending_sec_level)
		conn->hcon->pending_sec_level = sec_level;
731

732 733 734 735 736 737 738 739 740 741
	/* 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;
	}

742
	build_pairing_cmd(conn, req, &rsp, auth);
743 744 745 746

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

748
	get_random_bytes(smp->prnd, sizeof(smp->prnd));
749

750 751
	smp->prsp[0] = SMP_CMD_PAIRING_RSP;
	memcpy(&smp->prsp[1], &rsp, sizeof(rsp));
752

753
	smp_send_cmd(conn, SMP_CMD_PAIRING_RSP, sizeof(rsp), &rsp);
754

755 756 757 758 759
	/* Request setup of TK */
	ret = tk_request(conn, 0, auth, rsp.io_capability, req->io_capability);
	if (ret)
		return SMP_UNSPECIFIED;

760
	return 0;
761 762
}

763
static u8 smp_cmd_pairing_rsp(struct l2cap_conn *conn, struct sk_buff *skb)
764
{
765
	struct smp_cmd_pairing *req, *rsp = (void *) skb->data;
766 767
	struct l2cap_chan *chan = conn->smp;
	struct smp_chan *smp = chan->data;
768
	u8 key_size, auth = SMP_AUTH_NONE;
769
	int ret;
770 771 772

	BT_DBG("conn %p", conn);

773
	if (skb->len < sizeof(*rsp))
774
		return SMP_INVALID_PARAMS;
775

776
	if (conn->hcon->role != HCI_ROLE_MASTER)
777 778
		return SMP_CMD_NOTSUPP;

779 780
	skb_pull(skb, sizeof(*rsp));

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

783 784 785 786
	key_size = min(req->max_key_size, rsp->max_key_size);
	if (check_enc_key_size(conn, key_size))
		return SMP_ENC_KEY_SIZE;

787 788 789 790 791 792 793 794 795 796
	/* 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;
	}

797
	get_random_bytes(smp->prnd, sizeof(smp->prnd));
798

799 800
	smp->prsp[0] = SMP_CMD_PAIRING_RSP;
	memcpy(&smp->prsp[1], rsp, sizeof(*rsp));
801

802 803 804 805 806
	/* 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;

807
	if ((req->auth_req & SMP_AUTH_BONDING) &&
808
	    (rsp->auth_req & SMP_AUTH_BONDING))
809 810 811 812
		auth = SMP_AUTH_BONDING;

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

813
	ret = tk_request(conn, 0, auth, req->io_capability, rsp->io_capability);
814 815 816
	if (ret)
		return SMP_UNSPECIFIED;

817
	set_bit(SMP_FLAG_CFM_PENDING, &smp->flags);
818 819

	/* Can't compose response until we have been confirmed */
820
	if (test_bit(SMP_FLAG_TK_VALID, &smp->flags))
821
		return smp_confirm(smp);
822 823

	return 0;
824 825
}

826
static u8 smp_cmd_pairing_confirm(struct l2cap_conn *conn, struct sk_buff *skb)
827
{
828 829
	struct l2cap_chan *chan = conn->smp;
	struct smp_chan *smp = chan->data;
830

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

833
	if (skb->len < sizeof(smp->pcnf))
834
		return SMP_INVALID_PARAMS;
835

836 837
	memcpy(smp->pcnf, skb->data, sizeof(smp->pcnf));
	skb_pull(skb, sizeof(smp->pcnf));
838

839 840 841
	if (conn->hcon->out)
		smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM, sizeof(smp->prnd),
			     smp->prnd);
842
	else if (test_bit(SMP_FLAG_TK_VALID, &smp->flags))
843
		return smp_confirm(smp);
844
	else
845
		set_bit(SMP_FLAG_CFM_PENDING, &smp->flags);
846 847

	return 0;
848 849
}

850
static u8 smp_cmd_pairing_random(struct l2cap_conn *conn, struct sk_buff *skb)
851
{
852 853
	struct l2cap_chan *chan = conn->smp;
	struct smp_chan *smp = chan->data;
854

855
	BT_DBG("conn %p", conn);
856

857
	if (skb->len < sizeof(smp->rrnd))
858
		return SMP_INVALID_PARAMS;
859

860
	memcpy(smp->rrnd, skb->data, sizeof(smp->rrnd));
861
	skb_pull(skb, sizeof(smp->rrnd));
862

863
	return smp_random(smp);
864 865
}

866
static bool smp_ltk_encrypt(struct l2cap_conn *conn, u8 sec_level)
867
{
868
	struct smp_ltk *key;
869 870
	struct hci_conn *hcon = conn->hcon;

871
	key = hci_find_ltk_by_addr(hcon->hdev, &hcon->dst, hcon->dst_type,
872
				   hcon->role);
873
	if (!key)
874
		return false;
875

876
	if (sec_level > BT_SECURITY_MEDIUM && !key->authenticated)
877
		return false;
878

879
	if (test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &hcon->flags))
880
		return true;
881

882 883
	hci_le_start_enc(hcon, key->ediv, key->rand, key->val);
	hcon->enc_key_size = key->enc_size;
884

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

888
	return true;
889
}
890

891 892 893 894 895
bool smp_sufficient_security(struct hci_conn *hcon, u8 sec_level)
{
	if (sec_level == BT_SECURITY_LOW)
		return true;

896 897 898
	/* 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
899 900
	 * security. Only exception is if we don't have an LTK (e.g.
	 * because of key distribution bits).
901
	 */
902 903
	if (test_bit(HCI_CONN_STK_ENCRYPT, &hcon->flags) &&
	    hci_find_ltk_by_addr(hcon->hdev, &hcon->dst, hcon->dst_type,
904
				 hcon->role))
905 906
		return false;

907 908 909 910 911 912
	if (hcon->sec_level >= sec_level)
		return true;

	return false;
}

913
static u8 smp_cmd_security_req(struct l2cap_conn *conn, struct sk_buff *skb)
914 915 916
{
	struct smp_cmd_security_req *rp = (void *) skb->data;
	struct smp_cmd_pairing cp;
917
	struct hci_conn *hcon = conn->hcon;
918
	struct smp_chan *smp;
919
	u8 sec_level;
920 921 922

	BT_DBG("conn %p", conn);

923
	if (skb->len < sizeof(*rp))
924
		return SMP_INVALID_PARAMS;
925

926
	if (hcon->role != HCI_ROLE_MASTER)
927 928
		return SMP_CMD_NOTSUPP;

929
	sec_level = authreq_to_seclevel(rp->auth_req);
930 931 932
	if (smp_sufficient_security(hcon, sec_level))
		return 0;

933 934
	if (sec_level > hcon->pending_sec_level)
		hcon->pending_sec_level = sec_level;
935

936
	if (smp_ltk_encrypt(conn, hcon->pending_sec_level))
937 938
		return 0;

939
	if (test_and_set_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags))
940
		return 0;
941

942
	smp = smp_chan_create(conn);
943 944
	if (!smp)
		return SMP_UNSPECIFIED;
945

946
	if (!test_bit(HCI_BONDABLE, &hcon->hdev->dev_flags) &&
947 948 949
	    (rp->auth_req & SMP_AUTH_BONDING))
		return SMP_PAIRING_NOTSUPP;

950 951
	skb_pull(skb, sizeof(*rp));

952
	memset(&cp, 0, sizeof(cp));
953
	build_pairing_cmd(conn, &cp, NULL, rp->auth_req);
954

955 956
	smp->preq[0] = SMP_CMD_PAIRING_REQ;
	memcpy(&smp->preq[1], &cp, sizeof(cp));
957

958
	smp_send_cmd(conn, SMP_CMD_PAIRING_REQ, sizeof(cp), &cp);
959

960
	return 0;
961 962
}

963
int smp_conn_security(struct hci_conn *hcon, __u8 sec_level)
964
{
965
	struct l2cap_conn *conn = hcon->l2cap_data;
966
	struct smp_chan *smp;
967
	__u8 authreq;
968

969 970
	BT_DBG("conn %p hcon %p level 0x%2.2x", conn, hcon, sec_level);

971 972 973 974
	/* This may be NULL if there's an unexpected disconnection */
	if (!conn)
		return 1;

975
	if (!test_bit(HCI_LE_ENABLED, &hcon->hdev->dev_flags))
976 977
		return 1;

978
	if (smp_sufficient_security(hcon, sec_level))
979
		return 1;
980

981 982 983
	if (sec_level > hcon->pending_sec_level)
		hcon->pending_sec_level = sec_level;

984
	if (hcon->role == HCI_ROLE_MASTER)
985 986
		if (smp_ltk_encrypt(conn, hcon->pending_sec_level))
			return 0;
987

988
	if (test_and_set_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags))
989 990
		return 0;

991
	smp = smp_chan_create(conn);
992 993 994 995
	if (!smp)
		return 1;

	authreq = seclevel_to_authreq(sec_level);
996

997 998
	/* Require MITM if IO Capability allows or the security level
	 * requires it.
999
	 */
1000
	if (hcon->io_capability != HCI_IO_NO_INPUT_OUTPUT ||
1001
	    hcon->pending_sec_level > BT_SECURITY_MEDIUM)
1002 1003
		authreq |= SMP_AUTH_MITM;

1004
	if (hcon->role == HCI_ROLE_MASTER) {
1005
		struct smp_cmd_pairing cp;
1006

1007
		build_pairing_cmd(conn, &cp, NULL, authreq);
1008 1009
		smp->preq[0] = SMP_CMD_PAIRING_REQ;
		memcpy(&smp->preq[1], &cp, sizeof(cp));
1010

1011 1012 1013
		smp_send_cmd(conn, SMP_CMD_PAIRING_REQ, sizeof(cp), &cp);
	} else {
		struct smp_cmd_security_req cp;
1014
		cp.auth_req = authreq;
1015 1016 1017
		smp_send_cmd(conn, SMP_CMD_SECURITY_REQ, sizeof(cp), &cp);
	}

1018
	set_bit(SMP_FLAG_INITIATOR, &smp->flags);
1019

1020 1021 1022
	return 0;
}

1023 1024
static int smp_cmd_encrypt_info(struct l2cap_conn *conn, struct sk_buff *skb)
{
1025
	struct smp_cmd_encrypt_info *rp = (void *) skb->data;
1026 1027
	struct l2cap_chan *chan = conn->smp;
	struct smp_chan *smp = chan->data;
1028

1029 1030 1031
	BT_DBG("conn %p", conn);

	if (skb->len < sizeof(*rp))
1032
		return SMP_INVALID_PARAMS;
1033

1034 1035 1036 1037
	/* Ignore this PDU if it wasn't requested */
	if (!(smp->remote_key_dist & SMP_DIST_ENC_KEY))
		return 0;

1038 1039
	skb_pull(skb, sizeof(*rp));

1040
	memcpy(smp->tk, rp->ltk, sizeof(smp->tk));
1041

1042 1043 1044 1045 1046
	return 0;
}

static int smp_cmd_master_ident(struct l2cap_conn *conn, struct sk_buff *skb)
{
1047
	struct smp_cmd_master_ident *rp = (void *) skb->data;
1048 1049
	struct l2cap_chan *chan = conn->smp;
	struct smp_chan *smp = chan->data;
1050 1051
	struct hci_dev *hdev = conn->hcon->hdev;
	struct hci_conn *hcon = conn->hcon;
1052
	struct smp_ltk *ltk;
1053
	u8 authenticated;
1054

1055 1056 1057
	BT_DBG("conn %p", conn);

	if (skb->len < sizeof(*rp))
1058
		return SMP_INVALID_PARAMS;
1059

1060 1061 1062 1063
	/* Ignore this PDU if it wasn't requested */
	if (!(smp->remote_key_dist & SMP_DIST_ENC_KEY))
		return 0;

1064 1065 1066
	/* Mark the information as received */
	smp->remote_key_dist &= ~SMP_DIST_ENC_KEY;

1067
	skb_pull(skb, sizeof(*rp));
1068

1069
	hci_dev_lock(hdev);
1070
	authenticated = (hcon->sec_level == BT_SECURITY_HIGH);
1071
	ltk = hci_add_ltk(hdev, &hcon->dst, hcon->dst_type, SMP_LTK,
1072 1073 1074
			  authenticated, smp->tk, smp->enc_key_size,
			  rp->ediv, rp->rand);
	smp->ltk = ltk;
1075
	if (!(smp->remote_key_dist & SMP_DIST_ID_KEY))
1076
		smp_distribute_keys(conn);
1077
	hci_dev_unlock(hdev);
1078 1079 1080 1081

	return 0;
}

1082 1083 1084
static int smp_cmd_ident_info(struct l2cap_conn *conn, struct sk_buff *skb)
{
	struct smp_cmd_ident_info *info = (void *) skb->data;
1085 1086
	struct l2cap_chan *chan = conn->smp;
	struct smp_chan *smp = chan->data;
1087 1088 1089 1090

	BT_DBG("");

	if (skb->len < sizeof(*info))
1091
		return SMP_INVALID_PARAMS;
1092

1093 1094 1095 1096
	/* Ignore this PDU if it wasn't requested */
	if (!(smp->remote_key_dist & SMP_DIST_ID_KEY))
		return 0;

1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107
	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;
1108 1109
	struct l2cap_chan *chan = conn->smp;
	struct smp_chan *smp = chan->data;
1110 1111 1112 1113 1114 1115
	struct hci_conn *hcon = conn->hcon;
	bdaddr_t rpa;

	BT_DBG("");

	if (skb->len < sizeof(*info))
1116
		return SMP_INVALID_PARAMS;
1117

1118 1119 1120 1121
	/* Ignore this PDU if it wasn't requested */
	if (!(smp->remote_key_dist & SMP_DIST_ID_KEY))
		return 0;

1122 1123 1124
	/* Mark the information as received */
	smp->remote_key_dist &= ~SMP_DIST_ID_KEY;

1125 1126
	skb_pull(skb, sizeof(*info));

1127 1128
	hci_dev_lock(hcon->hdev);

1129 1130 1131 1132 1133 1134 1135 1136 1137
	/* 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");
1138
		goto distribute;
1139 1140
	}

1141 1142 1143 1144 1145 1146 1147 1148
	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);

1149 1150
	smp->remote_irk = hci_add_irk(conn->hcon->hdev, &smp->id_addr,
				      smp->id_addr_type, smp->irk, &rpa);
1151

1152
distribute:
1153
	smp_distribute_keys(conn);
1154

1155 1156
	hci_dev_unlock(hcon->hdev);

1157 1158 1159
	return 0;
}

1160 1161 1162
static int smp_cmd_sign_info(struct l2cap_conn *conn, struct sk_buff *skb)
{
	struct smp_cmd_sign_info *rp = (void *) skb->data;
1163 1164
	struct l2cap_chan *chan = conn->smp;
	struct smp_chan *smp = chan->data;
1165 1166 1167 1168 1169 1170
	struct hci_dev *hdev = conn->hcon->hdev;
	struct smp_csrk *csrk;

	BT_DBG("conn %p", conn);

	if (skb->len < sizeof(*rp))
1171
		return SMP_INVALID_PARAMS;
1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188

	/* 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;
1189
	smp_distribute_keys(conn);
1190 1191 1192 1193 1194
	hci_dev_unlock(hdev);

	return 0;
}

1195
static int smp_recv_cb(struct l2cap_chan *chan, struct sk_buff *skb)
1196
{
1197
	struct l2cap_conn *conn = chan->conn;
1198
	struct hci_conn *hcon = conn->hcon;
1199
	__u8 code, reason;
1200 1201
	int err = 0;

1202 1203
	if (hcon->type != LE_LINK) {
		kfree_skb(skb);
1204
		return 0;
1205 1206
	}

1207 1208 1209 1210 1211
	if (skb->len < 1) {
		kfree_skb(skb);
		return -EILSEQ;
	}

1212
	if (!test_bit(HCI_LE_ENABLED, &hcon->hdev->dev_flags)) {
1213
		err = -EOPNOTSUPP;
1214 1215 1216 1217
		reason = SMP_PAIRING_NOTSUPP;
		goto done;
	}

1218
	code = skb->data[0];
1219 1220
	skb_pull(skb, sizeof(code));

1221 1222 1223 1224 1225 1226 1227
	/*
	 * 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 &&
1228
	    !test_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags)) {
1229 1230
		BT_ERR("Unexpected SMP command 0x%02x. Disconnecting.", code);
		kfree_skb(skb);
1231
		return -EOPNOTSUPP;
1232 1233
	}

1234 1235
	switch (code) {
	case SMP_CMD_PAIRING_REQ:
1236
		reason = smp_cmd_pairing_req(conn, skb);
1237 1238 1239
		break;

	case SMP_CMD_PAIRING_FAIL:
1240
		smp_failure(conn, 0);
1241 1242
		reason = 0;
		err = -EPERM;
1243 1244 1245
		break;

	case SMP_CMD_PAIRING_RSP:
1246
		reason = smp_cmd_pairing_rsp(conn, skb);
1247 1248 1249
		break;

	case SMP_CMD_SECURITY_REQ:
1250
		reason = smp_cmd_security_req(conn, skb);
1251 1252
		break;

1253
	case SMP_CMD_PAIRING_CONFIRM:
1254
		reason = smp_cmd_pairing_confirm(conn, skb);
1255 1256
		break;

1257
	case SMP_CMD_PAIRING_RANDOM:
1258
		reason = smp_cmd_pairing_random(conn, skb);
1259 1260
		break;

1261
	case SMP_CMD_ENCRYPT_INFO:
1262 1263 1264
		reason = smp_cmd_encrypt_info(conn, skb);
		break;

1265
	case SMP_CMD_MASTER_IDENT:
1266 1267 1268
		reason = smp_cmd_master_ident(conn, skb);
		break;

1269
	case SMP_CMD_IDENT_INFO:
1270 1271 1272
		reason = smp_cmd_ident_info(conn, skb);
		break;

1273
	case SMP_CMD_IDENT_ADDR_INFO:
1274 1275 1276
		reason = smp_cmd_ident_addr_info(conn, skb);
		break;

1277
	case SMP_CMD_SIGN_INFO:
1278
		reason = smp_cmd_sign_info(conn, skb);
1279 1280
		break;

1281 1282 1283 1284 1285
	default:
		BT_DBG("Unknown command code 0x%2.2x", code);

		reason = SMP_CMD_NOTSUPP;
		err = -EOPNOTSUPP;
1286
		goto done;
1287 1288
	}

1289 1290
done:
	if (reason)
1291
		smp_failure(conn, reason);
1292

1293 1294 1295
	kfree_skb(skb);
	return err;
}
1296

1297 1298
static void smp_notify_keys(struct l2cap_conn *conn)
{
1299 1300
	struct l2cap_chan *chan = conn->smp;
	struct smp_chan *smp = chan->data;
1301 1302
	struct hci_conn *hcon = conn->hcon;
	struct hci_dev *hdev = hcon->hdev;
1303 1304 1305
	struct smp_cmd_pairing *req = (void *) &smp->preq[1];
	struct smp_cmd_pairing *rsp = (void *) &smp->prsp[1];
	bool persistent;
1306

1307
	if (smp->remote_irk) {
1308
		mgmt_new_irk(hdev, smp->remote_irk);
1309 1310 1311 1312 1313 1314 1315
		/* 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);
1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331

		/* 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;
		}
1332
	}
1333

1334 1335 1336 1337 1338
	/* 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);

1339 1340 1341
	if (smp->csrk) {
		smp->csrk->bdaddr_type = hcon->dst_type;
		bacpy(&smp->csrk->bdaddr, &hcon->dst);
1342
		mgmt_new_csrk(hdev, smp->csrk, persistent);
1343 1344 1345 1346 1347
	}

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

1351 1352 1353
	if (smp->ltk) {
		smp->ltk->bdaddr_type = hcon->dst_type;
		bacpy(&smp->ltk->bdaddr, &hcon->dst);
1354
		mgmt_new_ltk(hdev, smp->ltk, persistent);
1355 1356 1357 1358 1359
	}

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

1364
int smp_distribute_keys(struct l2cap_conn *conn)
1365 1366
{
	struct smp_cmd_pairing *req, *rsp;
1367 1368
	struct l2cap_chan *chan = conn->smp;
	struct smp_chan *smp = chan->data;
1369 1370
	struct hci_conn *hcon = conn->hcon;
	struct hci_dev *hdev = hcon->hdev;
1371 1372
	__u8 *keydist;

1373
	BT_DBG("conn %p", conn);
1374

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

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

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

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

1386
	if (hcon->out) {
1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398
		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;
1399
		struct smp_ltk *ltk;
1400
		u8 authenticated;
1401
		__le16 ediv;
1402
		__le64 rand;
1403 1404 1405

		get_random_bytes(enc.ltk, sizeof(enc.ltk));
		get_random_bytes(&ediv, sizeof(ediv));
1406
		get_random_bytes(&rand, sizeof(rand));
1407 1408 1409

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

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

1416
		ident.ediv = ediv;
1417
		ident.rand = rand;
1418 1419 1420 1421 1422 1423 1424 1425 1426 1427

		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;

1428
		memcpy(idinfo.irk, hdev->irk, sizeof(idinfo.irk));
1429 1430 1431

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

1432 1433 1434 1435 1436 1437
		/* 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.
		 */
1438
		bacpy(&addrinfo.bdaddr, &hcon->src);
1439
		addrinfo.addr_type = hcon->src_type;
1440 1441

		smp_send_cmd(conn, SMP_CMD_IDENT_ADDR_INFO, sizeof(addrinfo),
1442
			     &addrinfo);
1443 1444 1445 1446 1447 1448

		*keydist &= ~SMP_DIST_ID_KEY;
	}

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

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

1454 1455 1456 1457 1458 1459 1460
		csrk = kzalloc(sizeof(*csrk), GFP_KERNEL);
		if (csrk) {
			csrk->master = 0x00;
			memcpy(csrk->val, sign.csrk, sizeof(csrk->val));
		}
		smp->slave_csrk = csrk;

1461 1462 1463 1464 1465
		smp_send_cmd(conn, SMP_CMD_SIGN_INFO, sizeof(sign), &sign);

		*keydist &= ~SMP_DIST_SIGN;
	}

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

1470 1471
	clear_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags);
	cancel_delayed_work_sync(&conn->security_timer);
1472
	set_bit(SMP_FLAG_COMPLETE, &smp->flags);
1473
	smp_notify_keys(conn);
1474

1475
	smp_chan_destroy(conn);
1476

1477 1478
	return 0;
}
1479

1480 1481 1482 1483 1484 1485
static void smp_teardown_cb(struct l2cap_chan *chan, int err)
{
	struct l2cap_conn *conn = chan->conn;

	BT_DBG("chan %p", chan);

1486 1487 1488 1489 1490
	if (test_and_clear_bit(HCI_CONN_LE_SMP_PEND, &conn->hcon->flags)) {
		cancel_delayed_work_sync(&conn->security_timer);
		smp_chan_destroy(conn);
	}

1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523
	conn->smp = NULL;
	l2cap_chan_put(chan);
}

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);
}

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,
1524
	.recv			= smp_recv_cb,
1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580
	.alloc_skb		= smp_alloc_skb_cb,
	.teardown		= smp_teardown_cb,

	.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,
	.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,
};

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,
};

1581 1582
int smp_register(struct hci_dev *hdev)
{
1583
	struct l2cap_chan *chan;
1584
	struct crypto_blkcipher	*tfm_aes;
1585

1586 1587
	BT_DBG("%s", hdev->name);

1588 1589 1590
	tfm_aes = crypto_alloc_blkcipher("ecb(aes)", 0, CRYPTO_ALG_ASYNC);
	if (IS_ERR(tfm_aes)) {
		int err = PTR_ERR(tfm_aes);
1591 1592 1593 1594
		BT_ERR("Unable to create crypto context");
		return err;
	}

1595 1596
	chan = l2cap_chan_create();
	if (!chan) {
1597
		crypto_free_blkcipher(tfm_aes);
1598 1599 1600
		return -ENOMEM;
	}

1601 1602
	chan->data = tfm_aes;

1603
	l2cap_add_scid(chan, L2CAP_CID_SMP);
1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615

	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;

1616 1617 1618 1619 1620
	return 0;
}

void smp_unregister(struct hci_dev *hdev)
{
1621
	struct l2cap_chan *chan = hdev->smp_data;
1622
	struct crypto_blkcipher *tfm_aes;
1623 1624 1625 1626 1627

	if (!chan)
		return;

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

1629 1630 1631 1632
	tfm_aes = chan->data;
	if (tfm_aes) {
		chan->data = NULL;
		crypto_free_blkcipher(tfm_aes);
1633
	}
1634 1635 1636

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