smp.c 41.1 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
#define AUTH_REQ_MASK   0x07
39
#define KEY_DIST_MASK	0x07
40

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 49

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

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

	struct crypto_blkcipher	*tfm_aes;
73 74
};

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

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

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

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

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

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

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

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

	sg_init_one(&sg, data, 16);
111 112 113 114 115

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

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

119 120 121
	return err;
}

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

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

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

	return 0;
}

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

155 156 157 158 159
	if (!chan || !chan->data)
		return false;

	tfm = chan->data;

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

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

175 176 177 178 179
	if (!chan || !chan->data)
		return -EOPNOTSUPP;

	tfm = chan->data;

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

194 195 196
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])
197 198 199 200 201 202 203
{
	u8 p1[16], p2[16];
	int err;

	memset(p1, 0, 16);

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

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

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

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

	return err;
}

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

	/* 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(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
	struct l2cap_chan *chan = conn->smp;
254
	struct smp_chan *smp;
255 256
	struct kvec iv[2];
	struct msghdr msg;
257

258 259
	if (!chan)
		return;
260

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

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

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

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

A
Al Viro 已提交
271
	iov_iter_init(&msg.msg_iter, WRITE, (struct iovec *)iv, 2, 1 + len);
272

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

275 276 277 278 279 280
	if (!chan->data)
		return;

	smp = chan->data;

	cancel_delayed_work_sync(&smp->security_timer);
281
	schedule_delayed_work(&smp->security_timer, SMP_TIMEOUT);
282 283
}

284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303
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;
	}
}

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

314
	if (test_bit(HCI_BONDABLE, &conn->hcon->hdev->dev_flags)) {
315 316
		local_dist = SMP_DIST_ENC_KEY | SMP_DIST_SIGN;
		remote_dist = SMP_DIST_ENC_KEY | SMP_DIST_SIGN;
317
		authreq |= SMP_AUTH_BONDING;
318 319
	} else {
		authreq &= ~SMP_AUTH_BONDING;
320 321
	}

322 323 324
	if (test_bit(HCI_RPA_RESOLVING, &hdev->dev_flags))
		remote_dist |= SMP_DIST_ID_KEY;

325 326 327
	if (test_bit(HCI_PRIVACY, &hdev->dev_flags))
		local_dist |= SMP_DIST_ID_KEY;

328 329 330 331
	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;
332 333
		req->init_key_dist = local_dist;
		req->resp_key_dist = remote_dist;
334
		req->auth_req = (authreq & AUTH_REQ_MASK);
335 336

		smp->remote_key_dist = remote_dist;
337 338 339 340 341 342
		return;
	}

	rsp->io_capability = conn->hcon->io_capability;
	rsp->oob_flag = SMP_OOB_NOT_PRESENT;
	rsp->max_key_size = SMP_MAX_ENC_KEY_SIZE;
343 344
	rsp->init_key_dist = req->init_key_dist & remote_dist;
	rsp->resp_key_dist = req->resp_key_dist & local_dist;
345
	rsp->auth_req = (authreq & AUTH_REQ_MASK);
346 347

	smp->remote_key_dist = rsp->init_key_dist;
348 349
}

350 351
static u8 check_enc_key_size(struct l2cap_conn *conn, __u8 max_key_size)
{
352 353
	struct l2cap_chan *chan = conn->smp;
	struct smp_chan *smp = chan->data;
354

355
	if ((max_key_size > SMP_MAX_ENC_KEY_SIZE) ||
356
	    (max_key_size < SMP_MIN_ENC_KEY_SIZE))
357 358
		return SMP_ENC_KEY_SIZE;

359
	smp->enc_key_size = max_key_size;
360 361 362 363

	return 0;
}

364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384
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 已提交
385 386
			list_del_rcu(&smp->ltk->list);
			kfree_rcu(smp->ltk, rcu);
387 388 389
		}

		if (smp->slave_ltk) {
J
Johan Hedberg 已提交
390 391
			list_del_rcu(&smp->slave_ltk->list);
			kfree_rcu(smp->slave_ltk, rcu);
392 393 394
		}

		if (smp->remote_irk) {
J
Johan Hedberg 已提交
395 396
			list_del_rcu(&smp->remote_irk->list);
			kfree_rcu(smp->remote_irk, rcu);
397 398 399 400 401 402 403 404
		}
	}

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

405
static void smp_failure(struct l2cap_conn *conn, u8 reason)
406
{
407
	struct hci_conn *hcon = conn->hcon;
408
	struct l2cap_chan *chan = conn->smp;
409

410
	if (reason)
411
		smp_send_cmd(conn, SMP_CMD_PAIRING_FAIL, sizeof(reason),
412
			     &reason);
413

414
	clear_bit(HCI_CONN_ENCRYPT_PEND, &hcon->flags);
415
	mgmt_auth_failed(hcon, HCI_ERROR_AUTH_FAILURE);
416

417
	if (chan->data)
418
		smp_chan_destroy(conn);
419 420
}

421 422 423 424 425 426 427 428 429 430 431 432 433 434 435
#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     },
};

436 437
static u8 get_auth_method(struct smp_chan *smp, u8 local_io, u8 remote_io)
{
438 439 440
	/* If either side has unknown io_caps, use JUST_CFM (which gets
	 * converted later to JUST_WORKS if we're initiators.
	 */
441 442
	if (local_io > SMP_IO_KEYBOARD_DISPLAY ||
	    remote_io > SMP_IO_KEYBOARD_DISPLAY)
443
		return JUST_CFM;
444 445 446 447

	return gen_method[remote_io][local_io];
}

448 449 450 451
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;
452 453
	struct l2cap_chan *chan = conn->smp;
	struct smp_chan *smp = chan->data;
454 455 456 457 458 459
	u8 method;
	u32 passkey = 0;
	int ret = 0;

	/* Initialize key for JUST WORKS */
	memset(smp->tk, 0, sizeof(smp->tk));
460
	clear_bit(SMP_FLAG_TK_VALID, &smp->flags);
461 462 463

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

464 465 466 467 468 469
	/* 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.
	 */
470
	if (!(auth & SMP_AUTH_MITM))
471
		method = JUST_CFM;
472
	else
473
		method = get_auth_method(smp, local_io, remote_io);
474

475
	/* Don't confirm locally initiated pairing attempts */
476
	if (method == JUST_CFM && test_bit(SMP_FLAG_INITIATOR, &smp->flags))
477 478
		method = JUST_WORKS;

479 480 481 482
	/* Don't bother user space with no IO capabilities */
	if (method == JUST_CFM && hcon->io_capability == HCI_IO_NO_INPUT_OUTPUT)
		method = JUST_WORKS;

483 484
	/* If Just Works, Continue with Zero TK */
	if (method == JUST_WORKS) {
485
		set_bit(SMP_FLAG_TK_VALID, &smp->flags);
486 487 488 489
		return 0;
	}

	/* Not Just Works/Confirm results in MITM Authentication */
490
	if (method != JUST_CFM) {
491
		set_bit(SMP_FLAG_MITM_AUTH, &smp->flags);
492 493 494
		if (hcon->pending_sec_level < BT_SECURITY_HIGH)
			hcon->pending_sec_level = BT_SECURITY_HIGH;
	}
495 496 497 498 499

	/* If both devices have Keyoard-Display I/O, the master
	 * Confirms and the slave Enters the passkey.
	 */
	if (method == OVERLAP) {
500
		if (hcon->role == HCI_ROLE_MASTER)
501 502 503 504 505
			method = CFM_PASSKEY;
		else
			method = REQ_PASSKEY;
	}

506
	/* Generate random passkey. */
507
	if (method == CFM_PASSKEY) {
508
		memset(smp->tk, 0, sizeof(smp->tk));
509 510
		get_random_bytes(&passkey, sizeof(passkey));
		passkey %= 1000000;
511
		put_unaligned_le32(passkey, smp->tk);
512
		BT_DBG("PassKey: %d", passkey);
513
		set_bit(SMP_FLAG_TK_VALID, &smp->flags);
514 515 516
	}

	if (method == REQ_PASSKEY)
517
		ret = mgmt_user_passkey_request(hcon->hdev, &hcon->dst,
518
						hcon->type, hcon->dst_type);
519 520 521 522
	else if (method == JUST_CFM)
		ret = mgmt_user_confirm_request(hcon->hdev, &hcon->dst,
						hcon->type, hcon->dst_type,
						passkey, 1);
523
	else
524
		ret = mgmt_user_passkey_notify(hcon->hdev, &hcon->dst,
525
						hcon->type, hcon->dst_type,
526
						passkey, 0);
527 528 529 530

	return ret;
}

531
static u8 smp_confirm(struct smp_chan *smp)
532 533 534 535 536 537 538
{
	struct l2cap_conn *conn = smp->conn;
	struct smp_cmd_pairing_confirm cp;
	int ret;

	BT_DBG("conn %p", conn);

539
	ret = smp_c1(smp->tfm_aes, smp->tk, smp->prnd, smp->preq, smp->prsp,
540
		     conn->hcon->init_addr_type, &conn->hcon->init_addr,
541 542
		     conn->hcon->resp_addr_type, &conn->hcon->resp_addr,
		     cp.confirm_val);
543 544
	if (ret)
		return SMP_UNSPECIFIED;
545

546
	clear_bit(SMP_FLAG_CFM_PENDING, &smp->flags);
547

548 549
	smp_send_cmd(smp->conn, SMP_CMD_PAIRING_CONFIRM, sizeof(cp), &cp);

550 551 552 553 554
	if (conn->hcon->out)
		SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_CONFIRM);
	else
		SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_RANDOM);

555
	return 0;
556 557
}

558
static u8 smp_random(struct smp_chan *smp)
559 560 561
{
	struct l2cap_conn *conn = smp->conn;
	struct hci_conn *hcon = conn->hcon;
562
	u8 confirm[16];
563 564
	int ret;

565
	if (IS_ERR_OR_NULL(smp->tfm_aes))
566
		return SMP_UNSPECIFIED;
567 568 569

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

570
	ret = smp_c1(smp->tfm_aes, smp->tk, smp->rrnd, smp->preq, smp->prsp,
571
		     hcon->init_addr_type, &hcon->init_addr,
572
		     hcon->resp_addr_type, &hcon->resp_addr, confirm);
573 574
	if (ret)
		return SMP_UNSPECIFIED;
575 576 577

	if (memcmp(smp->pcnf, confirm, sizeof(smp->pcnf)) != 0) {
		BT_ERR("Pairing failed (confirmation values mismatch)");
578
		return SMP_CONFIRM_FAILED;
579 580 581
	}

	if (hcon->out) {
582 583 584
		u8 stk[16];
		__le64 rand = 0;
		__le16 ediv = 0;
585

586
		smp_s1(smp->tfm_aes, smp->tk, smp->rrnd, smp->prnd, stk);
587

588
		memset(stk + smp->enc_key_size, 0,
589
		       SMP_MAX_ENC_KEY_SIZE - smp->enc_key_size);
590

591 592
		if (test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &hcon->flags))
			return SMP_UNSPECIFIED;
593 594

		hci_le_start_enc(hcon, ediv, rand, stk);
595
		hcon->enc_key_size = smp->enc_key_size;
596
		set_bit(HCI_CONN_STK_ENCRYPT, &hcon->flags);
597
	} else {
598
		u8 stk[16], auth;
599 600
		__le64 rand = 0;
		__le16 ediv = 0;
601

602 603
		smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM, sizeof(smp->prnd),
			     smp->prnd);
604

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

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

610 611 612 613 614
		if (hcon->pending_sec_level == BT_SECURITY_HIGH)
			auth = 1;
		else
			auth = 0;

615 616 617 618
		/* 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).
		 */
619
		hci_add_ltk(hcon->hdev, &hcon->dst, hcon->dst_type,
620
			    SMP_STK, auth, stk, smp->enc_key_size, ediv, rand);
621 622
	}

623
	return 0;
624 625
}

626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643
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;
644
		queue_work(hdev->workqueue, &conn->id_addr_update_work);
645 646 647 648 649 650 651 652 653 654 655 656

		/* 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 已提交
657 658
			list_del_rcu(&smp->remote_irk->list);
			kfree_rcu(smp->remote_irk, rcu);
659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692
			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);
	}
}

693 694 695 696 697 698 699 700 701 702 703 704 705 706
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);
}

707
static void smp_distribute_keys(struct smp_chan *smp)
708 709
{
	struct smp_cmd_pairing *req, *rsp;
710
	struct l2cap_conn *conn = smp->conn;
711 712 713 714 715 716 717 718 719
	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 */
720 721
	if (hcon->out && (smp->remote_key_dist & KEY_DIST_MASK)) {
		smp_allow_key_dist(smp);
722
		return;
723
	}
724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 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

	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 */
808 809
	if (smp->remote_key_dist & KEY_DIST_MASK) {
		smp_allow_key_dist(smp);
810
		return;
811
	}
812 813 814 815 816 817 818

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

	smp_chan_destroy(conn);
}

819 820 821 822 823 824 825 826
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);

827
	hci_disconnect(conn->hcon, HCI_ERROR_REMOTE_USER_TERM);
828 829
}

830 831
static struct smp_chan *smp_chan_create(struct l2cap_conn *conn)
{
832
	struct l2cap_chan *chan = conn->smp;
833 834
	struct smp_chan *smp;

835
	smp = kzalloc(sizeof(*smp), GFP_ATOMIC);
836
	if (!smp)
837 838
		return NULL;

839 840 841 842 843 844 845
	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;
	}

846
	smp->conn = conn;
847
	chan->data = smp;
848

849 850
	SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_FAIL);

851 852
	INIT_DELAYED_WORK(&smp->security_timer, smp_timeout);

853 854 855 856 857
	hci_conn_hold(conn->hcon);

	return smp;
}

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

	BT_DBG("");

868
	if (!conn)
869 870
		return -ENOTCONN;

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

875 876 877 878 879 880
	l2cap_chan_lock(chan);
	if (!chan->data) {
		err = -ENOTCONN;
		goto unlock;
	}

881
	smp = chan->data;
882 883 884 885

	switch (mgmt_op) {
	case MGMT_OP_USER_PASSKEY_REPLY:
		value = le32_to_cpu(passkey);
886
		memset(smp->tk, 0, sizeof(smp->tk));
887
		BT_DBG("PassKey: %d", value);
888
		put_unaligned_le32(value, smp->tk);
889 890
		/* Fall Through */
	case MGMT_OP_USER_CONFIRM_REPLY:
891
		set_bit(SMP_FLAG_TK_VALID, &smp->flags);
892 893 894
		break;
	case MGMT_OP_USER_PASSKEY_NEG_REPLY:
	case MGMT_OP_USER_CONFIRM_NEG_REPLY:
895
		smp_failure(conn, SMP_PASSKEY_ENTRY_FAILED);
896 897
		err = 0;
		goto unlock;
898
	default:
899
		smp_failure(conn, SMP_PASSKEY_ENTRY_FAILED);
900 901
		err = -EOPNOTSUPP;
		goto unlock;
902 903
	}

904 905
	err = 0;

906
	/* If it is our turn to send Pairing Confirm, do so now */
907 908 909 910 911
	if (test_bit(SMP_FLAG_CFM_PENDING, &smp->flags)) {
		u8 rsp = smp_confirm(smp);
		if (rsp)
			smp_failure(conn, rsp);
	}
912

913 914 915
unlock:
	l2cap_chan_unlock(chan);
	return err;
916 917
}

918
static u8 smp_cmd_pairing_req(struct l2cap_conn *conn, struct sk_buff *skb)
919
{
920
	struct smp_cmd_pairing rsp, *req = (void *) skb->data;
921
	struct l2cap_chan *chan = conn->smp;
922
	struct hci_dev *hdev = conn->hcon->hdev;
923
	struct smp_chan *smp;
924
	u8 key_size, auth, sec_level;
925
	int ret;
926 927 928

	BT_DBG("conn %p", conn);

929
	if (skb->len < sizeof(*req))
930
		return SMP_INVALID_PARAMS;
931

932
	if (conn->hcon->role != HCI_ROLE_SLAVE)
933 934
		return SMP_CMD_NOTSUPP;

935
	if (!chan->data)
936
		smp = smp_chan_create(conn);
937
	else
938
		smp = chan->data;
939

940 941
	if (!smp)
		return SMP_UNSPECIFIED;
942

943 944 945
	/* We didn't start the pairing, so match remote */
	auth = req->auth_req & AUTH_REQ_MASK;

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

950 951
	smp->preq[0] = SMP_CMD_PAIRING_REQ;
	memcpy(&smp->preq[1], req, sizeof(*req));
952
	skb_pull(skb, sizeof(*req));
953

954
	if (conn->hcon->io_capability == HCI_IO_NO_INPUT_OUTPUT)
955 956 957 958
		sec_level = BT_SECURITY_MEDIUM;
	else
		sec_level = authreq_to_seclevel(auth);

959 960
	if (sec_level > conn->hcon->pending_sec_level)
		conn->hcon->pending_sec_level = sec_level;
961

S
Stephen Hemminger 已提交
962
	/* If we need MITM check that it can be achieved */
963 964 965 966 967 968 969 970 971
	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;
	}

972
	build_pairing_cmd(conn, req, &rsp, auth);
973 974 975 976

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

978
	get_random_bytes(smp->prnd, sizeof(smp->prnd));
979

980 981
	smp->prsp[0] = SMP_CMD_PAIRING_RSP;
	memcpy(&smp->prsp[1], &rsp, sizeof(rsp));
982

983
	smp_send_cmd(conn, SMP_CMD_PAIRING_RSP, sizeof(rsp), &rsp);
984
	SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_CONFIRM);
985

986 987 988 989 990
	/* Request setup of TK */
	ret = tk_request(conn, 0, auth, rsp.io_capability, req->io_capability);
	if (ret)
		return SMP_UNSPECIFIED;

991
	return 0;
992 993
}

994
static u8 smp_cmd_pairing_rsp(struct l2cap_conn *conn, struct sk_buff *skb)
995
{
996
	struct smp_cmd_pairing *req, *rsp = (void *) skb->data;
997 998
	struct l2cap_chan *chan = conn->smp;
	struct smp_chan *smp = chan->data;
999
	u8 key_size, auth;
1000
	int ret;
1001 1002 1003

	BT_DBG("conn %p", conn);

1004
	if (skb->len < sizeof(*rsp))
1005
		return SMP_INVALID_PARAMS;
1006

1007
	if (conn->hcon->role != HCI_ROLE_MASTER)
1008 1009
		return SMP_CMD_NOTSUPP;

1010 1011
	skb_pull(skb, sizeof(*rsp));

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

1014 1015 1016 1017
	key_size = min(req->max_key_size, rsp->max_key_size);
	if (check_enc_key_size(conn, key_size))
		return SMP_ENC_KEY_SIZE;

1018 1019
	auth = rsp->auth_req & AUTH_REQ_MASK;

S
Stephen Hemminger 已提交
1020
	/* If we need MITM check that it can be achieved */
1021 1022 1023 1024 1025 1026 1027 1028 1029
	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;
	}

1030
	get_random_bytes(smp->prnd, sizeof(smp->prnd));
1031

1032 1033
	smp->prsp[0] = SMP_CMD_PAIRING_RSP;
	memcpy(&smp->prsp[1], rsp, sizeof(*rsp));
1034

1035 1036 1037 1038 1039
	/* 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;

1040
	auth |= req->auth_req;
1041

1042
	ret = tk_request(conn, 0, auth, req->io_capability, rsp->io_capability);
1043 1044 1045
	if (ret)
		return SMP_UNSPECIFIED;

1046
	set_bit(SMP_FLAG_CFM_PENDING, &smp->flags);
1047 1048

	/* Can't compose response until we have been confirmed */
1049
	if (test_bit(SMP_FLAG_TK_VALID, &smp->flags))
1050
		return smp_confirm(smp);
1051 1052

	return 0;
1053 1054
}

1055
static u8 smp_cmd_pairing_confirm(struct l2cap_conn *conn, struct sk_buff *skb)
1056
{
1057 1058
	struct l2cap_chan *chan = conn->smp;
	struct smp_chan *smp = chan->data;
1059

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

1062
	if (skb->len < sizeof(smp->pcnf))
1063
		return SMP_INVALID_PARAMS;
1064

1065 1066
	memcpy(smp->pcnf, skb->data, sizeof(smp->pcnf));
	skb_pull(skb, sizeof(smp->pcnf));
1067

1068
	if (conn->hcon->out) {
1069 1070
		smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM, sizeof(smp->prnd),
			     smp->prnd);
1071 1072 1073 1074 1075
		SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_RANDOM);
		return 0;
	}

	if (test_bit(SMP_FLAG_TK_VALID, &smp->flags))
1076
		return smp_confirm(smp);
1077
	else
1078
		set_bit(SMP_FLAG_CFM_PENDING, &smp->flags);
1079 1080

	return 0;
1081 1082
}

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

1088
	BT_DBG("conn %p", conn);
1089

1090
	if (skb->len < sizeof(smp->rrnd))
1091
		return SMP_INVALID_PARAMS;
1092

1093
	memcpy(smp->rrnd, skb->data, sizeof(smp->rrnd));
1094
	skb_pull(skb, sizeof(smp->rrnd));
1095

1096
	return smp_random(smp);
1097 1098
}

1099
static bool smp_ltk_encrypt(struct l2cap_conn *conn, u8 sec_level)
1100
{
1101
	struct smp_ltk *key;
1102 1103
	struct hci_conn *hcon = conn->hcon;

1104
	key = hci_find_ltk_by_addr(hcon->hdev, &hcon->dst, hcon->dst_type,
1105
				   hcon->role);
1106
	if (!key)
1107
		return false;
1108

1109
	if (smp_ltk_sec_level(key) < sec_level)
1110
		return false;
1111

1112
	if (test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &hcon->flags))
1113
		return true;
1114

1115 1116
	hci_le_start_enc(hcon, key->ediv, key->rand, key->val);
	hcon->enc_key_size = key->enc_size;
1117

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

1121
	return true;
1122
}
1123

1124 1125
bool smp_sufficient_security(struct hci_conn *hcon, u8 sec_level,
			     enum smp_key_pref key_pref)
1126 1127 1128 1129
{
	if (sec_level == BT_SECURITY_LOW)
		return true;

1130 1131 1132 1133 1134
	/* 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).
1135
	 */
1136 1137
	if (key_pref == SMP_USE_LTK &&
	    test_bit(HCI_CONN_STK_ENCRYPT, &hcon->flags) &&
1138
	    hci_find_ltk_by_addr(hcon->hdev, &hcon->dst, hcon->dst_type,
1139
				 hcon->role))
1140 1141
		return false;

1142 1143 1144 1145 1146 1147
	if (hcon->sec_level >= sec_level)
		return true;

	return false;
}

1148
static u8 smp_cmd_security_req(struct l2cap_conn *conn, struct sk_buff *skb)
1149 1150 1151
{
	struct smp_cmd_security_req *rp = (void *) skb->data;
	struct smp_cmd_pairing cp;
1152
	struct hci_conn *hcon = conn->hcon;
1153
	struct smp_chan *smp;
1154
	u8 sec_level, auth;
1155 1156 1157

	BT_DBG("conn %p", conn);

1158
	if (skb->len < sizeof(*rp))
1159
		return SMP_INVALID_PARAMS;
1160

1161
	if (hcon->role != HCI_ROLE_MASTER)
1162 1163
		return SMP_CMD_NOTSUPP;

1164 1165
	auth = rp->auth_req & AUTH_REQ_MASK;

1166
	if (hcon->io_capability == HCI_IO_NO_INPUT_OUTPUT)
1167 1168 1169 1170
		sec_level = BT_SECURITY_MEDIUM;
	else
		sec_level = authreq_to_seclevel(auth);

1171
	if (smp_sufficient_security(hcon, sec_level, SMP_USE_LTK))
1172 1173
		return 0;

1174 1175
	if (sec_level > hcon->pending_sec_level)
		hcon->pending_sec_level = sec_level;
1176

1177
	if (smp_ltk_encrypt(conn, hcon->pending_sec_level))
1178 1179
		return 0;

1180
	smp = smp_chan_create(conn);
1181 1182
	if (!smp)
		return SMP_UNSPECIFIED;
1183

1184
	if (!test_bit(HCI_BONDABLE, &hcon->hdev->dev_flags) &&
1185
	    (auth & SMP_AUTH_BONDING))
1186 1187
		return SMP_PAIRING_NOTSUPP;

1188 1189
	skb_pull(skb, sizeof(*rp));

1190
	memset(&cp, 0, sizeof(cp));
1191
	build_pairing_cmd(conn, &cp, NULL, auth);
1192

1193 1194
	smp->preq[0] = SMP_CMD_PAIRING_REQ;
	memcpy(&smp->preq[1], &cp, sizeof(cp));
1195

1196
	smp_send_cmd(conn, SMP_CMD_PAIRING_REQ, sizeof(cp), &cp);
1197
	SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_RSP);
1198

1199
	return 0;
1200 1201
}

1202
int smp_conn_security(struct hci_conn *hcon, __u8 sec_level)
1203
{
1204
	struct l2cap_conn *conn = hcon->l2cap_data;
1205
	struct l2cap_chan *chan;
1206
	struct smp_chan *smp;
1207
	__u8 authreq;
1208
	int ret;
1209

1210 1211
	BT_DBG("conn %p hcon %p level 0x%2.2x", conn, hcon, sec_level);

1212 1213 1214 1215
	/* This may be NULL if there's an unexpected disconnection */
	if (!conn)
		return 1;

1216 1217
	chan = conn->smp;

1218
	if (!test_bit(HCI_LE_ENABLED, &hcon->hdev->dev_flags))
1219 1220
		return 1;

1221
	if (smp_sufficient_security(hcon, sec_level, SMP_USE_LTK))
1222
		return 1;
1223

1224 1225 1226
	if (sec_level > hcon->pending_sec_level)
		hcon->pending_sec_level = sec_level;

1227
	if (hcon->role == HCI_ROLE_MASTER)
1228 1229
		if (smp_ltk_encrypt(conn, hcon->pending_sec_level))
			return 0;
1230

1231 1232 1233 1234 1235 1236 1237
	l2cap_chan_lock(chan);

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

1239
	smp = smp_chan_create(conn);
1240 1241 1242 1243
	if (!smp) {
		ret = 1;
		goto unlock;
	}
1244 1245

	authreq = seclevel_to_authreq(sec_level);
1246

1247 1248
	/* Require MITM if IO Capability allows or the security level
	 * requires it.
1249
	 */
1250
	if (hcon->io_capability != HCI_IO_NO_INPUT_OUTPUT ||
1251
	    hcon->pending_sec_level > BT_SECURITY_MEDIUM)
1252 1253
		authreq |= SMP_AUTH_MITM;

1254
	if (hcon->role == HCI_ROLE_MASTER) {
1255
		struct smp_cmd_pairing cp;
1256

1257
		build_pairing_cmd(conn, &cp, NULL, authreq);
1258 1259
		smp->preq[0] = SMP_CMD_PAIRING_REQ;
		memcpy(&smp->preq[1], &cp, sizeof(cp));
1260

1261
		smp_send_cmd(conn, SMP_CMD_PAIRING_REQ, sizeof(cp), &cp);
1262
		SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_RSP);
1263 1264
	} else {
		struct smp_cmd_security_req cp;
1265
		cp.auth_req = authreq;
1266
		smp_send_cmd(conn, SMP_CMD_SECURITY_REQ, sizeof(cp), &cp);
1267
		SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_REQ);
1268 1269
	}

1270
	set_bit(SMP_FLAG_INITIATOR, &smp->flags);
1271
	ret = 0;
1272

1273 1274 1275
unlock:
	l2cap_chan_unlock(chan);
	return ret;
1276 1277
}

1278 1279
static int smp_cmd_encrypt_info(struct l2cap_conn *conn, struct sk_buff *skb)
{
1280
	struct smp_cmd_encrypt_info *rp = (void *) skb->data;
1281 1282
	struct l2cap_chan *chan = conn->smp;
	struct smp_chan *smp = chan->data;
1283

1284 1285 1286
	BT_DBG("conn %p", conn);

	if (skb->len < sizeof(*rp))
1287
		return SMP_INVALID_PARAMS;
1288

1289
	SMP_ALLOW_CMD(smp, SMP_CMD_MASTER_IDENT);
1290

1291 1292
	skb_pull(skb, sizeof(*rp));

1293
	memcpy(smp->tk, rp->ltk, sizeof(smp->tk));
1294

1295 1296 1297 1298 1299
	return 0;
}

static int smp_cmd_master_ident(struct l2cap_conn *conn, struct sk_buff *skb)
{
1300
	struct smp_cmd_master_ident *rp = (void *) skb->data;
1301 1302
	struct l2cap_chan *chan = conn->smp;
	struct smp_chan *smp = chan->data;
1303 1304
	struct hci_dev *hdev = conn->hcon->hdev;
	struct hci_conn *hcon = conn->hcon;
1305
	struct smp_ltk *ltk;
1306
	u8 authenticated;
1307

1308 1309 1310
	BT_DBG("conn %p", conn);

	if (skb->len < sizeof(*rp))
1311
		return SMP_INVALID_PARAMS;
1312

1313 1314 1315
	/* Mark the information as received */
	smp->remote_key_dist &= ~SMP_DIST_ENC_KEY;

1316 1317
	if (smp->remote_key_dist & SMP_DIST_ID_KEY)
		SMP_ALLOW_CMD(smp, SMP_CMD_IDENT_INFO);
1318 1319
	else if (smp->remote_key_dist & SMP_DIST_SIGN)
		SMP_ALLOW_CMD(smp, SMP_CMD_SIGN_INFO);
1320

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

1323
	authenticated = (hcon->sec_level == BT_SECURITY_HIGH);
1324
	ltk = hci_add_ltk(hdev, &hcon->dst, hcon->dst_type, SMP_LTK,
1325 1326 1327
			  authenticated, smp->tk, smp->enc_key_size,
			  rp->ediv, rp->rand);
	smp->ltk = ltk;
1328
	if (!(smp->remote_key_dist & KEY_DIST_MASK))
1329
		smp_distribute_keys(smp);
1330 1331 1332 1333

	return 0;
}

1334 1335 1336
static int smp_cmd_ident_info(struct l2cap_conn *conn, struct sk_buff *skb)
{
	struct smp_cmd_ident_info *info = (void *) skb->data;
1337 1338
	struct l2cap_chan *chan = conn->smp;
	struct smp_chan *smp = chan->data;
1339 1340 1341 1342

	BT_DBG("");

	if (skb->len < sizeof(*info))
1343
		return SMP_INVALID_PARAMS;
1344

1345
	SMP_ALLOW_CMD(smp, SMP_CMD_IDENT_ADDR_INFO);
1346

1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357
	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;
1358 1359
	struct l2cap_chan *chan = conn->smp;
	struct smp_chan *smp = chan->data;
1360 1361 1362 1363 1364 1365
	struct hci_conn *hcon = conn->hcon;
	bdaddr_t rpa;

	BT_DBG("");

	if (skb->len < sizeof(*info))
1366
		return SMP_INVALID_PARAMS;
1367

1368 1369 1370
	/* Mark the information as received */
	smp->remote_key_dist &= ~SMP_DIST_ID_KEY;

1371 1372 1373
	if (smp->remote_key_dist & SMP_DIST_SIGN)
		SMP_ALLOW_CMD(smp, SMP_CMD_SIGN_INFO);

1374 1375
	skb_pull(skb, sizeof(*info));

1376 1377 1378 1379 1380 1381 1382 1383 1384
	/* 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");
1385
		goto distribute;
1386 1387
	}

1388 1389 1390 1391 1392 1393 1394 1395
	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);

1396 1397
	smp->remote_irk = hci_add_irk(conn->hcon->hdev, &smp->id_addr,
				      smp->id_addr_type, smp->irk, &rpa);
1398

1399
distribute:
1400 1401
	if (!(smp->remote_key_dist & KEY_DIST_MASK))
		smp_distribute_keys(smp);
1402 1403 1404 1405

	return 0;
}

1406 1407 1408
static int smp_cmd_sign_info(struct l2cap_conn *conn, struct sk_buff *skb)
{
	struct smp_cmd_sign_info *rp = (void *) skb->data;
1409 1410
	struct l2cap_chan *chan = conn->smp;
	struct smp_chan *smp = chan->data;
1411 1412 1413 1414 1415
	struct smp_csrk *csrk;

	BT_DBG("conn %p", conn);

	if (skb->len < sizeof(*rp))
1416
		return SMP_INVALID_PARAMS;
1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428

	/* 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;
1429
	smp_distribute_keys(smp);
1430 1431 1432 1433

	return 0;
}

1434
static int smp_sig_channel(struct l2cap_chan *chan, struct sk_buff *skb)
1435
{
1436
	struct l2cap_conn *conn = chan->conn;
1437
	struct hci_conn *hcon = conn->hcon;
1438
	struct smp_chan *smp;
1439
	__u8 code, reason;
1440 1441
	int err = 0;

1442 1443
	if (hcon->type != LE_LINK) {
		kfree_skb(skb);
1444
		return 0;
1445 1446
	}

1447
	if (skb->len < 1)
1448 1449
		return -EILSEQ;

1450
	if (!test_bit(HCI_LE_ENABLED, &hcon->hdev->dev_flags)) {
1451 1452 1453 1454
		reason = SMP_PAIRING_NOTSUPP;
		goto done;
	}

1455
	code = skb->data[0];
1456 1457
	skb_pull(skb, sizeof(code));

1458 1459 1460 1461 1462
	smp = chan->data;

	if (code > SMP_CMD_MAX)
		goto drop;

1463
	if (smp && !test_and_clear_bit(code, &smp->allow_cmd))
1464 1465 1466 1467
		goto drop;

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

1472 1473
	switch (code) {
	case SMP_CMD_PAIRING_REQ:
1474
		reason = smp_cmd_pairing_req(conn, skb);
1475 1476 1477
		break;

	case SMP_CMD_PAIRING_FAIL:
1478
		smp_failure(conn, 0);
1479
		err = -EPERM;
1480 1481 1482
		break;

	case SMP_CMD_PAIRING_RSP:
1483
		reason = smp_cmd_pairing_rsp(conn, skb);
1484 1485 1486
		break;

	case SMP_CMD_SECURITY_REQ:
1487
		reason = smp_cmd_security_req(conn, skb);
1488 1489
		break;

1490
	case SMP_CMD_PAIRING_CONFIRM:
1491
		reason = smp_cmd_pairing_confirm(conn, skb);
1492 1493
		break;

1494
	case SMP_CMD_PAIRING_RANDOM:
1495
		reason = smp_cmd_pairing_random(conn, skb);
1496 1497
		break;

1498
	case SMP_CMD_ENCRYPT_INFO:
1499 1500 1501
		reason = smp_cmd_encrypt_info(conn, skb);
		break;

1502
	case SMP_CMD_MASTER_IDENT:
1503 1504 1505
		reason = smp_cmd_master_ident(conn, skb);
		break;

1506
	case SMP_CMD_IDENT_INFO:
1507 1508 1509
		reason = smp_cmd_ident_info(conn, skb);
		break;

1510
	case SMP_CMD_IDENT_ADDR_INFO:
1511 1512 1513
		reason = smp_cmd_ident_addr_info(conn, skb);
		break;

1514
	case SMP_CMD_SIGN_INFO:
1515
		reason = smp_cmd_sign_info(conn, skb);
1516 1517
		break;

1518 1519 1520
	default:
		BT_DBG("Unknown command code 0x%2.2x", code);
		reason = SMP_CMD_NOTSUPP;
1521
		goto done;
1522 1523
	}

1524
done:
1525 1526 1527
	if (!err) {
		if (reason)
			smp_failure(conn, reason);
1528
		kfree_skb(skb);
1529 1530
	}

1531
	return err;
1532 1533 1534 1535 1536 1537

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

1540 1541 1542 1543 1544 1545
static void smp_teardown_cb(struct l2cap_chan *chan, int err)
{
	struct l2cap_conn *conn = chan->conn;

	BT_DBG("chan %p", chan);

1546
	if (chan->data)
1547 1548
		smp_chan_destroy(conn);

1549 1550 1551 1552
	conn->smp = NULL;
	l2cap_chan_put(chan);
}

1553 1554
static void smp_resume_cb(struct l2cap_chan *chan)
{
1555
	struct smp_chan *smp = chan->data;
1556 1557 1558 1559 1560
	struct l2cap_conn *conn = chan->conn;
	struct hci_conn *hcon = conn->hcon;

	BT_DBG("chan %p", chan);

1561 1562
	if (!smp)
		return;
1563

1564 1565 1566
	if (!test_bit(HCI_CONN_ENCRYPT, &hcon->flags))
		return;

1567 1568
	cancel_delayed_work(&smp->security_timer);

1569
	smp_distribute_keys(smp);
1570 1571
}

1572 1573 1574 1575 1576 1577 1578 1579 1580 1581
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);
}

1582 1583 1584 1585 1586 1587 1588 1589
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) {
1590
		struct smp_chan *smp = chan->data;
1591

1592 1593
		if (smp)
			cancel_delayed_work_sync(&smp->security_timer);
1594

1595
		hci_disconnect(chan->conn->hcon, HCI_ERROR_AUTH_FAILURE);
1596 1597 1598 1599 1600
	}

	return err;
}

1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619
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,
1620
	.recv			= smp_recv_cb,
1621 1622
	.alloc_skb		= smp_alloc_skb_cb,
	.teardown		= smp_teardown_cb,
1623
	.resume			= smp_resume_cb,
1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652

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

1653 1654 1655 1656 1657 1658 1659
	/* 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);

1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683
	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,
};

1684 1685
int smp_register(struct hci_dev *hdev)
{
1686
	struct l2cap_chan *chan;
1687
	struct crypto_blkcipher	*tfm_aes;
1688

1689 1690
	BT_DBG("%s", hdev->name);

J
Johan Hedberg 已提交
1691
	tfm_aes = crypto_alloc_blkcipher("ecb(aes)", 0, 0);
1692 1693
	if (IS_ERR(tfm_aes)) {
		int err = PTR_ERR(tfm_aes);
1694 1695 1696 1697
		BT_ERR("Unable to create crypto context");
		return err;
	}

1698 1699
	chan = l2cap_chan_create();
	if (!chan) {
1700
		crypto_free_blkcipher(tfm_aes);
1701 1702 1703
		return -ENOMEM;
	}

1704 1705
	chan->data = tfm_aes;

1706
	l2cap_add_scid(chan, L2CAP_CID_SMP);
1707 1708 1709 1710 1711 1712 1713 1714 1715 1716

	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;

1717 1718 1719
	/* Set correct nesting level for a parent/listening channel */
	atomic_set(&chan->nesting, L2CAP_NESTING_PARENT);

1720 1721
	hdev->smp_data = chan;

1722 1723 1724 1725 1726
	return 0;
}

void smp_unregister(struct hci_dev *hdev)
{
1727
	struct l2cap_chan *chan = hdev->smp_data;
1728
	struct crypto_blkcipher *tfm_aes;
1729 1730 1731 1732 1733

	if (!chan)
		return;

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

1735 1736 1737 1738
	tfm_aes = chan->data;
	if (tfm_aes) {
		chan->data = NULL;
		crypto_free_blkcipher(tfm_aes);
1739
	}
1740 1741 1742

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