xref: /openbmc/linux/net/bluetooth/smp.c (revision d2168146)
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_TIMEOUT	msecs_to_jiffies(30000)
35 
36 #define AUTH_REQ_MASK   0x07
37 
38 #define SMP_FLAG_TK_VALID	1
39 #define SMP_FLAG_CFM_PENDING	2
40 #define SMP_FLAG_MITM_AUTH	3
41 #define SMP_FLAG_COMPLETE	4
42 #define SMP_FLAG_INITIATOR	5
43 
44 struct smp_chan {
45 	struct l2cap_conn *conn;
46 	u8		preq[7]; /* SMP Pairing Request */
47 	u8		prsp[7]; /* SMP Pairing Response */
48 	u8		prnd[16]; /* SMP Pairing Random (local) */
49 	u8		rrnd[16]; /* SMP Pairing Random (remote) */
50 	u8		pcnf[16]; /* SMP Pairing Confirm */
51 	u8		tk[16]; /* SMP Temporary Key */
52 	u8		enc_key_size;
53 	u8		remote_key_dist;
54 	bdaddr_t	id_addr;
55 	u8		id_addr_type;
56 	u8		irk[16];
57 	struct smp_csrk	*csrk;
58 	struct smp_csrk	*slave_csrk;
59 	struct smp_ltk	*ltk;
60 	struct smp_ltk	*slave_ltk;
61 	struct smp_irk	*remote_irk;
62 	unsigned long	flags;
63 };
64 
65 static inline void swap128(const u8 src[16], u8 dst[16])
66 {
67 	int i;
68 	for (i = 0; i < 16; i++)
69 		dst[15 - i] = src[i];
70 }
71 
72 static inline void swap56(const u8 src[7], u8 dst[7])
73 {
74 	int i;
75 	for (i = 0; i < 7; i++)
76 		dst[6 - i] = src[i];
77 }
78 
79 static int smp_e(struct crypto_blkcipher *tfm, const u8 *k, u8 *r)
80 {
81 	struct blkcipher_desc desc;
82 	struct scatterlist sg;
83 	uint8_t tmp[16], data[16];
84 	int err;
85 
86 	if (tfm == NULL) {
87 		BT_ERR("tfm %p", tfm);
88 		return -EINVAL;
89 	}
90 
91 	desc.tfm = tfm;
92 	desc.flags = 0;
93 
94 	/* The most significant octet of key corresponds to k[0] */
95 	swap128(k, tmp);
96 
97 	err = crypto_blkcipher_setkey(tfm, tmp, 16);
98 	if (err) {
99 		BT_ERR("cipher setkey failed: %d", err);
100 		return err;
101 	}
102 
103 	/* Most significant octet of plaintextData corresponds to data[0] */
104 	swap128(r, data);
105 
106 	sg_init_one(&sg, data, 16);
107 
108 	err = crypto_blkcipher_encrypt(&desc, &sg, &sg, 16);
109 	if (err)
110 		BT_ERR("Encrypt data error %d", err);
111 
112 	/* Most significant octet of encryptedData corresponds to data[0] */
113 	swap128(data, r);
114 
115 	return err;
116 }
117 
118 static int smp_ah(struct crypto_blkcipher *tfm, u8 irk[16], u8 r[3], u8 res[3])
119 {
120 	u8 _res[16];
121 	int err;
122 
123 	/* r' = padding || r */
124 	memcpy(_res, r, 3);
125 	memset(_res + 3, 0, 13);
126 
127 	err = smp_e(tfm, irk, _res);
128 	if (err) {
129 		BT_ERR("Encrypt error");
130 		return err;
131 	}
132 
133 	/* The output of the random address function ah is:
134 	 *	ah(h, r) = e(k, r') mod 2^24
135 	 * The output of the security function e is then truncated to 24 bits
136 	 * by taking the least significant 24 bits of the output of e as the
137 	 * result of ah.
138 	 */
139 	memcpy(res, _res, 3);
140 
141 	return 0;
142 }
143 
144 bool smp_irk_matches(struct crypto_blkcipher *tfm, u8 irk[16],
145 		     bdaddr_t *bdaddr)
146 {
147 	u8 hash[3];
148 	int err;
149 
150 	BT_DBG("RPA %pMR IRK %*phN", bdaddr, 16, irk);
151 
152 	err = smp_ah(tfm, irk, &bdaddr->b[3], hash);
153 	if (err)
154 		return false;
155 
156 	return !memcmp(bdaddr->b, hash, 3);
157 }
158 
159 int smp_generate_rpa(struct crypto_blkcipher *tfm, u8 irk[16], bdaddr_t *rpa)
160 {
161 	int err;
162 
163 	get_random_bytes(&rpa->b[3], 3);
164 
165 	rpa->b[5] &= 0x3f;	/* Clear two most significant bits */
166 	rpa->b[5] |= 0x40;	/* Set second most significant bit */
167 
168 	err = smp_ah(tfm, irk, &rpa->b[3], rpa->b);
169 	if (err < 0)
170 		return err;
171 
172 	BT_DBG("RPA %pMR", rpa);
173 
174 	return 0;
175 }
176 
177 static int smp_c1(struct crypto_blkcipher *tfm, u8 k[16], u8 r[16],
178 		  u8 preq[7], u8 pres[7], u8 _iat, bdaddr_t *ia,
179 		  u8 _rat, bdaddr_t *ra, u8 res[16])
180 {
181 	u8 p1[16], p2[16];
182 	int err;
183 
184 	memset(p1, 0, 16);
185 
186 	/* p1 = pres || preq || _rat || _iat */
187 	p1[0] = _iat;
188 	p1[1] = _rat;
189 	memcpy(p1 + 2, preq, 7);
190 	memcpy(p1 + 9, pres, 7);
191 
192 	/* p2 = padding || ia || ra */
193 	memcpy(p2, ra, 6);
194 	memcpy(p2 + 6, ia, 6);
195 	memset(p2 + 12, 0, 4);
196 
197 	/* res = r XOR p1 */
198 	u128_xor((u128 *) res, (u128 *) r, (u128 *) p1);
199 
200 	/* res = e(k, res) */
201 	err = smp_e(tfm, k, res);
202 	if (err) {
203 		BT_ERR("Encrypt data error");
204 		return err;
205 	}
206 
207 	/* res = res XOR p2 */
208 	u128_xor((u128 *) res, (u128 *) res, (u128 *) p2);
209 
210 	/* res = e(k, res) */
211 	err = smp_e(tfm, k, res);
212 	if (err)
213 		BT_ERR("Encrypt data error");
214 
215 	return err;
216 }
217 
218 static int smp_s1(struct crypto_blkcipher *tfm, u8 k[16], u8 r1[16],
219 		  u8 r2[16], u8 _r[16])
220 {
221 	int err;
222 
223 	/* Just least significant octets from r1 and r2 are considered */
224 	memcpy(_r, r2, 8);
225 	memcpy(_r + 8, r1, 8);
226 
227 	err = smp_e(tfm, k, _r);
228 	if (err)
229 		BT_ERR("Encrypt data error");
230 
231 	return err;
232 }
233 
234 static struct sk_buff *smp_build_cmd(struct l2cap_conn *conn, u8 code,
235 				     u16 dlen, void *data)
236 {
237 	struct sk_buff *skb;
238 	struct l2cap_hdr *lh;
239 	int len;
240 
241 	len = L2CAP_HDR_SIZE + sizeof(code) + dlen;
242 
243 	if (len > conn->mtu)
244 		return NULL;
245 
246 	skb = bt_skb_alloc(len, GFP_ATOMIC);
247 	if (!skb)
248 		return NULL;
249 
250 	lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
251 	lh->len = cpu_to_le16(sizeof(code) + dlen);
252 	lh->cid = cpu_to_le16(L2CAP_CID_SMP);
253 
254 	memcpy(skb_put(skb, sizeof(code)), &code, sizeof(code));
255 
256 	memcpy(skb_put(skb, dlen), data, dlen);
257 
258 	return skb;
259 }
260 
261 static void smp_send_cmd(struct l2cap_conn *conn, u8 code, u16 len, void *data)
262 {
263 	struct sk_buff *skb = smp_build_cmd(conn, code, len, data);
264 
265 	BT_DBG("code 0x%2.2x", code);
266 
267 	if (!skb)
268 		return;
269 
270 	skb->priority = HCI_PRIO_MAX;
271 	hci_send_acl(conn->hchan, skb, 0);
272 
273 	cancel_delayed_work_sync(&conn->security_timer);
274 	schedule_delayed_work(&conn->security_timer, SMP_TIMEOUT);
275 }
276 
277 static __u8 authreq_to_seclevel(__u8 authreq)
278 {
279 	if (authreq & SMP_AUTH_MITM)
280 		return BT_SECURITY_HIGH;
281 	else
282 		return BT_SECURITY_MEDIUM;
283 }
284 
285 static __u8 seclevel_to_authreq(__u8 sec_level)
286 {
287 	switch (sec_level) {
288 	case BT_SECURITY_HIGH:
289 		return SMP_AUTH_MITM | SMP_AUTH_BONDING;
290 	case BT_SECURITY_MEDIUM:
291 		return SMP_AUTH_BONDING;
292 	default:
293 		return SMP_AUTH_NONE;
294 	}
295 }
296 
297 static void build_pairing_cmd(struct l2cap_conn *conn,
298 			      struct smp_cmd_pairing *req,
299 			      struct smp_cmd_pairing *rsp, __u8 authreq)
300 {
301 	struct smp_chan *smp = conn->smp_chan;
302 	struct hci_conn *hcon = conn->hcon;
303 	struct hci_dev *hdev = hcon->hdev;
304 	u8 local_dist = 0, remote_dist = 0;
305 
306 	if (test_bit(HCI_PAIRABLE, &conn->hcon->hdev->dev_flags)) {
307 		local_dist = SMP_DIST_ENC_KEY | SMP_DIST_SIGN;
308 		remote_dist = SMP_DIST_ENC_KEY | SMP_DIST_SIGN;
309 		authreq |= SMP_AUTH_BONDING;
310 	} else {
311 		authreq &= ~SMP_AUTH_BONDING;
312 	}
313 
314 	if (test_bit(HCI_RPA_RESOLVING, &hdev->dev_flags))
315 		remote_dist |= SMP_DIST_ID_KEY;
316 
317 	if (test_bit(HCI_PRIVACY, &hdev->dev_flags))
318 		local_dist |= SMP_DIST_ID_KEY;
319 
320 	if (rsp == NULL) {
321 		req->io_capability = conn->hcon->io_capability;
322 		req->oob_flag = SMP_OOB_NOT_PRESENT;
323 		req->max_key_size = SMP_MAX_ENC_KEY_SIZE;
324 		req->init_key_dist = local_dist;
325 		req->resp_key_dist = remote_dist;
326 		req->auth_req = (authreq & AUTH_REQ_MASK);
327 
328 		smp->remote_key_dist = remote_dist;
329 		return;
330 	}
331 
332 	rsp->io_capability = conn->hcon->io_capability;
333 	rsp->oob_flag = SMP_OOB_NOT_PRESENT;
334 	rsp->max_key_size = SMP_MAX_ENC_KEY_SIZE;
335 	rsp->init_key_dist = req->init_key_dist & remote_dist;
336 	rsp->resp_key_dist = req->resp_key_dist & local_dist;
337 	rsp->auth_req = (authreq & AUTH_REQ_MASK);
338 
339 	smp->remote_key_dist = rsp->init_key_dist;
340 }
341 
342 static u8 check_enc_key_size(struct l2cap_conn *conn, __u8 max_key_size)
343 {
344 	struct smp_chan *smp = conn->smp_chan;
345 
346 	if ((max_key_size > SMP_MAX_ENC_KEY_SIZE) ||
347 	    (max_key_size < SMP_MIN_ENC_KEY_SIZE))
348 		return SMP_ENC_KEY_SIZE;
349 
350 	smp->enc_key_size = max_key_size;
351 
352 	return 0;
353 }
354 
355 static void smp_failure(struct l2cap_conn *conn, u8 reason)
356 {
357 	struct hci_conn *hcon = conn->hcon;
358 
359 	if (reason)
360 		smp_send_cmd(conn, SMP_CMD_PAIRING_FAIL, sizeof(reason),
361 			     &reason);
362 
363 	clear_bit(HCI_CONN_ENCRYPT_PEND, &hcon->flags);
364 	mgmt_auth_failed(hcon->hdev, &hcon->dst, hcon->type, hcon->dst_type,
365 			 HCI_ERROR_AUTH_FAILURE);
366 
367 	cancel_delayed_work_sync(&conn->security_timer);
368 
369 	if (test_and_clear_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags))
370 		smp_chan_destroy(conn);
371 }
372 
373 #define JUST_WORKS	0x00
374 #define JUST_CFM	0x01
375 #define REQ_PASSKEY	0x02
376 #define CFM_PASSKEY	0x03
377 #define REQ_OOB		0x04
378 #define OVERLAP		0xFF
379 
380 static const u8 gen_method[5][5] = {
381 	{ JUST_WORKS,  JUST_CFM,    REQ_PASSKEY, JUST_WORKS, REQ_PASSKEY },
382 	{ JUST_WORKS,  JUST_CFM,    REQ_PASSKEY, JUST_WORKS, REQ_PASSKEY },
383 	{ CFM_PASSKEY, CFM_PASSKEY, REQ_PASSKEY, JUST_WORKS, CFM_PASSKEY },
384 	{ JUST_WORKS,  JUST_CFM,    JUST_WORKS,  JUST_WORKS, JUST_CFM    },
385 	{ CFM_PASSKEY, CFM_PASSKEY, REQ_PASSKEY, JUST_WORKS, OVERLAP     },
386 };
387 
388 static u8 get_auth_method(struct smp_chan *smp, u8 local_io, u8 remote_io)
389 {
390 	/* If either side has unknown io_caps, use JUST WORKS */
391 	if (local_io > SMP_IO_KEYBOARD_DISPLAY ||
392 	    remote_io > SMP_IO_KEYBOARD_DISPLAY)
393 		return JUST_WORKS;
394 
395 	return gen_method[remote_io][local_io];
396 }
397 
398 static int tk_request(struct l2cap_conn *conn, u8 remote_oob, u8 auth,
399 						u8 local_io, u8 remote_io)
400 {
401 	struct hci_conn *hcon = conn->hcon;
402 	struct smp_chan *smp = conn->smp_chan;
403 	u8 method;
404 	u32 passkey = 0;
405 	int ret = 0;
406 
407 	/* Initialize key for JUST WORKS */
408 	memset(smp->tk, 0, sizeof(smp->tk));
409 	clear_bit(SMP_FLAG_TK_VALID, &smp->flags);
410 
411 	BT_DBG("tk_request: auth:%d lcl:%d rem:%d", auth, local_io, remote_io);
412 
413 	/* If neither side wants MITM, use JUST WORKS */
414 	/* Otherwise, look up method from the table */
415 	if (!(auth & SMP_AUTH_MITM))
416 		method = JUST_WORKS;
417 	else
418 		method = get_auth_method(smp, local_io, remote_io);
419 
420 	/* If not bonding, don't ask user to confirm a Zero TK */
421 	if (!(auth & SMP_AUTH_BONDING) && method == JUST_CFM)
422 		method = JUST_WORKS;
423 
424 	/* Don't confirm locally initiated pairing attempts */
425 	if (method == JUST_CFM && test_bit(SMP_FLAG_INITIATOR, &smp->flags))
426 		method = JUST_WORKS;
427 
428 	/* If Just Works, Continue with Zero TK */
429 	if (method == JUST_WORKS) {
430 		set_bit(SMP_FLAG_TK_VALID, &smp->flags);
431 		return 0;
432 	}
433 
434 	/* Not Just Works/Confirm results in MITM Authentication */
435 	if (method != JUST_CFM)
436 		set_bit(SMP_FLAG_MITM_AUTH, &smp->flags);
437 
438 	/* If both devices have Keyoard-Display I/O, the master
439 	 * Confirms and the slave Enters the passkey.
440 	 */
441 	if (method == OVERLAP) {
442 		if (hcon->link_mode & HCI_LM_MASTER)
443 			method = CFM_PASSKEY;
444 		else
445 			method = REQ_PASSKEY;
446 	}
447 
448 	/* Generate random passkey. */
449 	if (method == CFM_PASSKEY) {
450 		memset(smp->tk, 0, sizeof(smp->tk));
451 		get_random_bytes(&passkey, sizeof(passkey));
452 		passkey %= 1000000;
453 		put_unaligned_le32(passkey, smp->tk);
454 		BT_DBG("PassKey: %d", passkey);
455 		set_bit(SMP_FLAG_TK_VALID, &smp->flags);
456 	}
457 
458 	hci_dev_lock(hcon->hdev);
459 
460 	if (method == REQ_PASSKEY)
461 		ret = mgmt_user_passkey_request(hcon->hdev, &hcon->dst,
462 						hcon->type, hcon->dst_type);
463 	else if (method == JUST_CFM)
464 		ret = mgmt_user_confirm_request(hcon->hdev, &hcon->dst,
465 						hcon->type, hcon->dst_type,
466 						passkey, 1);
467 	else
468 		ret = mgmt_user_passkey_notify(hcon->hdev, &hcon->dst,
469 						hcon->type, hcon->dst_type,
470 						passkey, 0);
471 
472 	hci_dev_unlock(hcon->hdev);
473 
474 	return ret;
475 }
476 
477 static u8 smp_confirm(struct smp_chan *smp)
478 {
479 	struct l2cap_conn *conn = smp->conn;
480 	struct hci_dev *hdev = conn->hcon->hdev;
481 	struct crypto_blkcipher *tfm = hdev->tfm_aes;
482 	struct smp_cmd_pairing_confirm cp;
483 	int ret;
484 
485 	BT_DBG("conn %p", conn);
486 
487 	/* Prevent mutual access to hdev->tfm_aes */
488 	hci_dev_lock(hdev);
489 
490 	ret = smp_c1(tfm, smp->tk, smp->prnd, smp->preq, smp->prsp,
491 		     conn->hcon->init_addr_type, &conn->hcon->init_addr,
492 		     conn->hcon->resp_addr_type, &conn->hcon->resp_addr,
493 		     cp.confirm_val);
494 
495 	hci_dev_unlock(hdev);
496 
497 	if (ret)
498 		return SMP_UNSPECIFIED;
499 
500 	clear_bit(SMP_FLAG_CFM_PENDING, &smp->flags);
501 
502 	smp_send_cmd(smp->conn, SMP_CMD_PAIRING_CONFIRM, sizeof(cp), &cp);
503 
504 	return 0;
505 }
506 
507 static u8 smp_random(struct smp_chan *smp)
508 {
509 	struct l2cap_conn *conn = smp->conn;
510 	struct hci_conn *hcon = conn->hcon;
511 	struct hci_dev *hdev = hcon->hdev;
512 	struct crypto_blkcipher *tfm = hdev->tfm_aes;
513 	u8 confirm[16];
514 	int ret;
515 
516 	if (IS_ERR_OR_NULL(tfm))
517 		return SMP_UNSPECIFIED;
518 
519 	BT_DBG("conn %p %s", conn, conn->hcon->out ? "master" : "slave");
520 
521 	/* Prevent mutual access to hdev->tfm_aes */
522 	hci_dev_lock(hdev);
523 
524 	ret = smp_c1(tfm, smp->tk, smp->rrnd, smp->preq, smp->prsp,
525 		     hcon->init_addr_type, &hcon->init_addr,
526 		     hcon->resp_addr_type, &hcon->resp_addr, confirm);
527 
528 	hci_dev_unlock(hdev);
529 
530 	if (ret)
531 		return SMP_UNSPECIFIED;
532 
533 	if (memcmp(smp->pcnf, confirm, sizeof(smp->pcnf)) != 0) {
534 		BT_ERR("Pairing failed (confirmation values mismatch)");
535 		return SMP_CONFIRM_FAILED;
536 	}
537 
538 	if (hcon->out) {
539 		u8 stk[16];
540 		__le64 rand = 0;
541 		__le16 ediv = 0;
542 
543 		smp_s1(tfm, smp->tk, smp->rrnd, smp->prnd, stk);
544 
545 		memset(stk + smp->enc_key_size, 0,
546 		       SMP_MAX_ENC_KEY_SIZE - smp->enc_key_size);
547 
548 		if (test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &hcon->flags))
549 			return SMP_UNSPECIFIED;
550 
551 		hci_le_start_enc(hcon, ediv, rand, stk);
552 		hcon->enc_key_size = smp->enc_key_size;
553 	} else {
554 		u8 stk[16], auth;
555 		__le64 rand = 0;
556 		__le16 ediv = 0;
557 
558 		smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM, sizeof(smp->prnd),
559 			     smp->prnd);
560 
561 		smp_s1(tfm, smp->tk, smp->prnd, smp->rrnd, stk);
562 
563 		memset(stk + smp->enc_key_size, 0,
564 		       SMP_MAX_ENC_KEY_SIZE - smp->enc_key_size);
565 
566 		if (hcon->pending_sec_level == BT_SECURITY_HIGH)
567 			auth = 1;
568 		else
569 			auth = 0;
570 
571 		hci_add_ltk(hcon->hdev, &hcon->dst, hcon->dst_type,
572 			    HCI_SMP_STK_SLAVE, auth, stk, smp->enc_key_size,
573 			    ediv, rand);
574 	}
575 
576 	return 0;
577 }
578 
579 static struct smp_chan *smp_chan_create(struct l2cap_conn *conn)
580 {
581 	struct smp_chan *smp;
582 
583 	smp = kzalloc(sizeof(*smp), GFP_ATOMIC);
584 	if (!smp)
585 		return NULL;
586 
587 	smp->conn = conn;
588 	conn->smp_chan = smp;
589 	conn->hcon->smp_conn = conn;
590 
591 	hci_conn_hold(conn->hcon);
592 
593 	return smp;
594 }
595 
596 void smp_chan_destroy(struct l2cap_conn *conn)
597 {
598 	struct smp_chan *smp = conn->smp_chan;
599 	bool complete;
600 
601 	BUG_ON(!smp);
602 
603 	complete = test_bit(SMP_FLAG_COMPLETE, &smp->flags);
604 	mgmt_smp_complete(conn->hcon, complete);
605 
606 	kfree(smp->csrk);
607 	kfree(smp->slave_csrk);
608 
609 	/* If pairing failed clean up any keys we might have */
610 	if (!complete) {
611 		if (smp->ltk) {
612 			list_del(&smp->ltk->list);
613 			kfree(smp->ltk);
614 		}
615 
616 		if (smp->slave_ltk) {
617 			list_del(&smp->slave_ltk->list);
618 			kfree(smp->slave_ltk);
619 		}
620 
621 		if (smp->remote_irk) {
622 			list_del(&smp->remote_irk->list);
623 			kfree(smp->remote_irk);
624 		}
625 	}
626 
627 	kfree(smp);
628 	conn->smp_chan = NULL;
629 	conn->hcon->smp_conn = NULL;
630 	hci_conn_drop(conn->hcon);
631 }
632 
633 int smp_user_confirm_reply(struct hci_conn *hcon, u16 mgmt_op, __le32 passkey)
634 {
635 	struct l2cap_conn *conn = hcon->smp_conn;
636 	struct smp_chan *smp;
637 	u32 value;
638 
639 	BT_DBG("");
640 
641 	if (!conn)
642 		return -ENOTCONN;
643 
644 	smp = conn->smp_chan;
645 
646 	switch (mgmt_op) {
647 	case MGMT_OP_USER_PASSKEY_REPLY:
648 		value = le32_to_cpu(passkey);
649 		memset(smp->tk, 0, sizeof(smp->tk));
650 		BT_DBG("PassKey: %d", value);
651 		put_unaligned_le32(value, smp->tk);
652 		/* Fall Through */
653 	case MGMT_OP_USER_CONFIRM_REPLY:
654 		set_bit(SMP_FLAG_TK_VALID, &smp->flags);
655 		break;
656 	case MGMT_OP_USER_PASSKEY_NEG_REPLY:
657 	case MGMT_OP_USER_CONFIRM_NEG_REPLY:
658 		smp_failure(conn, SMP_PASSKEY_ENTRY_FAILED);
659 		return 0;
660 	default:
661 		smp_failure(conn, SMP_PASSKEY_ENTRY_FAILED);
662 		return -EOPNOTSUPP;
663 	}
664 
665 	/* If it is our turn to send Pairing Confirm, do so now */
666 	if (test_bit(SMP_FLAG_CFM_PENDING, &smp->flags)) {
667 		u8 rsp = smp_confirm(smp);
668 		if (rsp)
669 			smp_failure(conn, rsp);
670 	}
671 
672 	return 0;
673 }
674 
675 static u8 smp_cmd_pairing_req(struct l2cap_conn *conn, struct sk_buff *skb)
676 {
677 	struct smp_cmd_pairing rsp, *req = (void *) skb->data;
678 	struct smp_chan *smp;
679 	u8 key_size, auth, sec_level;
680 	int ret;
681 
682 	BT_DBG("conn %p", conn);
683 
684 	if (skb->len < sizeof(*req))
685 		return SMP_INVALID_PARAMS;
686 
687 	if (conn->hcon->link_mode & HCI_LM_MASTER)
688 		return SMP_CMD_NOTSUPP;
689 
690 	if (!test_and_set_bit(HCI_CONN_LE_SMP_PEND, &conn->hcon->flags))
691 		smp = smp_chan_create(conn);
692 	else
693 		smp = conn->smp_chan;
694 
695 	if (!smp)
696 		return SMP_UNSPECIFIED;
697 
698 	smp->preq[0] = SMP_CMD_PAIRING_REQ;
699 	memcpy(&smp->preq[1], req, sizeof(*req));
700 	skb_pull(skb, sizeof(*req));
701 
702 	/* We didn't start the pairing, so match remote */
703 	auth = req->auth_req;
704 
705 	sec_level = authreq_to_seclevel(auth);
706 	if (sec_level > conn->hcon->pending_sec_level)
707 		conn->hcon->pending_sec_level = sec_level;
708 
709 	/* If we need MITM check that it can be acheived */
710 	if (conn->hcon->pending_sec_level >= BT_SECURITY_HIGH) {
711 		u8 method;
712 
713 		method = get_auth_method(smp, conn->hcon->io_capability,
714 					 req->io_capability);
715 		if (method == JUST_WORKS || method == JUST_CFM)
716 			return SMP_AUTH_REQUIREMENTS;
717 	}
718 
719 	build_pairing_cmd(conn, req, &rsp, auth);
720 
721 	key_size = min(req->max_key_size, rsp.max_key_size);
722 	if (check_enc_key_size(conn, key_size))
723 		return SMP_ENC_KEY_SIZE;
724 
725 	get_random_bytes(smp->prnd, sizeof(smp->prnd));
726 
727 	smp->prsp[0] = SMP_CMD_PAIRING_RSP;
728 	memcpy(&smp->prsp[1], &rsp, sizeof(rsp));
729 
730 	smp_send_cmd(conn, SMP_CMD_PAIRING_RSP, sizeof(rsp), &rsp);
731 
732 	/* Request setup of TK */
733 	ret = tk_request(conn, 0, auth, rsp.io_capability, req->io_capability);
734 	if (ret)
735 		return SMP_UNSPECIFIED;
736 
737 	clear_bit(SMP_FLAG_INITIATOR, &smp->flags);
738 
739 	return 0;
740 }
741 
742 static u8 smp_cmd_pairing_rsp(struct l2cap_conn *conn, struct sk_buff *skb)
743 {
744 	struct smp_cmd_pairing *req, *rsp = (void *) skb->data;
745 	struct smp_chan *smp = conn->smp_chan;
746 	u8 key_size, auth = SMP_AUTH_NONE;
747 	int ret;
748 
749 	BT_DBG("conn %p", conn);
750 
751 	if (skb->len < sizeof(*rsp))
752 		return SMP_INVALID_PARAMS;
753 
754 	if (!(conn->hcon->link_mode & HCI_LM_MASTER))
755 		return SMP_CMD_NOTSUPP;
756 
757 	skb_pull(skb, sizeof(*rsp));
758 
759 	req = (void *) &smp->preq[1];
760 
761 	key_size = min(req->max_key_size, rsp->max_key_size);
762 	if (check_enc_key_size(conn, key_size))
763 		return SMP_ENC_KEY_SIZE;
764 
765 	/* If we need MITM check that it can be acheived */
766 	if (conn->hcon->pending_sec_level >= BT_SECURITY_HIGH) {
767 		u8 method;
768 
769 		method = get_auth_method(smp, req->io_capability,
770 					 rsp->io_capability);
771 		if (method == JUST_WORKS || method == JUST_CFM)
772 			return SMP_AUTH_REQUIREMENTS;
773 	}
774 
775 	get_random_bytes(smp->prnd, sizeof(smp->prnd));
776 
777 	smp->prsp[0] = SMP_CMD_PAIRING_RSP;
778 	memcpy(&smp->prsp[1], rsp, sizeof(*rsp));
779 
780 	/* Update remote key distribution in case the remote cleared
781 	 * some bits that we had enabled in our request.
782 	 */
783 	smp->remote_key_dist &= rsp->resp_key_dist;
784 
785 	if ((req->auth_req & SMP_AUTH_BONDING) &&
786 	    (rsp->auth_req & SMP_AUTH_BONDING))
787 		auth = SMP_AUTH_BONDING;
788 
789 	auth |= (req->auth_req | rsp->auth_req) & SMP_AUTH_MITM;
790 
791 	ret = tk_request(conn, 0, auth, req->io_capability, rsp->io_capability);
792 	if (ret)
793 		return SMP_UNSPECIFIED;
794 
795 	set_bit(SMP_FLAG_CFM_PENDING, &smp->flags);
796 
797 	/* Can't compose response until we have been confirmed */
798 	if (test_bit(SMP_FLAG_TK_VALID, &smp->flags))
799 		return smp_confirm(smp);
800 
801 	return 0;
802 }
803 
804 static u8 smp_cmd_pairing_confirm(struct l2cap_conn *conn, struct sk_buff *skb)
805 {
806 	struct smp_chan *smp = conn->smp_chan;
807 
808 	BT_DBG("conn %p %s", conn, conn->hcon->out ? "master" : "slave");
809 
810 	if (skb->len < sizeof(smp->pcnf))
811 		return SMP_INVALID_PARAMS;
812 
813 	memcpy(smp->pcnf, skb->data, sizeof(smp->pcnf));
814 	skb_pull(skb, sizeof(smp->pcnf));
815 
816 	if (conn->hcon->out)
817 		smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM, sizeof(smp->prnd),
818 			     smp->prnd);
819 	else if (test_bit(SMP_FLAG_TK_VALID, &smp->flags))
820 		return smp_confirm(smp);
821 	else
822 		set_bit(SMP_FLAG_CFM_PENDING, &smp->flags);
823 
824 	return 0;
825 }
826 
827 static u8 smp_cmd_pairing_random(struct l2cap_conn *conn, struct sk_buff *skb)
828 {
829 	struct smp_chan *smp = conn->smp_chan;
830 
831 	BT_DBG("conn %p", conn);
832 
833 	if (skb->len < sizeof(smp->rrnd))
834 		return SMP_INVALID_PARAMS;
835 
836 	memcpy(smp->rrnd, skb->data, sizeof(smp->rrnd));
837 	skb_pull(skb, sizeof(smp->rrnd));
838 
839 	return smp_random(smp);
840 }
841 
842 static u8 smp_ltk_encrypt(struct l2cap_conn *conn, u8 sec_level)
843 {
844 	struct smp_ltk *key;
845 	struct hci_conn *hcon = conn->hcon;
846 
847 	key = hci_find_ltk_by_addr(hcon->hdev, &hcon->dst, hcon->dst_type,
848 				   hcon->out);
849 	if (!key)
850 		return 0;
851 
852 	if (sec_level > BT_SECURITY_MEDIUM && !key->authenticated)
853 		return 0;
854 
855 	if (test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &hcon->flags))
856 		return 1;
857 
858 	hci_le_start_enc(hcon, key->ediv, key->rand, key->val);
859 	hcon->enc_key_size = key->enc_size;
860 
861 	return 1;
862 }
863 
864 static u8 smp_cmd_security_req(struct l2cap_conn *conn, struct sk_buff *skb)
865 {
866 	struct smp_cmd_security_req *rp = (void *) skb->data;
867 	struct smp_cmd_pairing cp;
868 	struct hci_conn *hcon = conn->hcon;
869 	struct smp_chan *smp;
870 	u8 sec_level;
871 
872 	BT_DBG("conn %p", conn);
873 
874 	if (skb->len < sizeof(*rp))
875 		return SMP_INVALID_PARAMS;
876 
877 	if (!(conn->hcon->link_mode & HCI_LM_MASTER))
878 		return SMP_CMD_NOTSUPP;
879 
880 	sec_level = authreq_to_seclevel(rp->auth_req);
881 	if (sec_level > hcon->pending_sec_level)
882 		hcon->pending_sec_level = sec_level;
883 
884 	if (smp_ltk_encrypt(conn, hcon->pending_sec_level))
885 		return 0;
886 
887 	if (test_and_set_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags))
888 		return 0;
889 
890 	smp = smp_chan_create(conn);
891 
892 	skb_pull(skb, sizeof(*rp));
893 
894 	memset(&cp, 0, sizeof(cp));
895 	build_pairing_cmd(conn, &cp, NULL, rp->auth_req);
896 
897 	smp->preq[0] = SMP_CMD_PAIRING_REQ;
898 	memcpy(&smp->preq[1], &cp, sizeof(cp));
899 
900 	smp_send_cmd(conn, SMP_CMD_PAIRING_REQ, sizeof(cp), &cp);
901 
902 	clear_bit(SMP_FLAG_INITIATOR, &smp->flags);
903 
904 	return 0;
905 }
906 
907 bool smp_sufficient_security(struct hci_conn *hcon, u8 sec_level)
908 {
909 	if (sec_level == BT_SECURITY_LOW)
910 		return true;
911 
912 	if (hcon->sec_level >= sec_level)
913 		return true;
914 
915 	return false;
916 }
917 
918 int smp_conn_security(struct hci_conn *hcon, __u8 sec_level)
919 {
920 	struct l2cap_conn *conn = hcon->l2cap_data;
921 	struct smp_chan *smp;
922 	__u8 authreq;
923 
924 	BT_DBG("conn %p hcon %p level 0x%2.2x", conn, hcon, sec_level);
925 
926 	/* This may be NULL if there's an unexpected disconnection */
927 	if (!conn)
928 		return 1;
929 
930 	if (!test_bit(HCI_LE_ENABLED, &hcon->hdev->dev_flags))
931 		return 1;
932 
933 	if (smp_sufficient_security(hcon, sec_level))
934 		return 1;
935 
936 	if (sec_level > hcon->pending_sec_level)
937 		hcon->pending_sec_level = sec_level;
938 
939 	if (hcon->link_mode & HCI_LM_MASTER)
940 		if (smp_ltk_encrypt(conn, hcon->pending_sec_level))
941 			return 0;
942 
943 	if (test_and_set_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags))
944 		return 0;
945 
946 	smp = smp_chan_create(conn);
947 	if (!smp)
948 		return 1;
949 
950 	authreq = seclevel_to_authreq(sec_level);
951 
952 	/* Require MITM if IO Capability allows or the security level
953 	 * requires it.
954 	 */
955 	if (hcon->io_capability != HCI_IO_NO_INPUT_OUTPUT ||
956 	    hcon->pending_sec_level > BT_SECURITY_MEDIUM)
957 		authreq |= SMP_AUTH_MITM;
958 
959 	if (hcon->link_mode & HCI_LM_MASTER) {
960 		struct smp_cmd_pairing cp;
961 
962 		build_pairing_cmd(conn, &cp, NULL, authreq);
963 		smp->preq[0] = SMP_CMD_PAIRING_REQ;
964 		memcpy(&smp->preq[1], &cp, sizeof(cp));
965 
966 		smp_send_cmd(conn, SMP_CMD_PAIRING_REQ, sizeof(cp), &cp);
967 	} else {
968 		struct smp_cmd_security_req cp;
969 		cp.auth_req = authreq;
970 		smp_send_cmd(conn, SMP_CMD_SECURITY_REQ, sizeof(cp), &cp);
971 	}
972 
973 	set_bit(SMP_FLAG_INITIATOR, &smp->flags);
974 
975 	return 0;
976 }
977 
978 static int smp_cmd_encrypt_info(struct l2cap_conn *conn, struct sk_buff *skb)
979 {
980 	struct smp_cmd_encrypt_info *rp = (void *) skb->data;
981 	struct smp_chan *smp = conn->smp_chan;
982 
983 	BT_DBG("conn %p", conn);
984 
985 	if (skb->len < sizeof(*rp))
986 		return SMP_INVALID_PARAMS;
987 
988 	/* Ignore this PDU if it wasn't requested */
989 	if (!(smp->remote_key_dist & SMP_DIST_ENC_KEY))
990 		return 0;
991 
992 	skb_pull(skb, sizeof(*rp));
993 
994 	memcpy(smp->tk, rp->ltk, sizeof(smp->tk));
995 
996 	return 0;
997 }
998 
999 static int smp_cmd_master_ident(struct l2cap_conn *conn, struct sk_buff *skb)
1000 {
1001 	struct smp_cmd_master_ident *rp = (void *) skb->data;
1002 	struct smp_chan *smp = conn->smp_chan;
1003 	struct hci_dev *hdev = conn->hcon->hdev;
1004 	struct hci_conn *hcon = conn->hcon;
1005 	struct smp_ltk *ltk;
1006 	u8 authenticated;
1007 
1008 	BT_DBG("conn %p", conn);
1009 
1010 	if (skb->len < sizeof(*rp))
1011 		return SMP_INVALID_PARAMS;
1012 
1013 	/* Ignore this PDU if it wasn't requested */
1014 	if (!(smp->remote_key_dist & SMP_DIST_ENC_KEY))
1015 		return 0;
1016 
1017 	/* Mark the information as received */
1018 	smp->remote_key_dist &= ~SMP_DIST_ENC_KEY;
1019 
1020 	skb_pull(skb, sizeof(*rp));
1021 
1022 	hci_dev_lock(hdev);
1023 	authenticated = (hcon->sec_level == BT_SECURITY_HIGH);
1024 	ltk = hci_add_ltk(hdev, &hcon->dst, hcon->dst_type, HCI_SMP_LTK,
1025 			  authenticated, smp->tk, smp->enc_key_size,
1026 			  rp->ediv, rp->rand);
1027 	smp->ltk = ltk;
1028 	if (!(smp->remote_key_dist & SMP_DIST_ID_KEY))
1029 		smp_distribute_keys(conn);
1030 	hci_dev_unlock(hdev);
1031 
1032 	return 0;
1033 }
1034 
1035 static int smp_cmd_ident_info(struct l2cap_conn *conn, struct sk_buff *skb)
1036 {
1037 	struct smp_cmd_ident_info *info = (void *) skb->data;
1038 	struct smp_chan *smp = conn->smp_chan;
1039 
1040 	BT_DBG("");
1041 
1042 	if (skb->len < sizeof(*info))
1043 		return SMP_INVALID_PARAMS;
1044 
1045 	/* Ignore this PDU if it wasn't requested */
1046 	if (!(smp->remote_key_dist & SMP_DIST_ID_KEY))
1047 		return 0;
1048 
1049 	skb_pull(skb, sizeof(*info));
1050 
1051 	memcpy(smp->irk, info->irk, 16);
1052 
1053 	return 0;
1054 }
1055 
1056 static int smp_cmd_ident_addr_info(struct l2cap_conn *conn,
1057 				   struct sk_buff *skb)
1058 {
1059 	struct smp_cmd_ident_addr_info *info = (void *) skb->data;
1060 	struct smp_chan *smp = conn->smp_chan;
1061 	struct hci_conn *hcon = conn->hcon;
1062 	bdaddr_t rpa;
1063 
1064 	BT_DBG("");
1065 
1066 	if (skb->len < sizeof(*info))
1067 		return SMP_INVALID_PARAMS;
1068 
1069 	/* Ignore this PDU if it wasn't requested */
1070 	if (!(smp->remote_key_dist & SMP_DIST_ID_KEY))
1071 		return 0;
1072 
1073 	/* Mark the information as received */
1074 	smp->remote_key_dist &= ~SMP_DIST_ID_KEY;
1075 
1076 	skb_pull(skb, sizeof(*info));
1077 
1078 	/* Strictly speaking the Core Specification (4.1) allows sending
1079 	 * an empty address which would force us to rely on just the IRK
1080 	 * as "identity information". However, since such
1081 	 * implementations are not known of and in order to not over
1082 	 * complicate our implementation, simply pretend that we never
1083 	 * received an IRK for such a device.
1084 	 */
1085 	if (!bacmp(&info->bdaddr, BDADDR_ANY)) {
1086 		BT_ERR("Ignoring IRK with no identity address");
1087 		smp_distribute_keys(conn);
1088 		return 0;
1089 	}
1090 
1091 	bacpy(&smp->id_addr, &info->bdaddr);
1092 	smp->id_addr_type = info->addr_type;
1093 
1094 	if (hci_bdaddr_is_rpa(&hcon->dst, hcon->dst_type))
1095 		bacpy(&rpa, &hcon->dst);
1096 	else
1097 		bacpy(&rpa, BDADDR_ANY);
1098 
1099 	smp->remote_irk = hci_add_irk(conn->hcon->hdev, &smp->id_addr,
1100 				      smp->id_addr_type, smp->irk, &rpa);
1101 
1102 	smp_distribute_keys(conn);
1103 
1104 	return 0;
1105 }
1106 
1107 static int smp_cmd_sign_info(struct l2cap_conn *conn, struct sk_buff *skb)
1108 {
1109 	struct smp_cmd_sign_info *rp = (void *) skb->data;
1110 	struct smp_chan *smp = conn->smp_chan;
1111 	struct hci_dev *hdev = conn->hcon->hdev;
1112 	struct smp_csrk *csrk;
1113 
1114 	BT_DBG("conn %p", conn);
1115 
1116 	if (skb->len < sizeof(*rp))
1117 		return SMP_INVALID_PARAMS;
1118 
1119 	/* Ignore this PDU if it wasn't requested */
1120 	if (!(smp->remote_key_dist & SMP_DIST_SIGN))
1121 		return 0;
1122 
1123 	/* Mark the information as received */
1124 	smp->remote_key_dist &= ~SMP_DIST_SIGN;
1125 
1126 	skb_pull(skb, sizeof(*rp));
1127 
1128 	hci_dev_lock(hdev);
1129 	csrk = kzalloc(sizeof(*csrk), GFP_KERNEL);
1130 	if (csrk) {
1131 		csrk->master = 0x01;
1132 		memcpy(csrk->val, rp->csrk, sizeof(csrk->val));
1133 	}
1134 	smp->csrk = csrk;
1135 	if (!(smp->remote_key_dist & SMP_DIST_SIGN))
1136 		smp_distribute_keys(conn);
1137 	hci_dev_unlock(hdev);
1138 
1139 	return 0;
1140 }
1141 
1142 int smp_sig_channel(struct l2cap_conn *conn, struct sk_buff *skb)
1143 {
1144 	struct hci_conn *hcon = conn->hcon;
1145 	__u8 code, reason;
1146 	int err = 0;
1147 
1148 	if (hcon->type != LE_LINK) {
1149 		kfree_skb(skb);
1150 		return 0;
1151 	}
1152 
1153 	if (skb->len < 1) {
1154 		kfree_skb(skb);
1155 		return -EILSEQ;
1156 	}
1157 
1158 	if (!test_bit(HCI_LE_ENABLED, &hcon->hdev->dev_flags)) {
1159 		err = -ENOTSUPP;
1160 		reason = SMP_PAIRING_NOTSUPP;
1161 		goto done;
1162 	}
1163 
1164 	code = skb->data[0];
1165 	skb_pull(skb, sizeof(code));
1166 
1167 	/*
1168 	 * The SMP context must be initialized for all other PDUs except
1169 	 * pairing and security requests. If we get any other PDU when
1170 	 * not initialized simply disconnect (done if this function
1171 	 * returns an error).
1172 	 */
1173 	if (code != SMP_CMD_PAIRING_REQ && code != SMP_CMD_SECURITY_REQ &&
1174 	    !conn->smp_chan) {
1175 		BT_ERR("Unexpected SMP command 0x%02x. Disconnecting.", code);
1176 		kfree_skb(skb);
1177 		return -ENOTSUPP;
1178 	}
1179 
1180 	switch (code) {
1181 	case SMP_CMD_PAIRING_REQ:
1182 		reason = smp_cmd_pairing_req(conn, skb);
1183 		break;
1184 
1185 	case SMP_CMD_PAIRING_FAIL:
1186 		smp_failure(conn, 0);
1187 		reason = 0;
1188 		err = -EPERM;
1189 		break;
1190 
1191 	case SMP_CMD_PAIRING_RSP:
1192 		reason = smp_cmd_pairing_rsp(conn, skb);
1193 		break;
1194 
1195 	case SMP_CMD_SECURITY_REQ:
1196 		reason = smp_cmd_security_req(conn, skb);
1197 		break;
1198 
1199 	case SMP_CMD_PAIRING_CONFIRM:
1200 		reason = smp_cmd_pairing_confirm(conn, skb);
1201 		break;
1202 
1203 	case SMP_CMD_PAIRING_RANDOM:
1204 		reason = smp_cmd_pairing_random(conn, skb);
1205 		break;
1206 
1207 	case SMP_CMD_ENCRYPT_INFO:
1208 		reason = smp_cmd_encrypt_info(conn, skb);
1209 		break;
1210 
1211 	case SMP_CMD_MASTER_IDENT:
1212 		reason = smp_cmd_master_ident(conn, skb);
1213 		break;
1214 
1215 	case SMP_CMD_IDENT_INFO:
1216 		reason = smp_cmd_ident_info(conn, skb);
1217 		break;
1218 
1219 	case SMP_CMD_IDENT_ADDR_INFO:
1220 		reason = smp_cmd_ident_addr_info(conn, skb);
1221 		break;
1222 
1223 	case SMP_CMD_SIGN_INFO:
1224 		reason = smp_cmd_sign_info(conn, skb);
1225 		break;
1226 
1227 	default:
1228 		BT_DBG("Unknown command code 0x%2.2x", code);
1229 
1230 		reason = SMP_CMD_NOTSUPP;
1231 		err = -EOPNOTSUPP;
1232 		goto done;
1233 	}
1234 
1235 done:
1236 	if (reason)
1237 		smp_failure(conn, reason);
1238 
1239 	kfree_skb(skb);
1240 	return err;
1241 }
1242 
1243 static void smp_notify_keys(struct l2cap_conn *conn)
1244 {
1245 	struct smp_chan *smp = conn->smp_chan;
1246 	struct hci_conn *hcon = conn->hcon;
1247 	struct hci_dev *hdev = hcon->hdev;
1248 	struct smp_cmd_pairing *req = (void *) &smp->preq[1];
1249 	struct smp_cmd_pairing *rsp = (void *) &smp->prsp[1];
1250 	bool persistent;
1251 
1252 	if (smp->remote_irk) {
1253 		mgmt_new_irk(hdev, smp->remote_irk);
1254 		/* Now that user space can be considered to know the
1255 		 * identity address track the connection based on it
1256 		 * from now on.
1257 		 */
1258 		bacpy(&hcon->dst, &smp->remote_irk->bdaddr);
1259 		hcon->dst_type = smp->remote_irk->addr_type;
1260 		l2cap_conn_update_id_addr(hcon);
1261 	}
1262 
1263 	/* The LTKs and CSRKs should be persistent only if both sides
1264 	 * had the bonding bit set in their authentication requests.
1265 	 */
1266 	persistent = !!((req->auth_req & rsp->auth_req) & SMP_AUTH_BONDING);
1267 
1268 	if (smp->csrk) {
1269 		smp->csrk->bdaddr_type = hcon->dst_type;
1270 		bacpy(&smp->csrk->bdaddr, &hcon->dst);
1271 		mgmt_new_csrk(hdev, smp->csrk, persistent);
1272 	}
1273 
1274 	if (smp->slave_csrk) {
1275 		smp->slave_csrk->bdaddr_type = hcon->dst_type;
1276 		bacpy(&smp->slave_csrk->bdaddr, &hcon->dst);
1277 		mgmt_new_csrk(hdev, smp->slave_csrk, persistent);
1278 	}
1279 
1280 	if (smp->ltk) {
1281 		smp->ltk->bdaddr_type = hcon->dst_type;
1282 		bacpy(&smp->ltk->bdaddr, &hcon->dst);
1283 		mgmt_new_ltk(hdev, smp->ltk, persistent);
1284 	}
1285 
1286 	if (smp->slave_ltk) {
1287 		smp->slave_ltk->bdaddr_type = hcon->dst_type;
1288 		bacpy(&smp->slave_ltk->bdaddr, &hcon->dst);
1289 		mgmt_new_ltk(hdev, smp->slave_ltk, persistent);
1290 	}
1291 }
1292 
1293 int smp_distribute_keys(struct l2cap_conn *conn)
1294 {
1295 	struct smp_cmd_pairing *req, *rsp;
1296 	struct smp_chan *smp = conn->smp_chan;
1297 	struct hci_conn *hcon = conn->hcon;
1298 	struct hci_dev *hdev = hcon->hdev;
1299 	__u8 *keydist;
1300 
1301 	BT_DBG("conn %p", conn);
1302 
1303 	if (!test_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags))
1304 		return 0;
1305 
1306 	rsp = (void *) &smp->prsp[1];
1307 
1308 	/* The responder sends its keys first */
1309 	if (hcon->out && (smp->remote_key_dist & 0x07))
1310 		return 0;
1311 
1312 	req = (void *) &smp->preq[1];
1313 
1314 	if (hcon->out) {
1315 		keydist = &rsp->init_key_dist;
1316 		*keydist &= req->init_key_dist;
1317 	} else {
1318 		keydist = &rsp->resp_key_dist;
1319 		*keydist &= req->resp_key_dist;
1320 	}
1321 
1322 	BT_DBG("keydist 0x%x", *keydist);
1323 
1324 	if (*keydist & SMP_DIST_ENC_KEY) {
1325 		struct smp_cmd_encrypt_info enc;
1326 		struct smp_cmd_master_ident ident;
1327 		struct smp_ltk *ltk;
1328 		u8 authenticated;
1329 		__le16 ediv;
1330 		__le64 rand;
1331 
1332 		get_random_bytes(enc.ltk, sizeof(enc.ltk));
1333 		get_random_bytes(&ediv, sizeof(ediv));
1334 		get_random_bytes(&rand, sizeof(rand));
1335 
1336 		smp_send_cmd(conn, SMP_CMD_ENCRYPT_INFO, sizeof(enc), &enc);
1337 
1338 		authenticated = hcon->sec_level == BT_SECURITY_HIGH;
1339 		ltk = hci_add_ltk(hdev, &hcon->dst, hcon->dst_type,
1340 				  HCI_SMP_LTK_SLAVE, authenticated, enc.ltk,
1341 				  smp->enc_key_size, ediv, rand);
1342 		smp->slave_ltk = ltk;
1343 
1344 		ident.ediv = ediv;
1345 		ident.rand = rand;
1346 
1347 		smp_send_cmd(conn, SMP_CMD_MASTER_IDENT, sizeof(ident), &ident);
1348 
1349 		*keydist &= ~SMP_DIST_ENC_KEY;
1350 	}
1351 
1352 	if (*keydist & SMP_DIST_ID_KEY) {
1353 		struct smp_cmd_ident_addr_info addrinfo;
1354 		struct smp_cmd_ident_info idinfo;
1355 
1356 		memcpy(idinfo.irk, hdev->irk, sizeof(idinfo.irk));
1357 
1358 		smp_send_cmd(conn, SMP_CMD_IDENT_INFO, sizeof(idinfo), &idinfo);
1359 
1360 		/* The hci_conn contains the local identity address
1361 		 * after the connection has been established.
1362 		 *
1363 		 * This is true even when the connection has been
1364 		 * established using a resolvable random address.
1365 		 */
1366 		bacpy(&addrinfo.bdaddr, &hcon->src);
1367 		addrinfo.addr_type = hcon->src_type;
1368 
1369 		smp_send_cmd(conn, SMP_CMD_IDENT_ADDR_INFO, sizeof(addrinfo),
1370 			     &addrinfo);
1371 
1372 		*keydist &= ~SMP_DIST_ID_KEY;
1373 	}
1374 
1375 	if (*keydist & SMP_DIST_SIGN) {
1376 		struct smp_cmd_sign_info sign;
1377 		struct smp_csrk *csrk;
1378 
1379 		/* Generate a new random key */
1380 		get_random_bytes(sign.csrk, sizeof(sign.csrk));
1381 
1382 		csrk = kzalloc(sizeof(*csrk), GFP_KERNEL);
1383 		if (csrk) {
1384 			csrk->master = 0x00;
1385 			memcpy(csrk->val, sign.csrk, sizeof(csrk->val));
1386 		}
1387 		smp->slave_csrk = csrk;
1388 
1389 		smp_send_cmd(conn, SMP_CMD_SIGN_INFO, sizeof(sign), &sign);
1390 
1391 		*keydist &= ~SMP_DIST_SIGN;
1392 	}
1393 
1394 	/* If there are still keys to be received wait for them */
1395 	if ((smp->remote_key_dist & 0x07))
1396 		return 0;
1397 
1398 	clear_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags);
1399 	cancel_delayed_work_sync(&conn->security_timer);
1400 	set_bit(SMP_FLAG_COMPLETE, &smp->flags);
1401 	smp_notify_keys(conn);
1402 
1403 	smp_chan_destroy(conn);
1404 
1405 	return 0;
1406 }
1407