smp.c 41.9 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 35
#define SMP_ALLOW_CMD(smp, code)	set_bit(code, &smp->allow_cmd)

36
#define SMP_TIMEOUT	msecs_to_jiffies(30000)
37

38 39 40
#define AUTH_REQ_MASK(dev)	(test_bit(HCI_SC_ENABLED, &(dev)->dev_flags) ? \
				 0x1f : 0x07)
#define KEY_DIST_MASK		0x07
41

42 43 44 45 46 47
enum {
	SMP_FLAG_TK_VALID,
	SMP_FLAG_CFM_PENDING,
	SMP_FLAG_MITM_AUTH,
	SMP_FLAG_COMPLETE,
	SMP_FLAG_INITIATOR,
48
	SMP_FLAG_SC,
49
};
50 51

struct smp_chan {
52 53
	struct l2cap_conn	*conn;
	struct delayed_work	security_timer;
54
	unsigned long           allow_cmd; /* Bitmask of allowed commands */
55

56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
	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;
72
	unsigned long	flags;
73 74

	struct crypto_blkcipher	*tfm_aes;
75 76
};

77
static inline void swap_buf(const u8 *src, u8 *dst, size_t len)
78
{
79
	size_t i;
80

81 82
	for (i = 0; i < len; i++)
		dst[len - 1 - i] = src[i];
83 84 85 86 87 88
}

static int smp_e(struct crypto_blkcipher *tfm, const u8 *k, u8 *r)
{
	struct blkcipher_desc desc;
	struct scatterlist sg;
89
	uint8_t tmp[16], data[16];
90
	int err;
91 92 93 94 95 96 97 98 99

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

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

100
	/* The most significant octet of key corresponds to k[0] */
101
	swap_buf(k, tmp, 16);
102 103

	err = crypto_blkcipher_setkey(tfm, tmp, 16);
104 105 106 107 108
	if (err) {
		BT_ERR("cipher setkey failed: %d", err);
		return err;
	}

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

	sg_init_one(&sg, data, 16);
113 114 115 116 117

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

118
	/* Most significant octet of encryptedData corresponds to data[0] */
119
	swap_buf(data, r, 16);
120

121 122 123
	return err;
}

124 125
static int smp_ah(struct crypto_blkcipher *tfm, u8 irk[16], u8 r[3], u8 res[3])
{
126
	u8 _res[16];
127 128 129
	int err;

	/* r' = padding || r */
130 131
	memcpy(_res, r, 3);
	memset(_res + 3, 0, 13);
132

133
	err = smp_e(tfm, irk, _res);
134 135 136 137 138 139 140 141 142 143 144
	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.
	 */
145
	memcpy(res, _res, 3);
146 147 148 149

	return 0;
}

150
bool smp_irk_matches(struct hci_dev *hdev, u8 irk[16], bdaddr_t *bdaddr)
151
{
152 153
	struct l2cap_chan *chan = hdev->smp_data;
	struct crypto_blkcipher *tfm;
154 155 156
	u8 hash[3];
	int err;

157 158 159 160 161
	if (!chan || !chan->data)
		return false;

	tfm = chan->data;

162 163 164 165 166 167 168 169 170
	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);
}

171
int smp_generate_rpa(struct hci_dev *hdev, u8 irk[16], bdaddr_t *rpa)
172
{
173 174
	struct l2cap_chan *chan = hdev->smp_data;
	struct crypto_blkcipher *tfm;
175 176
	int err;

177 178 179 180 181
	if (!chan || !chan->data)
		return -EOPNOTSUPP;

	tfm = chan->data;

182 183 184 185 186 187 188 189 190 191 192 193 194 195
	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;
}

196 197 198
static int smp_c1(struct crypto_blkcipher *tfm_aes, 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])
199 200 201 202 203 204 205
{
	u8 p1[16], p2[16];
	int err;

	memset(p1, 0, 16);

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

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

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

	/* res = e(k, res) */
220
	err = smp_e(tfm_aes, k, res);
221 222 223 224 225 226 227 228 229
	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) */
230
	err = smp_e(tfm_aes, k, res);
231 232 233 234 235 236
	if (err)
		BT_ERR("Encrypt data error");

	return err;
}

237 238
static int smp_s1(struct crypto_blkcipher *tfm_aes, u8 k[16], u8 r1[16],
		  u8 r2[16], u8 _r[16])
239 240 241 242
{
	int err;

	/* 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(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
	if (!chan->data)
		return;

	smp = chan->data;

	cancel_delayed_work_sync(&smp->security_timer);
284
	schedule_delayed_work(&smp->security_timer, SMP_TIMEOUT);
285 286
}

287
static u8 authreq_to_seclevel(u8 authreq)
288
{
289 290 291 292 293 294
	if (authreq & SMP_AUTH_MITM) {
		if (authreq & SMP_AUTH_SC)
			return BT_SECURITY_FIPS;
		else
			return BT_SECURITY_HIGH;
	} else {
295
		return BT_SECURITY_MEDIUM;
296
	}
297 298 299 300 301
}

static __u8 seclevel_to_authreq(__u8 sec_level)
{
	switch (sec_level) {
302
	case BT_SECURITY_FIPS:
303 304 305 306 307 308 309 310 311
	case BT_SECURITY_HIGH:
		return SMP_AUTH_MITM | SMP_AUTH_BONDING;
	case BT_SECURITY_MEDIUM:
		return SMP_AUTH_BONDING;
	default:
		return SMP_AUTH_NONE;
	}
}

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

322
	if (test_bit(HCI_BONDABLE, &conn->hcon->hdev->dev_flags)) {
323 324
		local_dist = SMP_DIST_ENC_KEY | SMP_DIST_SIGN;
		remote_dist = SMP_DIST_ENC_KEY | SMP_DIST_SIGN;
325
		authreq |= SMP_AUTH_BONDING;
326 327
	} else {
		authreq &= ~SMP_AUTH_BONDING;
328 329
	}

330 331 332
	if (test_bit(HCI_RPA_RESOLVING, &hdev->dev_flags))
		remote_dist |= SMP_DIST_ID_KEY;

333 334 335
	if (test_bit(HCI_PRIVACY, &hdev->dev_flags))
		local_dist |= SMP_DIST_ID_KEY;

336 337 338 339 340 341 342 343 344 345
	if (test_bit(HCI_SC_ENABLED, &hdev->dev_flags)) {
		if ((authreq & SMP_AUTH_SC) &&
		    test_bit(HCI_SSP_ENABLED, &hdev->dev_flags)) {
			local_dist |= SMP_DIST_LINK_KEY;
			remote_dist |= SMP_DIST_LINK_KEY;
		}
	} else {
		authreq &= ~SMP_AUTH_SC;
	}

346 347 348 349
	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;
350 351
		req->init_key_dist = local_dist;
		req->resp_key_dist = remote_dist;
352
		req->auth_req = (authreq & AUTH_REQ_MASK(hdev));
353 354

		smp->remote_key_dist = remote_dist;
355 356 357 358 359 360
		return;
	}

	rsp->io_capability = conn->hcon->io_capability;
	rsp->oob_flag = SMP_OOB_NOT_PRESENT;
	rsp->max_key_size = SMP_MAX_ENC_KEY_SIZE;
361 362
	rsp->init_key_dist = req->init_key_dist & remote_dist;
	rsp->resp_key_dist = req->resp_key_dist & local_dist;
363
	rsp->auth_req = (authreq & AUTH_REQ_MASK(hdev));
364 365

	smp->remote_key_dist = rsp->init_key_dist;
366 367
}

368 369
static u8 check_enc_key_size(struct l2cap_conn *conn, __u8 max_key_size)
{
370 371
	struct l2cap_chan *chan = conn->smp;
	struct smp_chan *smp = chan->data;
372

373
	if ((max_key_size > SMP_MAX_ENC_KEY_SIZE) ||
374
	    (max_key_size < SMP_MIN_ENC_KEY_SIZE))
375 376
		return SMP_ENC_KEY_SIZE;

377
	smp->enc_key_size = max_key_size;
378 379 380 381

	return 0;
}

382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402
static void smp_chan_destroy(struct l2cap_conn *conn)
{
	struct l2cap_chan *chan = conn->smp;
	struct smp_chan *smp = chan->data;
	bool complete;

	BUG_ON(!smp);

	cancel_delayed_work_sync(&smp->security_timer);

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

	kfree(smp->csrk);
	kfree(smp->slave_csrk);

	crypto_free_blkcipher(smp->tfm_aes);

	/* If pairing failed clean up any keys we might have */
	if (!complete) {
		if (smp->ltk) {
J
Johan Hedberg 已提交
403 404
			list_del_rcu(&smp->ltk->list);
			kfree_rcu(smp->ltk, rcu);
405 406 407
		}

		if (smp->slave_ltk) {
J
Johan Hedberg 已提交
408 409
			list_del_rcu(&smp->slave_ltk->list);
			kfree_rcu(smp->slave_ltk, rcu);
410 411 412
		}

		if (smp->remote_irk) {
J
Johan Hedberg 已提交
413 414
			list_del_rcu(&smp->remote_irk->list);
			kfree_rcu(smp->remote_irk, rcu);
415 416 417 418 419 420 421 422
		}
	}

	chan->data = NULL;
	kfree(smp);
	hci_conn_drop(conn->hcon);
}

423
static void smp_failure(struct l2cap_conn *conn, u8 reason)
424
{
425
	struct hci_conn *hcon = conn->hcon;
426
	struct l2cap_chan *chan = conn->smp;
427

428
	if (reason)
429
		smp_send_cmd(conn, SMP_CMD_PAIRING_FAIL, sizeof(reason),
430
			     &reason);
431

432
	clear_bit(HCI_CONN_ENCRYPT_PEND, &hcon->flags);
433
	mgmt_auth_failed(hcon, HCI_ERROR_AUTH_FAILURE);
434

435
	if (chan->data)
436
		smp_chan_destroy(conn);
437 438
}

439 440 441 442 443 444 445 446 447 448 449 450 451 452 453
#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     },
};

454 455
static u8 get_auth_method(struct smp_chan *smp, u8 local_io, u8 remote_io)
{
456 457 458
	/* If either side has unknown io_caps, use JUST_CFM (which gets
	 * converted later to JUST_WORKS if we're initiators.
	 */
459 460
	if (local_io > SMP_IO_KEYBOARD_DISPLAY ||
	    remote_io > SMP_IO_KEYBOARD_DISPLAY)
461
		return JUST_CFM;
462 463 464 465

	return gen_method[remote_io][local_io];
}

466 467 468 469
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;
470 471
	struct l2cap_chan *chan = conn->smp;
	struct smp_chan *smp = chan->data;
472 473 474 475 476 477
	u8 method;
	u32 passkey = 0;
	int ret = 0;

	/* Initialize key for JUST WORKS */
	memset(smp->tk, 0, sizeof(smp->tk));
478
	clear_bit(SMP_FLAG_TK_VALID, &smp->flags);
479 480 481

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

482 483 484 485 486 487
	/* 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.
	 */
488
	if (!(auth & SMP_AUTH_MITM))
489
		method = JUST_CFM;
490
	else
491
		method = get_auth_method(smp, local_io, remote_io);
492

493
	/* Don't confirm locally initiated pairing attempts */
494
	if (method == JUST_CFM && test_bit(SMP_FLAG_INITIATOR, &smp->flags))
495 496
		method = JUST_WORKS;

497 498 499 500
	/* Don't bother user space with no IO capabilities */
	if (method == JUST_CFM && hcon->io_capability == HCI_IO_NO_INPUT_OUTPUT)
		method = JUST_WORKS;

501 502
	/* If Just Works, Continue with Zero TK */
	if (method == JUST_WORKS) {
503
		set_bit(SMP_FLAG_TK_VALID, &smp->flags);
504 505 506 507
		return 0;
	}

	/* Not Just Works/Confirm results in MITM Authentication */
508
	if (method != JUST_CFM) {
509
		set_bit(SMP_FLAG_MITM_AUTH, &smp->flags);
510 511 512
		if (hcon->pending_sec_level < BT_SECURITY_HIGH)
			hcon->pending_sec_level = BT_SECURITY_HIGH;
	}
513 514 515 516 517

	/* If both devices have Keyoard-Display I/O, the master
	 * Confirms and the slave Enters the passkey.
	 */
	if (method == OVERLAP) {
518
		if (hcon->role == HCI_ROLE_MASTER)
519 520 521 522 523
			method = CFM_PASSKEY;
		else
			method = REQ_PASSKEY;
	}

524
	/* Generate random passkey. */
525
	if (method == CFM_PASSKEY) {
526
		memset(smp->tk, 0, sizeof(smp->tk));
527 528
		get_random_bytes(&passkey, sizeof(passkey));
		passkey %= 1000000;
529
		put_unaligned_le32(passkey, smp->tk);
530
		BT_DBG("PassKey: %d", passkey);
531
		set_bit(SMP_FLAG_TK_VALID, &smp->flags);
532 533 534
	}

	if (method == REQ_PASSKEY)
535
		ret = mgmt_user_passkey_request(hcon->hdev, &hcon->dst,
536
						hcon->type, hcon->dst_type);
537 538 539 540
	else if (method == JUST_CFM)
		ret = mgmt_user_confirm_request(hcon->hdev, &hcon->dst,
						hcon->type, hcon->dst_type,
						passkey, 1);
541
	else
542
		ret = mgmt_user_passkey_notify(hcon->hdev, &hcon->dst,
543
						hcon->type, hcon->dst_type,
544
						passkey, 0);
545 546 547 548

	return ret;
}

549
static u8 smp_confirm(struct smp_chan *smp)
550 551 552 553 554 555 556
{
	struct l2cap_conn *conn = smp->conn;
	struct smp_cmd_pairing_confirm cp;
	int ret;

	BT_DBG("conn %p", conn);

557
	ret = smp_c1(smp->tfm_aes, smp->tk, smp->prnd, smp->preq, smp->prsp,
558
		     conn->hcon->init_addr_type, &conn->hcon->init_addr,
559 560
		     conn->hcon->resp_addr_type, &conn->hcon->resp_addr,
		     cp.confirm_val);
561 562
	if (ret)
		return SMP_UNSPECIFIED;
563

564
	clear_bit(SMP_FLAG_CFM_PENDING, &smp->flags);
565

566 567
	smp_send_cmd(smp->conn, SMP_CMD_PAIRING_CONFIRM, sizeof(cp), &cp);

568 569 570 571 572
	if (conn->hcon->out)
		SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_CONFIRM);
	else
		SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_RANDOM);

573
	return 0;
574 575
}

576
static u8 smp_random(struct smp_chan *smp)
577 578 579
{
	struct l2cap_conn *conn = smp->conn;
	struct hci_conn *hcon = conn->hcon;
580
	u8 confirm[16];
581 582
	int ret;

583
	if (IS_ERR_OR_NULL(smp->tfm_aes))
584
		return SMP_UNSPECIFIED;
585 586 587

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

588
	ret = smp_c1(smp->tfm_aes, smp->tk, smp->rrnd, smp->preq, smp->prsp,
589
		     hcon->init_addr_type, &hcon->init_addr,
590
		     hcon->resp_addr_type, &hcon->resp_addr, confirm);
591 592
	if (ret)
		return SMP_UNSPECIFIED;
593 594 595

	if (memcmp(smp->pcnf, confirm, sizeof(smp->pcnf)) != 0) {
		BT_ERR("Pairing failed (confirmation values mismatch)");
596
		return SMP_CONFIRM_FAILED;
597 598 599
	}

	if (hcon->out) {
600 601 602
		u8 stk[16];
		__le64 rand = 0;
		__le16 ediv = 0;
603

604
		smp_s1(smp->tfm_aes, smp->tk, smp->rrnd, smp->prnd, stk);
605

606
		memset(stk + smp->enc_key_size, 0,
607
		       SMP_MAX_ENC_KEY_SIZE - smp->enc_key_size);
608

609 610
		if (test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &hcon->flags))
			return SMP_UNSPECIFIED;
611 612

		hci_le_start_enc(hcon, ediv, rand, stk);
613
		hcon->enc_key_size = smp->enc_key_size;
614
		set_bit(HCI_CONN_STK_ENCRYPT, &hcon->flags);
615
	} else {
616
		u8 stk[16], auth;
617 618
		__le64 rand = 0;
		__le16 ediv = 0;
619

620 621
		smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM, sizeof(smp->prnd),
			     smp->prnd);
622

623
		smp_s1(smp->tfm_aes, smp->tk, smp->prnd, smp->rrnd, stk);
624

625
		memset(stk + smp->enc_key_size, 0,
626
		       SMP_MAX_ENC_KEY_SIZE - smp->enc_key_size);
627

628 629 630 631 632
		if (hcon->pending_sec_level == BT_SECURITY_HIGH)
			auth = 1;
		else
			auth = 0;

633 634 635 636
		/* 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).
		 */
637
		hci_add_ltk(hcon->hdev, &hcon->dst, hcon->dst_type,
638
			    SMP_STK, auth, stk, smp->enc_key_size, ediv, rand);
639 640
	}

641
	return 0;
642 643
}

644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661
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;
662
		queue_work(hdev->workqueue, &conn->id_addr_update_work);
663 664 665 666 667 668 669 670 671 672 673 674

		/* 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)) {
J
Johan Hedberg 已提交
675 676
			list_del_rcu(&smp->remote_irk->list);
			kfree_rcu(smp->remote_irk, rcu);
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
			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);
	}
}

711 712 713 714 715 716 717 718 719 720 721 722 723 724
static void smp_allow_key_dist(struct smp_chan *smp)
{
	/* Allow the first expected phase 3 PDU. The rest of the PDUs
	 * will be allowed in each PDU handler to ensure we receive
	 * them in the correct order.
	 */
	if (smp->remote_key_dist & SMP_DIST_ENC_KEY)
		SMP_ALLOW_CMD(smp, SMP_CMD_ENCRYPT_INFO);
	else if (smp->remote_key_dist & SMP_DIST_ID_KEY)
		SMP_ALLOW_CMD(smp, SMP_CMD_IDENT_INFO);
	else if (smp->remote_key_dist & SMP_DIST_SIGN)
		SMP_ALLOW_CMD(smp, SMP_CMD_SIGN_INFO);
}

725
static void smp_distribute_keys(struct smp_chan *smp)
726 727
{
	struct smp_cmd_pairing *req, *rsp;
728
	struct l2cap_conn *conn = smp->conn;
729 730 731 732 733 734 735 736 737
	struct hci_conn *hcon = conn->hcon;
	struct hci_dev *hdev = hcon->hdev;
	__u8 *keydist;

	BT_DBG("conn %p", conn);

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

	/* The responder sends its keys first */
738 739
	if (hcon->out && (smp->remote_key_dist & KEY_DIST_MASK)) {
		smp_allow_key_dist(smp);
740
		return;
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 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825

	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 */
826 827
	if (smp->remote_key_dist & KEY_DIST_MASK) {
		smp_allow_key_dist(smp);
828
		return;
829
	}
830 831 832 833 834 835 836

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

	smp_chan_destroy(conn);
}

837 838 839 840 841 842 843 844
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);

845
	hci_disconnect(conn->hcon, HCI_ERROR_REMOTE_USER_TERM);
846 847
}

848 849
static struct smp_chan *smp_chan_create(struct l2cap_conn *conn)
{
850
	struct l2cap_chan *chan = conn->smp;
851 852
	struct smp_chan *smp;

853
	smp = kzalloc(sizeof(*smp), GFP_ATOMIC);
854
	if (!smp)
855 856
		return NULL;

857 858 859 860 861 862 863
	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);
		return NULL;
	}

864
	smp->conn = conn;
865
	chan->data = smp;
866

867 868
	SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_FAIL);

869 870
	INIT_DELAYED_WORK(&smp->security_timer, smp_timeout);

871 872 873 874 875
	hci_conn_hold(conn->hcon);

	return smp;
}

876 877
int smp_user_confirm_reply(struct hci_conn *hcon, u16 mgmt_op, __le32 passkey)
{
878
	struct l2cap_conn *conn = hcon->l2cap_data;
879
	struct l2cap_chan *chan;
880 881
	struct smp_chan *smp;
	u32 value;
882
	int err;
883 884 885

	BT_DBG("");

886
	if (!conn)
887 888
		return -ENOTCONN;

889 890 891 892
	chan = conn->smp;
	if (!chan)
		return -ENOTCONN;

893 894 895 896 897 898
	l2cap_chan_lock(chan);
	if (!chan->data) {
		err = -ENOTCONN;
		goto unlock;
	}

899
	smp = chan->data;
900 901 902 903

	switch (mgmt_op) {
	case MGMT_OP_USER_PASSKEY_REPLY:
		value = le32_to_cpu(passkey);
904
		memset(smp->tk, 0, sizeof(smp->tk));
905
		BT_DBG("PassKey: %d", value);
906
		put_unaligned_le32(value, smp->tk);
907 908
		/* Fall Through */
	case MGMT_OP_USER_CONFIRM_REPLY:
909
		set_bit(SMP_FLAG_TK_VALID, &smp->flags);
910 911 912
		break;
	case MGMT_OP_USER_PASSKEY_NEG_REPLY:
	case MGMT_OP_USER_CONFIRM_NEG_REPLY:
913
		smp_failure(conn, SMP_PASSKEY_ENTRY_FAILED);
914 915
		err = 0;
		goto unlock;
916
	default:
917
		smp_failure(conn, SMP_PASSKEY_ENTRY_FAILED);
918 919
		err = -EOPNOTSUPP;
		goto unlock;
920 921
	}

922 923
	err = 0;

924
	/* If it is our turn to send Pairing Confirm, do so now */
925 926 927 928 929
	if (test_bit(SMP_FLAG_CFM_PENDING, &smp->flags)) {
		u8 rsp = smp_confirm(smp);
		if (rsp)
			smp_failure(conn, rsp);
	}
930

931 932 933
unlock:
	l2cap_chan_unlock(chan);
	return err;
934 935
}

936
static u8 smp_cmd_pairing_req(struct l2cap_conn *conn, struct sk_buff *skb)
937
{
938
	struct smp_cmd_pairing rsp, *req = (void *) skb->data;
939
	struct l2cap_chan *chan = conn->smp;
940
	struct hci_dev *hdev = conn->hcon->hdev;
941
	struct smp_chan *smp;
942
	u8 key_size, auth, sec_level;
943
	int ret;
944 945 946

	BT_DBG("conn %p", conn);

947
	if (skb->len < sizeof(*req))
948
		return SMP_INVALID_PARAMS;
949

950
	if (conn->hcon->role != HCI_ROLE_SLAVE)
951 952
		return SMP_CMD_NOTSUPP;

953
	if (!chan->data)
954
		smp = smp_chan_create(conn);
955
	else
956
		smp = chan->data;
957

958 959
	if (!smp)
		return SMP_UNSPECIFIED;
960

961
	/* We didn't start the pairing, so match remote */
962
	auth = req->auth_req & AUTH_REQ_MASK(hdev);
963

964
	if (!test_bit(HCI_BONDABLE, &hdev->dev_flags) &&
965
	    (auth & SMP_AUTH_BONDING))
966 967
		return SMP_PAIRING_NOTSUPP;

968 969
	smp->preq[0] = SMP_CMD_PAIRING_REQ;
	memcpy(&smp->preq[1], req, sizeof(*req));
970
	skb_pull(skb, sizeof(*req));
971

972
	if (conn->hcon->io_capability == HCI_IO_NO_INPUT_OUTPUT)
973 974 975 976
		sec_level = BT_SECURITY_MEDIUM;
	else
		sec_level = authreq_to_seclevel(auth);

977 978
	if (sec_level > conn->hcon->pending_sec_level)
		conn->hcon->pending_sec_level = sec_level;
979

S
Stephen Hemminger 已提交
980
	/* If we need MITM check that it can be achieved */
981 982 983 984 985 986 987 988 989
	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;
	}

990
	build_pairing_cmd(conn, req, &rsp, auth);
991

992 993 994
	if (rsp.auth_req & SMP_AUTH_SC)
		set_bit(SMP_FLAG_SC, &smp->flags);

995 996 997
	key_size = min(req->max_key_size, rsp.max_key_size);
	if (check_enc_key_size(conn, key_size))
		return SMP_ENC_KEY_SIZE;
998

999
	get_random_bytes(smp->prnd, sizeof(smp->prnd));
1000

1001 1002
	smp->prsp[0] = SMP_CMD_PAIRING_RSP;
	memcpy(&smp->prsp[1], &rsp, sizeof(rsp));
1003

1004
	smp_send_cmd(conn, SMP_CMD_PAIRING_RSP, sizeof(rsp), &rsp);
1005
	SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_CONFIRM);
1006

1007 1008 1009 1010 1011
	/* Request setup of TK */
	ret = tk_request(conn, 0, auth, rsp.io_capability, req->io_capability);
	if (ret)
		return SMP_UNSPECIFIED;

1012
	return 0;
1013 1014
}

1015
static u8 smp_cmd_pairing_rsp(struct l2cap_conn *conn, struct sk_buff *skb)
1016
{
1017
	struct smp_cmd_pairing *req, *rsp = (void *) skb->data;
1018 1019
	struct l2cap_chan *chan = conn->smp;
	struct smp_chan *smp = chan->data;
1020
	struct hci_dev *hdev = conn->hcon->hdev;
1021
	u8 key_size, auth;
1022
	int ret;
1023 1024 1025

	BT_DBG("conn %p", conn);

1026
	if (skb->len < sizeof(*rsp))
1027
		return SMP_INVALID_PARAMS;
1028

1029
	if (conn->hcon->role != HCI_ROLE_MASTER)
1030 1031
		return SMP_CMD_NOTSUPP;

1032 1033
	skb_pull(skb, sizeof(*rsp));

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

1036 1037 1038 1039
	key_size = min(req->max_key_size, rsp->max_key_size);
	if (check_enc_key_size(conn, key_size))
		return SMP_ENC_KEY_SIZE;

1040
	auth = rsp->auth_req & AUTH_REQ_MASK(hdev);
1041

1042 1043
	if ((req->auth_req & SMP_AUTH_SC) && (auth & SMP_AUTH_SC))
		set_bit(SMP_FLAG_SC, &smp->flags);
1044 1045
	else if (conn->hcon->pending_sec_level > BT_SECURITY_HIGH)
		conn->hcon->pending_sec_level = BT_SECURITY_HIGH;
1046

S
Stephen Hemminger 已提交
1047
	/* If we need MITM check that it can be achieved */
1048 1049 1050 1051 1052 1053 1054 1055 1056
	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;
	}

1057
	get_random_bytes(smp->prnd, sizeof(smp->prnd));
1058

1059 1060
	smp->prsp[0] = SMP_CMD_PAIRING_RSP;
	memcpy(&smp->prsp[1], rsp, sizeof(*rsp));
1061

1062 1063 1064 1065 1066
	/* 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;

1067
	auth |= req->auth_req;
1068

1069
	ret = tk_request(conn, 0, auth, req->io_capability, rsp->io_capability);
1070 1071 1072
	if (ret)
		return SMP_UNSPECIFIED;

1073
	set_bit(SMP_FLAG_CFM_PENDING, &smp->flags);
1074 1075

	/* Can't compose response until we have been confirmed */
1076
	if (test_bit(SMP_FLAG_TK_VALID, &smp->flags))
1077
		return smp_confirm(smp);
1078 1079

	return 0;
1080 1081
}

1082
static u8 smp_cmd_pairing_confirm(struct l2cap_conn *conn, struct sk_buff *skb)
1083
{
1084 1085
	struct l2cap_chan *chan = conn->smp;
	struct smp_chan *smp = chan->data;
1086

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

1089
	if (skb->len < sizeof(smp->pcnf))
1090
		return SMP_INVALID_PARAMS;
1091

1092 1093
	memcpy(smp->pcnf, skb->data, sizeof(smp->pcnf));
	skb_pull(skb, sizeof(smp->pcnf));
1094

1095
	if (conn->hcon->out) {
1096 1097
		smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM, sizeof(smp->prnd),
			     smp->prnd);
1098 1099 1100 1101 1102
		SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_RANDOM);
		return 0;
	}

	if (test_bit(SMP_FLAG_TK_VALID, &smp->flags))
1103
		return smp_confirm(smp);
1104
	else
1105
		set_bit(SMP_FLAG_CFM_PENDING, &smp->flags);
1106 1107

	return 0;
1108 1109
}

1110
static u8 smp_cmd_pairing_random(struct l2cap_conn *conn, struct sk_buff *skb)
1111
{
1112 1113
	struct l2cap_chan *chan = conn->smp;
	struct smp_chan *smp = chan->data;
1114

1115
	BT_DBG("conn %p", conn);
1116

1117
	if (skb->len < sizeof(smp->rrnd))
1118
		return SMP_INVALID_PARAMS;
1119

1120
	memcpy(smp->rrnd, skb->data, sizeof(smp->rrnd));
1121
	skb_pull(skb, sizeof(smp->rrnd));
1122

1123
	return smp_random(smp);
1124 1125
}

1126
static bool smp_ltk_encrypt(struct l2cap_conn *conn, u8 sec_level)
1127
{
1128
	struct smp_ltk *key;
1129 1130
	struct hci_conn *hcon = conn->hcon;

1131
	key = hci_find_ltk(hcon->hdev, &hcon->dst, hcon->dst_type, hcon->role);
1132
	if (!key)
1133
		return false;
1134

1135
	if (smp_ltk_sec_level(key) < sec_level)
1136
		return false;
1137

1138
	if (test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &hcon->flags))
1139
		return true;
1140

1141 1142
	hci_le_start_enc(hcon, key->ediv, key->rand, key->val);
	hcon->enc_key_size = key->enc_size;
1143

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

1147
	return true;
1148
}
1149

1150 1151
bool smp_sufficient_security(struct hci_conn *hcon, u8 sec_level,
			     enum smp_key_pref key_pref)
1152 1153 1154 1155
{
	if (sec_level == BT_SECURITY_LOW)
		return true;

1156 1157 1158 1159 1160
	/* If we're encrypted with an STK but the caller prefers using
	 * LTK 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 security. Only exception is if we
	 * don't have an LTK (e.g. because of key distribution bits).
1161
	 */
1162 1163
	if (key_pref == SMP_USE_LTK &&
	    test_bit(HCI_CONN_STK_ENCRYPT, &hcon->flags) &&
1164
	    hci_find_ltk(hcon->hdev, &hcon->dst, hcon->dst_type, hcon->role))
1165 1166
		return false;

1167 1168 1169 1170 1171 1172
	if (hcon->sec_level >= sec_level)
		return true;

	return false;
}

1173
static u8 smp_cmd_security_req(struct l2cap_conn *conn, struct sk_buff *skb)
1174 1175 1176
{
	struct smp_cmd_security_req *rp = (void *) skb->data;
	struct smp_cmd_pairing cp;
1177
	struct hci_conn *hcon = conn->hcon;
1178
	struct hci_dev *hdev = hcon->hdev;
1179
	struct smp_chan *smp;
1180
	u8 sec_level, auth;
1181 1182 1183

	BT_DBG("conn %p", conn);

1184
	if (skb->len < sizeof(*rp))
1185
		return SMP_INVALID_PARAMS;
1186

1187
	if (hcon->role != HCI_ROLE_MASTER)
1188 1189
		return SMP_CMD_NOTSUPP;

1190
	auth = rp->auth_req & AUTH_REQ_MASK(hdev);
1191

1192
	if (hcon->io_capability == HCI_IO_NO_INPUT_OUTPUT)
1193 1194 1195 1196
		sec_level = BT_SECURITY_MEDIUM;
	else
		sec_level = authreq_to_seclevel(auth);

1197
	if (smp_sufficient_security(hcon, sec_level, SMP_USE_LTK))
1198 1199
		return 0;

1200 1201
	if (sec_level > hcon->pending_sec_level)
		hcon->pending_sec_level = sec_level;
1202

1203
	if (smp_ltk_encrypt(conn, hcon->pending_sec_level))
1204 1205
		return 0;

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

1210
	if (!test_bit(HCI_BONDABLE, &hcon->hdev->dev_flags) &&
1211
	    (auth & SMP_AUTH_BONDING))
1212 1213
		return SMP_PAIRING_NOTSUPP;

1214 1215
	skb_pull(skb, sizeof(*rp));

1216
	memset(&cp, 0, sizeof(cp));
1217
	build_pairing_cmd(conn, &cp, NULL, auth);
1218

1219 1220
	smp->preq[0] = SMP_CMD_PAIRING_REQ;
	memcpy(&smp->preq[1], &cp, sizeof(cp));
1221

1222
	smp_send_cmd(conn, SMP_CMD_PAIRING_REQ, sizeof(cp), &cp);
1223
	SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_RSP);
1224

1225
	return 0;
1226 1227
}

1228
int smp_conn_security(struct hci_conn *hcon, __u8 sec_level)
1229
{
1230
	struct l2cap_conn *conn = hcon->l2cap_data;
1231
	struct l2cap_chan *chan;
1232
	struct smp_chan *smp;
1233
	__u8 authreq;
1234
	int ret;
1235

1236 1237
	BT_DBG("conn %p hcon %p level 0x%2.2x", conn, hcon, sec_level);

1238 1239 1240 1241
	/* This may be NULL if there's an unexpected disconnection */
	if (!conn)
		return 1;

1242 1243
	chan = conn->smp;

1244
	if (!test_bit(HCI_LE_ENABLED, &hcon->hdev->dev_flags))
1245 1246
		return 1;

1247
	if (smp_sufficient_security(hcon, sec_level, SMP_USE_LTK))
1248
		return 1;
1249

1250 1251 1252
	if (sec_level > hcon->pending_sec_level)
		hcon->pending_sec_level = sec_level;

1253
	if (hcon->role == HCI_ROLE_MASTER)
1254 1255
		if (smp_ltk_encrypt(conn, hcon->pending_sec_level))
			return 0;
1256

1257 1258 1259 1260 1261 1262 1263
	l2cap_chan_lock(chan);

	/* If SMP is already in progress ignore this request */
	if (chan->data) {
		ret = 0;
		goto unlock;
	}
1264

1265
	smp = smp_chan_create(conn);
1266 1267 1268 1269
	if (!smp) {
		ret = 1;
		goto unlock;
	}
1270 1271

	authreq = seclevel_to_authreq(sec_level);
1272

1273 1274 1275
	if (test_bit(HCI_SC_ENABLED, &hcon->hdev->dev_flags))
		authreq |= SMP_AUTH_SC;

1276 1277
	/* Require MITM if IO Capability allows or the security level
	 * requires it.
1278
	 */
1279
	if (hcon->io_capability != HCI_IO_NO_INPUT_OUTPUT ||
1280
	    hcon->pending_sec_level > BT_SECURITY_MEDIUM)
1281 1282
		authreq |= SMP_AUTH_MITM;

1283
	if (hcon->role == HCI_ROLE_MASTER) {
1284
		struct smp_cmd_pairing cp;
1285

1286
		build_pairing_cmd(conn, &cp, NULL, authreq);
1287 1288
		smp->preq[0] = SMP_CMD_PAIRING_REQ;
		memcpy(&smp->preq[1], &cp, sizeof(cp));
1289

1290
		smp_send_cmd(conn, SMP_CMD_PAIRING_REQ, sizeof(cp), &cp);
1291
		SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_RSP);
1292 1293
	} else {
		struct smp_cmd_security_req cp;
1294
		cp.auth_req = authreq;
1295
		smp_send_cmd(conn, SMP_CMD_SECURITY_REQ, sizeof(cp), &cp);
1296
		SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_REQ);
1297 1298
	}

1299
	set_bit(SMP_FLAG_INITIATOR, &smp->flags);
1300
	ret = 0;
1301

1302 1303 1304
unlock:
	l2cap_chan_unlock(chan);
	return ret;
1305 1306
}

1307 1308
static int smp_cmd_encrypt_info(struct l2cap_conn *conn, struct sk_buff *skb)
{
1309
	struct smp_cmd_encrypt_info *rp = (void *) skb->data;
1310 1311
	struct l2cap_chan *chan = conn->smp;
	struct smp_chan *smp = chan->data;
1312

1313 1314 1315
	BT_DBG("conn %p", conn);

	if (skb->len < sizeof(*rp))
1316
		return SMP_INVALID_PARAMS;
1317

1318
	SMP_ALLOW_CMD(smp, SMP_CMD_MASTER_IDENT);
1319

1320 1321
	skb_pull(skb, sizeof(*rp));

1322
	memcpy(smp->tk, rp->ltk, sizeof(smp->tk));
1323

1324 1325 1326 1327 1328
	return 0;
}

static int smp_cmd_master_ident(struct l2cap_conn *conn, struct sk_buff *skb)
{
1329
	struct smp_cmd_master_ident *rp = (void *) skb->data;
1330 1331
	struct l2cap_chan *chan = conn->smp;
	struct smp_chan *smp = chan->data;
1332 1333
	struct hci_dev *hdev = conn->hcon->hdev;
	struct hci_conn *hcon = conn->hcon;
1334
	struct smp_ltk *ltk;
1335
	u8 authenticated;
1336

1337 1338 1339
	BT_DBG("conn %p", conn);

	if (skb->len < sizeof(*rp))
1340
		return SMP_INVALID_PARAMS;
1341

1342 1343 1344
	/* Mark the information as received */
	smp->remote_key_dist &= ~SMP_DIST_ENC_KEY;

1345 1346
	if (smp->remote_key_dist & SMP_DIST_ID_KEY)
		SMP_ALLOW_CMD(smp, SMP_CMD_IDENT_INFO);
1347 1348
	else if (smp->remote_key_dist & SMP_DIST_SIGN)
		SMP_ALLOW_CMD(smp, SMP_CMD_SIGN_INFO);
1349

1350
	skb_pull(skb, sizeof(*rp));
1351

1352
	authenticated = (hcon->sec_level == BT_SECURITY_HIGH);
1353
	ltk = hci_add_ltk(hdev, &hcon->dst, hcon->dst_type, SMP_LTK,
1354 1355 1356
			  authenticated, smp->tk, smp->enc_key_size,
			  rp->ediv, rp->rand);
	smp->ltk = ltk;
1357
	if (!(smp->remote_key_dist & KEY_DIST_MASK))
1358
		smp_distribute_keys(smp);
1359 1360 1361 1362

	return 0;
}

1363 1364 1365
static int smp_cmd_ident_info(struct l2cap_conn *conn, struct sk_buff *skb)
{
	struct smp_cmd_ident_info *info = (void *) skb->data;
1366 1367
	struct l2cap_chan *chan = conn->smp;
	struct smp_chan *smp = chan->data;
1368 1369 1370 1371

	BT_DBG("");

	if (skb->len < sizeof(*info))
1372
		return SMP_INVALID_PARAMS;
1373

1374
	SMP_ALLOW_CMD(smp, SMP_CMD_IDENT_ADDR_INFO);
1375

1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386
	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;
1387 1388
	struct l2cap_chan *chan = conn->smp;
	struct smp_chan *smp = chan->data;
1389 1390 1391 1392 1393 1394
	struct hci_conn *hcon = conn->hcon;
	bdaddr_t rpa;

	BT_DBG("");

	if (skb->len < sizeof(*info))
1395
		return SMP_INVALID_PARAMS;
1396

1397 1398 1399
	/* Mark the information as received */
	smp->remote_key_dist &= ~SMP_DIST_ID_KEY;

1400 1401 1402
	if (smp->remote_key_dist & SMP_DIST_SIGN)
		SMP_ALLOW_CMD(smp, SMP_CMD_SIGN_INFO);

1403 1404
	skb_pull(skb, sizeof(*info));

1405 1406 1407 1408 1409 1410 1411 1412 1413
	/* 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");
1414
		goto distribute;
1415 1416
	}

1417 1418 1419 1420 1421 1422 1423 1424
	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);

1425 1426
	smp->remote_irk = hci_add_irk(conn->hcon->hdev, &smp->id_addr,
				      smp->id_addr_type, smp->irk, &rpa);
1427

1428
distribute:
1429 1430
	if (!(smp->remote_key_dist & KEY_DIST_MASK))
		smp_distribute_keys(smp);
1431 1432 1433 1434

	return 0;
}

1435 1436 1437
static int smp_cmd_sign_info(struct l2cap_conn *conn, struct sk_buff *skb)
{
	struct smp_cmd_sign_info *rp = (void *) skb->data;
1438 1439
	struct l2cap_chan *chan = conn->smp;
	struct smp_chan *smp = chan->data;
1440 1441 1442 1443 1444
	struct smp_csrk *csrk;

	BT_DBG("conn %p", conn);

	if (skb->len < sizeof(*rp))
1445
		return SMP_INVALID_PARAMS;
1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457

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

	skb_pull(skb, sizeof(*rp));

	csrk = kzalloc(sizeof(*csrk), GFP_KERNEL);
	if (csrk) {
		csrk->master = 0x01;
		memcpy(csrk->val, rp->csrk, sizeof(csrk->val));
	}
	smp->csrk = csrk;
1458
	smp_distribute_keys(smp);
1459 1460 1461 1462

	return 0;
}

1463
static int smp_sig_channel(struct l2cap_chan *chan, struct sk_buff *skb)
1464
{
1465
	struct l2cap_conn *conn = chan->conn;
1466
	struct hci_conn *hcon = conn->hcon;
1467
	struct smp_chan *smp;
1468
	__u8 code, reason;
1469 1470
	int err = 0;

1471 1472
	if (hcon->type != LE_LINK) {
		kfree_skb(skb);
1473
		return 0;
1474 1475
	}

1476
	if (skb->len < 1)
1477 1478
		return -EILSEQ;

1479
	if (!test_bit(HCI_LE_ENABLED, &hcon->hdev->dev_flags)) {
1480 1481 1482 1483
		reason = SMP_PAIRING_NOTSUPP;
		goto done;
	}

1484
	code = skb->data[0];
1485 1486
	skb_pull(skb, sizeof(code));

1487 1488 1489 1490 1491
	smp = chan->data;

	if (code > SMP_CMD_MAX)
		goto drop;

1492
	if (smp && !test_and_clear_bit(code, &smp->allow_cmd))
1493 1494 1495 1496
		goto drop;

	/* If we don't have a context the only allowed commands are
	 * pairing request and security request.
1497
	 */
1498 1499
	if (!smp && code != SMP_CMD_PAIRING_REQ && code != SMP_CMD_SECURITY_REQ)
		goto drop;
1500

1501 1502
	switch (code) {
	case SMP_CMD_PAIRING_REQ:
1503
		reason = smp_cmd_pairing_req(conn, skb);
1504 1505 1506
		break;

	case SMP_CMD_PAIRING_FAIL:
1507
		smp_failure(conn, 0);
1508
		err = -EPERM;
1509 1510 1511
		break;

	case SMP_CMD_PAIRING_RSP:
1512
		reason = smp_cmd_pairing_rsp(conn, skb);
1513 1514 1515
		break;

	case SMP_CMD_SECURITY_REQ:
1516
		reason = smp_cmd_security_req(conn, skb);
1517 1518
		break;

1519
	case SMP_CMD_PAIRING_CONFIRM:
1520
		reason = smp_cmd_pairing_confirm(conn, skb);
1521 1522
		break;

1523
	case SMP_CMD_PAIRING_RANDOM:
1524
		reason = smp_cmd_pairing_random(conn, skb);
1525 1526
		break;

1527
	case SMP_CMD_ENCRYPT_INFO:
1528 1529 1530
		reason = smp_cmd_encrypt_info(conn, skb);
		break;

1531
	case SMP_CMD_MASTER_IDENT:
1532 1533 1534
		reason = smp_cmd_master_ident(conn, skb);
		break;

1535
	case SMP_CMD_IDENT_INFO:
1536 1537 1538
		reason = smp_cmd_ident_info(conn, skb);
		break;

1539
	case SMP_CMD_IDENT_ADDR_INFO:
1540 1541 1542
		reason = smp_cmd_ident_addr_info(conn, skb);
		break;

1543
	case SMP_CMD_SIGN_INFO:
1544
		reason = smp_cmd_sign_info(conn, skb);
1545 1546
		break;

1547 1548 1549
	default:
		BT_DBG("Unknown command code 0x%2.2x", code);
		reason = SMP_CMD_NOTSUPP;
1550
		goto done;
1551 1552
	}

1553
done:
1554 1555 1556
	if (!err) {
		if (reason)
			smp_failure(conn, reason);
1557
		kfree_skb(skb);
1558 1559
	}

1560
	return err;
1561 1562 1563 1564 1565 1566

drop:
	BT_ERR("%s unexpected SMP command 0x%02x from %pMR", hcon->hdev->name,
	       code, &hcon->dst);
	kfree_skb(skb);
	return 0;
1567
}
1568

1569 1570 1571 1572 1573 1574
static void smp_teardown_cb(struct l2cap_chan *chan, int err)
{
	struct l2cap_conn *conn = chan->conn;

	BT_DBG("chan %p", chan);

1575
	if (chan->data)
1576 1577
		smp_chan_destroy(conn);

1578 1579 1580 1581
	conn->smp = NULL;
	l2cap_chan_put(chan);
}

1582 1583
static void smp_resume_cb(struct l2cap_chan *chan)
{
1584
	struct smp_chan *smp = chan->data;
1585 1586 1587 1588 1589
	struct l2cap_conn *conn = chan->conn;
	struct hci_conn *hcon = conn->hcon;

	BT_DBG("chan %p", chan);

1590 1591
	if (!smp)
		return;
1592

1593 1594 1595
	if (!test_bit(HCI_CONN_ENCRYPT, &hcon->flags))
		return;

1596 1597
	cancel_delayed_work(&smp->security_timer);

1598
	smp_distribute_keys(smp);
1599 1600
}

1601 1602 1603 1604 1605 1606 1607 1608 1609 1610
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);
}

1611 1612 1613 1614 1615 1616 1617 1618
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) {
1619
		struct smp_chan *smp = chan->data;
1620

1621 1622
		if (smp)
			cancel_delayed_work_sync(&smp->security_timer);
1623

1624
		hci_disconnect(chan->conn->hcon, HCI_ERROR_AUTH_FAILURE);
1625 1626 1627 1628 1629
	}

	return err;
}

1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648
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,
1649
	.recv			= smp_recv_cb,
1650 1651
	.alloc_skb		= smp_alloc_skb_cb,
	.teardown		= smp_teardown_cb,
1652
	.resume			= smp_resume_cb,
1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681

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

1682 1683 1684 1685 1686 1687 1688
	/* Other L2CAP channels may request SMP routines in order to
	 * change the security level. This means that the SMP channel
	 * lock must be considered in its own category to avoid lockdep
	 * warnings.
	 */
	atomic_set(&chan->nesting, L2CAP_NESTING_SMP);

1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712
	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,
};

1713 1714
int smp_register(struct hci_dev *hdev)
{
1715
	struct l2cap_chan *chan;
1716
	struct crypto_blkcipher	*tfm_aes;
1717

1718 1719
	BT_DBG("%s", hdev->name);

J
Johan Hedberg 已提交
1720
	tfm_aes = crypto_alloc_blkcipher("ecb(aes)", 0, 0);
1721 1722
	if (IS_ERR(tfm_aes)) {
		int err = PTR_ERR(tfm_aes);
1723 1724 1725 1726
		BT_ERR("Unable to create crypto context");
		return err;
	}

1727 1728
	chan = l2cap_chan_create();
	if (!chan) {
1729
		crypto_free_blkcipher(tfm_aes);
1730 1731 1732
		return -ENOMEM;
	}

1733 1734
	chan->data = tfm_aes;

1735
	l2cap_add_scid(chan, L2CAP_CID_SMP);
1736 1737 1738 1739 1740 1741 1742 1743 1744 1745

	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;

1746 1747 1748
	/* Set correct nesting level for a parent/listening channel */
	atomic_set(&chan->nesting, L2CAP_NESTING_PARENT);

1749 1750
	hdev->smp_data = chan;

1751 1752 1753 1754 1755
	return 0;
}

void smp_unregister(struct hci_dev *hdev)
{
1756
	struct l2cap_chan *chan = hdev->smp_data;
1757
	struct crypto_blkcipher *tfm_aes;
1758 1759 1760 1761 1762

	if (!chan)
		return;

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

1764 1765 1766 1767
	tfm_aes = chan->data;
	if (tfm_aes) {
		chan->data = NULL;
		crypto_free_blkcipher(tfm_aes);
1768
	}
1769 1770 1771

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