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