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