xref: /openbmc/linux/net/bluetooth/smp.c (revision 609e478b)
1 /*
2    BlueZ - Bluetooth protocol stack for Linux
3    Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
4 
5    This program is free software; you can redistribute it and/or modify
6    it under the terms of the GNU General Public License version 2 as
7    published by the Free Software Foundation;
8 
9    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
10    OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
11    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
12    IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
13    CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
14    WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15    ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16    OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 
18    ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
19    COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
20    SOFTWARE IS DISCLAIMED.
21 */
22 
23 #include <linux/crypto.h>
24 #include <linux/scatterlist.h>
25 #include <crypto/b128ops.h>
26 
27 #include <net/bluetooth/bluetooth.h>
28 #include <net/bluetooth/hci_core.h>
29 #include <net/bluetooth/l2cap.h>
30 #include <net/bluetooth/mgmt.h>
31 
32 #include "smp.h"
33 
34 #define SMP_ALLOW_CMD(smp, code)	set_bit(code, &smp->allow_cmd)
35 
36 #define SMP_TIMEOUT	msecs_to_jiffies(30000)
37 
38 #define AUTH_REQ_MASK   0x07
39 #define KEY_DIST_MASK	0x07
40 
41 enum {
42 	SMP_FLAG_TK_VALID,
43 	SMP_FLAG_CFM_PENDING,
44 	SMP_FLAG_MITM_AUTH,
45 	SMP_FLAG_COMPLETE,
46 	SMP_FLAG_INITIATOR,
47 };
48 
49 struct smp_chan {
50 	struct l2cap_conn	*conn;
51 	struct delayed_work	security_timer;
52 	unsigned long           allow_cmd; /* Bitmask of allowed commands */
53 
54 	u8		preq[7]; /* SMP Pairing Request */
55 	u8		prsp[7]; /* SMP Pairing Response */
56 	u8		prnd[16]; /* SMP Pairing Random (local) */
57 	u8		rrnd[16]; /* SMP Pairing Random (remote) */
58 	u8		pcnf[16]; /* SMP Pairing Confirm */
59 	u8		tk[16]; /* SMP Temporary Key */
60 	u8		enc_key_size;
61 	u8		remote_key_dist;
62 	bdaddr_t	id_addr;
63 	u8		id_addr_type;
64 	u8		irk[16];
65 	struct smp_csrk	*csrk;
66 	struct smp_csrk	*slave_csrk;
67 	struct smp_ltk	*ltk;
68 	struct smp_ltk	*slave_ltk;
69 	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 	for (i = 0; i < len; i++)
80 		dst[len - 1 - i] = src[i];
81 }
82 
83 static int smp_e(struct crypto_blkcipher *tfm, const u8 *k, u8 *r)
84 {
85 	struct blkcipher_desc desc;
86 	struct scatterlist sg;
87 	uint8_t tmp[16], data[16];
88 	int err;
89 
90 	if (tfm == NULL) {
91 		BT_ERR("tfm %p", tfm);
92 		return -EINVAL;
93 	}
94 
95 	desc.tfm = tfm;
96 	desc.flags = 0;
97 
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 	if (err) {
103 		BT_ERR("cipher setkey failed: %d", err);
104 		return err;
105 	}
106 
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 	err = crypto_blkcipher_encrypt(&desc, &sg, &sg, 16);
113 	if (err)
114 		BT_ERR("Encrypt data error %d", err);
115 
116 	/* Most significant octet of encryptedData corresponds to data[0] */
117 	swap_buf(data, r, 16);
118 
119 	return err;
120 }
121 
122 static int smp_ah(struct crypto_blkcipher *tfm, u8 irk[16], u8 r[3], u8 res[3])
123 {
124 	u8 _res[16];
125 	int err;
126 
127 	/* r' = padding || r */
128 	memcpy(_res, r, 3);
129 	memset(_res + 3, 0, 13);
130 
131 	err = smp_e(tfm, irk, _res);
132 	if (err) {
133 		BT_ERR("Encrypt error");
134 		return err;
135 	}
136 
137 	/* The output of the random address function ah is:
138 	 *	ah(h, r) = e(k, r') mod 2^24
139 	 * The output of the security function e is then truncated to 24 bits
140 	 * by taking the least significant 24 bits of the output of e as the
141 	 * result of ah.
142 	 */
143 	memcpy(res, _res, 3);
144 
145 	return 0;
146 }
147 
148 bool smp_irk_matches(struct hci_dev *hdev, u8 irk[16], bdaddr_t *bdaddr)
149 {
150 	struct l2cap_chan *chan = hdev->smp_data;
151 	struct crypto_blkcipher *tfm;
152 	u8 hash[3];
153 	int err;
154 
155 	if (!chan || !chan->data)
156 		return false;
157 
158 	tfm = chan->data;
159 
160 	BT_DBG("RPA %pMR IRK %*phN", bdaddr, 16, irk);
161 
162 	err = smp_ah(tfm, irk, &bdaddr->b[3], hash);
163 	if (err)
164 		return false;
165 
166 	return !memcmp(bdaddr->b, hash, 3);
167 }
168 
169 int smp_generate_rpa(struct hci_dev *hdev, u8 irk[16], bdaddr_t *rpa)
170 {
171 	struct l2cap_chan *chan = hdev->smp_data;
172 	struct crypto_blkcipher *tfm;
173 	int err;
174 
175 	if (!chan || !chan->data)
176 		return -EOPNOTSUPP;
177 
178 	tfm = chan->data;
179 
180 	get_random_bytes(&rpa->b[3], 3);
181 
182 	rpa->b[5] &= 0x3f;	/* Clear two most significant bits */
183 	rpa->b[5] |= 0x40;	/* Set second most significant bit */
184 
185 	err = smp_ah(tfm, irk, &rpa->b[3], rpa->b);
186 	if (err < 0)
187 		return err;
188 
189 	BT_DBG("RPA %pMR", rpa);
190 
191 	return 0;
192 }
193 
194 static int smp_c1(struct smp_chan *smp, u8 k[16], u8 r[16], u8 preq[7],
195 		  u8 pres[7], u8 _iat, bdaddr_t *ia, u8 _rat, bdaddr_t *ra,
196 		  u8 res[16])
197 {
198 	struct hci_dev *hdev = smp->conn->hcon->hdev;
199 	u8 p1[16], p2[16];
200 	int err;
201 
202 	BT_DBG("%s", hdev->name);
203 
204 	memset(p1, 0, 16);
205 
206 	/* p1 = pres || preq || _rat || _iat */
207 	p1[0] = _iat;
208 	p1[1] = _rat;
209 	memcpy(p1 + 2, preq, 7);
210 	memcpy(p1 + 9, pres, 7);
211 
212 	/* p2 = padding || ia || ra */
213 	memcpy(p2, ra, 6);
214 	memcpy(p2 + 6, ia, 6);
215 	memset(p2 + 12, 0, 4);
216 
217 	/* res = r XOR p1 */
218 	u128_xor((u128 *) res, (u128 *) r, (u128 *) p1);
219 
220 	/* res = e(k, res) */
221 	err = smp_e(smp->tfm_aes, k, res);
222 	if (err) {
223 		BT_ERR("Encrypt data error");
224 		return err;
225 	}
226 
227 	/* res = res XOR p2 */
228 	u128_xor((u128 *) res, (u128 *) res, (u128 *) p2);
229 
230 	/* res = e(k, res) */
231 	err = smp_e(smp->tfm_aes, k, res);
232 	if (err)
233 		BT_ERR("Encrypt data error");
234 
235 	return err;
236 }
237 
238 static int smp_s1(struct smp_chan *smp, u8 k[16], u8 r1[16], u8 r2[16],
239 		  u8 _r[16])
240 {
241 	struct hci_dev *hdev = smp->conn->hcon->hdev;
242 	int err;
243 
244 	BT_DBG("%s", hdev->name);
245 
246 	/* Just least significant octets from r1 and r2 are considered */
247 	memcpy(_r, r2, 8);
248 	memcpy(_r + 8, r1, 8);
249 
250 	err = smp_e(smp->tfm_aes, k, _r);
251 	if (err)
252 		BT_ERR("Encrypt data error");
253 
254 	return err;
255 }
256 
257 static void smp_send_cmd(struct l2cap_conn *conn, u8 code, u16 len, void *data)
258 {
259 	struct l2cap_chan *chan = conn->smp;
260 	struct smp_chan *smp;
261 	struct kvec iv[2];
262 	struct msghdr msg;
263 
264 	if (!chan)
265 		return;
266 
267 	BT_DBG("code 0x%2.2x", code);
268 
269 	iv[0].iov_base = &code;
270 	iv[0].iov_len = 1;
271 
272 	iv[1].iov_base = data;
273 	iv[1].iov_len = len;
274 
275 	memset(&msg, 0, sizeof(msg));
276 
277 	msg.msg_iov = (struct iovec *) &iv;
278 	msg.msg_iovlen = 2;
279 
280 	l2cap_chan_send(chan, &msg, 1 + len);
281 
282 	if (!chan->data)
283 		return;
284 
285 	smp = chan->data;
286 
287 	cancel_delayed_work_sync(&smp->security_timer);
288 	schedule_delayed_work(&smp->security_timer, SMP_TIMEOUT);
289 }
290 
291 static __u8 authreq_to_seclevel(__u8 authreq)
292 {
293 	if (authreq & SMP_AUTH_MITM)
294 		return BT_SECURITY_HIGH;
295 	else
296 		return BT_SECURITY_MEDIUM;
297 }
298 
299 static __u8 seclevel_to_authreq(__u8 sec_level)
300 {
301 	switch (sec_level) {
302 	case BT_SECURITY_HIGH:
303 		return SMP_AUTH_MITM | SMP_AUTH_BONDING;
304 	case BT_SECURITY_MEDIUM:
305 		return SMP_AUTH_BONDING;
306 	default:
307 		return SMP_AUTH_NONE;
308 	}
309 }
310 
311 static void build_pairing_cmd(struct l2cap_conn *conn,
312 			      struct smp_cmd_pairing *req,
313 			      struct smp_cmd_pairing *rsp, __u8 authreq)
314 {
315 	struct l2cap_chan *chan = conn->smp;
316 	struct smp_chan *smp = chan->data;
317 	struct hci_conn *hcon = conn->hcon;
318 	struct hci_dev *hdev = hcon->hdev;
319 	u8 local_dist = 0, remote_dist = 0;
320 
321 	if (test_bit(HCI_BONDABLE, &conn->hcon->hdev->dev_flags)) {
322 		local_dist = SMP_DIST_ENC_KEY | SMP_DIST_SIGN;
323 		remote_dist = SMP_DIST_ENC_KEY | SMP_DIST_SIGN;
324 		authreq |= SMP_AUTH_BONDING;
325 	} else {
326 		authreq &= ~SMP_AUTH_BONDING;
327 	}
328 
329 	if (test_bit(HCI_RPA_RESOLVING, &hdev->dev_flags))
330 		remote_dist |= SMP_DIST_ID_KEY;
331 
332 	if (test_bit(HCI_PRIVACY, &hdev->dev_flags))
333 		local_dist |= SMP_DIST_ID_KEY;
334 
335 	if (rsp == NULL) {
336 		req->io_capability = conn->hcon->io_capability;
337 		req->oob_flag = SMP_OOB_NOT_PRESENT;
338 		req->max_key_size = SMP_MAX_ENC_KEY_SIZE;
339 		req->init_key_dist = local_dist;
340 		req->resp_key_dist = remote_dist;
341 		req->auth_req = (authreq & AUTH_REQ_MASK);
342 
343 		smp->remote_key_dist = remote_dist;
344 		return;
345 	}
346 
347 	rsp->io_capability = conn->hcon->io_capability;
348 	rsp->oob_flag = SMP_OOB_NOT_PRESENT;
349 	rsp->max_key_size = SMP_MAX_ENC_KEY_SIZE;
350 	rsp->init_key_dist = req->init_key_dist & remote_dist;
351 	rsp->resp_key_dist = req->resp_key_dist & local_dist;
352 	rsp->auth_req = (authreq & AUTH_REQ_MASK);
353 
354 	smp->remote_key_dist = rsp->init_key_dist;
355 }
356 
357 static u8 check_enc_key_size(struct l2cap_conn *conn, __u8 max_key_size)
358 {
359 	struct l2cap_chan *chan = conn->smp;
360 	struct smp_chan *smp = chan->data;
361 
362 	if ((max_key_size > SMP_MAX_ENC_KEY_SIZE) ||
363 	    (max_key_size < SMP_MIN_ENC_KEY_SIZE))
364 		return SMP_ENC_KEY_SIZE;
365 
366 	smp->enc_key_size = max_key_size;
367 
368 	return 0;
369 }
370 
371 static void smp_chan_destroy(struct l2cap_conn *conn)
372 {
373 	struct l2cap_chan *chan = conn->smp;
374 	struct smp_chan *smp = chan->data;
375 	bool complete;
376 
377 	BUG_ON(!smp);
378 
379 	cancel_delayed_work_sync(&smp->security_timer);
380 
381 	complete = test_bit(SMP_FLAG_COMPLETE, &smp->flags);
382 	mgmt_smp_complete(conn->hcon, complete);
383 
384 	kfree(smp->csrk);
385 	kfree(smp->slave_csrk);
386 
387 	crypto_free_blkcipher(smp->tfm_aes);
388 
389 	/* If pairing failed clean up any keys we might have */
390 	if (!complete) {
391 		if (smp->ltk) {
392 			list_del(&smp->ltk->list);
393 			kfree(smp->ltk);
394 		}
395 
396 		if (smp->slave_ltk) {
397 			list_del(&smp->slave_ltk->list);
398 			kfree(smp->slave_ltk);
399 		}
400 
401 		if (smp->remote_irk) {
402 			list_del(&smp->remote_irk->list);
403 			kfree(smp->remote_irk);
404 		}
405 	}
406 
407 	chan->data = NULL;
408 	kfree(smp);
409 	hci_conn_drop(conn->hcon);
410 }
411 
412 static void smp_failure(struct l2cap_conn *conn, u8 reason)
413 {
414 	struct hci_conn *hcon = conn->hcon;
415 	struct l2cap_chan *chan = conn->smp;
416 
417 	if (reason)
418 		smp_send_cmd(conn, SMP_CMD_PAIRING_FAIL, sizeof(reason),
419 			     &reason);
420 
421 	clear_bit(HCI_CONN_ENCRYPT_PEND, &hcon->flags);
422 	mgmt_auth_failed(hcon, HCI_ERROR_AUTH_FAILURE);
423 
424 	if (chan->data)
425 		smp_chan_destroy(conn);
426 }
427 
428 #define JUST_WORKS	0x00
429 #define JUST_CFM	0x01
430 #define REQ_PASSKEY	0x02
431 #define CFM_PASSKEY	0x03
432 #define REQ_OOB		0x04
433 #define OVERLAP		0xFF
434 
435 static const u8 gen_method[5][5] = {
436 	{ JUST_WORKS,  JUST_CFM,    REQ_PASSKEY, JUST_WORKS, REQ_PASSKEY },
437 	{ JUST_WORKS,  JUST_CFM,    REQ_PASSKEY, JUST_WORKS, REQ_PASSKEY },
438 	{ CFM_PASSKEY, CFM_PASSKEY, REQ_PASSKEY, JUST_WORKS, CFM_PASSKEY },
439 	{ JUST_WORKS,  JUST_CFM,    JUST_WORKS,  JUST_WORKS, JUST_CFM    },
440 	{ CFM_PASSKEY, CFM_PASSKEY, REQ_PASSKEY, JUST_WORKS, OVERLAP     },
441 };
442 
443 static u8 get_auth_method(struct smp_chan *smp, u8 local_io, u8 remote_io)
444 {
445 	/* If either side has unknown io_caps, use JUST_CFM (which gets
446 	 * converted later to JUST_WORKS if we're initiators.
447 	 */
448 	if (local_io > SMP_IO_KEYBOARD_DISPLAY ||
449 	    remote_io > SMP_IO_KEYBOARD_DISPLAY)
450 		return JUST_CFM;
451 
452 	return gen_method[remote_io][local_io];
453 }
454 
455 static int tk_request(struct l2cap_conn *conn, u8 remote_oob, u8 auth,
456 						u8 local_io, u8 remote_io)
457 {
458 	struct hci_conn *hcon = conn->hcon;
459 	struct l2cap_chan *chan = conn->smp;
460 	struct smp_chan *smp = chan->data;
461 	u8 method;
462 	u32 passkey = 0;
463 	int ret = 0;
464 
465 	/* Initialize key for JUST WORKS */
466 	memset(smp->tk, 0, sizeof(smp->tk));
467 	clear_bit(SMP_FLAG_TK_VALID, &smp->flags);
468 
469 	BT_DBG("tk_request: auth:%d lcl:%d rem:%d", auth, local_io, remote_io);
470 
471 	/* If neither side wants MITM, either "just" confirm an incoming
472 	 * request or use just-works for outgoing ones. The JUST_CFM
473 	 * will be converted to JUST_WORKS if necessary later in this
474 	 * function. If either side has MITM look up the method from the
475 	 * table.
476 	 */
477 	if (!(auth & SMP_AUTH_MITM))
478 		method = JUST_CFM;
479 	else
480 		method = get_auth_method(smp, local_io, remote_io);
481 
482 	/* Don't confirm locally initiated pairing attempts */
483 	if (method == JUST_CFM && test_bit(SMP_FLAG_INITIATOR, &smp->flags))
484 		method = JUST_WORKS;
485 
486 	/* Don't bother user space with no IO capabilities */
487 	if (method == JUST_CFM && hcon->io_capability == HCI_IO_NO_INPUT_OUTPUT)
488 		method = JUST_WORKS;
489 
490 	/* If Just Works, Continue with Zero TK */
491 	if (method == JUST_WORKS) {
492 		set_bit(SMP_FLAG_TK_VALID, &smp->flags);
493 		return 0;
494 	}
495 
496 	/* Not Just Works/Confirm results in MITM Authentication */
497 	if (method != JUST_CFM) {
498 		set_bit(SMP_FLAG_MITM_AUTH, &smp->flags);
499 		if (hcon->pending_sec_level < BT_SECURITY_HIGH)
500 			hcon->pending_sec_level = BT_SECURITY_HIGH;
501 	}
502 
503 	/* If both devices have Keyoard-Display I/O, the master
504 	 * Confirms and the slave Enters the passkey.
505 	 */
506 	if (method == OVERLAP) {
507 		if (hcon->role == HCI_ROLE_MASTER)
508 			method = CFM_PASSKEY;
509 		else
510 			method = REQ_PASSKEY;
511 	}
512 
513 	/* Generate random passkey. */
514 	if (method == CFM_PASSKEY) {
515 		memset(smp->tk, 0, sizeof(smp->tk));
516 		get_random_bytes(&passkey, sizeof(passkey));
517 		passkey %= 1000000;
518 		put_unaligned_le32(passkey, smp->tk);
519 		BT_DBG("PassKey: %d", passkey);
520 		set_bit(SMP_FLAG_TK_VALID, &smp->flags);
521 	}
522 
523 	hci_dev_lock(hcon->hdev);
524 
525 	if (method == REQ_PASSKEY)
526 		ret = mgmt_user_passkey_request(hcon->hdev, &hcon->dst,
527 						hcon->type, hcon->dst_type);
528 	else if (method == JUST_CFM)
529 		ret = mgmt_user_confirm_request(hcon->hdev, &hcon->dst,
530 						hcon->type, hcon->dst_type,
531 						passkey, 1);
532 	else
533 		ret = mgmt_user_passkey_notify(hcon->hdev, &hcon->dst,
534 						hcon->type, hcon->dst_type,
535 						passkey, 0);
536 
537 	hci_dev_unlock(hcon->hdev);
538 
539 	return ret;
540 }
541 
542 static u8 smp_confirm(struct smp_chan *smp)
543 {
544 	struct l2cap_conn *conn = smp->conn;
545 	struct smp_cmd_pairing_confirm cp;
546 	int ret;
547 
548 	BT_DBG("conn %p", conn);
549 
550 	ret = smp_c1(smp, smp->tk, smp->prnd, smp->preq, smp->prsp,
551 		     conn->hcon->init_addr_type, &conn->hcon->init_addr,
552 		     conn->hcon->resp_addr_type, &conn->hcon->resp_addr,
553 		     cp.confirm_val);
554 	if (ret)
555 		return SMP_UNSPECIFIED;
556 
557 	clear_bit(SMP_FLAG_CFM_PENDING, &smp->flags);
558 
559 	smp_send_cmd(smp->conn, SMP_CMD_PAIRING_CONFIRM, sizeof(cp), &cp);
560 
561 	if (conn->hcon->out)
562 		SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_CONFIRM);
563 	else
564 		SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_RANDOM);
565 
566 	return 0;
567 }
568 
569 static u8 smp_random(struct smp_chan *smp)
570 {
571 	struct l2cap_conn *conn = smp->conn;
572 	struct hci_conn *hcon = conn->hcon;
573 	u8 confirm[16];
574 	int ret;
575 
576 	if (IS_ERR_OR_NULL(smp->tfm_aes))
577 		return SMP_UNSPECIFIED;
578 
579 	BT_DBG("conn %p %s", conn, conn->hcon->out ? "master" : "slave");
580 
581 	ret = smp_c1(smp, smp->tk, smp->rrnd, smp->preq, smp->prsp,
582 		     hcon->init_addr_type, &hcon->init_addr,
583 		     hcon->resp_addr_type, &hcon->resp_addr, confirm);
584 	if (ret)
585 		return SMP_UNSPECIFIED;
586 
587 	if (memcmp(smp->pcnf, confirm, sizeof(smp->pcnf)) != 0) {
588 		BT_ERR("Pairing failed (confirmation values mismatch)");
589 		return SMP_CONFIRM_FAILED;
590 	}
591 
592 	if (hcon->out) {
593 		u8 stk[16];
594 		__le64 rand = 0;
595 		__le16 ediv = 0;
596 
597 		smp_s1(smp, smp->tk, smp->rrnd, smp->prnd, stk);
598 
599 		memset(stk + smp->enc_key_size, 0,
600 		       SMP_MAX_ENC_KEY_SIZE - smp->enc_key_size);
601 
602 		if (test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &hcon->flags))
603 			return SMP_UNSPECIFIED;
604 
605 		hci_le_start_enc(hcon, ediv, rand, stk);
606 		hcon->enc_key_size = smp->enc_key_size;
607 		set_bit(HCI_CONN_STK_ENCRYPT, &hcon->flags);
608 	} else {
609 		u8 stk[16], auth;
610 		__le64 rand = 0;
611 		__le16 ediv = 0;
612 
613 		smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM, sizeof(smp->prnd),
614 			     smp->prnd);
615 
616 		smp_s1(smp, smp->tk, smp->prnd, smp->rrnd, stk);
617 
618 		memset(stk + smp->enc_key_size, 0,
619 		       SMP_MAX_ENC_KEY_SIZE - smp->enc_key_size);
620 
621 		if (hcon->pending_sec_level == BT_SECURITY_HIGH)
622 			auth = 1;
623 		else
624 			auth = 0;
625 
626 		/* Even though there's no _SLAVE suffix this is the
627 		 * slave STK we're adding for later lookup (the master
628 		 * STK never needs to be stored).
629 		 */
630 		hci_add_ltk(hcon->hdev, &hcon->dst, hcon->dst_type,
631 			    SMP_STK, auth, stk, smp->enc_key_size, ediv, rand);
632 	}
633 
634 	return 0;
635 }
636 
637 static void smp_notify_keys(struct l2cap_conn *conn)
638 {
639 	struct l2cap_chan *chan = conn->smp;
640 	struct smp_chan *smp = chan->data;
641 	struct hci_conn *hcon = conn->hcon;
642 	struct hci_dev *hdev = hcon->hdev;
643 	struct smp_cmd_pairing *req = (void *) &smp->preq[1];
644 	struct smp_cmd_pairing *rsp = (void *) &smp->prsp[1];
645 	bool persistent;
646 
647 	if (smp->remote_irk) {
648 		mgmt_new_irk(hdev, smp->remote_irk);
649 		/* Now that user space can be considered to know the
650 		 * identity address track the connection based on it
651 		 * from now on.
652 		 */
653 		bacpy(&hcon->dst, &smp->remote_irk->bdaddr);
654 		hcon->dst_type = smp->remote_irk->addr_type;
655 		queue_work(hdev->workqueue, &conn->id_addr_update_work);
656 
657 		/* When receiving an indentity resolving key for
658 		 * a remote device that does not use a resolvable
659 		 * private address, just remove the key so that
660 		 * it is possible to use the controller white
661 		 * list for scanning.
662 		 *
663 		 * Userspace will have been told to not store
664 		 * this key at this point. So it is safe to
665 		 * just remove it.
666 		 */
667 		if (!bacmp(&smp->remote_irk->rpa, BDADDR_ANY)) {
668 			list_del(&smp->remote_irk->list);
669 			kfree(smp->remote_irk);
670 			smp->remote_irk = NULL;
671 		}
672 	}
673 
674 	/* The LTKs and CSRKs should be persistent only if both sides
675 	 * had the bonding bit set in their authentication requests.
676 	 */
677 	persistent = !!((req->auth_req & rsp->auth_req) & SMP_AUTH_BONDING);
678 
679 	if (smp->csrk) {
680 		smp->csrk->bdaddr_type = hcon->dst_type;
681 		bacpy(&smp->csrk->bdaddr, &hcon->dst);
682 		mgmt_new_csrk(hdev, smp->csrk, persistent);
683 	}
684 
685 	if (smp->slave_csrk) {
686 		smp->slave_csrk->bdaddr_type = hcon->dst_type;
687 		bacpy(&smp->slave_csrk->bdaddr, &hcon->dst);
688 		mgmt_new_csrk(hdev, smp->slave_csrk, persistent);
689 	}
690 
691 	if (smp->ltk) {
692 		smp->ltk->bdaddr_type = hcon->dst_type;
693 		bacpy(&smp->ltk->bdaddr, &hcon->dst);
694 		mgmt_new_ltk(hdev, smp->ltk, persistent);
695 	}
696 
697 	if (smp->slave_ltk) {
698 		smp->slave_ltk->bdaddr_type = hcon->dst_type;
699 		bacpy(&smp->slave_ltk->bdaddr, &hcon->dst);
700 		mgmt_new_ltk(hdev, smp->slave_ltk, persistent);
701 	}
702 }
703 
704 static void smp_allow_key_dist(struct smp_chan *smp)
705 {
706 	/* Allow the first expected phase 3 PDU. The rest of the PDUs
707 	 * will be allowed in each PDU handler to ensure we receive
708 	 * them in the correct order.
709 	 */
710 	if (smp->remote_key_dist & SMP_DIST_ENC_KEY)
711 		SMP_ALLOW_CMD(smp, SMP_CMD_ENCRYPT_INFO);
712 	else if (smp->remote_key_dist & SMP_DIST_ID_KEY)
713 		SMP_ALLOW_CMD(smp, SMP_CMD_IDENT_INFO);
714 	else if (smp->remote_key_dist & SMP_DIST_SIGN)
715 		SMP_ALLOW_CMD(smp, SMP_CMD_SIGN_INFO);
716 }
717 
718 static void smp_distribute_keys(struct smp_chan *smp)
719 {
720 	struct smp_cmd_pairing *req, *rsp;
721 	struct l2cap_conn *conn = smp->conn;
722 	struct hci_conn *hcon = conn->hcon;
723 	struct hci_dev *hdev = hcon->hdev;
724 	__u8 *keydist;
725 
726 	BT_DBG("conn %p", conn);
727 
728 	rsp = (void *) &smp->prsp[1];
729 
730 	/* The responder sends its keys first */
731 	if (hcon->out && (smp->remote_key_dist & KEY_DIST_MASK)) {
732 		smp_allow_key_dist(smp);
733 		return;
734 	}
735 
736 	req = (void *) &smp->preq[1];
737 
738 	if (hcon->out) {
739 		keydist = &rsp->init_key_dist;
740 		*keydist &= req->init_key_dist;
741 	} else {
742 		keydist = &rsp->resp_key_dist;
743 		*keydist &= req->resp_key_dist;
744 	}
745 
746 	BT_DBG("keydist 0x%x", *keydist);
747 
748 	if (*keydist & SMP_DIST_ENC_KEY) {
749 		struct smp_cmd_encrypt_info enc;
750 		struct smp_cmd_master_ident ident;
751 		struct smp_ltk *ltk;
752 		u8 authenticated;
753 		__le16 ediv;
754 		__le64 rand;
755 
756 		get_random_bytes(enc.ltk, sizeof(enc.ltk));
757 		get_random_bytes(&ediv, sizeof(ediv));
758 		get_random_bytes(&rand, sizeof(rand));
759 
760 		smp_send_cmd(conn, SMP_CMD_ENCRYPT_INFO, sizeof(enc), &enc);
761 
762 		authenticated = hcon->sec_level == BT_SECURITY_HIGH;
763 		ltk = hci_add_ltk(hdev, &hcon->dst, hcon->dst_type,
764 				  SMP_LTK_SLAVE, authenticated, enc.ltk,
765 				  smp->enc_key_size, ediv, rand);
766 		smp->slave_ltk = ltk;
767 
768 		ident.ediv = ediv;
769 		ident.rand = rand;
770 
771 		smp_send_cmd(conn, SMP_CMD_MASTER_IDENT, sizeof(ident), &ident);
772 
773 		*keydist &= ~SMP_DIST_ENC_KEY;
774 	}
775 
776 	if (*keydist & SMP_DIST_ID_KEY) {
777 		struct smp_cmd_ident_addr_info addrinfo;
778 		struct smp_cmd_ident_info idinfo;
779 
780 		memcpy(idinfo.irk, hdev->irk, sizeof(idinfo.irk));
781 
782 		smp_send_cmd(conn, SMP_CMD_IDENT_INFO, sizeof(idinfo), &idinfo);
783 
784 		/* The hci_conn contains the local identity address
785 		 * after the connection has been established.
786 		 *
787 		 * This is true even when the connection has been
788 		 * established using a resolvable random address.
789 		 */
790 		bacpy(&addrinfo.bdaddr, &hcon->src);
791 		addrinfo.addr_type = hcon->src_type;
792 
793 		smp_send_cmd(conn, SMP_CMD_IDENT_ADDR_INFO, sizeof(addrinfo),
794 			     &addrinfo);
795 
796 		*keydist &= ~SMP_DIST_ID_KEY;
797 	}
798 
799 	if (*keydist & SMP_DIST_SIGN) {
800 		struct smp_cmd_sign_info sign;
801 		struct smp_csrk *csrk;
802 
803 		/* Generate a new random key */
804 		get_random_bytes(sign.csrk, sizeof(sign.csrk));
805 
806 		csrk = kzalloc(sizeof(*csrk), GFP_KERNEL);
807 		if (csrk) {
808 			csrk->master = 0x00;
809 			memcpy(csrk->val, sign.csrk, sizeof(csrk->val));
810 		}
811 		smp->slave_csrk = csrk;
812 
813 		smp_send_cmd(conn, SMP_CMD_SIGN_INFO, sizeof(sign), &sign);
814 
815 		*keydist &= ~SMP_DIST_SIGN;
816 	}
817 
818 	/* If there are still keys to be received wait for them */
819 	if (smp->remote_key_dist & KEY_DIST_MASK) {
820 		smp_allow_key_dist(smp);
821 		return;
822 	}
823 
824 	set_bit(SMP_FLAG_COMPLETE, &smp->flags);
825 	smp_notify_keys(conn);
826 
827 	smp_chan_destroy(conn);
828 }
829 
830 static void smp_timeout(struct work_struct *work)
831 {
832 	struct smp_chan *smp = container_of(work, struct smp_chan,
833 					    security_timer.work);
834 	struct l2cap_conn *conn = smp->conn;
835 
836 	BT_DBG("conn %p", conn);
837 
838 	hci_disconnect(conn->hcon, HCI_ERROR_REMOTE_USER_TERM);
839 }
840 
841 static struct smp_chan *smp_chan_create(struct l2cap_conn *conn)
842 {
843 	struct l2cap_chan *chan = conn->smp;
844 	struct smp_chan *smp;
845 
846 	smp = kzalloc(sizeof(*smp), GFP_ATOMIC);
847 	if (!smp)
848 		return NULL;
849 
850 	smp->tfm_aes = crypto_alloc_blkcipher("ecb(aes)", 0, CRYPTO_ALG_ASYNC);
851 	if (IS_ERR(smp->tfm_aes)) {
852 		BT_ERR("Unable to create ECB crypto context");
853 		kfree(smp);
854 		return NULL;
855 	}
856 
857 	smp->conn = conn;
858 	chan->data = smp;
859 
860 	SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_FAIL);
861 
862 	INIT_DELAYED_WORK(&smp->security_timer, smp_timeout);
863 
864 	hci_conn_hold(conn->hcon);
865 
866 	return smp;
867 }
868 
869 int smp_user_confirm_reply(struct hci_conn *hcon, u16 mgmt_op, __le32 passkey)
870 {
871 	struct l2cap_conn *conn = hcon->l2cap_data;
872 	struct l2cap_chan *chan;
873 	struct smp_chan *smp;
874 	u32 value;
875 	int err;
876 
877 	BT_DBG("");
878 
879 	if (!conn)
880 		return -ENOTCONN;
881 
882 	chan = conn->smp;
883 	if (!chan)
884 		return -ENOTCONN;
885 
886 	l2cap_chan_lock(chan);
887 	if (!chan->data) {
888 		err = -ENOTCONN;
889 		goto unlock;
890 	}
891 
892 	smp = chan->data;
893 
894 	switch (mgmt_op) {
895 	case MGMT_OP_USER_PASSKEY_REPLY:
896 		value = le32_to_cpu(passkey);
897 		memset(smp->tk, 0, sizeof(smp->tk));
898 		BT_DBG("PassKey: %d", value);
899 		put_unaligned_le32(value, smp->tk);
900 		/* Fall Through */
901 	case MGMT_OP_USER_CONFIRM_REPLY:
902 		set_bit(SMP_FLAG_TK_VALID, &smp->flags);
903 		break;
904 	case MGMT_OP_USER_PASSKEY_NEG_REPLY:
905 	case MGMT_OP_USER_CONFIRM_NEG_REPLY:
906 		smp_failure(conn, SMP_PASSKEY_ENTRY_FAILED);
907 		err = 0;
908 		goto unlock;
909 	default:
910 		smp_failure(conn, SMP_PASSKEY_ENTRY_FAILED);
911 		err = -EOPNOTSUPP;
912 		goto unlock;
913 	}
914 
915 	err = 0;
916 
917 	/* If it is our turn to send Pairing Confirm, do so now */
918 	if (test_bit(SMP_FLAG_CFM_PENDING, &smp->flags)) {
919 		u8 rsp = smp_confirm(smp);
920 		if (rsp)
921 			smp_failure(conn, rsp);
922 	}
923 
924 unlock:
925 	l2cap_chan_unlock(chan);
926 	return err;
927 }
928 
929 static u8 smp_cmd_pairing_req(struct l2cap_conn *conn, struct sk_buff *skb)
930 {
931 	struct smp_cmd_pairing rsp, *req = (void *) skb->data;
932 	struct l2cap_chan *chan = conn->smp;
933 	struct hci_dev *hdev = conn->hcon->hdev;
934 	struct smp_chan *smp;
935 	u8 key_size, auth, sec_level;
936 	int ret;
937 
938 	BT_DBG("conn %p", conn);
939 
940 	if (skb->len < sizeof(*req))
941 		return SMP_INVALID_PARAMS;
942 
943 	if (conn->hcon->role != HCI_ROLE_SLAVE)
944 		return SMP_CMD_NOTSUPP;
945 
946 	if (!chan->data)
947 		smp = smp_chan_create(conn);
948 	else
949 		smp = chan->data;
950 
951 	if (!smp)
952 		return SMP_UNSPECIFIED;
953 
954 	/* We didn't start the pairing, so match remote */
955 	auth = req->auth_req & AUTH_REQ_MASK;
956 
957 	if (!test_bit(HCI_BONDABLE, &hdev->dev_flags) &&
958 	    (auth & SMP_AUTH_BONDING))
959 		return SMP_PAIRING_NOTSUPP;
960 
961 	smp->preq[0] = SMP_CMD_PAIRING_REQ;
962 	memcpy(&smp->preq[1], req, sizeof(*req));
963 	skb_pull(skb, sizeof(*req));
964 
965 	if (conn->hcon->io_capability == HCI_IO_NO_INPUT_OUTPUT)
966 		sec_level = BT_SECURITY_MEDIUM;
967 	else
968 		sec_level = authreq_to_seclevel(auth);
969 
970 	if (sec_level > conn->hcon->pending_sec_level)
971 		conn->hcon->pending_sec_level = sec_level;
972 
973 	/* If we need MITM check that it can be acheived */
974 	if (conn->hcon->pending_sec_level >= BT_SECURITY_HIGH) {
975 		u8 method;
976 
977 		method = get_auth_method(smp, conn->hcon->io_capability,
978 					 req->io_capability);
979 		if (method == JUST_WORKS || method == JUST_CFM)
980 			return SMP_AUTH_REQUIREMENTS;
981 	}
982 
983 	build_pairing_cmd(conn, req, &rsp, auth);
984 
985 	key_size = min(req->max_key_size, rsp.max_key_size);
986 	if (check_enc_key_size(conn, key_size))
987 		return SMP_ENC_KEY_SIZE;
988 
989 	get_random_bytes(smp->prnd, sizeof(smp->prnd));
990 
991 	smp->prsp[0] = SMP_CMD_PAIRING_RSP;
992 	memcpy(&smp->prsp[1], &rsp, sizeof(rsp));
993 
994 	smp_send_cmd(conn, SMP_CMD_PAIRING_RSP, sizeof(rsp), &rsp);
995 	SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_CONFIRM);
996 
997 	/* Request setup of TK */
998 	ret = tk_request(conn, 0, auth, rsp.io_capability, req->io_capability);
999 	if (ret)
1000 		return SMP_UNSPECIFIED;
1001 
1002 	return 0;
1003 }
1004 
1005 static u8 smp_cmd_pairing_rsp(struct l2cap_conn *conn, struct sk_buff *skb)
1006 {
1007 	struct smp_cmd_pairing *req, *rsp = (void *) skb->data;
1008 	struct l2cap_chan *chan = conn->smp;
1009 	struct smp_chan *smp = chan->data;
1010 	u8 key_size, auth;
1011 	int ret;
1012 
1013 	BT_DBG("conn %p", conn);
1014 
1015 	if (skb->len < sizeof(*rsp))
1016 		return SMP_INVALID_PARAMS;
1017 
1018 	if (conn->hcon->role != HCI_ROLE_MASTER)
1019 		return SMP_CMD_NOTSUPP;
1020 
1021 	skb_pull(skb, sizeof(*rsp));
1022 
1023 	req = (void *) &smp->preq[1];
1024 
1025 	key_size = min(req->max_key_size, rsp->max_key_size);
1026 	if (check_enc_key_size(conn, key_size))
1027 		return SMP_ENC_KEY_SIZE;
1028 
1029 	auth = rsp->auth_req & AUTH_REQ_MASK;
1030 
1031 	/* If we need MITM check that it can be acheived */
1032 	if (conn->hcon->pending_sec_level >= BT_SECURITY_HIGH) {
1033 		u8 method;
1034 
1035 		method = get_auth_method(smp, req->io_capability,
1036 					 rsp->io_capability);
1037 		if (method == JUST_WORKS || method == JUST_CFM)
1038 			return SMP_AUTH_REQUIREMENTS;
1039 	}
1040 
1041 	get_random_bytes(smp->prnd, sizeof(smp->prnd));
1042 
1043 	smp->prsp[0] = SMP_CMD_PAIRING_RSP;
1044 	memcpy(&smp->prsp[1], rsp, sizeof(*rsp));
1045 
1046 	/* Update remote key distribution in case the remote cleared
1047 	 * some bits that we had enabled in our request.
1048 	 */
1049 	smp->remote_key_dist &= rsp->resp_key_dist;
1050 
1051 	auth |= req->auth_req;
1052 
1053 	ret = tk_request(conn, 0, auth, req->io_capability, rsp->io_capability);
1054 	if (ret)
1055 		return SMP_UNSPECIFIED;
1056 
1057 	set_bit(SMP_FLAG_CFM_PENDING, &smp->flags);
1058 
1059 	/* Can't compose response until we have been confirmed */
1060 	if (test_bit(SMP_FLAG_TK_VALID, &smp->flags))
1061 		return smp_confirm(smp);
1062 
1063 	return 0;
1064 }
1065 
1066 static u8 smp_cmd_pairing_confirm(struct l2cap_conn *conn, struct sk_buff *skb)
1067 {
1068 	struct l2cap_chan *chan = conn->smp;
1069 	struct smp_chan *smp = chan->data;
1070 
1071 	BT_DBG("conn %p %s", conn, conn->hcon->out ? "master" : "slave");
1072 
1073 	if (skb->len < sizeof(smp->pcnf))
1074 		return SMP_INVALID_PARAMS;
1075 
1076 	memcpy(smp->pcnf, skb->data, sizeof(smp->pcnf));
1077 	skb_pull(skb, sizeof(smp->pcnf));
1078 
1079 	if (conn->hcon->out) {
1080 		smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM, sizeof(smp->prnd),
1081 			     smp->prnd);
1082 		SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_RANDOM);
1083 		return 0;
1084 	}
1085 
1086 	if (test_bit(SMP_FLAG_TK_VALID, &smp->flags))
1087 		return smp_confirm(smp);
1088 	else
1089 		set_bit(SMP_FLAG_CFM_PENDING, &smp->flags);
1090 
1091 	return 0;
1092 }
1093 
1094 static u8 smp_cmd_pairing_random(struct l2cap_conn *conn, struct sk_buff *skb)
1095 {
1096 	struct l2cap_chan *chan = conn->smp;
1097 	struct smp_chan *smp = chan->data;
1098 
1099 	BT_DBG("conn %p", conn);
1100 
1101 	if (skb->len < sizeof(smp->rrnd))
1102 		return SMP_INVALID_PARAMS;
1103 
1104 	memcpy(smp->rrnd, skb->data, sizeof(smp->rrnd));
1105 	skb_pull(skb, sizeof(smp->rrnd));
1106 
1107 	return smp_random(smp);
1108 }
1109 
1110 static bool smp_ltk_encrypt(struct l2cap_conn *conn, u8 sec_level)
1111 {
1112 	struct smp_ltk *key;
1113 	struct hci_conn *hcon = conn->hcon;
1114 
1115 	key = hci_find_ltk_by_addr(hcon->hdev, &hcon->dst, hcon->dst_type,
1116 				   hcon->role);
1117 	if (!key)
1118 		return false;
1119 
1120 	if (smp_ltk_sec_level(key) < sec_level)
1121 		return false;
1122 
1123 	if (test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &hcon->flags))
1124 		return true;
1125 
1126 	hci_le_start_enc(hcon, key->ediv, key->rand, key->val);
1127 	hcon->enc_key_size = key->enc_size;
1128 
1129 	/* We never store STKs for master role, so clear this flag */
1130 	clear_bit(HCI_CONN_STK_ENCRYPT, &hcon->flags);
1131 
1132 	return true;
1133 }
1134 
1135 bool smp_sufficient_security(struct hci_conn *hcon, u8 sec_level)
1136 {
1137 	if (sec_level == BT_SECURITY_LOW)
1138 		return true;
1139 
1140 	/* If we're encrypted with an STK always claim insufficient
1141 	 * security. This way we allow the connection to be re-encrypted
1142 	 * with an LTK, even if the LTK provides the same level of
1143 	 * security. Only exception is if we don't have an LTK (e.g.
1144 	 * because of key distribution bits).
1145 	 */
1146 	if (test_bit(HCI_CONN_STK_ENCRYPT, &hcon->flags) &&
1147 	    hci_find_ltk_by_addr(hcon->hdev, &hcon->dst, hcon->dst_type,
1148 				 hcon->role))
1149 		return false;
1150 
1151 	if (hcon->sec_level >= sec_level)
1152 		return true;
1153 
1154 	return false;
1155 }
1156 
1157 static u8 smp_cmd_security_req(struct l2cap_conn *conn, struct sk_buff *skb)
1158 {
1159 	struct smp_cmd_security_req *rp = (void *) skb->data;
1160 	struct smp_cmd_pairing cp;
1161 	struct hci_conn *hcon = conn->hcon;
1162 	struct smp_chan *smp;
1163 	u8 sec_level, auth;
1164 
1165 	BT_DBG("conn %p", conn);
1166 
1167 	if (skb->len < sizeof(*rp))
1168 		return SMP_INVALID_PARAMS;
1169 
1170 	if (hcon->role != HCI_ROLE_MASTER)
1171 		return SMP_CMD_NOTSUPP;
1172 
1173 	auth = rp->auth_req & AUTH_REQ_MASK;
1174 
1175 	if (hcon->io_capability == HCI_IO_NO_INPUT_OUTPUT)
1176 		sec_level = BT_SECURITY_MEDIUM;
1177 	else
1178 		sec_level = authreq_to_seclevel(auth);
1179 
1180 	if (smp_sufficient_security(hcon, sec_level))
1181 		return 0;
1182 
1183 	if (sec_level > hcon->pending_sec_level)
1184 		hcon->pending_sec_level = sec_level;
1185 
1186 	if (smp_ltk_encrypt(conn, hcon->pending_sec_level))
1187 		return 0;
1188 
1189 	smp = smp_chan_create(conn);
1190 	if (!smp)
1191 		return SMP_UNSPECIFIED;
1192 
1193 	if (!test_bit(HCI_BONDABLE, &hcon->hdev->dev_flags) &&
1194 	    (auth & SMP_AUTH_BONDING))
1195 		return SMP_PAIRING_NOTSUPP;
1196 
1197 	skb_pull(skb, sizeof(*rp));
1198 
1199 	memset(&cp, 0, sizeof(cp));
1200 	build_pairing_cmd(conn, &cp, NULL, auth);
1201 
1202 	smp->preq[0] = SMP_CMD_PAIRING_REQ;
1203 	memcpy(&smp->preq[1], &cp, sizeof(cp));
1204 
1205 	smp_send_cmd(conn, SMP_CMD_PAIRING_REQ, sizeof(cp), &cp);
1206 	SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_RSP);
1207 
1208 	return 0;
1209 }
1210 
1211 int smp_conn_security(struct hci_conn *hcon, __u8 sec_level)
1212 {
1213 	struct l2cap_conn *conn = hcon->l2cap_data;
1214 	struct l2cap_chan *chan;
1215 	struct smp_chan *smp;
1216 	__u8 authreq;
1217 	int ret;
1218 
1219 	BT_DBG("conn %p hcon %p level 0x%2.2x", conn, hcon, sec_level);
1220 
1221 	/* This may be NULL if there's an unexpected disconnection */
1222 	if (!conn)
1223 		return 1;
1224 
1225 	chan = conn->smp;
1226 
1227 	if (!test_bit(HCI_LE_ENABLED, &hcon->hdev->dev_flags))
1228 		return 1;
1229 
1230 	if (smp_sufficient_security(hcon, sec_level))
1231 		return 1;
1232 
1233 	if (sec_level > hcon->pending_sec_level)
1234 		hcon->pending_sec_level = sec_level;
1235 
1236 	if (hcon->role == HCI_ROLE_MASTER)
1237 		if (smp_ltk_encrypt(conn, hcon->pending_sec_level))
1238 			return 0;
1239 
1240 	l2cap_chan_lock(chan);
1241 
1242 	/* If SMP is already in progress ignore this request */
1243 	if (chan->data) {
1244 		ret = 0;
1245 		goto unlock;
1246 	}
1247 
1248 	smp = smp_chan_create(conn);
1249 	if (!smp) {
1250 		ret = 1;
1251 		goto unlock;
1252 	}
1253 
1254 	authreq = seclevel_to_authreq(sec_level);
1255 
1256 	/* Require MITM if IO Capability allows or the security level
1257 	 * requires it.
1258 	 */
1259 	if (hcon->io_capability != HCI_IO_NO_INPUT_OUTPUT ||
1260 	    hcon->pending_sec_level > BT_SECURITY_MEDIUM)
1261 		authreq |= SMP_AUTH_MITM;
1262 
1263 	if (hcon->role == HCI_ROLE_MASTER) {
1264 		struct smp_cmd_pairing cp;
1265 
1266 		build_pairing_cmd(conn, &cp, NULL, authreq);
1267 		smp->preq[0] = SMP_CMD_PAIRING_REQ;
1268 		memcpy(&smp->preq[1], &cp, sizeof(cp));
1269 
1270 		smp_send_cmd(conn, SMP_CMD_PAIRING_REQ, sizeof(cp), &cp);
1271 		SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_RSP);
1272 	} else {
1273 		struct smp_cmd_security_req cp;
1274 		cp.auth_req = authreq;
1275 		smp_send_cmd(conn, SMP_CMD_SECURITY_REQ, sizeof(cp), &cp);
1276 		SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_REQ);
1277 	}
1278 
1279 	set_bit(SMP_FLAG_INITIATOR, &smp->flags);
1280 	ret = 0;
1281 
1282 unlock:
1283 	l2cap_chan_unlock(chan);
1284 	return ret;
1285 }
1286 
1287 static int smp_cmd_encrypt_info(struct l2cap_conn *conn, struct sk_buff *skb)
1288 {
1289 	struct smp_cmd_encrypt_info *rp = (void *) skb->data;
1290 	struct l2cap_chan *chan = conn->smp;
1291 	struct smp_chan *smp = chan->data;
1292 
1293 	BT_DBG("conn %p", conn);
1294 
1295 	if (skb->len < sizeof(*rp))
1296 		return SMP_INVALID_PARAMS;
1297 
1298 	SMP_ALLOW_CMD(smp, SMP_CMD_MASTER_IDENT);
1299 
1300 	skb_pull(skb, sizeof(*rp));
1301 
1302 	memcpy(smp->tk, rp->ltk, sizeof(smp->tk));
1303 
1304 	return 0;
1305 }
1306 
1307 static int smp_cmd_master_ident(struct l2cap_conn *conn, struct sk_buff *skb)
1308 {
1309 	struct smp_cmd_master_ident *rp = (void *) skb->data;
1310 	struct l2cap_chan *chan = conn->smp;
1311 	struct smp_chan *smp = chan->data;
1312 	struct hci_dev *hdev = conn->hcon->hdev;
1313 	struct hci_conn *hcon = conn->hcon;
1314 	struct smp_ltk *ltk;
1315 	u8 authenticated;
1316 
1317 	BT_DBG("conn %p", conn);
1318 
1319 	if (skb->len < sizeof(*rp))
1320 		return SMP_INVALID_PARAMS;
1321 
1322 	/* Mark the information as received */
1323 	smp->remote_key_dist &= ~SMP_DIST_ENC_KEY;
1324 
1325 	if (smp->remote_key_dist & SMP_DIST_ID_KEY)
1326 		SMP_ALLOW_CMD(smp, SMP_CMD_IDENT_INFO);
1327 	else if (smp->remote_key_dist & SMP_DIST_SIGN)
1328 		SMP_ALLOW_CMD(smp, SMP_CMD_SIGN_INFO);
1329 
1330 	skb_pull(skb, sizeof(*rp));
1331 
1332 	hci_dev_lock(hdev);
1333 	authenticated = (hcon->sec_level == BT_SECURITY_HIGH);
1334 	ltk = hci_add_ltk(hdev, &hcon->dst, hcon->dst_type, SMP_LTK,
1335 			  authenticated, smp->tk, smp->enc_key_size,
1336 			  rp->ediv, rp->rand);
1337 	smp->ltk = ltk;
1338 	if (!(smp->remote_key_dist & KEY_DIST_MASK))
1339 		smp_distribute_keys(smp);
1340 	hci_dev_unlock(hdev);
1341 
1342 	return 0;
1343 }
1344 
1345 static int smp_cmd_ident_info(struct l2cap_conn *conn, struct sk_buff *skb)
1346 {
1347 	struct smp_cmd_ident_info *info = (void *) skb->data;
1348 	struct l2cap_chan *chan = conn->smp;
1349 	struct smp_chan *smp = chan->data;
1350 
1351 	BT_DBG("");
1352 
1353 	if (skb->len < sizeof(*info))
1354 		return SMP_INVALID_PARAMS;
1355 
1356 	SMP_ALLOW_CMD(smp, SMP_CMD_IDENT_ADDR_INFO);
1357 
1358 	skb_pull(skb, sizeof(*info));
1359 
1360 	memcpy(smp->irk, info->irk, 16);
1361 
1362 	return 0;
1363 }
1364 
1365 static int smp_cmd_ident_addr_info(struct l2cap_conn *conn,
1366 				   struct sk_buff *skb)
1367 {
1368 	struct smp_cmd_ident_addr_info *info = (void *) skb->data;
1369 	struct l2cap_chan *chan = conn->smp;
1370 	struct smp_chan *smp = chan->data;
1371 	struct hci_conn *hcon = conn->hcon;
1372 	bdaddr_t rpa;
1373 
1374 	BT_DBG("");
1375 
1376 	if (skb->len < sizeof(*info))
1377 		return SMP_INVALID_PARAMS;
1378 
1379 	/* Mark the information as received */
1380 	smp->remote_key_dist &= ~SMP_DIST_ID_KEY;
1381 
1382 	if (smp->remote_key_dist & SMP_DIST_SIGN)
1383 		SMP_ALLOW_CMD(smp, SMP_CMD_SIGN_INFO);
1384 
1385 	skb_pull(skb, sizeof(*info));
1386 
1387 	hci_dev_lock(hcon->hdev);
1388 
1389 	/* Strictly speaking the Core Specification (4.1) allows sending
1390 	 * an empty address which would force us to rely on just the IRK
1391 	 * as "identity information". However, since such
1392 	 * implementations are not known of and in order to not over
1393 	 * complicate our implementation, simply pretend that we never
1394 	 * received an IRK for such a device.
1395 	 */
1396 	if (!bacmp(&info->bdaddr, BDADDR_ANY)) {
1397 		BT_ERR("Ignoring IRK with no identity address");
1398 		goto distribute;
1399 	}
1400 
1401 	bacpy(&smp->id_addr, &info->bdaddr);
1402 	smp->id_addr_type = info->addr_type;
1403 
1404 	if (hci_bdaddr_is_rpa(&hcon->dst, hcon->dst_type))
1405 		bacpy(&rpa, &hcon->dst);
1406 	else
1407 		bacpy(&rpa, BDADDR_ANY);
1408 
1409 	smp->remote_irk = hci_add_irk(conn->hcon->hdev, &smp->id_addr,
1410 				      smp->id_addr_type, smp->irk, &rpa);
1411 
1412 distribute:
1413 	if (!(smp->remote_key_dist & KEY_DIST_MASK))
1414 		smp_distribute_keys(smp);
1415 
1416 	hci_dev_unlock(hcon->hdev);
1417 
1418 	return 0;
1419 }
1420 
1421 static int smp_cmd_sign_info(struct l2cap_conn *conn, struct sk_buff *skb)
1422 {
1423 	struct smp_cmd_sign_info *rp = (void *) skb->data;
1424 	struct l2cap_chan *chan = conn->smp;
1425 	struct smp_chan *smp = chan->data;
1426 	struct hci_dev *hdev = conn->hcon->hdev;
1427 	struct smp_csrk *csrk;
1428 
1429 	BT_DBG("conn %p", conn);
1430 
1431 	if (skb->len < sizeof(*rp))
1432 		return SMP_INVALID_PARAMS;
1433 
1434 	/* Mark the information as received */
1435 	smp->remote_key_dist &= ~SMP_DIST_SIGN;
1436 
1437 	skb_pull(skb, sizeof(*rp));
1438 
1439 	hci_dev_lock(hdev);
1440 	csrk = kzalloc(sizeof(*csrk), GFP_KERNEL);
1441 	if (csrk) {
1442 		csrk->master = 0x01;
1443 		memcpy(csrk->val, rp->csrk, sizeof(csrk->val));
1444 	}
1445 	smp->csrk = csrk;
1446 	smp_distribute_keys(smp);
1447 	hci_dev_unlock(hdev);
1448 
1449 	return 0;
1450 }
1451 
1452 static int smp_sig_channel(struct l2cap_chan *chan, struct sk_buff *skb)
1453 {
1454 	struct l2cap_conn *conn = chan->conn;
1455 	struct hci_conn *hcon = conn->hcon;
1456 	struct smp_chan *smp;
1457 	__u8 code, reason;
1458 	int err = 0;
1459 
1460 	if (hcon->type != LE_LINK) {
1461 		kfree_skb(skb);
1462 		return 0;
1463 	}
1464 
1465 	if (skb->len < 1)
1466 		return -EILSEQ;
1467 
1468 	if (!test_bit(HCI_LE_ENABLED, &hcon->hdev->dev_flags)) {
1469 		reason = SMP_PAIRING_NOTSUPP;
1470 		goto done;
1471 	}
1472 
1473 	code = skb->data[0];
1474 	skb_pull(skb, sizeof(code));
1475 
1476 	smp = chan->data;
1477 
1478 	if (code > SMP_CMD_MAX)
1479 		goto drop;
1480 
1481 	if (smp && !test_and_clear_bit(code, &smp->allow_cmd))
1482 		goto drop;
1483 
1484 	/* If we don't have a context the only allowed commands are
1485 	 * pairing request and security request.
1486 	 */
1487 	if (!smp && code != SMP_CMD_PAIRING_REQ && code != SMP_CMD_SECURITY_REQ)
1488 		goto drop;
1489 
1490 	switch (code) {
1491 	case SMP_CMD_PAIRING_REQ:
1492 		reason = smp_cmd_pairing_req(conn, skb);
1493 		break;
1494 
1495 	case SMP_CMD_PAIRING_FAIL:
1496 		smp_failure(conn, 0);
1497 		err = -EPERM;
1498 		break;
1499 
1500 	case SMP_CMD_PAIRING_RSP:
1501 		reason = smp_cmd_pairing_rsp(conn, skb);
1502 		break;
1503 
1504 	case SMP_CMD_SECURITY_REQ:
1505 		reason = smp_cmd_security_req(conn, skb);
1506 		break;
1507 
1508 	case SMP_CMD_PAIRING_CONFIRM:
1509 		reason = smp_cmd_pairing_confirm(conn, skb);
1510 		break;
1511 
1512 	case SMP_CMD_PAIRING_RANDOM:
1513 		reason = smp_cmd_pairing_random(conn, skb);
1514 		break;
1515 
1516 	case SMP_CMD_ENCRYPT_INFO:
1517 		reason = smp_cmd_encrypt_info(conn, skb);
1518 		break;
1519 
1520 	case SMP_CMD_MASTER_IDENT:
1521 		reason = smp_cmd_master_ident(conn, skb);
1522 		break;
1523 
1524 	case SMP_CMD_IDENT_INFO:
1525 		reason = smp_cmd_ident_info(conn, skb);
1526 		break;
1527 
1528 	case SMP_CMD_IDENT_ADDR_INFO:
1529 		reason = smp_cmd_ident_addr_info(conn, skb);
1530 		break;
1531 
1532 	case SMP_CMD_SIGN_INFO:
1533 		reason = smp_cmd_sign_info(conn, skb);
1534 		break;
1535 
1536 	default:
1537 		BT_DBG("Unknown command code 0x%2.2x", code);
1538 		reason = SMP_CMD_NOTSUPP;
1539 		goto done;
1540 	}
1541 
1542 done:
1543 	if (!err) {
1544 		if (reason)
1545 			smp_failure(conn, reason);
1546 		kfree_skb(skb);
1547 	}
1548 
1549 	return err;
1550 
1551 drop:
1552 	BT_ERR("%s unexpected SMP command 0x%02x from %pMR", hcon->hdev->name,
1553 	       code, &hcon->dst);
1554 	kfree_skb(skb);
1555 	return 0;
1556 }
1557 
1558 static void smp_teardown_cb(struct l2cap_chan *chan, int err)
1559 {
1560 	struct l2cap_conn *conn = chan->conn;
1561 
1562 	BT_DBG("chan %p", chan);
1563 
1564 	if (chan->data)
1565 		smp_chan_destroy(conn);
1566 
1567 	conn->smp = NULL;
1568 	l2cap_chan_put(chan);
1569 }
1570 
1571 static void smp_resume_cb(struct l2cap_chan *chan)
1572 {
1573 	struct smp_chan *smp = chan->data;
1574 	struct l2cap_conn *conn = chan->conn;
1575 	struct hci_conn *hcon = conn->hcon;
1576 
1577 	BT_DBG("chan %p", chan);
1578 
1579 	if (!smp)
1580 		return;
1581 
1582 	if (!test_bit(HCI_CONN_ENCRYPT, &hcon->flags))
1583 		return;
1584 
1585 	cancel_delayed_work(&smp->security_timer);
1586 
1587 	smp_distribute_keys(smp);
1588 }
1589 
1590 static void smp_ready_cb(struct l2cap_chan *chan)
1591 {
1592 	struct l2cap_conn *conn = chan->conn;
1593 
1594 	BT_DBG("chan %p", chan);
1595 
1596 	conn->smp = chan;
1597 	l2cap_chan_hold(chan);
1598 }
1599 
1600 static int smp_recv_cb(struct l2cap_chan *chan, struct sk_buff *skb)
1601 {
1602 	int err;
1603 
1604 	BT_DBG("chan %p", chan);
1605 
1606 	err = smp_sig_channel(chan, skb);
1607 	if (err) {
1608 		struct smp_chan *smp = chan->data;
1609 
1610 		if (smp)
1611 			cancel_delayed_work_sync(&smp->security_timer);
1612 
1613 		hci_disconnect(chan->conn->hcon, HCI_ERROR_AUTH_FAILURE);
1614 	}
1615 
1616 	return err;
1617 }
1618 
1619 static struct sk_buff *smp_alloc_skb_cb(struct l2cap_chan *chan,
1620 					unsigned long hdr_len,
1621 					unsigned long len, int nb)
1622 {
1623 	struct sk_buff *skb;
1624 
1625 	skb = bt_skb_alloc(hdr_len + len, GFP_KERNEL);
1626 	if (!skb)
1627 		return ERR_PTR(-ENOMEM);
1628 
1629 	skb->priority = HCI_PRIO_MAX;
1630 	bt_cb(skb)->chan = chan;
1631 
1632 	return skb;
1633 }
1634 
1635 static const struct l2cap_ops smp_chan_ops = {
1636 	.name			= "Security Manager",
1637 	.ready			= smp_ready_cb,
1638 	.recv			= smp_recv_cb,
1639 	.alloc_skb		= smp_alloc_skb_cb,
1640 	.teardown		= smp_teardown_cb,
1641 	.resume			= smp_resume_cb,
1642 
1643 	.new_connection		= l2cap_chan_no_new_connection,
1644 	.state_change		= l2cap_chan_no_state_change,
1645 	.close			= l2cap_chan_no_close,
1646 	.defer			= l2cap_chan_no_defer,
1647 	.suspend		= l2cap_chan_no_suspend,
1648 	.set_shutdown		= l2cap_chan_no_set_shutdown,
1649 	.get_sndtimeo		= l2cap_chan_no_get_sndtimeo,
1650 	.memcpy_fromiovec	= l2cap_chan_no_memcpy_fromiovec,
1651 };
1652 
1653 static inline struct l2cap_chan *smp_new_conn_cb(struct l2cap_chan *pchan)
1654 {
1655 	struct l2cap_chan *chan;
1656 
1657 	BT_DBG("pchan %p", pchan);
1658 
1659 	chan = l2cap_chan_create();
1660 	if (!chan)
1661 		return NULL;
1662 
1663 	chan->chan_type	= pchan->chan_type;
1664 	chan->ops	= &smp_chan_ops;
1665 	chan->scid	= pchan->scid;
1666 	chan->dcid	= chan->scid;
1667 	chan->imtu	= pchan->imtu;
1668 	chan->omtu	= pchan->omtu;
1669 	chan->mode	= pchan->mode;
1670 
1671 	BT_DBG("created chan %p", chan);
1672 
1673 	return chan;
1674 }
1675 
1676 static const struct l2cap_ops smp_root_chan_ops = {
1677 	.name			= "Security Manager Root",
1678 	.new_connection		= smp_new_conn_cb,
1679 
1680 	/* None of these are implemented for the root channel */
1681 	.close			= l2cap_chan_no_close,
1682 	.alloc_skb		= l2cap_chan_no_alloc_skb,
1683 	.recv			= l2cap_chan_no_recv,
1684 	.state_change		= l2cap_chan_no_state_change,
1685 	.teardown		= l2cap_chan_no_teardown,
1686 	.ready			= l2cap_chan_no_ready,
1687 	.defer			= l2cap_chan_no_defer,
1688 	.suspend		= l2cap_chan_no_suspend,
1689 	.resume			= l2cap_chan_no_resume,
1690 	.set_shutdown		= l2cap_chan_no_set_shutdown,
1691 	.get_sndtimeo		= l2cap_chan_no_get_sndtimeo,
1692 	.memcpy_fromiovec	= l2cap_chan_no_memcpy_fromiovec,
1693 };
1694 
1695 int smp_register(struct hci_dev *hdev)
1696 {
1697 	struct l2cap_chan *chan;
1698 	struct crypto_blkcipher	*tfm_aes;
1699 
1700 	BT_DBG("%s", hdev->name);
1701 
1702 	tfm_aes = crypto_alloc_blkcipher("ecb(aes)", 0, CRYPTO_ALG_ASYNC);
1703 	if (IS_ERR(tfm_aes)) {
1704 		int err = PTR_ERR(tfm_aes);
1705 		BT_ERR("Unable to create crypto context");
1706 		return err;
1707 	}
1708 
1709 	chan = l2cap_chan_create();
1710 	if (!chan) {
1711 		crypto_free_blkcipher(tfm_aes);
1712 		return -ENOMEM;
1713 	}
1714 
1715 	chan->data = tfm_aes;
1716 
1717 	l2cap_add_scid(chan, L2CAP_CID_SMP);
1718 
1719 	l2cap_chan_set_defaults(chan);
1720 
1721 	bacpy(&chan->src, &hdev->bdaddr);
1722 	chan->src_type = BDADDR_LE_PUBLIC;
1723 	chan->state = BT_LISTEN;
1724 	chan->mode = L2CAP_MODE_BASIC;
1725 	chan->imtu = L2CAP_DEFAULT_MTU;
1726 	chan->ops = &smp_root_chan_ops;
1727 
1728 	hdev->smp_data = chan;
1729 
1730 	return 0;
1731 }
1732 
1733 void smp_unregister(struct hci_dev *hdev)
1734 {
1735 	struct l2cap_chan *chan = hdev->smp_data;
1736 	struct crypto_blkcipher *tfm_aes;
1737 
1738 	if (!chan)
1739 		return;
1740 
1741 	BT_DBG("%s chan %p", hdev->name, chan);
1742 
1743 	tfm_aes = chan->data;
1744 	if (tfm_aes) {
1745 		chan->data = NULL;
1746 		crypto_free_blkcipher(tfm_aes);
1747 	}
1748 
1749 	hdev->smp_data = NULL;
1750 	l2cap_chan_put(chan);
1751 }
1752