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

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

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

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

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

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

#include "smp.h"
33

34
#define SMP_TIMEOUT	msecs_to_jiffies(30000)
35

36 37
#define AUTH_REQ_MASK   0x07

38 39 40 41 42 43 44
enum {
	SMP_FLAG_TK_VALID,
	SMP_FLAG_CFM_PENDING,
	SMP_FLAG_MITM_AUTH,
	SMP_FLAG_COMPLETE,
	SMP_FLAG_INITIATOR,
};
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63

struct smp_chan {
	struct l2cap_conn *conn;
	u8		preq[7]; /* SMP Pairing Request */
	u8		prsp[7]; /* SMP Pairing Response */
	u8		prnd[16]; /* SMP Pairing Random (local) */
	u8		rrnd[16]; /* SMP Pairing Random (remote) */
	u8		pcnf[16]; /* SMP Pairing Confirm */
	u8		tk[16]; /* SMP Temporary Key */
	u8		enc_key_size;
	u8		remote_key_dist;
	bdaddr_t	id_addr;
	u8		id_addr_type;
	u8		irk[16];
	struct smp_csrk	*csrk;
	struct smp_csrk	*slave_csrk;
	struct smp_ltk	*ltk;
	struct smp_ltk	*slave_ltk;
	struct smp_irk	*remote_irk;
64
	unsigned long	flags;
65 66

	struct crypto_blkcipher	*tfm_aes;
67 68
};

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

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

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

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

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

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

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

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

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

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

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

113 114 115
	return err;
}

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

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

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

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

	return 0;
}

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

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

	tfm = chan->data;

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

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

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

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

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

	tfm = chan->data;

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

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

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

	BT_DBG("RPA %pMR", rpa);

	return 0;
}

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

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

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

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

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

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

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

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

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

	return err;
}

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

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

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

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

	return err;
}

251
static struct sk_buff *smp_build_cmd(struct l2cap_conn *conn, u8 code,
252
				     u16 dlen, void *data)
253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268
{
	struct sk_buff *skb;
	struct l2cap_hdr *lh;
	int len;

	len = L2CAP_HDR_SIZE + sizeof(code) + dlen;

	if (len > conn->mtu)
		return NULL;

	skb = bt_skb_alloc(len, GFP_ATOMIC);
	if (!skb)
		return NULL;

	lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
	lh->len = cpu_to_le16(sizeof(code) + dlen);
269
	lh->cid = cpu_to_le16(L2CAP_CID_SMP);
270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286

	memcpy(skb_put(skb, sizeof(code)), &code, sizeof(code));

	memcpy(skb_put(skb, dlen), data, dlen);

	return skb;
}

static void smp_send_cmd(struct l2cap_conn *conn, u8 code, u16 len, void *data)
{
	struct sk_buff *skb = smp_build_cmd(conn, code, len, data);

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

	if (!skb)
		return;

287 288
	skb->priority = HCI_PRIO_MAX;
	hci_send_acl(conn->hchan, skb, 0);
289

290
	cancel_delayed_work_sync(&conn->security_timer);
291
	schedule_delayed_work(&conn->security_timer, SMP_TIMEOUT);
292 293
}

294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313
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;
	}
}

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

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

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

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

337 338 339 340
	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;
341 342
		req->init_key_dist = local_dist;
		req->resp_key_dist = remote_dist;
343
		req->auth_req = (authreq & AUTH_REQ_MASK);
344 345

		smp->remote_key_dist = remote_dist;
346 347 348 349 350 351
		return;
	}

	rsp->io_capability = conn->hcon->io_capability;
	rsp->oob_flag = SMP_OOB_NOT_PRESENT;
	rsp->max_key_size = SMP_MAX_ENC_KEY_SIZE;
352 353
	rsp->init_key_dist = req->init_key_dist & remote_dist;
	rsp->resp_key_dist = req->resp_key_dist & local_dist;
354
	rsp->auth_req = (authreq & AUTH_REQ_MASK);
355 356

	smp->remote_key_dist = rsp->init_key_dist;
357 358
}

359 360
static u8 check_enc_key_size(struct l2cap_conn *conn, __u8 max_key_size)
{
361 362
	struct smp_chan *smp = conn->smp_chan;

363
	if ((max_key_size > SMP_MAX_ENC_KEY_SIZE) ||
364
	    (max_key_size < SMP_MIN_ENC_KEY_SIZE))
365 366
		return SMP_ENC_KEY_SIZE;

367
	smp->enc_key_size = max_key_size;
368 369 370 371

	return 0;
}

372
static void smp_failure(struct l2cap_conn *conn, u8 reason)
373
{
374 375
	struct hci_conn *hcon = conn->hcon;

376
	if (reason)
377
		smp_send_cmd(conn, SMP_CMD_PAIRING_FAIL, sizeof(reason),
378
			     &reason);
379

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

384 385
	cancel_delayed_work_sync(&conn->security_timer);

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

390 391 392 393 394 395 396 397 398 399 400 401 402 403 404
#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     },
};

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

	return gen_method[remote_io][local_io];
}

417 418 419 420 421 422 423 424 425 426 427
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;
	struct smp_chan *smp = conn->smp_chan;
	u8 method;
	u32 passkey = 0;
	int ret = 0;

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

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

432 433 434 435 436 437
	/* 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.
	 */
438
	if (!(auth & SMP_AUTH_MITM))
439
		method = JUST_CFM;
440
	else
441
		method = get_auth_method(smp, local_io, remote_io);
442

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

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

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

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

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

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

	hci_dev_lock(hcon->hdev);

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

	hci_dev_unlock(hcon->hdev);

	return ret;
}

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

	BT_DBG("conn %p", conn);

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

515
	clear_bit(SMP_FLAG_CFM_PENDING, &smp->flags);
516

517 518
	smp_send_cmd(smp->conn, SMP_CMD_PAIRING_CONFIRM, sizeof(cp), &cp);

519
	return 0;
520 521
}

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

529
	if (IS_ERR_OR_NULL(smp->tfm_aes))
530
		return SMP_UNSPECIFIED;
531 532 533

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

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

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

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

550
		smp_s1(smp, smp->tk, smp->rrnd, smp->prnd, stk);
551

552
		memset(stk + smp->enc_key_size, 0,
553
		       SMP_MAX_ENC_KEY_SIZE - smp->enc_key_size);
554

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

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

566 567
		smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM, sizeof(smp->prnd),
			     smp->prnd);
568

569
		smp_s1(smp, smp->tk, smp->prnd, smp->rrnd, stk);
570

571
		memset(stk + smp->enc_key_size, 0,
572
		       SMP_MAX_ENC_KEY_SIZE - smp->enc_key_size);
573

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

579 580 581 582
		/* 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).
		 */
583
		hci_add_ltk(hcon->hdev, &hcon->dst, hcon->dst_type,
584
			    SMP_STK, auth, stk, smp->enc_key_size, ediv, rand);
585 586
	}

587
	return 0;
588 589 590 591 592 593
}

static struct smp_chan *smp_chan_create(struct l2cap_conn *conn)
{
	struct smp_chan *smp;

594
	smp = kzalloc(sizeof(*smp), GFP_ATOMIC);
595 596
	if (!smp) {
		clear_bit(HCI_CONN_LE_SMP_PEND, &conn->hcon->flags);
597
		return NULL;
598
	}
599

600 601 602 603
	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);
604
		clear_bit(HCI_CONN_LE_SMP_PEND, &conn->hcon->flags);
605 606 607
		return NULL;
	}

608 609 610 611 612 613 614 615 616 617
	smp->conn = conn;
	conn->smp_chan = smp;

	hci_conn_hold(conn->hcon);

	return smp;
}

void smp_chan_destroy(struct l2cap_conn *conn)
{
618
	struct smp_chan *smp = conn->smp_chan;
619
	bool complete;
620

621
	BUG_ON(!smp);
622

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

626 627 628
	kfree(smp->csrk);
	kfree(smp->slave_csrk);

629 630
	crypto_free_blkcipher(smp->tfm_aes);

631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648
	/* If pairing failed clean up any keys we might have */
	if (!complete) {
		if (smp->ltk) {
			list_del(&smp->ltk->list);
			kfree(smp->ltk);
		}

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

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

649 650
	kfree(smp);
	conn->smp_chan = NULL;
651
	hci_conn_drop(conn->hcon);
652 653
}

654 655
int smp_user_confirm_reply(struct hci_conn *hcon, u16 mgmt_op, __le32 passkey)
{
656
	struct l2cap_conn *conn = hcon->l2cap_data;
657 658 659 660 661
	struct smp_chan *smp;
	u32 value;

	BT_DBG("");

662
	if (!conn || !test_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags))
663 664 665 666 667 668 669
		return -ENOTCONN;

	smp = conn->smp_chan;

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

	/* If it is our turn to send Pairing Confirm, do so now */
687 688 689 690 691
	if (test_bit(SMP_FLAG_CFM_PENDING, &smp->flags)) {
		u8 rsp = smp_confirm(smp);
		if (rsp)
			smp_failure(conn, rsp);
	}
692 693 694 695

	return 0;
}

696
static u8 smp_cmd_pairing_req(struct l2cap_conn *conn, struct sk_buff *skb)
697
{
698
	struct smp_cmd_pairing rsp, *req = (void *) skb->data;
699
	struct hci_dev *hdev = conn->hcon->hdev;
700
	struct smp_chan *smp;
701
	u8 key_size, auth, sec_level;
702
	int ret;
703 704 705

	BT_DBG("conn %p", conn);

706
	if (skb->len < sizeof(*req))
707
		return SMP_INVALID_PARAMS;
708

709
	if (conn->hcon->role != HCI_ROLE_SLAVE)
710 711
		return SMP_CMD_NOTSUPP;

712
	if (!test_and_set_bit(HCI_CONN_LE_SMP_PEND, &conn->hcon->flags))
713
		smp = smp_chan_create(conn);
714 715
	else
		smp = conn->smp_chan;
716

717 718
	if (!smp)
		return SMP_UNSPECIFIED;
719

720
	if (!test_bit(HCI_BONDABLE, &hdev->dev_flags) &&
721 722 723
	    (req->auth_req & SMP_AUTH_BONDING))
		return SMP_PAIRING_NOTSUPP;

724 725
	smp->preq[0] = SMP_CMD_PAIRING_REQ;
	memcpy(&smp->preq[1], req, sizeof(*req));
726
	skb_pull(skb, sizeof(*req));
727

728
	/* We didn't start the pairing, so match remote */
729
	auth = req->auth_req;
730

731 732 733
	sec_level = authreq_to_seclevel(auth);
	if (sec_level > conn->hcon->pending_sec_level)
		conn->hcon->pending_sec_level = sec_level;
734

735 736 737 738 739 740 741 742 743 744
	/* If we need MITM check that it can be acheived */
	if (conn->hcon->pending_sec_level >= BT_SECURITY_HIGH) {
		u8 method;

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

745
	build_pairing_cmd(conn, req, &rsp, auth);
746 747 748 749

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

751
	get_random_bytes(smp->prnd, sizeof(smp->prnd));
752

753 754
	smp->prsp[0] = SMP_CMD_PAIRING_RSP;
	memcpy(&smp->prsp[1], &rsp, sizeof(rsp));
755

756
	smp_send_cmd(conn, SMP_CMD_PAIRING_RSP, sizeof(rsp), &rsp);
757

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

763
	return 0;
764 765
}

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

	BT_DBG("conn %p", conn);

775
	if (skb->len < sizeof(*rsp))
776
		return SMP_INVALID_PARAMS;
777

778
	if (conn->hcon->role != HCI_ROLE_MASTER)
779 780
		return SMP_CMD_NOTSUPP;

781 782
	skb_pull(skb, sizeof(*rsp));

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

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

789 790 791 792 793 794 795 796 797 798
	/* If we need MITM check that it can be acheived */
	if (conn->hcon->pending_sec_level >= BT_SECURITY_HIGH) {
		u8 method;

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

799
	get_random_bytes(smp->prnd, sizeof(smp->prnd));
800

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

804 805 806 807 808
	/* 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;

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

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

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

819
	set_bit(SMP_FLAG_CFM_PENDING, &smp->flags);
820 821

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

	return 0;
826 827
}

828
static u8 smp_cmd_pairing_confirm(struct l2cap_conn *conn, struct sk_buff *skb)
829
{
830
	struct smp_chan *smp = conn->smp_chan;
831

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

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

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

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

	return 0;
849 850
}

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

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

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

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

863
	return smp_random(smp);
864 865
}

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

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

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

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

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

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

888
	return true;
889
}
890

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

896 897 898
	/* If we're encrypted with an STK always claim insufficient
	 * security. This way we allow the connection to be re-encrypted
	 * with an LTK, even if the LTK provides the same level of
899 900
	 * security. Only exception is if we don't have an LTK (e.g.
	 * because of key distribution bits).
901
	 */
902 903
	if (test_bit(HCI_CONN_STK_ENCRYPT, &hcon->flags) &&
	    hci_find_ltk_by_addr(hcon->hdev, &hcon->dst, hcon->dst_type,
904
				 hcon->role))
905 906
		return false;

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

	return false;
}

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

	BT_DBG("conn %p", conn);

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

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

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

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

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

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

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

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

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

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

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

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

960
	return 0;
961 962
}

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

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

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

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

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

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

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

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

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

	authreq = seclevel_to_authreq(sec_level);
996

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

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

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

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

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

1020 1021 1022
	return 0;
}

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

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

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

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

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

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

1041 1042 1043 1044 1045
	return 0;
}

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

1053 1054 1055
	BT_DBG("conn %p", conn);

	if (skb->len < sizeof(*rp))
1056
		return SMP_INVALID_PARAMS;
1057

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

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

1065
	skb_pull(skb, sizeof(*rp));
1066

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

	return 0;
}

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

	BT_DBG("");

	if (skb->len < sizeof(*info))
1088
		return SMP_INVALID_PARAMS;
1089

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

1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111
	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;
	struct smp_chan *smp = conn->smp_chan;
	struct hci_conn *hcon = conn->hcon;
	bdaddr_t rpa;

	BT_DBG("");

	if (skb->len < sizeof(*info))
1112
		return SMP_INVALID_PARAMS;
1113

1114 1115 1116 1117
	/* Ignore this PDU if it wasn't requested */
	if (!(smp->remote_key_dist & SMP_DIST_ID_KEY))
		return 0;

1118 1119 1120
	/* Mark the information as received */
	smp->remote_key_dist &= ~SMP_DIST_ID_KEY;

1121 1122
	skb_pull(skb, sizeof(*info));

1123 1124
	hci_dev_lock(hcon->hdev);

1125 1126 1127 1128 1129 1130 1131 1132 1133
	/* 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");
1134
		goto distribute;
1135 1136
	}

1137 1138 1139 1140 1141 1142 1143 1144
	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);

1145 1146
	smp->remote_irk = hci_add_irk(conn->hcon->hdev, &smp->id_addr,
				      smp->id_addr_type, smp->irk, &rpa);
1147

1148
distribute:
1149
	smp_distribute_keys(conn);
1150

1151 1152
	hci_dev_unlock(hcon->hdev);

1153 1154 1155
	return 0;
}

1156 1157 1158 1159 1160 1161 1162 1163 1164 1165
static int smp_cmd_sign_info(struct l2cap_conn *conn, struct sk_buff *skb)
{
	struct smp_cmd_sign_info *rp = (void *) skb->data;
	struct smp_chan *smp = conn->smp_chan;
	struct hci_dev *hdev = conn->hcon->hdev;
	struct smp_csrk *csrk;

	BT_DBG("conn %p", conn);

	if (skb->len < sizeof(*rp))
1166
		return SMP_INVALID_PARAMS;
1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183

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

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

	skb_pull(skb, sizeof(*rp));

	hci_dev_lock(hdev);
	csrk = kzalloc(sizeof(*csrk), GFP_KERNEL);
	if (csrk) {
		csrk->master = 0x01;
		memcpy(csrk->val, rp->csrk, sizeof(csrk->val));
	}
	smp->csrk = csrk;
1184
	smp_distribute_keys(conn);
1185 1186 1187 1188 1189
	hci_dev_unlock(hdev);

	return 0;
}

1190 1191
int smp_sig_channel(struct l2cap_conn *conn, struct sk_buff *skb)
{
1192
	struct hci_conn *hcon = conn->hcon;
1193
	__u8 code, reason;
1194 1195
	int err = 0;

1196 1197
	if (hcon->type != LE_LINK) {
		kfree_skb(skb);
1198
		return 0;
1199 1200
	}

1201 1202 1203 1204 1205
	if (skb->len < 1) {
		kfree_skb(skb);
		return -EILSEQ;
	}

1206
	if (!test_bit(HCI_LE_ENABLED, &hcon->hdev->dev_flags)) {
1207
		err = -EOPNOTSUPP;
1208 1209 1210 1211
		reason = SMP_PAIRING_NOTSUPP;
		goto done;
	}

1212
	code = skb->data[0];
1213 1214
	skb_pull(skb, sizeof(code));

1215 1216 1217 1218 1219 1220 1221
	/*
	 * The SMP context must be initialized for all other PDUs except
	 * pairing and security requests. If we get any other PDU when
	 * not initialized simply disconnect (done if this function
	 * returns an error).
	 */
	if (code != SMP_CMD_PAIRING_REQ && code != SMP_CMD_SECURITY_REQ &&
1222
	    !test_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags)) {
1223 1224
		BT_ERR("Unexpected SMP command 0x%02x. Disconnecting.", code);
		kfree_skb(skb);
1225
		return -EOPNOTSUPP;
1226 1227
	}

1228 1229
	switch (code) {
	case SMP_CMD_PAIRING_REQ:
1230
		reason = smp_cmd_pairing_req(conn, skb);
1231 1232 1233
		break;

	case SMP_CMD_PAIRING_FAIL:
1234
		smp_failure(conn, 0);
1235 1236
		reason = 0;
		err = -EPERM;
1237 1238 1239
		break;

	case SMP_CMD_PAIRING_RSP:
1240
		reason = smp_cmd_pairing_rsp(conn, skb);
1241 1242 1243
		break;

	case SMP_CMD_SECURITY_REQ:
1244
		reason = smp_cmd_security_req(conn, skb);
1245 1246
		break;

1247
	case SMP_CMD_PAIRING_CONFIRM:
1248
		reason = smp_cmd_pairing_confirm(conn, skb);
1249 1250
		break;

1251
	case SMP_CMD_PAIRING_RANDOM:
1252
		reason = smp_cmd_pairing_random(conn, skb);
1253 1254
		break;

1255
	case SMP_CMD_ENCRYPT_INFO:
1256 1257 1258
		reason = smp_cmd_encrypt_info(conn, skb);
		break;

1259
	case SMP_CMD_MASTER_IDENT:
1260 1261 1262
		reason = smp_cmd_master_ident(conn, skb);
		break;

1263
	case SMP_CMD_IDENT_INFO:
1264 1265 1266
		reason = smp_cmd_ident_info(conn, skb);
		break;

1267
	case SMP_CMD_IDENT_ADDR_INFO:
1268 1269 1270
		reason = smp_cmd_ident_addr_info(conn, skb);
		break;

1271
	case SMP_CMD_SIGN_INFO:
1272
		reason = smp_cmd_sign_info(conn, skb);
1273 1274
		break;

1275 1276 1277 1278 1279
	default:
		BT_DBG("Unknown command code 0x%2.2x", code);

		reason = SMP_CMD_NOTSUPP;
		err = -EOPNOTSUPP;
1280
		goto done;
1281 1282
	}

1283 1284
done:
	if (reason)
1285
		smp_failure(conn, reason);
1286

1287 1288 1289
	kfree_skb(skb);
	return err;
}
1290

1291 1292 1293 1294 1295
static void smp_notify_keys(struct l2cap_conn *conn)
{
	struct smp_chan *smp = conn->smp_chan;
	struct hci_conn *hcon = conn->hcon;
	struct hci_dev *hdev = hcon->hdev;
1296 1297 1298
	struct smp_cmd_pairing *req = (void *) &smp->preq[1];
	struct smp_cmd_pairing *rsp = (void *) &smp->prsp[1];
	bool persistent;
1299

1300
	if (smp->remote_irk) {
1301
		mgmt_new_irk(hdev, smp->remote_irk);
1302 1303 1304 1305 1306 1307 1308
		/* Now that user space can be considered to know the
		 * identity address track the connection based on it
		 * from now on.
		 */
		bacpy(&hcon->dst, &smp->remote_irk->bdaddr);
		hcon->dst_type = smp->remote_irk->addr_type;
		l2cap_conn_update_id_addr(hcon);
1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324

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

1327 1328 1329 1330 1331
	/* 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);

1332 1333 1334
	if (smp->csrk) {
		smp->csrk->bdaddr_type = hcon->dst_type;
		bacpy(&smp->csrk->bdaddr, &hcon->dst);
1335
		mgmt_new_csrk(hdev, smp->csrk, persistent);
1336 1337 1338 1339 1340
	}

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

1344 1345 1346
	if (smp->ltk) {
		smp->ltk->bdaddr_type = hcon->dst_type;
		bacpy(&smp->ltk->bdaddr, &hcon->dst);
1347
		mgmt_new_ltk(hdev, smp->ltk, persistent);
1348 1349 1350 1351 1352
	}

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

1357
int smp_distribute_keys(struct l2cap_conn *conn)
1358 1359
{
	struct smp_cmd_pairing *req, *rsp;
1360
	struct smp_chan *smp = conn->smp_chan;
1361 1362
	struct hci_conn *hcon = conn->hcon;
	struct hci_dev *hdev = hcon->hdev;
1363 1364
	__u8 *keydist;

1365
	BT_DBG("conn %p", conn);
1366

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

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

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

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

1378
	if (hcon->out) {
1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390
		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;
1391
		struct smp_ltk *ltk;
1392
		u8 authenticated;
1393
		__le16 ediv;
1394
		__le64 rand;
1395 1396 1397

		get_random_bytes(enc.ltk, sizeof(enc.ltk));
		get_random_bytes(&ediv, sizeof(ediv));
1398
		get_random_bytes(&rand, sizeof(rand));
1399 1400 1401

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

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

1408
		ident.ediv = ediv;
1409
		ident.rand = rand;
1410 1411 1412 1413 1414 1415 1416 1417 1418 1419

		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;

1420
		memcpy(idinfo.irk, hdev->irk, sizeof(idinfo.irk));
1421 1422 1423

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

1424 1425 1426 1427 1428 1429
		/* 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.
		 */
1430
		bacpy(&addrinfo.bdaddr, &hcon->src);
1431
		addrinfo.addr_type = hcon->src_type;
1432 1433

		smp_send_cmd(conn, SMP_CMD_IDENT_ADDR_INFO, sizeof(addrinfo),
1434
			     &addrinfo);
1435 1436 1437 1438 1439 1440

		*keydist &= ~SMP_DIST_ID_KEY;
	}

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

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

1446 1447 1448 1449 1450 1451 1452
		csrk = kzalloc(sizeof(*csrk), GFP_KERNEL);
		if (csrk) {
			csrk->master = 0x00;
			memcpy(csrk->val, sign.csrk, sizeof(csrk->val));
		}
		smp->slave_csrk = csrk;

1453 1454 1455 1456 1457
		smp_send_cmd(conn, SMP_CMD_SIGN_INFO, sizeof(sign), &sign);

		*keydist &= ~SMP_DIST_SIGN;
	}

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

1462 1463
	clear_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags);
	cancel_delayed_work_sync(&conn->security_timer);
1464
	set_bit(SMP_FLAG_COMPLETE, &smp->flags);
1465
	smp_notify_keys(conn);
1466

1467
	smp_chan_destroy(conn);
1468

1469 1470
	return 0;
}
1471

1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567
static void smp_teardown_cb(struct l2cap_chan *chan, int err)
{
	struct l2cap_conn *conn = chan->conn;

	BT_DBG("chan %p", chan);

	conn->smp = NULL;
	l2cap_chan_put(chan);
}

static void smp_ready_cb(struct l2cap_chan *chan)
{
	struct l2cap_conn *conn = chan->conn;

	BT_DBG("chan %p", chan);

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

static struct sk_buff *smp_alloc_skb_cb(struct l2cap_chan *chan,
					unsigned long hdr_len,
					unsigned long len, int nb)
{
	struct sk_buff *skb;

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

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

	return skb;
}

static const struct l2cap_ops smp_chan_ops = {
	.name			= "Security Manager",
	.ready			= smp_ready_cb,
	.alloc_skb		= smp_alloc_skb_cb,
	.teardown		= smp_teardown_cb,

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

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

	BT_DBG("pchan %p", pchan);

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

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

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

	return chan;
}

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

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

1568 1569
int smp_register(struct hci_dev *hdev)
{
1570
	struct l2cap_chan *chan;
1571
	struct crypto_blkcipher	*tfm_aes;
1572

1573 1574
	BT_DBG("%s", hdev->name);

1575 1576 1577
	tfm_aes = crypto_alloc_blkcipher("ecb(aes)", 0, CRYPTO_ALG_ASYNC);
	if (IS_ERR(tfm_aes)) {
		int err = PTR_ERR(tfm_aes);
1578 1579 1580 1581
		BT_ERR("Unable to create crypto context");
		return err;
	}

1582 1583
	chan = l2cap_chan_create();
	if (!chan) {
1584
		crypto_free_blkcipher(tfm_aes);
1585 1586 1587
		return -ENOMEM;
	}

1588 1589
	chan->data = tfm_aes;

1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605
	/* FIXME: Using reserved 0x1f value for now - to be changed to
	 * L2CAP_CID_SMP once all functionality is in place.
	 */
	l2cap_add_scid(chan, 0x1f);

	l2cap_chan_set_defaults(chan);

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

	hdev->smp_data = chan;

1606 1607 1608 1609 1610
	return 0;
}

void smp_unregister(struct hci_dev *hdev)
{
1611
	struct l2cap_chan *chan = hdev->smp_data;
1612
	struct crypto_blkcipher *tfm_aes;
1613 1614 1615 1616 1617

	if (!chan)
		return;

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

1619 1620 1621 1622
	tfm_aes = chan->data;
	if (tfm_aes) {
		chan->data = NULL;
		crypto_free_blkcipher(tfm_aes);
1623
	}
1624 1625 1626

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