xref: /openbmc/linux/net/bluetooth/smp.c (revision 63dc02bd)
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 <net/bluetooth/bluetooth.h>
24 #include <net/bluetooth/hci_core.h>
25 #include <net/bluetooth/l2cap.h>
26 #include <net/bluetooth/mgmt.h>
27 #include <net/bluetooth/smp.h>
28 #include <linux/crypto.h>
29 #include <linux/scatterlist.h>
30 #include <crypto/b128ops.h>
31 
32 #define SMP_TIMEOUT	msecs_to_jiffies(30000)
33 
34 static inline void swap128(u8 src[16], u8 dst[16])
35 {
36 	int i;
37 	for (i = 0; i < 16; i++)
38 		dst[15 - i] = src[i];
39 }
40 
41 static inline void swap56(u8 src[7], u8 dst[7])
42 {
43 	int i;
44 	for (i = 0; i < 7; i++)
45 		dst[6 - i] = src[i];
46 }
47 
48 static int smp_e(struct crypto_blkcipher *tfm, const u8 *k, u8 *r)
49 {
50 	struct blkcipher_desc desc;
51 	struct scatterlist sg;
52 	int err, iv_len;
53 	unsigned char iv[128];
54 
55 	if (tfm == NULL) {
56 		BT_ERR("tfm %p", tfm);
57 		return -EINVAL;
58 	}
59 
60 	desc.tfm = tfm;
61 	desc.flags = 0;
62 
63 	err = crypto_blkcipher_setkey(tfm, k, 16);
64 	if (err) {
65 		BT_ERR("cipher setkey failed: %d", err);
66 		return err;
67 	}
68 
69 	sg_init_one(&sg, r, 16);
70 
71 	iv_len = crypto_blkcipher_ivsize(tfm);
72 	if (iv_len) {
73 		memset(&iv, 0xff, iv_len);
74 		crypto_blkcipher_set_iv(tfm, iv, iv_len);
75 	}
76 
77 	err = crypto_blkcipher_encrypt(&desc, &sg, &sg, 16);
78 	if (err)
79 		BT_ERR("Encrypt data error %d", err);
80 
81 	return err;
82 }
83 
84 static int smp_c1(struct crypto_blkcipher *tfm, u8 k[16], u8 r[16],
85 		u8 preq[7], u8 pres[7], u8 _iat, bdaddr_t *ia,
86 		u8 _rat, bdaddr_t *ra, u8 res[16])
87 {
88 	u8 p1[16], p2[16];
89 	int err;
90 
91 	memset(p1, 0, 16);
92 
93 	/* p1 = pres || preq || _rat || _iat */
94 	swap56(pres, p1);
95 	swap56(preq, p1 + 7);
96 	p1[14] = _rat;
97 	p1[15] = _iat;
98 
99 	memset(p2, 0, 16);
100 
101 	/* p2 = padding || ia || ra */
102 	baswap((bdaddr_t *) (p2 + 4), ia);
103 	baswap((bdaddr_t *) (p2 + 10), ra);
104 
105 	/* res = r XOR p1 */
106 	u128_xor((u128 *) res, (u128 *) r, (u128 *) p1);
107 
108 	/* res = e(k, res) */
109 	err = smp_e(tfm, k, res);
110 	if (err) {
111 		BT_ERR("Encrypt data error");
112 		return err;
113 	}
114 
115 	/* res = res XOR p2 */
116 	u128_xor((u128 *) res, (u128 *) res, (u128 *) p2);
117 
118 	/* res = e(k, res) */
119 	err = smp_e(tfm, k, res);
120 	if (err)
121 		BT_ERR("Encrypt data error");
122 
123 	return err;
124 }
125 
126 static int smp_s1(struct crypto_blkcipher *tfm, u8 k[16],
127 			u8 r1[16], u8 r2[16], u8 _r[16])
128 {
129 	int err;
130 
131 	/* Just least significant octets from r1 and r2 are considered */
132 	memcpy(_r, r1 + 8, 8);
133 	memcpy(_r + 8, r2 + 8, 8);
134 
135 	err = smp_e(tfm, k, _r);
136 	if (err)
137 		BT_ERR("Encrypt data error");
138 
139 	return err;
140 }
141 
142 static int smp_rand(u8 *buf)
143 {
144 	get_random_bytes(buf, 16);
145 
146 	return 0;
147 }
148 
149 static struct sk_buff *smp_build_cmd(struct l2cap_conn *conn, u8 code,
150 						u16 dlen, void *data)
151 {
152 	struct sk_buff *skb;
153 	struct l2cap_hdr *lh;
154 	int len;
155 
156 	len = L2CAP_HDR_SIZE + sizeof(code) + dlen;
157 
158 	if (len > conn->mtu)
159 		return NULL;
160 
161 	skb = bt_skb_alloc(len, GFP_ATOMIC);
162 	if (!skb)
163 		return NULL;
164 
165 	lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
166 	lh->len = cpu_to_le16(sizeof(code) + dlen);
167 	lh->cid = cpu_to_le16(L2CAP_CID_SMP);
168 
169 	memcpy(skb_put(skb, sizeof(code)), &code, sizeof(code));
170 
171 	memcpy(skb_put(skb, dlen), data, dlen);
172 
173 	return skb;
174 }
175 
176 static void smp_send_cmd(struct l2cap_conn *conn, u8 code, u16 len, void *data)
177 {
178 	struct sk_buff *skb = smp_build_cmd(conn, code, len, data);
179 
180 	BT_DBG("code 0x%2.2x", code);
181 
182 	if (!skb)
183 		return;
184 
185 	skb->priority = HCI_PRIO_MAX;
186 	hci_send_acl(conn->hchan, skb, 0);
187 
188 	cancel_delayed_work_sync(&conn->security_timer);
189 	schedule_delayed_work(&conn->security_timer, SMP_TIMEOUT);
190 }
191 
192 static __u8 authreq_to_seclevel(__u8 authreq)
193 {
194 	if (authreq & SMP_AUTH_MITM)
195 		return BT_SECURITY_HIGH;
196 	else
197 		return BT_SECURITY_MEDIUM;
198 }
199 
200 static __u8 seclevel_to_authreq(__u8 sec_level)
201 {
202 	switch (sec_level) {
203 	case BT_SECURITY_HIGH:
204 		return SMP_AUTH_MITM | SMP_AUTH_BONDING;
205 	case BT_SECURITY_MEDIUM:
206 		return SMP_AUTH_BONDING;
207 	default:
208 		return SMP_AUTH_NONE;
209 	}
210 }
211 
212 static void build_pairing_cmd(struct l2cap_conn *conn,
213 				struct smp_cmd_pairing *req,
214 				struct smp_cmd_pairing *rsp,
215 				__u8 authreq)
216 {
217 	u8 dist_keys = 0;
218 
219 	if (test_bit(HCI_PAIRABLE, &conn->hcon->hdev->dev_flags)) {
220 		dist_keys = SMP_DIST_ENC_KEY;
221 		authreq |= SMP_AUTH_BONDING;
222 	} else {
223 		authreq &= ~SMP_AUTH_BONDING;
224 	}
225 
226 	if (rsp == NULL) {
227 		req->io_capability = conn->hcon->io_capability;
228 		req->oob_flag = SMP_OOB_NOT_PRESENT;
229 		req->max_key_size = SMP_MAX_ENC_KEY_SIZE;
230 		req->init_key_dist = 0;
231 		req->resp_key_dist = dist_keys;
232 		req->auth_req = authreq;
233 		return;
234 	}
235 
236 	rsp->io_capability = conn->hcon->io_capability;
237 	rsp->oob_flag = SMP_OOB_NOT_PRESENT;
238 	rsp->max_key_size = SMP_MAX_ENC_KEY_SIZE;
239 	rsp->init_key_dist = 0;
240 	rsp->resp_key_dist = req->resp_key_dist & dist_keys;
241 	rsp->auth_req = authreq;
242 }
243 
244 static u8 check_enc_key_size(struct l2cap_conn *conn, __u8 max_key_size)
245 {
246 	struct smp_chan *smp = conn->smp_chan;
247 
248 	if ((max_key_size > SMP_MAX_ENC_KEY_SIZE) ||
249 			(max_key_size < SMP_MIN_ENC_KEY_SIZE))
250 		return SMP_ENC_KEY_SIZE;
251 
252 	smp->enc_key_size = max_key_size;
253 
254 	return 0;
255 }
256 
257 static void smp_failure(struct l2cap_conn *conn, u8 reason, u8 send)
258 {
259 	struct hci_conn *hcon = conn->hcon;
260 
261 	if (send)
262 		smp_send_cmd(conn, SMP_CMD_PAIRING_FAIL, sizeof(reason),
263 								&reason);
264 
265 	clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->hcon->flags);
266 	mgmt_auth_failed(conn->hcon->hdev, conn->dst, hcon->type,
267 			 hcon->dst_type, reason);
268 
269 	if (test_and_clear_bit(HCI_CONN_LE_SMP_PEND, &conn->hcon->flags)) {
270 		cancel_delayed_work_sync(&conn->security_timer);
271 		smp_chan_destroy(conn);
272 	}
273 }
274 
275 #define JUST_WORKS	0x00
276 #define JUST_CFM	0x01
277 #define REQ_PASSKEY	0x02
278 #define CFM_PASSKEY	0x03
279 #define REQ_OOB		0x04
280 #define OVERLAP		0xFF
281 
282 static const u8 gen_method[5][5] = {
283 	{ JUST_WORKS,  JUST_CFM,    REQ_PASSKEY, JUST_WORKS, REQ_PASSKEY },
284 	{ JUST_WORKS,  JUST_CFM,    REQ_PASSKEY, JUST_WORKS, REQ_PASSKEY },
285 	{ CFM_PASSKEY, CFM_PASSKEY, REQ_PASSKEY, JUST_WORKS, CFM_PASSKEY },
286 	{ JUST_WORKS,  JUST_CFM,    JUST_WORKS,  JUST_WORKS, JUST_CFM    },
287 	{ CFM_PASSKEY, CFM_PASSKEY, REQ_PASSKEY, JUST_WORKS, OVERLAP     },
288 };
289 
290 static int tk_request(struct l2cap_conn *conn, u8 remote_oob, u8 auth,
291 						u8 local_io, u8 remote_io)
292 {
293 	struct hci_conn *hcon = conn->hcon;
294 	struct smp_chan *smp = conn->smp_chan;
295 	u8 method;
296 	u32 passkey = 0;
297 	int ret = 0;
298 
299 	/* Initialize key for JUST WORKS */
300 	memset(smp->tk, 0, sizeof(smp->tk));
301 	clear_bit(SMP_FLAG_TK_VALID, &smp->smp_flags);
302 
303 	BT_DBG("tk_request: auth:%d lcl:%d rem:%d", auth, local_io, remote_io);
304 
305 	/* If neither side wants MITM, use JUST WORKS */
306 	/* If either side has unknown io_caps, use JUST WORKS */
307 	/* Otherwise, look up method from the table */
308 	if (!(auth & SMP_AUTH_MITM) ||
309 			local_io > SMP_IO_KEYBOARD_DISPLAY ||
310 			remote_io > SMP_IO_KEYBOARD_DISPLAY)
311 		method = JUST_WORKS;
312 	else
313 		method = gen_method[remote_io][local_io];
314 
315 	/* If not bonding, don't ask user to confirm a Zero TK */
316 	if (!(auth & SMP_AUTH_BONDING) && method == JUST_CFM)
317 		method = JUST_WORKS;
318 
319 	/* If Just Works, Continue with Zero TK */
320 	if (method == JUST_WORKS) {
321 		set_bit(SMP_FLAG_TK_VALID, &smp->smp_flags);
322 		return 0;
323 	}
324 
325 	/* Not Just Works/Confirm results in MITM Authentication */
326 	if (method != JUST_CFM)
327 		set_bit(SMP_FLAG_MITM_AUTH, &smp->smp_flags);
328 
329 	/* If both devices have Keyoard-Display I/O, the master
330 	 * Confirms and the slave Enters the passkey.
331 	 */
332 	if (method == OVERLAP) {
333 		if (hcon->link_mode & HCI_LM_MASTER)
334 			method = CFM_PASSKEY;
335 		else
336 			method = REQ_PASSKEY;
337 	}
338 
339 	/* Generate random passkey. Not valid until confirmed. */
340 	if (method == CFM_PASSKEY) {
341 		u8 key[16];
342 
343 		memset(key, 0, sizeof(key));
344 		get_random_bytes(&passkey, sizeof(passkey));
345 		passkey %= 1000000;
346 		put_unaligned_le32(passkey, key);
347 		swap128(key, smp->tk);
348 		BT_DBG("PassKey: %d", passkey);
349 	}
350 
351 	hci_dev_lock(hcon->hdev);
352 
353 	if (method == REQ_PASSKEY)
354 		ret = mgmt_user_passkey_request(hcon->hdev, conn->dst,
355 						hcon->type, hcon->dst_type);
356 	else
357 		ret = mgmt_user_confirm_request(hcon->hdev, conn->dst,
358 						hcon->type, hcon->dst_type,
359 						cpu_to_le32(passkey), 0);
360 
361 	hci_dev_unlock(hcon->hdev);
362 
363 	return ret;
364 }
365 
366 static void confirm_work(struct work_struct *work)
367 {
368 	struct smp_chan *smp = container_of(work, struct smp_chan, confirm);
369 	struct l2cap_conn *conn = smp->conn;
370 	struct crypto_blkcipher *tfm;
371 	struct smp_cmd_pairing_confirm cp;
372 	int ret;
373 	u8 res[16], reason;
374 
375 	BT_DBG("conn %p", conn);
376 
377 	tfm = crypto_alloc_blkcipher("ecb(aes)", 0, CRYPTO_ALG_ASYNC);
378 	if (IS_ERR(tfm)) {
379 		reason = SMP_UNSPECIFIED;
380 		goto error;
381 	}
382 
383 	smp->tfm = tfm;
384 
385 	if (conn->hcon->out)
386 		ret = smp_c1(tfm, smp->tk, smp->prnd, smp->preq, smp->prsp, 0,
387 			     conn->src, conn->hcon->dst_type, conn->dst, res);
388 	else
389 		ret = smp_c1(tfm, smp->tk, smp->prnd, smp->preq, smp->prsp,
390 			     conn->hcon->dst_type, conn->dst, 0, conn->src,
391 			     res);
392 	if (ret) {
393 		reason = SMP_UNSPECIFIED;
394 		goto error;
395 	}
396 
397 	clear_bit(SMP_FLAG_CFM_PENDING, &smp->smp_flags);
398 
399 	swap128(res, cp.confirm_val);
400 	smp_send_cmd(smp->conn, SMP_CMD_PAIRING_CONFIRM, sizeof(cp), &cp);
401 
402 	return;
403 
404 error:
405 	smp_failure(conn, reason, 1);
406 }
407 
408 static void random_work(struct work_struct *work)
409 {
410 	struct smp_chan *smp = container_of(work, struct smp_chan, random);
411 	struct l2cap_conn *conn = smp->conn;
412 	struct hci_conn *hcon = conn->hcon;
413 	struct crypto_blkcipher *tfm = smp->tfm;
414 	u8 reason, confirm[16], res[16], key[16];
415 	int ret;
416 
417 	if (IS_ERR_OR_NULL(tfm)) {
418 		reason = SMP_UNSPECIFIED;
419 		goto error;
420 	}
421 
422 	BT_DBG("conn %p %s", conn, conn->hcon->out ? "master" : "slave");
423 
424 	if (hcon->out)
425 		ret = smp_c1(tfm, smp->tk, smp->rrnd, smp->preq, smp->prsp, 0,
426 			     conn->src, hcon->dst_type, conn->dst, res);
427 	else
428 		ret = smp_c1(tfm, smp->tk, smp->rrnd, smp->preq, smp->prsp,
429 			     hcon->dst_type, conn->dst, 0, conn->src, res);
430 	if (ret) {
431 		reason = SMP_UNSPECIFIED;
432 		goto error;
433 	}
434 
435 	swap128(res, confirm);
436 
437 	if (memcmp(smp->pcnf, confirm, sizeof(smp->pcnf)) != 0) {
438 		BT_ERR("Pairing failed (confirmation values mismatch)");
439 		reason = SMP_CONFIRM_FAILED;
440 		goto error;
441 	}
442 
443 	if (hcon->out) {
444 		u8 stk[16], rand[8];
445 		__le16 ediv;
446 
447 		memset(rand, 0, sizeof(rand));
448 		ediv = 0;
449 
450 		smp_s1(tfm, smp->tk, smp->rrnd, smp->prnd, key);
451 		swap128(key, stk);
452 
453 		memset(stk + smp->enc_key_size, 0,
454 		       SMP_MAX_ENC_KEY_SIZE - smp->enc_key_size);
455 
456 		if (test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &hcon->flags)) {
457 			reason = SMP_UNSPECIFIED;
458 			goto error;
459 		}
460 
461 		hci_le_start_enc(hcon, ediv, rand, stk);
462 		hcon->enc_key_size = smp->enc_key_size;
463 	} else {
464 		u8 stk[16], r[16], rand[8];
465 		__le16 ediv;
466 
467 		memset(rand, 0, sizeof(rand));
468 		ediv = 0;
469 
470 		swap128(smp->prnd, r);
471 		smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM, sizeof(r), r);
472 
473 		smp_s1(tfm, smp->tk, smp->prnd, smp->rrnd, key);
474 		swap128(key, stk);
475 
476 		memset(stk + smp->enc_key_size, 0,
477 				SMP_MAX_ENC_KEY_SIZE - smp->enc_key_size);
478 
479 		hci_add_ltk(hcon->hdev, conn->dst, hcon->dst_type,
480 			    HCI_SMP_STK_SLAVE, 0, 0, stk, smp->enc_key_size,
481 			    ediv, rand);
482 	}
483 
484 	return;
485 
486 error:
487 	smp_failure(conn, reason, 1);
488 }
489 
490 static struct smp_chan *smp_chan_create(struct l2cap_conn *conn)
491 {
492 	struct smp_chan *smp;
493 
494 	smp = kzalloc(sizeof(struct smp_chan), GFP_ATOMIC);
495 	if (!smp)
496 		return NULL;
497 
498 	INIT_WORK(&smp->confirm, confirm_work);
499 	INIT_WORK(&smp->random, random_work);
500 
501 	smp->conn = conn;
502 	conn->smp_chan = smp;
503 	conn->hcon->smp_conn = conn;
504 
505 	hci_conn_hold(conn->hcon);
506 
507 	return smp;
508 }
509 
510 void smp_chan_destroy(struct l2cap_conn *conn)
511 {
512 	struct smp_chan *smp = conn->smp_chan;
513 
514 	BUG_ON(!smp);
515 
516 	if (smp->tfm)
517 		crypto_free_blkcipher(smp->tfm);
518 
519 	kfree(smp);
520 	conn->smp_chan = NULL;
521 	conn->hcon->smp_conn = NULL;
522 	hci_conn_put(conn->hcon);
523 }
524 
525 int smp_user_confirm_reply(struct hci_conn *hcon, u16 mgmt_op, __le32 passkey)
526 {
527 	struct l2cap_conn *conn = hcon->smp_conn;
528 	struct smp_chan *smp;
529 	u32 value;
530 	u8 key[16];
531 
532 	BT_DBG("");
533 
534 	if (!conn)
535 		return -ENOTCONN;
536 
537 	smp = conn->smp_chan;
538 
539 	switch (mgmt_op) {
540 	case MGMT_OP_USER_PASSKEY_REPLY:
541 		value = le32_to_cpu(passkey);
542 		memset(key, 0, sizeof(key));
543 		BT_DBG("PassKey: %d", value);
544 		put_unaligned_le32(value, key);
545 		swap128(key, smp->tk);
546 		/* Fall Through */
547 	case MGMT_OP_USER_CONFIRM_REPLY:
548 		set_bit(SMP_FLAG_TK_VALID, &smp->smp_flags);
549 		break;
550 	case MGMT_OP_USER_PASSKEY_NEG_REPLY:
551 	case MGMT_OP_USER_CONFIRM_NEG_REPLY:
552 		smp_failure(conn, SMP_PASSKEY_ENTRY_FAILED, 1);
553 		return 0;
554 	default:
555 		smp_failure(conn, SMP_PASSKEY_ENTRY_FAILED, 1);
556 		return -EOPNOTSUPP;
557 	}
558 
559 	/* If it is our turn to send Pairing Confirm, do so now */
560 	if (test_bit(SMP_FLAG_CFM_PENDING, &smp->smp_flags))
561 		queue_work(hcon->hdev->workqueue, &smp->confirm);
562 
563 	return 0;
564 }
565 
566 static u8 smp_cmd_pairing_req(struct l2cap_conn *conn, struct sk_buff *skb)
567 {
568 	struct smp_cmd_pairing rsp, *req = (void *) skb->data;
569 	struct smp_chan *smp;
570 	u8 key_size;
571 	u8 auth = SMP_AUTH_NONE;
572 	int ret;
573 
574 	BT_DBG("conn %p", conn);
575 
576 	if (conn->hcon->link_mode & HCI_LM_MASTER)
577 		return SMP_CMD_NOTSUPP;
578 
579 	if (!test_and_set_bit(HCI_CONN_LE_SMP_PEND, &conn->hcon->flags))
580 		smp = smp_chan_create(conn);
581 
582 	smp = conn->smp_chan;
583 
584 	smp->preq[0] = SMP_CMD_PAIRING_REQ;
585 	memcpy(&smp->preq[1], req, sizeof(*req));
586 	skb_pull(skb, sizeof(*req));
587 
588 	/* We didn't start the pairing, so match remote */
589 	if (req->auth_req & SMP_AUTH_BONDING)
590 		auth = req->auth_req;
591 
592 	conn->hcon->pending_sec_level = authreq_to_seclevel(auth);
593 
594 	build_pairing_cmd(conn, req, &rsp, auth);
595 
596 	key_size = min(req->max_key_size, rsp.max_key_size);
597 	if (check_enc_key_size(conn, key_size))
598 		return SMP_ENC_KEY_SIZE;
599 
600 	ret = smp_rand(smp->prnd);
601 	if (ret)
602 		return SMP_UNSPECIFIED;
603 
604 	smp->prsp[0] = SMP_CMD_PAIRING_RSP;
605 	memcpy(&smp->prsp[1], &rsp, sizeof(rsp));
606 
607 	smp_send_cmd(conn, SMP_CMD_PAIRING_RSP, sizeof(rsp), &rsp);
608 
609 	/* Request setup of TK */
610 	ret = tk_request(conn, 0, auth, rsp.io_capability, req->io_capability);
611 	if (ret)
612 		return SMP_UNSPECIFIED;
613 
614 	return 0;
615 }
616 
617 static u8 smp_cmd_pairing_rsp(struct l2cap_conn *conn, struct sk_buff *skb)
618 {
619 	struct smp_cmd_pairing *req, *rsp = (void *) skb->data;
620 	struct smp_chan *smp = conn->smp_chan;
621 	struct hci_dev *hdev = conn->hcon->hdev;
622 	u8 key_size, auth = SMP_AUTH_NONE;
623 	int ret;
624 
625 	BT_DBG("conn %p", conn);
626 
627 	if (!(conn->hcon->link_mode & HCI_LM_MASTER))
628 		return SMP_CMD_NOTSUPP;
629 
630 	skb_pull(skb, sizeof(*rsp));
631 
632 	req = (void *) &smp->preq[1];
633 
634 	key_size = min(req->max_key_size, rsp->max_key_size);
635 	if (check_enc_key_size(conn, key_size))
636 		return SMP_ENC_KEY_SIZE;
637 
638 	ret = smp_rand(smp->prnd);
639 	if (ret)
640 		return SMP_UNSPECIFIED;
641 
642 	smp->prsp[0] = SMP_CMD_PAIRING_RSP;
643 	memcpy(&smp->prsp[1], rsp, sizeof(*rsp));
644 
645 	if ((req->auth_req & SMP_AUTH_BONDING) &&
646 			(rsp->auth_req & SMP_AUTH_BONDING))
647 		auth = SMP_AUTH_BONDING;
648 
649 	auth |= (req->auth_req | rsp->auth_req) & SMP_AUTH_MITM;
650 
651 	ret = tk_request(conn, 0, auth, rsp->io_capability, req->io_capability);
652 	if (ret)
653 		return SMP_UNSPECIFIED;
654 
655 	set_bit(SMP_FLAG_CFM_PENDING, &smp->smp_flags);
656 
657 	/* Can't compose response until we have been confirmed */
658 	if (!test_bit(SMP_FLAG_TK_VALID, &smp->smp_flags))
659 		return 0;
660 
661 	queue_work(hdev->workqueue, &smp->confirm);
662 
663 	return 0;
664 }
665 
666 static u8 smp_cmd_pairing_confirm(struct l2cap_conn *conn, struct sk_buff *skb)
667 {
668 	struct smp_chan *smp = conn->smp_chan;
669 	struct hci_dev *hdev = conn->hcon->hdev;
670 
671 	BT_DBG("conn %p %s", conn, conn->hcon->out ? "master" : "slave");
672 
673 	memcpy(smp->pcnf, skb->data, sizeof(smp->pcnf));
674 	skb_pull(skb, sizeof(smp->pcnf));
675 
676 	if (conn->hcon->out) {
677 		u8 random[16];
678 
679 		swap128(smp->prnd, random);
680 		smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM, sizeof(random),
681 								random);
682 	} else if (test_bit(SMP_FLAG_TK_VALID, &smp->smp_flags)) {
683 		queue_work(hdev->workqueue, &smp->confirm);
684 	} else {
685 		set_bit(SMP_FLAG_CFM_PENDING, &smp->smp_flags);
686 	}
687 
688 	return 0;
689 }
690 
691 static u8 smp_cmd_pairing_random(struct l2cap_conn *conn, struct sk_buff *skb)
692 {
693 	struct smp_chan *smp = conn->smp_chan;
694 	struct hci_dev *hdev = conn->hcon->hdev;
695 
696 	BT_DBG("conn %p", conn);
697 
698 	swap128(skb->data, smp->rrnd);
699 	skb_pull(skb, sizeof(smp->rrnd));
700 
701 	queue_work(hdev->workqueue, &smp->random);
702 
703 	return 0;
704 }
705 
706 static u8 smp_ltk_encrypt(struct l2cap_conn *conn)
707 {
708 	struct smp_ltk *key;
709 	struct hci_conn *hcon = conn->hcon;
710 
711 	key = hci_find_ltk_by_addr(hcon->hdev, conn->dst, hcon->dst_type);
712 	if (!key)
713 		return 0;
714 
715 	if (test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &hcon->flags))
716 		return 1;
717 
718 	hci_le_start_enc(hcon, key->ediv, key->rand, key->val);
719 	hcon->enc_key_size = key->enc_size;
720 
721 	return 1;
722 
723 }
724 static u8 smp_cmd_security_req(struct l2cap_conn *conn, struct sk_buff *skb)
725 {
726 	struct smp_cmd_security_req *rp = (void *) skb->data;
727 	struct smp_cmd_pairing cp;
728 	struct hci_conn *hcon = conn->hcon;
729 	struct smp_chan *smp;
730 
731 	BT_DBG("conn %p", conn);
732 
733 	hcon->pending_sec_level = authreq_to_seclevel(rp->auth_req);
734 
735 	if (smp_ltk_encrypt(conn))
736 		return 0;
737 
738 	if (test_and_set_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags))
739 		return 0;
740 
741 	smp = smp_chan_create(conn);
742 
743 	skb_pull(skb, sizeof(*rp));
744 
745 	memset(&cp, 0, sizeof(cp));
746 	build_pairing_cmd(conn, &cp, NULL, rp->auth_req);
747 
748 	smp->preq[0] = SMP_CMD_PAIRING_REQ;
749 	memcpy(&smp->preq[1], &cp, sizeof(cp));
750 
751 	smp_send_cmd(conn, SMP_CMD_PAIRING_REQ, sizeof(cp), &cp);
752 
753 	return 0;
754 }
755 
756 int smp_conn_security(struct l2cap_conn *conn, __u8 sec_level)
757 {
758 	struct hci_conn *hcon = conn->hcon;
759 	struct smp_chan *smp = conn->smp_chan;
760 	__u8 authreq;
761 
762 	BT_DBG("conn %p hcon %p level 0x%2.2x", conn, hcon, sec_level);
763 
764 	if (!lmp_host_le_capable(hcon->hdev))
765 		return 1;
766 
767 	if (sec_level == BT_SECURITY_LOW)
768 		return 1;
769 
770 	if (hcon->sec_level >= sec_level)
771 		return 1;
772 
773 	if (hcon->link_mode & HCI_LM_MASTER)
774 		if (smp_ltk_encrypt(conn))
775 			goto done;
776 
777 	if (test_and_set_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags))
778 		return 0;
779 
780 	smp = smp_chan_create(conn);
781 	if (!smp)
782 		return 1;
783 
784 	authreq = seclevel_to_authreq(sec_level);
785 
786 	if (hcon->link_mode & HCI_LM_MASTER) {
787 		struct smp_cmd_pairing cp;
788 
789 		build_pairing_cmd(conn, &cp, NULL, authreq);
790 		smp->preq[0] = SMP_CMD_PAIRING_REQ;
791 		memcpy(&smp->preq[1], &cp, sizeof(cp));
792 
793 		smp_send_cmd(conn, SMP_CMD_PAIRING_REQ, sizeof(cp), &cp);
794 	} else {
795 		struct smp_cmd_security_req cp;
796 		cp.auth_req = authreq;
797 		smp_send_cmd(conn, SMP_CMD_SECURITY_REQ, sizeof(cp), &cp);
798 	}
799 
800 done:
801 	hcon->pending_sec_level = sec_level;
802 
803 	return 0;
804 }
805 
806 static int smp_cmd_encrypt_info(struct l2cap_conn *conn, struct sk_buff *skb)
807 {
808 	struct smp_cmd_encrypt_info *rp = (void *) skb->data;
809 	struct smp_chan *smp = conn->smp_chan;
810 
811 	skb_pull(skb, sizeof(*rp));
812 
813 	memcpy(smp->tk, rp->ltk, sizeof(smp->tk));
814 
815 	return 0;
816 }
817 
818 static int smp_cmd_master_ident(struct l2cap_conn *conn, struct sk_buff *skb)
819 {
820 	struct smp_cmd_master_ident *rp = (void *) skb->data;
821 	struct smp_chan *smp = conn->smp_chan;
822 	struct hci_dev *hdev = conn->hcon->hdev;
823 	struct hci_conn *hcon = conn->hcon;
824 	u8 authenticated;
825 
826 	skb_pull(skb, sizeof(*rp));
827 
828 	hci_dev_lock(hdev);
829 	authenticated = (conn->hcon->sec_level == BT_SECURITY_HIGH);
830 	hci_add_ltk(conn->hcon->hdev, conn->dst, hcon->dst_type,
831 		    HCI_SMP_LTK, 1, authenticated, smp->tk, smp->enc_key_size,
832 		    rp->ediv, rp->rand);
833 	smp_distribute_keys(conn, 1);
834 	hci_dev_unlock(hdev);
835 
836 	return 0;
837 }
838 
839 int smp_sig_channel(struct l2cap_conn *conn, struct sk_buff *skb)
840 {
841 	__u8 code = skb->data[0];
842 	__u8 reason;
843 	int err = 0;
844 
845 	if (!lmp_host_le_capable(conn->hcon->hdev)) {
846 		err = -ENOTSUPP;
847 		reason = SMP_PAIRING_NOTSUPP;
848 		goto done;
849 	}
850 
851 	skb_pull(skb, sizeof(code));
852 
853 	switch (code) {
854 	case SMP_CMD_PAIRING_REQ:
855 		reason = smp_cmd_pairing_req(conn, skb);
856 		break;
857 
858 	case SMP_CMD_PAIRING_FAIL:
859 		smp_failure(conn, skb->data[0], 0);
860 		reason = 0;
861 		err = -EPERM;
862 		break;
863 
864 	case SMP_CMD_PAIRING_RSP:
865 		reason = smp_cmd_pairing_rsp(conn, skb);
866 		break;
867 
868 	case SMP_CMD_SECURITY_REQ:
869 		reason = smp_cmd_security_req(conn, skb);
870 		break;
871 
872 	case SMP_CMD_PAIRING_CONFIRM:
873 		reason = smp_cmd_pairing_confirm(conn, skb);
874 		break;
875 
876 	case SMP_CMD_PAIRING_RANDOM:
877 		reason = smp_cmd_pairing_random(conn, skb);
878 		break;
879 
880 	case SMP_CMD_ENCRYPT_INFO:
881 		reason = smp_cmd_encrypt_info(conn, skb);
882 		break;
883 
884 	case SMP_CMD_MASTER_IDENT:
885 		reason = smp_cmd_master_ident(conn, skb);
886 		break;
887 
888 	case SMP_CMD_IDENT_INFO:
889 	case SMP_CMD_IDENT_ADDR_INFO:
890 	case SMP_CMD_SIGN_INFO:
891 		/* Just ignored */
892 		reason = 0;
893 		break;
894 
895 	default:
896 		BT_DBG("Unknown command code 0x%2.2x", code);
897 
898 		reason = SMP_CMD_NOTSUPP;
899 		err = -EOPNOTSUPP;
900 		goto done;
901 	}
902 
903 done:
904 	if (reason)
905 		smp_failure(conn, reason, 1);
906 
907 	kfree_skb(skb);
908 	return err;
909 }
910 
911 int smp_distribute_keys(struct l2cap_conn *conn, __u8 force)
912 {
913 	struct smp_cmd_pairing *req, *rsp;
914 	struct smp_chan *smp = conn->smp_chan;
915 	__u8 *keydist;
916 
917 	BT_DBG("conn %p force %d", conn, force);
918 
919 	if (!test_bit(HCI_CONN_LE_SMP_PEND, &conn->hcon->flags))
920 		return 0;
921 
922 	rsp = (void *) &smp->prsp[1];
923 
924 	/* The responder sends its keys first */
925 	if (!force && conn->hcon->out && (rsp->resp_key_dist & 0x07))
926 		return 0;
927 
928 	req = (void *) &smp->preq[1];
929 
930 	if (conn->hcon->out) {
931 		keydist = &rsp->init_key_dist;
932 		*keydist &= req->init_key_dist;
933 	} else {
934 		keydist = &rsp->resp_key_dist;
935 		*keydist &= req->resp_key_dist;
936 	}
937 
938 
939 	BT_DBG("keydist 0x%x", *keydist);
940 
941 	if (*keydist & SMP_DIST_ENC_KEY) {
942 		struct smp_cmd_encrypt_info enc;
943 		struct smp_cmd_master_ident ident;
944 		struct hci_conn *hcon = conn->hcon;
945 		u8 authenticated;
946 		__le16 ediv;
947 
948 		get_random_bytes(enc.ltk, sizeof(enc.ltk));
949 		get_random_bytes(&ediv, sizeof(ediv));
950 		get_random_bytes(ident.rand, sizeof(ident.rand));
951 
952 		smp_send_cmd(conn, SMP_CMD_ENCRYPT_INFO, sizeof(enc), &enc);
953 
954 		authenticated = hcon->sec_level == BT_SECURITY_HIGH;
955 		hci_add_ltk(conn->hcon->hdev, conn->dst, hcon->dst_type,
956 			    HCI_SMP_LTK_SLAVE, 1, authenticated,
957 			    enc.ltk, smp->enc_key_size, ediv, ident.rand);
958 
959 		ident.ediv = cpu_to_le16(ediv);
960 
961 		smp_send_cmd(conn, SMP_CMD_MASTER_IDENT, sizeof(ident), &ident);
962 
963 		*keydist &= ~SMP_DIST_ENC_KEY;
964 	}
965 
966 	if (*keydist & SMP_DIST_ID_KEY) {
967 		struct smp_cmd_ident_addr_info addrinfo;
968 		struct smp_cmd_ident_info idinfo;
969 
970 		/* Send a dummy key */
971 		get_random_bytes(idinfo.irk, sizeof(idinfo.irk));
972 
973 		smp_send_cmd(conn, SMP_CMD_IDENT_INFO, sizeof(idinfo), &idinfo);
974 
975 		/* Just public address */
976 		memset(&addrinfo, 0, sizeof(addrinfo));
977 		bacpy(&addrinfo.bdaddr, conn->src);
978 
979 		smp_send_cmd(conn, SMP_CMD_IDENT_ADDR_INFO, sizeof(addrinfo),
980 								&addrinfo);
981 
982 		*keydist &= ~SMP_DIST_ID_KEY;
983 	}
984 
985 	if (*keydist & SMP_DIST_SIGN) {
986 		struct smp_cmd_sign_info sign;
987 
988 		/* Send a dummy key */
989 		get_random_bytes(sign.csrk, sizeof(sign.csrk));
990 
991 		smp_send_cmd(conn, SMP_CMD_SIGN_INFO, sizeof(sign), &sign);
992 
993 		*keydist &= ~SMP_DIST_SIGN;
994 	}
995 
996 	if (conn->hcon->out || force) {
997 		clear_bit(HCI_CONN_LE_SMP_PEND, &conn->hcon->flags);
998 		cancel_delayed_work_sync(&conn->security_timer);
999 		smp_chan_destroy(conn);
1000 	}
1001 
1002 	return 0;
1003 }
1004