Linux 6.12-rc1
[linux-block.git] / net / bluetooth / smp.c
CommitLineData
eb492e01
AB
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
300acfde 23#include <linux/debugfs.h>
8c520a59 24#include <linux/scatterlist.h>
28a220aa 25#include <crypto/aes.h>
71af2f6b 26#include <crypto/hash.h>
47eb2ac8 27#include <crypto/kpp.h>
2defbea3 28#include <crypto/utils.h>
8c520a59 29
eb492e01
AB
30#include <net/bluetooth/bluetooth.h>
31#include <net/bluetooth/hci_core.h>
32#include <net/bluetooth/l2cap.h>
2b64d153 33#include <net/bluetooth/mgmt.h>
ac4b7236 34
58771c1c 35#include "ecdh_helper.h"
ac4b7236 36#include "smp.h"
d22ef0bc 37
2fd36558
JH
38#define SMP_DEV(hdev) \
39 ((struct smp_dev *)((struct l2cap_chan *)((hdev)->smp_data))->data)
40
c7a3d57d 41/* Low-level debug macros to be used for stuff that we don't want
91641b79 42 * accidentally in dmesg, i.e. the values of the various crypto keys
c7a3d57d
JH
43 * and the inputs & outputs of crypto functions.
44 */
45#ifdef DEBUG
46#define SMP_DBG(fmt, ...) printk(KERN_DEBUG "%s: " fmt, __func__, \
47 ##__VA_ARGS__)
48#else
49#define SMP_DBG(fmt, ...) no_printk(KERN_DEBUG "%s: " fmt, __func__, \
50 ##__VA_ARGS__)
51#endif
52
b28b4943 53#define SMP_ALLOW_CMD(smp, code) set_bit(code, &smp->allow_cmd)
b28b4943 54
3b19146d 55/* Keys which are not distributed with Secure Connections */
c29fb5f6 56#define SMP_SC_NO_DIST (SMP_DIST_ENC_KEY | SMP_DIST_LINK_KEY)
3b19146d 57
17b02e62 58#define SMP_TIMEOUT msecs_to_jiffies(30000)
5d3de7df 59
b8b23001
LAD
60#define ID_ADDR_TIMEOUT msecs_to_jiffies(200)
61
d7a5a11d 62#define AUTH_REQ_MASK(dev) (hci_dev_test_flag(dev, HCI_SC_ENABLED) ? \
a62da6f1 63 0x3f : 0x07)
0edb14de 64#define KEY_DIST_MASK 0x07
065a13e2 65
cbbbe3e2
JH
66/* Maximum message length that can be passed to aes_cmac */
67#define CMAC_MSG_MAX 80
68
533e35d4
JH
69enum {
70 SMP_FLAG_TK_VALID,
71 SMP_FLAG_CFM_PENDING,
72 SMP_FLAG_MITM_AUTH,
73 SMP_FLAG_COMPLETE,
74 SMP_FLAG_INITIATOR,
65668776 75 SMP_FLAG_SC,
d8f8edbe 76 SMP_FLAG_REMOTE_PK,
aeb7d461 77 SMP_FLAG_DEBUG_KEY,
38606f14 78 SMP_FLAG_WAIT_USER,
d3e54a87 79 SMP_FLAG_DHKEY_PENDING,
1a8bab4f
JH
80 SMP_FLAG_REMOTE_OOB,
81 SMP_FLAG_LOCAL_OOB,
a62da6f1 82 SMP_FLAG_CT2,
533e35d4 83};
4bc58f51 84
88a479d9 85struct smp_dev {
60a27d65 86 /* Secure Connections OOB data */
94f14e47 87 bool local_oob;
60a27d65 88 u8 local_pk[64];
fb334fee 89 u8 local_rand[16];
60a27d65
MH
90 bool debug_key;
91
71af2f6b 92 struct crypto_shash *tfm_cmac;
47eb2ac8 93 struct crypto_kpp *tfm_ecdh;
88a479d9
MH
94};
95
4bc58f51 96struct smp_chan {
b68fda68
JH
97 struct l2cap_conn *conn;
98 struct delayed_work security_timer;
b28b4943 99 unsigned long allow_cmd; /* Bitmask of allowed commands */
b68fda68 100
4bc58f51
JH
101 u8 preq[7]; /* SMP Pairing Request */
102 u8 prsp[7]; /* SMP Pairing Response */
103 u8 prnd[16]; /* SMP Pairing Random (local) */
104 u8 rrnd[16]; /* SMP Pairing Random (remote) */
105 u8 pcnf[16]; /* SMP Pairing Confirm */
106 u8 tk[16]; /* SMP Temporary Key */
882fafad
JH
107 u8 rr[16]; /* Remote OOB ra/rb value */
108 u8 lr[16]; /* Local OOB ra/rb value */
4bc58f51
JH
109 u8 enc_key_size;
110 u8 remote_key_dist;
111 bdaddr_t id_addr;
112 u8 id_addr_type;
113 u8 irk[16];
114 struct smp_csrk *csrk;
fad646e1 115 struct smp_csrk *responder_csrk;
4bc58f51 116 struct smp_ltk *ltk;
fad646e1 117 struct smp_ltk *responder_ltk;
4bc58f51 118 struct smp_irk *remote_irk;
6a77083a 119 u8 *link_key;
4a74d658 120 unsigned long flags;
783e0574 121 u8 method;
38606f14 122 u8 passkey_round;
6a7bd103 123
3b19146d
JH
124 /* Secure Connections variables */
125 u8 local_pk[64];
d8f8edbe
JH
126 u8 remote_pk[64];
127 u8 dhkey[32];
760b018b 128 u8 mackey[16];
3b19146d 129
71af2f6b 130 struct crypto_shash *tfm_cmac;
47eb2ac8 131 struct crypto_kpp *tfm_ecdh;
4bc58f51
JH
132};
133
aeb7d461
JH
134/* These debug key values are defined in the SMP section of the core
135 * specification. debug_pk is the public debug key and debug_sk the
136 * private debug key.
137 */
138static const u8 debug_pk[64] = {
139 0xe6, 0x9d, 0x35, 0x0e, 0x48, 0x01, 0x03, 0xcc,
140 0xdb, 0xfd, 0xf4, 0xac, 0x11, 0x91, 0xf4, 0xef,
141 0xb9, 0xa5, 0xf9, 0xe9, 0xa7, 0x83, 0x2c, 0x5e,
142 0x2c, 0xbe, 0x97, 0xf2, 0xd2, 0x03, 0xb0, 0x20,
143
144 0x8b, 0xd2, 0x89, 0x15, 0xd0, 0x8e, 0x1c, 0x74,
145 0x24, 0x30, 0xed, 0x8f, 0xc2, 0x45, 0x63, 0x76,
146 0x5c, 0x15, 0x52, 0x5a, 0xbf, 0x9a, 0x32, 0x63,
147 0x6d, 0xeb, 0x2a, 0x65, 0x49, 0x9c, 0x80, 0xdc,
148};
149
150static const u8 debug_sk[32] = {
151 0xbd, 0x1a, 0x3c, 0xcd, 0xa6, 0xb8, 0x99, 0x58,
152 0x99, 0xb7, 0x40, 0xeb, 0x7b, 0x60, 0xff, 0x4a,
153 0x50, 0x3f, 0x10, 0xd2, 0xe3, 0xb3, 0xc9, 0x74,
154 0x38, 0x5f, 0xc5, 0xa3, 0xd4, 0xf6, 0x49, 0x3f,
155};
156
8a2936f4 157static inline void swap_buf(const u8 *src, u8 *dst, size_t len)
d22ef0bc 158{
8a2936f4 159 size_t i;
d22ef0bc 160
8a2936f4
JH
161 for (i = 0; i < len; i++)
162 dst[len - 1 - i] = src[i];
d22ef0bc
AB
163}
164
06edf8de
JH
165/* The following functions map to the LE SC SMP crypto functions
166 * AES-CMAC, f4, f5, f6, g2 and h6.
167 */
168
71af2f6b 169static int aes_cmac(struct crypto_shash *tfm, const u8 k[16], const u8 *m,
cbbbe3e2
JH
170 size_t len, u8 mac[16])
171{
172 uint8_t tmp[16], mac_msb[16], msg_msb[CMAC_MSG_MAX];
cbbbe3e2
JH
173 int err;
174
175 if (len > CMAC_MSG_MAX)
176 return -EFBIG;
177
178 if (!tfm) {
179 BT_ERR("tfm %p", tfm);
180 return -EINVAL;
181 }
182
cbbbe3e2
JH
183 /* Swap key and message from LSB to MSB */
184 swap_buf(k, tmp, 16);
185 swap_buf(m, msg_msb, len);
186
c7a3d57d
JH
187 SMP_DBG("msg (len %zu) %*phN", len, (int) len, m);
188 SMP_DBG("key %16phN", k);
cbbbe3e2 189
71af2f6b 190 err = crypto_shash_setkey(tfm, tmp, 16);
cbbbe3e2
JH
191 if (err) {
192 BT_ERR("cipher setkey failed: %d", err);
193 return err;
194 }
195
ec0bf6ed 196 err = crypto_shash_tfm_digest(tfm, msg_msb, len, mac_msb);
cbbbe3e2 197 if (err) {
71af2f6b 198 BT_ERR("Hash computation error %d", err);
cbbbe3e2
JH
199 return err;
200 }
201
202 swap_buf(mac_msb, mac, 16);
203
c7a3d57d 204 SMP_DBG("mac %16phN", mac);
cbbbe3e2
JH
205
206 return 0;
207}
208
71af2f6b
HX
209static int smp_f4(struct crypto_shash *tfm_cmac, const u8 u[32],
210 const u8 v[32], const u8 x[16], u8 z, u8 res[16])
cbbbe3e2
JH
211{
212 u8 m[65];
213 int err;
214
c7a3d57d
JH
215 SMP_DBG("u %32phN", u);
216 SMP_DBG("v %32phN", v);
217 SMP_DBG("x %16phN z %02x", x, z);
cbbbe3e2
JH
218
219 m[0] = z;
220 memcpy(m + 1, v, 32);
221 memcpy(m + 33, u, 32);
222
223 err = aes_cmac(tfm_cmac, x, m, sizeof(m), res);
224 if (err)
225 return err;
226
c7a3d57d 227 SMP_DBG("res %16phN", res);
cbbbe3e2
JH
228
229 return err;
230}
231
71af2f6b 232static int smp_f5(struct crypto_shash *tfm_cmac, const u8 w[32],
4da50de8
JH
233 const u8 n1[16], const u8 n2[16], const u8 a1[7],
234 const u8 a2[7], u8 mackey[16], u8 ltk[16])
760b018b
JH
235{
236 /* The btle, salt and length "magic" values are as defined in
237 * the SMP section of the Bluetooth core specification. In ASCII
238 * the btle value ends up being 'btle'. The salt is just a
239 * random number whereas length is the value 256 in little
240 * endian format.
241 */
242 const u8 btle[4] = { 0x65, 0x6c, 0x74, 0x62 };
243 const u8 salt[16] = { 0xbe, 0x83, 0x60, 0x5a, 0xdb, 0x0b, 0x37, 0x60,
244 0x38, 0xa5, 0xf5, 0xaa, 0x91, 0x83, 0x88, 0x6c };
245 const u8 length[2] = { 0x00, 0x01 };
246 u8 m[53], t[16];
247 int err;
248
c7a3d57d
JH
249 SMP_DBG("w %32phN", w);
250 SMP_DBG("n1 %16phN n2 %16phN", n1, n2);
251 SMP_DBG("a1 %7phN a2 %7phN", a1, a2);
760b018b
JH
252
253 err = aes_cmac(tfm_cmac, salt, w, 32, t);
254 if (err)
255 return err;
256
c7a3d57d 257 SMP_DBG("t %16phN", t);
760b018b
JH
258
259 memcpy(m, length, 2);
260 memcpy(m + 2, a2, 7);
261 memcpy(m + 9, a1, 7);
262 memcpy(m + 16, n2, 16);
263 memcpy(m + 32, n1, 16);
264 memcpy(m + 48, btle, 4);
265
266 m[52] = 0; /* Counter */
267
268 err = aes_cmac(tfm_cmac, t, m, sizeof(m), mackey);
269 if (err)
270 return err;
271
c7a3d57d 272 SMP_DBG("mackey %16phN", mackey);
760b018b
JH
273
274 m[52] = 1; /* Counter */
275
276 err = aes_cmac(tfm_cmac, t, m, sizeof(m), ltk);
277 if (err)
278 return err;
279
c7a3d57d 280 SMP_DBG("ltk %16phN", ltk);
760b018b
JH
281
282 return 0;
283}
284
71af2f6b 285static int smp_f6(struct crypto_shash *tfm_cmac, const u8 w[16],
4da50de8 286 const u8 n1[16], const u8 n2[16], const u8 r[16],
760b018b
JH
287 const u8 io_cap[3], const u8 a1[7], const u8 a2[7],
288 u8 res[16])
289{
290 u8 m[65];
291 int err;
292
c7a3d57d
JH
293 SMP_DBG("w %16phN", w);
294 SMP_DBG("n1 %16phN n2 %16phN", n1, n2);
295 SMP_DBG("r %16phN io_cap %3phN a1 %7phN a2 %7phN", r, io_cap, a1, a2);
760b018b
JH
296
297 memcpy(m, a2, 7);
298 memcpy(m + 7, a1, 7);
299 memcpy(m + 14, io_cap, 3);
300 memcpy(m + 17, r, 16);
301 memcpy(m + 33, n2, 16);
302 memcpy(m + 49, n1, 16);
303
304 err = aes_cmac(tfm_cmac, w, m, sizeof(m), res);
305 if (err)
306 return err;
307
203de21b 308 SMP_DBG("res %16phN", res);
760b018b
JH
309
310 return err;
311}
312
71af2f6b 313static int smp_g2(struct crypto_shash *tfm_cmac, const u8 u[32], const u8 v[32],
191dc7fe
JH
314 const u8 x[16], const u8 y[16], u32 *val)
315{
316 u8 m[80], tmp[16];
317 int err;
318
c7a3d57d
JH
319 SMP_DBG("u %32phN", u);
320 SMP_DBG("v %32phN", v);
321 SMP_DBG("x %16phN y %16phN", x, y);
191dc7fe
JH
322
323 memcpy(m, y, 16);
324 memcpy(m + 16, v, 32);
325 memcpy(m + 48, u, 32);
326
327 err = aes_cmac(tfm_cmac, x, m, sizeof(m), tmp);
328 if (err)
329 return err;
330
331 *val = get_unaligned_le32(tmp);
332 *val %= 1000000;
333
c7a3d57d 334 SMP_DBG("val %06u", *val);
191dc7fe
JH
335
336 return 0;
337}
338
71af2f6b 339static int smp_h6(struct crypto_shash *tfm_cmac, const u8 w[16],
06edf8de
JH
340 const u8 key_id[4], u8 res[16])
341{
342 int err;
343
344 SMP_DBG("w %16phN key_id %4phN", w, key_id);
345
346 err = aes_cmac(tfm_cmac, w, key_id, 4, res);
347 if (err)
348 return err;
349
350 SMP_DBG("res %16phN", res);
351
352 return err;
353}
354
a62da6f1
JH
355static int smp_h7(struct crypto_shash *tfm_cmac, const u8 w[16],
356 const u8 salt[16], u8 res[16])
357{
358 int err;
359
360 SMP_DBG("w %16phN salt %16phN", w, salt);
361
362 err = aes_cmac(tfm_cmac, salt, w, 16, res);
363 if (err)
364 return err;
365
366 SMP_DBG("res %16phN", res);
367
368 return err;
369}
370
06edf8de
JH
371/* The following functions map to the legacy SMP crypto functions e, c1,
372 * s1 and ah.
373 */
374
28a220aa 375static int smp_e(const u8 *k, u8 *r)
d22ef0bc 376{
28a220aa 377 struct crypto_aes_ctx ctx;
943a732a 378 uint8_t tmp[16], data[16];
201a5929 379 int err;
d22ef0bc 380
011c391a
JH
381 SMP_DBG("k %16phN r %16phN", k, r);
382
943a732a 383 /* The most significant octet of key corresponds to k[0] */
8a2936f4 384 swap_buf(k, tmp, 16);
943a732a 385
28a220aa 386 err = aes_expandkey(&ctx, tmp, 16);
d22ef0bc
AB
387 if (err) {
388 BT_ERR("cipher setkey failed: %d", err);
389 return err;
390 }
391
943a732a 392 /* Most significant octet of plaintextData corresponds to data[0] */
8a2936f4 393 swap_buf(r, data, 16);
943a732a 394
28a220aa 395 aes_encrypt(&ctx, data, data);
d22ef0bc 396
943a732a 397 /* Most significant octet of encryptedData corresponds to data[0] */
8a2936f4 398 swap_buf(data, r, 16);
943a732a 399
011c391a
JH
400 SMP_DBG("r %16phN", r);
401
c29fb5f6 402 memzero_explicit(&ctx, sizeof(ctx));
d22ef0bc
AB
403 return err;
404}
405
28a220aa 406static int smp_c1(const u8 k[16],
06edf8de
JH
407 const u8 r[16], const u8 preq[7], const u8 pres[7], u8 _iat,
408 const bdaddr_t *ia, u8 _rat, const bdaddr_t *ra, u8 res[16])
6a77083a 409{
06edf8de 410 u8 p1[16], p2[16];
6a77083a
JH
411 int err;
412
011c391a
JH
413 SMP_DBG("k %16phN r %16phN", k, r);
414 SMP_DBG("iat %u ia %6phN rat %u ra %6phN", _iat, ia, _rat, ra);
415 SMP_DBG("preq %7phN pres %7phN", preq, pres);
416
06edf8de 417 memset(p1, 0, 16);
6a77083a 418
06edf8de
JH
419 /* p1 = pres || preq || _rat || _iat */
420 p1[0] = _iat;
421 p1[1] = _rat;
422 memcpy(p1 + 2, preq, 7);
423 memcpy(p1 + 9, pres, 7);
424
011c391a 425 SMP_DBG("p1 %16phN", p1);
06edf8de
JH
426
427 /* res = r XOR p1 */
ef0bb5ad 428 crypto_xor_cpy(res, r, p1, sizeof(p1));
06edf8de
JH
429
430 /* res = e(k, res) */
28a220aa 431 err = smp_e(k, res);
06edf8de
JH
432 if (err) {
433 BT_ERR("Encrypt data error");
6a77083a 434 return err;
06edf8de 435 }
6a77083a 436
011c391a
JH
437 /* p2 = padding || ia || ra */
438 memcpy(p2, ra, 6);
439 memcpy(p2 + 6, ia, 6);
440 memset(p2 + 12, 0, 4);
441
442 SMP_DBG("p2 %16phN", p2);
443
06edf8de 444 /* res = res XOR p2 */
ef0bb5ad 445 crypto_xor(res, p2, sizeof(p2));
06edf8de
JH
446
447 /* res = e(k, res) */
28a220aa 448 err = smp_e(k, res);
06edf8de
JH
449 if (err)
450 BT_ERR("Encrypt data error");
451
452 return err;
453}
454
28a220aa 455static int smp_s1(const u8 k[16],
06edf8de
JH
456 const u8 r1[16], const u8 r2[16], u8 _r[16])
457{
458 int err;
459
460 /* Just least significant octets from r1 and r2 are considered */
461 memcpy(_r, r2, 8);
462 memcpy(_r + 8, r1, 8);
463
28a220aa 464 err = smp_e(k, _r);
06edf8de
JH
465 if (err)
466 BT_ERR("Encrypt data error");
6a77083a
JH
467
468 return err;
469}
470
28a220aa 471static int smp_ah(const u8 irk[16], const u8 r[3], u8 res[3])
60478054 472{
943a732a 473 u8 _res[16];
60478054
JH
474 int err;
475
476 /* r' = padding || r */
943a732a
JH
477 memcpy(_res, r, 3);
478 memset(_res + 3, 0, 13);
60478054 479
28a220aa 480 err = smp_e(irk, _res);
60478054
JH
481 if (err) {
482 BT_ERR("Encrypt error");
483 return err;
484 }
485
486 /* The output of the random address function ah is:
c5080d42 487 * ah(k, r) = e(k, r') mod 2^24
60478054
JH
488 * The output of the security function e is then truncated to 24 bits
489 * by taking the least significant 24 bits of the output of e as the
490 * result of ah.
491 */
943a732a 492 memcpy(res, _res, 3);
60478054
JH
493
494 return 0;
495}
496
cd082797
JH
497bool smp_irk_matches(struct hci_dev *hdev, const u8 irk[16],
498 const bdaddr_t *bdaddr)
60478054 499{
defce9e8 500 struct l2cap_chan *chan = hdev->smp_data;
60478054
JH
501 u8 hash[3];
502 int err;
503
defce9e8
JH
504 if (!chan || !chan->data)
505 return false;
506
56860245 507 bt_dev_dbg(hdev, "RPA %pMR IRK %*phN", bdaddr, 16, irk);
60478054 508
28a220aa 509 err = smp_ah(irk, &bdaddr->b[3], hash);
60478054
JH
510 if (err)
511 return false;
512
329d8230 513 return !crypto_memneq(bdaddr->b, hash, 3);
60478054
JH
514}
515
cd082797 516int smp_generate_rpa(struct hci_dev *hdev, const u8 irk[16], bdaddr_t *rpa)
b1e2b3ae 517{
defce9e8 518 struct l2cap_chan *chan = hdev->smp_data;
b1e2b3ae
JH
519 int err;
520
defce9e8
JH
521 if (!chan || !chan->data)
522 return -EOPNOTSUPP;
523
b1e2b3ae
JH
524 get_random_bytes(&rpa->b[3], 3);
525
526 rpa->b[5] &= 0x3f; /* Clear two most significant bits */
527 rpa->b[5] |= 0x40; /* Set second most significant bit */
528
28a220aa 529 err = smp_ah(irk, &rpa->b[3], rpa->b);
b1e2b3ae
JH
530 if (err < 0)
531 return err;
532
56860245 533 bt_dev_dbg(hdev, "RPA %pMR", rpa);
b1e2b3ae
JH
534
535 return 0;
536}
537
60a27d65
MH
538int smp_generate_oob(struct hci_dev *hdev, u8 hash[16], u8 rand[16])
539{
540 struct l2cap_chan *chan = hdev->smp_data;
541 struct smp_dev *smp;
542 int err;
543
544 if (!chan || !chan->data)
545 return -EOPNOTSUPP;
546
547 smp = chan->data;
548
549 if (hci_dev_test_flag(hdev, HCI_USE_DEBUG_KEYS)) {
56860245 550 bt_dev_dbg(hdev, "Using debug keys");
c0153b0b
TA
551 err = set_ecdh_privkey(smp->tfm_ecdh, debug_sk);
552 if (err)
553 return err;
60a27d65 554 memcpy(smp->local_pk, debug_pk, 64);
60a27d65
MH
555 smp->debug_key = true;
556 } else {
557 while (true) {
c0153b0b
TA
558 /* Generate key pair for Secure Connections */
559 err = generate_ecdh_keys(smp->tfm_ecdh, smp->local_pk);
a2976416
TA
560 if (err)
561 return err;
60a27d65
MH
562
563 /* This is unlikely, but we need to check that
91641b79 564 * we didn't accidentally generate a debug key.
60a27d65 565 */
c0153b0b 566 if (crypto_memneq(smp->local_pk, debug_pk, 64))
60a27d65
MH
567 break;
568 }
569 smp->debug_key = false;
570 }
571
572 SMP_DBG("OOB Public Key X: %32phN", smp->local_pk);
573 SMP_DBG("OOB Public Key Y: %32phN", smp->local_pk + 32);
60a27d65 574
fb334fee 575 get_random_bytes(smp->local_rand, 16);
60a27d65
MH
576
577 err = smp_f4(smp->tfm_cmac, smp->local_pk, smp->local_pk,
fb334fee 578 smp->local_rand, 0, hash);
60a27d65
MH
579 if (err < 0)
580 return err;
581
fb334fee 582 memcpy(rand, smp->local_rand, 16);
60a27d65 583
94f14e47
JH
584 smp->local_oob = true;
585
60a27d65
MH
586 return 0;
587}
588
5d88cc73 589static void smp_send_cmd(struct l2cap_conn *conn, u8 code, u16 len, void *data)
eb492e01 590{
5d88cc73 591 struct l2cap_chan *chan = conn->smp;
b68fda68 592 struct smp_chan *smp;
5d88cc73
JH
593 struct kvec iv[2];
594 struct msghdr msg;
eb492e01 595
5d88cc73
JH
596 if (!chan)
597 return;
eb492e01 598
2e1614f7 599 bt_dev_dbg(conn->hcon->hdev, "code 0x%2.2x", code);
eb492e01 600
5d88cc73
JH
601 iv[0].iov_base = &code;
602 iv[0].iov_len = 1;
eb492e01 603
5d88cc73
JH
604 iv[1].iov_base = data;
605 iv[1].iov_len = len;
eb492e01 606
5d88cc73 607 memset(&msg, 0, sizeof(msg));
eb492e01 608
de4eda9d 609 iov_iter_kvec(&msg.msg_iter, ITER_SOURCE, iv, 2, 1 + len);
eb492e01 610
5d88cc73 611 l2cap_chan_send(chan, &msg, 1 + len);
e2dcd113 612
b68fda68
JH
613 if (!chan->data)
614 return;
615
616 smp = chan->data;
617
618 cancel_delayed_work_sync(&smp->security_timer);
1b0921d6 619 schedule_delayed_work(&smp->security_timer, SMP_TIMEOUT);
eb492e01
AB
620}
621
d2eb9e10 622static u8 authreq_to_seclevel(u8 authreq)
2b64d153 623{
d2eb9e10
JH
624 if (authreq & SMP_AUTH_MITM) {
625 if (authreq & SMP_AUTH_SC)
626 return BT_SECURITY_FIPS;
627 else
628 return BT_SECURITY_HIGH;
629 } else {
2b64d153 630 return BT_SECURITY_MEDIUM;
d2eb9e10 631 }
2b64d153
BG
632}
633
634static __u8 seclevel_to_authreq(__u8 sec_level)
635{
636 switch (sec_level) {
d2eb9e10 637 case BT_SECURITY_FIPS:
2b64d153
BG
638 case BT_SECURITY_HIGH:
639 return SMP_AUTH_MITM | SMP_AUTH_BONDING;
640 case BT_SECURITY_MEDIUM:
641 return SMP_AUTH_BONDING;
642 default:
643 return SMP_AUTH_NONE;
644 }
645}
646
b8e66eac 647static void build_pairing_cmd(struct l2cap_conn *conn,
f1560463
MH
648 struct smp_cmd_pairing *req,
649 struct smp_cmd_pairing *rsp, __u8 authreq)
b8e66eac 650{
5d88cc73
JH
651 struct l2cap_chan *chan = conn->smp;
652 struct smp_chan *smp = chan->data;
fd349c02
JH
653 struct hci_conn *hcon = conn->hcon;
654 struct hci_dev *hdev = hcon->hdev;
02b05bd8 655 u8 local_dist = 0, remote_dist = 0, oob_flag = SMP_OOB_NOT_PRESENT;
54790f73 656
d7a5a11d 657 if (hci_dev_test_flag(hdev, HCI_BONDABLE)) {
7ee4ea36
MH
658 local_dist = SMP_DIST_ENC_KEY | SMP_DIST_SIGN;
659 remote_dist = SMP_DIST_ENC_KEY | SMP_DIST_SIGN;
54790f73 660 authreq |= SMP_AUTH_BONDING;
2b64d153
BG
661 } else {
662 authreq &= ~SMP_AUTH_BONDING;
54790f73
VCG
663 }
664
d7a5a11d 665 if (hci_dev_test_flag(hdev, HCI_RPA_RESOLVING))
fd349c02
JH
666 remote_dist |= SMP_DIST_ID_KEY;
667
d7a5a11d 668 if (hci_dev_test_flag(hdev, HCI_PRIVACY))
863efaf2
JH
669 local_dist |= SMP_DIST_ID_KEY;
670
d7a5a11d 671 if (hci_dev_test_flag(hdev, HCI_SC_ENABLED) &&
02b05bd8
JH
672 (authreq & SMP_AUTH_SC)) {
673 struct oob_data *oob_data;
674 u8 bdaddr_type;
675
d7a5a11d 676 if (hci_dev_test_flag(hdev, HCI_SSP_ENABLED)) {
df8e1a4c
JH
677 local_dist |= SMP_DIST_LINK_KEY;
678 remote_dist |= SMP_DIST_LINK_KEY;
679 }
02b05bd8
JH
680
681 if (hcon->dst_type == ADDR_LE_DEV_PUBLIC)
682 bdaddr_type = BDADDR_LE_PUBLIC;
683 else
684 bdaddr_type = BDADDR_LE_RANDOM;
685
686 oob_data = hci_find_remote_oob_data(hdev, &hcon->dst,
687 bdaddr_type);
4775a4ea 688 if (oob_data && oob_data->present) {
1a8bab4f 689 set_bit(SMP_FLAG_REMOTE_OOB, &smp->flags);
02b05bd8 690 oob_flag = SMP_OOB_PRESENT;
a29b0733 691 memcpy(smp->rr, oob_data->rand256, 16);
02b05bd8 692 memcpy(smp->pcnf, oob_data->hash256, 16);
bc07cd69
MH
693 SMP_DBG("OOB Remote Confirmation: %16phN", smp->pcnf);
694 SMP_DBG("OOB Remote Random: %16phN", smp->rr);
02b05bd8
JH
695 }
696
df8e1a4c
JH
697 } else {
698 authreq &= ~SMP_AUTH_SC;
699 }
700
54790f73
VCG
701 if (rsp == NULL) {
702 req->io_capability = conn->hcon->io_capability;
02b05bd8 703 req->oob_flag = oob_flag;
30d65e08 704 req->max_key_size = hdev->le_max_key_size;
fd349c02
JH
705 req->init_key_dist = local_dist;
706 req->resp_key_dist = remote_dist;
0edb14de 707 req->auth_req = (authreq & AUTH_REQ_MASK(hdev));
fd349c02
JH
708
709 smp->remote_key_dist = remote_dist;
54790f73
VCG
710 return;
711 }
712
713 rsp->io_capability = conn->hcon->io_capability;
02b05bd8 714 rsp->oob_flag = oob_flag;
30d65e08 715 rsp->max_key_size = hdev->le_max_key_size;
fd349c02
JH
716 rsp->init_key_dist = req->init_key_dist & remote_dist;
717 rsp->resp_key_dist = req->resp_key_dist & local_dist;
0edb14de 718 rsp->auth_req = (authreq & AUTH_REQ_MASK(hdev));
fd349c02
JH
719
720 smp->remote_key_dist = rsp->init_key_dist;
b8e66eac
VCG
721}
722
3158c50c
VCG
723static u8 check_enc_key_size(struct l2cap_conn *conn, __u8 max_key_size)
724{
5d88cc73 725 struct l2cap_chan *chan = conn->smp;
2fd36558 726 struct hci_dev *hdev = conn->hcon->hdev;
5d88cc73 727 struct smp_chan *smp = chan->data;
1c1def09 728
49c06c9e
ŁR
729 if (conn->hcon->pending_sec_level == BT_SECURITY_FIPS &&
730 max_key_size != SMP_MAX_ENC_KEY_SIZE)
731 return SMP_ENC_KEY_SIZE;
732
30d65e08 733 if (max_key_size > hdev->le_max_key_size ||
2fd36558 734 max_key_size < SMP_MIN_ENC_KEY_SIZE)
3158c50c
VCG
735 return SMP_ENC_KEY_SIZE;
736
f7aa611a 737 smp->enc_key_size = max_key_size;
3158c50c
VCG
738
739 return 0;
740}
741
6f48e260
JH
742static void smp_chan_destroy(struct l2cap_conn *conn)
743{
744 struct l2cap_chan *chan = conn->smp;
745 struct smp_chan *smp = chan->data;
923e2414 746 struct hci_conn *hcon = conn->hcon;
6f48e260
JH
747 bool complete;
748
749 BUG_ON(!smp);
750
751 cancel_delayed_work_sync(&smp->security_timer);
6f48e260 752
6f48e260 753 complete = test_bit(SMP_FLAG_COMPLETE, &smp->flags);
923e2414 754 mgmt_smp_complete(hcon, complete);
6f48e260 755
453431a5 756 kfree_sensitive(smp->csrk);
fad646e1 757 kfree_sensitive(smp->responder_csrk);
453431a5 758 kfree_sensitive(smp->link_key);
6f48e260 759
71af2f6b 760 crypto_free_shash(smp->tfm_cmac);
47eb2ac8 761 crypto_free_kpp(smp->tfm_ecdh);
6f48e260 762
923e2414
JH
763 /* Ensure that we don't leave any debug key around if debug key
764 * support hasn't been explicitly enabled.
765 */
766 if (smp->ltk && smp->ltk->type == SMP_LTK_P256_DEBUG &&
d7a5a11d 767 !hci_dev_test_flag(hcon->hdev, HCI_KEEP_DEBUG_KEYS)) {
923e2414
JH
768 list_del_rcu(&smp->ltk->list);
769 kfree_rcu(smp->ltk, rcu);
770 smp->ltk = NULL;
771 }
772
6f48e260
JH
773 /* If pairing failed clean up any keys we might have */
774 if (!complete) {
775 if (smp->ltk) {
970d0f1b
JH
776 list_del_rcu(&smp->ltk->list);
777 kfree_rcu(smp->ltk, rcu);
6f48e260
JH
778 }
779
fad646e1
AP
780 if (smp->responder_ltk) {
781 list_del_rcu(&smp->responder_ltk->list);
782 kfree_rcu(smp->responder_ltk, rcu);
6f48e260
JH
783 }
784
785 if (smp->remote_irk) {
adae20cb
JH
786 list_del_rcu(&smp->remote_irk->list);
787 kfree_rcu(smp->remote_irk, rcu);
6f48e260
JH
788 }
789 }
790
791 chan->data = NULL;
453431a5 792 kfree_sensitive(smp);
923e2414 793 hci_conn_drop(hcon);
6f48e260
JH
794}
795
84794e11 796static void smp_failure(struct l2cap_conn *conn, u8 reason)
4f957a76 797{
bab73cb6 798 struct hci_conn *hcon = conn->hcon;
b68fda68 799 struct l2cap_chan *chan = conn->smp;
bab73cb6 800
84794e11 801 if (reason)
4f957a76 802 smp_send_cmd(conn, SMP_CMD_PAIRING_FAIL, sizeof(reason),
f1560463 803 &reason);
4f957a76 804
e1e930f5 805 mgmt_auth_failed(hcon, HCI_ERROR_AUTH_FAILURE);
f1c09c07 806
fc75cc86 807 if (chan->data)
f1c09c07 808 smp_chan_destroy(conn);
4f957a76
BG
809}
810
2b64d153
BG
811#define JUST_WORKS 0x00
812#define JUST_CFM 0x01
813#define REQ_PASSKEY 0x02
814#define CFM_PASSKEY 0x03
815#define REQ_OOB 0x04
5e3d3d9b 816#define DSP_PASSKEY 0x05
2b64d153
BG
817#define OVERLAP 0xFF
818
819static const u8 gen_method[5][5] = {
820 { JUST_WORKS, JUST_CFM, REQ_PASSKEY, JUST_WORKS, REQ_PASSKEY },
821 { JUST_WORKS, JUST_CFM, REQ_PASSKEY, JUST_WORKS, REQ_PASSKEY },
822 { CFM_PASSKEY, CFM_PASSKEY, REQ_PASSKEY, JUST_WORKS, CFM_PASSKEY },
823 { JUST_WORKS, JUST_CFM, JUST_WORKS, JUST_WORKS, JUST_CFM },
824 { CFM_PASSKEY, CFM_PASSKEY, REQ_PASSKEY, JUST_WORKS, OVERLAP },
825};
826
5e3d3d9b
JH
827static const u8 sc_method[5][5] = {
828 { JUST_WORKS, JUST_CFM, REQ_PASSKEY, JUST_WORKS, REQ_PASSKEY },
829 { JUST_WORKS, CFM_PASSKEY, REQ_PASSKEY, JUST_WORKS, CFM_PASSKEY },
830 { DSP_PASSKEY, DSP_PASSKEY, REQ_PASSKEY, JUST_WORKS, DSP_PASSKEY },
831 { JUST_WORKS, JUST_CFM, JUST_WORKS, JUST_WORKS, JUST_CFM },
832 { DSP_PASSKEY, CFM_PASSKEY, REQ_PASSKEY, JUST_WORKS, CFM_PASSKEY },
833};
834
581370cc
JH
835static u8 get_auth_method(struct smp_chan *smp, u8 local_io, u8 remote_io)
836{
2bcd4003
JH
837 /* If either side has unknown io_caps, use JUST_CFM (which gets
838 * converted later to JUST_WORKS if we're initiators.
839 */
581370cc
JH
840 if (local_io > SMP_IO_KEYBOARD_DISPLAY ||
841 remote_io > SMP_IO_KEYBOARD_DISPLAY)
2bcd4003 842 return JUST_CFM;
581370cc 843
5e3d3d9b
JH
844 if (test_bit(SMP_FLAG_SC, &smp->flags))
845 return sc_method[remote_io][local_io];
846
581370cc
JH
847 return gen_method[remote_io][local_io];
848}
849
2b64d153
BG
850static int tk_request(struct l2cap_conn *conn, u8 remote_oob, u8 auth,
851 u8 local_io, u8 remote_io)
852{
853 struct hci_conn *hcon = conn->hcon;
5d88cc73
JH
854 struct l2cap_chan *chan = conn->smp;
855 struct smp_chan *smp = chan->data;
2b64d153 856 u32 passkey = 0;
d1d900f8 857 int ret;
2b64d153
BG
858
859 /* Initialize key for JUST WORKS */
860 memset(smp->tk, 0, sizeof(smp->tk));
4a74d658 861 clear_bit(SMP_FLAG_TK_VALID, &smp->flags);
2b64d153 862
83b4b195 863 bt_dev_dbg(hcon->hdev, "auth:%u lcl:%u rem:%u", auth, local_io,
2e1614f7 864 remote_io);
2b64d153 865
2bcd4003
JH
866 /* If neither side wants MITM, either "just" confirm an incoming
867 * request or use just-works for outgoing ones. The JUST_CFM
868 * will be converted to JUST_WORKS if necessary later in this
869 * function. If either side has MITM look up the method from the
870 * table.
871 */
581370cc 872 if (!(auth & SMP_AUTH_MITM))
783e0574 873 smp->method = JUST_CFM;
2b64d153 874 else
783e0574 875 smp->method = get_auth_method(smp, local_io, remote_io);
2b64d153 876
a82505c7 877 /* Don't confirm locally initiated pairing attempts */
783e0574
JH
878 if (smp->method == JUST_CFM && test_bit(SMP_FLAG_INITIATOR,
879 &smp->flags))
880 smp->method = JUST_WORKS;
a82505c7 881
02f3e254 882 /* Don't bother user space with no IO capabilities */
783e0574
JH
883 if (smp->method == JUST_CFM &&
884 hcon->io_capability == HCI_IO_NO_INPUT_OUTPUT)
885 smp->method = JUST_WORKS;
02f3e254 886
92516cd9
SS
887 /* If Just Works, Continue with Zero TK and ask user-space for
888 * confirmation */
783e0574 889 if (smp->method == JUST_WORKS) {
d1d900f8 890 ret = mgmt_user_confirm_request(hcon->hdev, &hcon->dst,
92516cd9
SS
891 hcon->type,
892 hcon->dst_type,
893 passkey, 1);
d1d900f8
GR
894 if (ret)
895 return ret;
92516cd9 896 set_bit(SMP_FLAG_WAIT_USER, &smp->flags);
2b64d153
BG
897 return 0;
898 }
899
19c5ce9c
JH
900 /* If this function is used for SC -> legacy fallback we
901 * can only recover the just-works case.
902 */
903 if (test_bit(SMP_FLAG_SC, &smp->flags))
904 return -EINVAL;
905
2b64d153 906 /* Not Just Works/Confirm results in MITM Authentication */
783e0574 907 if (smp->method != JUST_CFM) {
4a74d658 908 set_bit(SMP_FLAG_MITM_AUTH, &smp->flags);
5eb596f5
JH
909 if (hcon->pending_sec_level < BT_SECURITY_HIGH)
910 hcon->pending_sec_level = BT_SECURITY_HIGH;
911 }
2b64d153 912
74be523c
AP
913 /* If both devices have Keyboard-Display I/O, the initiator
914 * Confirms and the responder Enters the passkey.
2b64d153 915 */
783e0574 916 if (smp->method == OVERLAP) {
28cd47f7 917 if (test_bit(SMP_FLAG_INITIATOR, &smp->flags))
783e0574 918 smp->method = CFM_PASSKEY;
2b64d153 919 else
783e0574 920 smp->method = REQ_PASSKEY;
2b64d153
BG
921 }
922
01ad34d2 923 /* Generate random passkey. */
783e0574 924 if (smp->method == CFM_PASSKEY) {
943a732a 925 memset(smp->tk, 0, sizeof(smp->tk));
2b64d153
BG
926 get_random_bytes(&passkey, sizeof(passkey));
927 passkey %= 1000000;
943a732a 928 put_unaligned_le32(passkey, smp->tk);
83b4b195 929 bt_dev_dbg(hcon->hdev, "PassKey: %u", passkey);
4a74d658 930 set_bit(SMP_FLAG_TK_VALID, &smp->flags);
2b64d153
BG
931 }
932
783e0574 933 if (smp->method == REQ_PASSKEY)
ce39fb4e 934 ret = mgmt_user_passkey_request(hcon->hdev, &hcon->dst,
272d90df 935 hcon->type, hcon->dst_type);
783e0574 936 else if (smp->method == JUST_CFM)
4eb65e66
JH
937 ret = mgmt_user_confirm_request(hcon->hdev, &hcon->dst,
938 hcon->type, hcon->dst_type,
939 passkey, 1);
2b64d153 940 else
01ad34d2 941 ret = mgmt_user_passkey_notify(hcon->hdev, &hcon->dst,
272d90df 942 hcon->type, hcon->dst_type,
39adbffe 943 passkey, 0);
2b64d153 944
2b64d153
BG
945 return ret;
946}
947
1cc61144 948static u8 smp_confirm(struct smp_chan *smp)
8aab4757 949{
8aab4757 950 struct l2cap_conn *conn = smp->conn;
8aab4757
VCG
951 struct smp_cmd_pairing_confirm cp;
952 int ret;
8aab4757 953
2e1614f7 954 bt_dev_dbg(conn->hcon->hdev, "conn %p", conn);
8aab4757 955
28a220aa 956 ret = smp_c1(smp->tk, smp->prnd, smp->preq, smp->prsp,
b1cd5fd9 957 conn->hcon->init_addr_type, &conn->hcon->init_addr,
943a732a
JH
958 conn->hcon->resp_addr_type, &conn->hcon->resp_addr,
959 cp.confirm_val);
1cc61144
JH
960 if (ret)
961 return SMP_UNSPECIFIED;
8aab4757 962
4a74d658 963 clear_bit(SMP_FLAG_CFM_PENDING, &smp->flags);
2b64d153 964
8aab4757
VCG
965 smp_send_cmd(smp->conn, SMP_CMD_PAIRING_CONFIRM, sizeof(cp), &cp);
966
28cd47f7 967 if (test_bit(SMP_FLAG_INITIATOR, &smp->flags))
b28b4943
JH
968 SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_CONFIRM);
969 else
970 SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_RANDOM);
971
1cc61144 972 return 0;
8aab4757
VCG
973}
974
861580a9 975static u8 smp_random(struct smp_chan *smp)
8aab4757 976{
8aab4757
VCG
977 struct l2cap_conn *conn = smp->conn;
978 struct hci_conn *hcon = conn->hcon;
861580a9 979 u8 confirm[16];
8aab4757
VCG
980 int ret;
981
2e1614f7 982 bt_dev_dbg(conn->hcon->hdev, "conn %p %s", conn,
28cd47f7
LAD
983 test_bit(SMP_FLAG_INITIATOR, &smp->flags) ? "initiator" :
984 "responder");
8aab4757 985
28a220aa 986 ret = smp_c1(smp->tk, smp->rrnd, smp->preq, smp->prsp,
b1cd5fd9 987 hcon->init_addr_type, &hcon->init_addr,
943a732a 988 hcon->resp_addr_type, &hcon->resp_addr, confirm);
861580a9
JH
989 if (ret)
990 return SMP_UNSPECIFIED;
8aab4757 991
329d8230 992 if (crypto_memneq(smp->pcnf, confirm, sizeof(smp->pcnf))) {
2064ee33
MH
993 bt_dev_err(hcon->hdev, "pairing failed "
994 "(confirmation values mismatch)");
861580a9 995 return SMP_CONFIRM_FAILED;
8aab4757
VCG
996 }
997
28cd47f7 998 if (test_bit(SMP_FLAG_INITIATOR, &smp->flags)) {
fe39c7b2
MH
999 u8 stk[16];
1000 __le64 rand = 0;
1001 __le16 ediv = 0;
8aab4757 1002
28a220aa 1003 smp_s1(smp->tk, smp->rrnd, smp->prnd, stk);
8aab4757 1004
861580a9
JH
1005 if (test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &hcon->flags))
1006 return SMP_UNSPECIFIED;
8aab4757 1007
8b76ce34 1008 hci_le_start_enc(hcon, ediv, rand, stk, smp->enc_key_size);
f7aa611a 1009 hcon->enc_key_size = smp->enc_key_size;
fe59a05f 1010 set_bit(HCI_CONN_STK_ENCRYPT, &hcon->flags);
8aab4757 1011 } else {
fff3490f 1012 u8 stk[16], auth;
fe39c7b2
MH
1013 __le64 rand = 0;
1014 __le16 ediv = 0;
8aab4757 1015
943a732a
JH
1016 smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM, sizeof(smp->prnd),
1017 smp->prnd);
8aab4757 1018
28a220aa 1019 smp_s1(smp->tk, smp->prnd, smp->rrnd, stk);
8aab4757 1020
fff3490f
JH
1021 if (hcon->pending_sec_level == BT_SECURITY_HIGH)
1022 auth = 1;
1023 else
1024 auth = 0;
1025
fad646e1
AP
1026 /* Even though there's no _RESPONDER suffix this is the
1027 * responder STK we're adding for later lookup (the initiator
7d5843b7
JH
1028 * STK never needs to be stored).
1029 */
ce39fb4e 1030 hci_add_ltk(hcon->hdev, &hcon->dst, hcon->dst_type,
2ceba539 1031 SMP_STK, auth, stk, smp->enc_key_size, ediv, rand);
8aab4757
VCG
1032 }
1033
861580a9 1034 return 0;
8aab4757
VCG
1035}
1036
44f1a7ab
JH
1037static void smp_notify_keys(struct l2cap_conn *conn)
1038{
1039 struct l2cap_chan *chan = conn->smp;
1040 struct smp_chan *smp = chan->data;
1041 struct hci_conn *hcon = conn->hcon;
1042 struct hci_dev *hdev = hcon->hdev;
1043 struct smp_cmd_pairing *req = (void *) &smp->preq[1];
1044 struct smp_cmd_pairing *rsp = (void *) &smp->prsp[1];
1045 bool persistent;
1046
cad20c27
JH
1047 if (hcon->type == ACL_LINK) {
1048 if (hcon->key_type == HCI_LK_DEBUG_COMBINATION)
1049 persistent = false;
1050 else
1051 persistent = !test_bit(HCI_CONN_FLUSH_KEY,
1052 &hcon->flags);
1053 } else {
1054 /* The LTKs, IRKs and CSRKs should be persistent only if
1055 * both sides had the bonding bit set in their
1056 * authentication requests.
1057 */
1058 persistent = !!((req->auth_req & rsp->auth_req) &
1059 SMP_AUTH_BONDING);
1060 }
1061
44f1a7ab 1062 if (smp->remote_irk) {
cad20c27
JH
1063 mgmt_new_irk(hdev, smp->remote_irk, persistent);
1064
44f1a7ab
JH
1065 /* Now that user space can be considered to know the
1066 * identity address track the connection based on it
b5ae344d 1067 * from now on (assuming this is an LE link).
44f1a7ab 1068 */
b5ae344d
JH
1069 if (hcon->type == LE_LINK) {
1070 bacpy(&hcon->dst, &smp->remote_irk->bdaddr);
1071 hcon->dst_type = smp->remote_irk->addr_type;
b8b23001
LAD
1072 /* Use a short delay to make sure the new address is
1073 * propagated _before_ the channels.
1074 */
1075 queue_delayed_work(hdev->workqueue,
1076 &conn->id_addr_timer,
1077 ID_ADDR_TIMEOUT);
b5ae344d 1078 }
44f1a7ab
JH
1079 }
1080
44f1a7ab
JH
1081 if (smp->csrk) {
1082 smp->csrk->bdaddr_type = hcon->dst_type;
1083 bacpy(&smp->csrk->bdaddr, &hcon->dst);
1084 mgmt_new_csrk(hdev, smp->csrk, persistent);
1085 }
1086
fad646e1
AP
1087 if (smp->responder_csrk) {
1088 smp->responder_csrk->bdaddr_type = hcon->dst_type;
1089 bacpy(&smp->responder_csrk->bdaddr, &hcon->dst);
1090 mgmt_new_csrk(hdev, smp->responder_csrk, persistent);
44f1a7ab
JH
1091 }
1092
1093 if (smp->ltk) {
1094 smp->ltk->bdaddr_type = hcon->dst_type;
1095 bacpy(&smp->ltk->bdaddr, &hcon->dst);
1096 mgmt_new_ltk(hdev, smp->ltk, persistent);
1097 }
1098
fad646e1
AP
1099 if (smp->responder_ltk) {
1100 smp->responder_ltk->bdaddr_type = hcon->dst_type;
1101 bacpy(&smp->responder_ltk->bdaddr, &hcon->dst);
1102 mgmt_new_ltk(hdev, smp->responder_ltk, persistent);
44f1a7ab 1103 }
6a77083a
JH
1104
1105 if (smp->link_key) {
e3befab9
JH
1106 struct link_key *key;
1107 u8 type;
1108
1109 if (test_bit(SMP_FLAG_DEBUG_KEY, &smp->flags))
1110 type = HCI_LK_DEBUG_COMBINATION;
1111 else if (hcon->sec_level == BT_SECURITY_FIPS)
1112 type = HCI_LK_AUTH_COMBINATION_P256;
1113 else
1114 type = HCI_LK_UNAUTH_COMBINATION_P256;
1115
1116 key = hci_add_link_key(hdev, smp->conn->hcon, &hcon->dst,
1117 smp->link_key, type, 0, &persistent);
1118 if (key) {
1119 mgmt_new_link_key(hdev, key, persistent);
1120
1121 /* Don't keep debug keys around if the relevant
1122 * flag is not set.
1123 */
d7a5a11d 1124 if (!hci_dev_test_flag(hdev, HCI_KEEP_DEBUG_KEYS) &&
e3befab9
JH
1125 key->type == HCI_LK_DEBUG_COMBINATION) {
1126 list_del_rcu(&key->list);
1127 kfree_rcu(key, rcu);
1128 }
1129 }
6a77083a
JH
1130 }
1131}
1132
d3e54a87
JH
1133static void sc_add_ltk(struct smp_chan *smp)
1134{
1135 struct hci_conn *hcon = smp->conn->hcon;
1136 u8 key_type, auth;
1137
1138 if (test_bit(SMP_FLAG_DEBUG_KEY, &smp->flags))
1139 key_type = SMP_LTK_P256_DEBUG;
1140 else
1141 key_type = SMP_LTK_P256;
1142
1143 if (hcon->pending_sec_level == BT_SECURITY_FIPS)
1144 auth = 1;
1145 else
1146 auth = 0;
1147
d3e54a87
JH
1148 smp->ltk = hci_add_ltk(hcon->hdev, &hcon->dst, hcon->dst_type,
1149 key_type, auth, smp->tk, smp->enc_key_size,
1150 0, 0);
1151}
1152
6a77083a
JH
1153static void sc_generate_link_key(struct smp_chan *smp)
1154{
a62da6f1 1155 /* From core spec. Spells out in ASCII as 'lebr'. */
6a77083a
JH
1156 const u8 lebr[4] = { 0x72, 0x62, 0x65, 0x6c };
1157
1158 smp->link_key = kzalloc(16, GFP_KERNEL);
1159 if (!smp->link_key)
1160 return;
1161
a62da6f1 1162 if (test_bit(SMP_FLAG_CT2, &smp->flags)) {
151129df 1163 /* SALT = 0x000000000000000000000000746D7031 */
a62da6f1
JH
1164 const u8 salt[16] = { 0x31, 0x70, 0x6d, 0x74 };
1165
1166 if (smp_h7(smp->tfm_cmac, smp->tk, salt, smp->link_key)) {
453431a5 1167 kfree_sensitive(smp->link_key);
a62da6f1
JH
1168 smp->link_key = NULL;
1169 return;
1170 }
1171 } else {
1172 /* From core spec. Spells out in ASCII as 'tmp1'. */
1173 const u8 tmp1[4] = { 0x31, 0x70, 0x6d, 0x74 };
1174
1175 if (smp_h6(smp->tfm_cmac, smp->tk, tmp1, smp->link_key)) {
453431a5 1176 kfree_sensitive(smp->link_key);
a62da6f1
JH
1177 smp->link_key = NULL;
1178 return;
1179 }
6a77083a
JH
1180 }
1181
1182 if (smp_h6(smp->tfm_cmac, smp->link_key, lebr, smp->link_key)) {
453431a5 1183 kfree_sensitive(smp->link_key);
6a77083a
JH
1184 smp->link_key = NULL;
1185 return;
1186 }
44f1a7ab
JH
1187}
1188
b28b4943
JH
1189static void smp_allow_key_dist(struct smp_chan *smp)
1190{
1191 /* Allow the first expected phase 3 PDU. The rest of the PDUs
1192 * will be allowed in each PDU handler to ensure we receive
1193 * them in the correct order.
1194 */
1195 if (smp->remote_key_dist & SMP_DIST_ENC_KEY)
1196 SMP_ALLOW_CMD(smp, SMP_CMD_ENCRYPT_INFO);
1197 else if (smp->remote_key_dist & SMP_DIST_ID_KEY)
1198 SMP_ALLOW_CMD(smp, SMP_CMD_IDENT_INFO);
1199 else if (smp->remote_key_dist & SMP_DIST_SIGN)
1200 SMP_ALLOW_CMD(smp, SMP_CMD_SIGN_INFO);
1201}
1202
b5ae344d
JH
1203static void sc_generate_ltk(struct smp_chan *smp)
1204{
a62da6f1 1205 /* From core spec. Spells out in ASCII as 'brle'. */
b5ae344d
JH
1206 const u8 brle[4] = { 0x65, 0x6c, 0x72, 0x62 };
1207 struct hci_conn *hcon = smp->conn->hcon;
1208 struct hci_dev *hdev = hcon->hdev;
1209 struct link_key *key;
1210
1211 key = hci_find_link_key(hdev, &hcon->dst);
1212 if (!key) {
2064ee33 1213 bt_dev_err(hdev, "no Link Key found to generate LTK");
b5ae344d
JH
1214 return;
1215 }
1216
1217 if (key->type == HCI_LK_DEBUG_COMBINATION)
1218 set_bit(SMP_FLAG_DEBUG_KEY, &smp->flags);
1219
a62da6f1 1220 if (test_bit(SMP_FLAG_CT2, &smp->flags)) {
151129df 1221 /* SALT = 0x000000000000000000000000746D7032 */
a62da6f1
JH
1222 const u8 salt[16] = { 0x32, 0x70, 0x6d, 0x74 };
1223
1224 if (smp_h7(smp->tfm_cmac, key->val, salt, smp->tk))
1225 return;
1226 } else {
1227 /* From core spec. Spells out in ASCII as 'tmp2'. */
1228 const u8 tmp2[4] = { 0x32, 0x70, 0x6d, 0x74 };
1229
1230 if (smp_h6(smp->tfm_cmac, key->val, tmp2, smp->tk))
1231 return;
1232 }
b5ae344d
JH
1233
1234 if (smp_h6(smp->tfm_cmac, smp->tk, brle, smp->tk))
1235 return;
1236
1237 sc_add_ltk(smp);
1238}
1239
d6268e86 1240static void smp_distribute_keys(struct smp_chan *smp)
44f1a7ab
JH
1241{
1242 struct smp_cmd_pairing *req, *rsp;
86d1407c 1243 struct l2cap_conn *conn = smp->conn;
44f1a7ab
JH
1244 struct hci_conn *hcon = conn->hcon;
1245 struct hci_dev *hdev = hcon->hdev;
1246 __u8 *keydist;
1247
2e1614f7 1248 bt_dev_dbg(hdev, "conn %p", conn);
44f1a7ab 1249
44f1a7ab
JH
1250 rsp = (void *) &smp->prsp[1];
1251
1252 /* The responder sends its keys first */
28cd47f7
LAD
1253 if (test_bit(SMP_FLAG_INITIATOR, &smp->flags) &&
1254 (smp->remote_key_dist & KEY_DIST_MASK)) {
b28b4943 1255 smp_allow_key_dist(smp);
86d1407c 1256 return;
b28b4943 1257 }
44f1a7ab
JH
1258
1259 req = (void *) &smp->preq[1];
1260
28cd47f7 1261 if (test_bit(SMP_FLAG_INITIATOR, &smp->flags)) {
44f1a7ab
JH
1262 keydist = &rsp->init_key_dist;
1263 *keydist &= req->init_key_dist;
1264 } else {
1265 keydist = &rsp->resp_key_dist;
1266 *keydist &= req->resp_key_dist;
1267 }
1268
6a77083a 1269 if (test_bit(SMP_FLAG_SC, &smp->flags)) {
b5ae344d 1270 if (hcon->type == LE_LINK && (*keydist & SMP_DIST_LINK_KEY))
6a77083a 1271 sc_generate_link_key(smp);
b5ae344d
JH
1272 if (hcon->type == ACL_LINK && (*keydist & SMP_DIST_ENC_KEY))
1273 sc_generate_ltk(smp);
6a77083a
JH
1274
1275 /* Clear the keys which are generated but not distributed */
1276 *keydist &= ~SMP_SC_NO_DIST;
1277 }
1278
2e1614f7 1279 bt_dev_dbg(hdev, "keydist 0x%x", *keydist);
44f1a7ab
JH
1280
1281 if (*keydist & SMP_DIST_ENC_KEY) {
1282 struct smp_cmd_encrypt_info enc;
fad646e1 1283 struct smp_cmd_initiator_ident ident;
44f1a7ab
JH
1284 struct smp_ltk *ltk;
1285 u8 authenticated;
1286 __le16 ediv;
1287 __le64 rand;
1288
1fc62c52
JH
1289 /* Make sure we generate only the significant amount of
1290 * bytes based on the encryption key size, and set the rest
1291 * of the value to zeroes.
1292 */
1293 get_random_bytes(enc.ltk, smp->enc_key_size);
1294 memset(enc.ltk + smp->enc_key_size, 0,
1295 sizeof(enc.ltk) - smp->enc_key_size);
1296
44f1a7ab
JH
1297 get_random_bytes(&ediv, sizeof(ediv));
1298 get_random_bytes(&rand, sizeof(rand));
1299
1300 smp_send_cmd(conn, SMP_CMD_ENCRYPT_INFO, sizeof(enc), &enc);
1301
1302 authenticated = hcon->sec_level == BT_SECURITY_HIGH;
1303 ltk = hci_add_ltk(hdev, &hcon->dst, hcon->dst_type,
fad646e1 1304 SMP_LTK_RESPONDER, authenticated, enc.ltk,
44f1a7ab 1305 smp->enc_key_size, ediv, rand);
fad646e1 1306 smp->responder_ltk = ltk;
44f1a7ab
JH
1307
1308 ident.ediv = ediv;
1309 ident.rand = rand;
1310
fad646e1
AP
1311 smp_send_cmd(conn, SMP_CMD_INITIATOR_IDENT, sizeof(ident),
1312 &ident);
44f1a7ab
JH
1313
1314 *keydist &= ~SMP_DIST_ENC_KEY;
1315 }
1316
1317 if (*keydist & SMP_DIST_ID_KEY) {
1318 struct smp_cmd_ident_addr_info addrinfo;
1319 struct smp_cmd_ident_info idinfo;
1320
1321 memcpy(idinfo.irk, hdev->irk, sizeof(idinfo.irk));
1322
1323 smp_send_cmd(conn, SMP_CMD_IDENT_INFO, sizeof(idinfo), &idinfo);
1324
1325 /* The hci_conn contains the local identity address
1326 * after the connection has been established.
1327 *
1328 * This is true even when the connection has been
1329 * established using a resolvable random address.
1330 */
1331 bacpy(&addrinfo.bdaddr, &hcon->src);
1332 addrinfo.addr_type = hcon->src_type;
1333
1334 smp_send_cmd(conn, SMP_CMD_IDENT_ADDR_INFO, sizeof(addrinfo),
1335 &addrinfo);
1336
1337 *keydist &= ~SMP_DIST_ID_KEY;
1338 }
1339
1340 if (*keydist & SMP_DIST_SIGN) {
1341 struct smp_cmd_sign_info sign;
1342 struct smp_csrk *csrk;
1343
1344 /* Generate a new random key */
1345 get_random_bytes(sign.csrk, sizeof(sign.csrk));
1346
1347 csrk = kzalloc(sizeof(*csrk), GFP_KERNEL);
1348 if (csrk) {
4cd3928a
JH
1349 if (hcon->sec_level > BT_SECURITY_MEDIUM)
1350 csrk->type = MGMT_CSRK_LOCAL_AUTHENTICATED;
1351 else
1352 csrk->type = MGMT_CSRK_LOCAL_UNAUTHENTICATED;
44f1a7ab
JH
1353 memcpy(csrk->val, sign.csrk, sizeof(csrk->val));
1354 }
fad646e1 1355 smp->responder_csrk = csrk;
44f1a7ab
JH
1356
1357 smp_send_cmd(conn, SMP_CMD_SIGN_INFO, sizeof(sign), &sign);
1358
1359 *keydist &= ~SMP_DIST_SIGN;
1360 }
1361
1362 /* If there are still keys to be received wait for them */
b28b4943
JH
1363 if (smp->remote_key_dist & KEY_DIST_MASK) {
1364 smp_allow_key_dist(smp);
86d1407c 1365 return;
b28b4943 1366 }
44f1a7ab 1367
44f1a7ab
JH
1368 set_bit(SMP_FLAG_COMPLETE, &smp->flags);
1369 smp_notify_keys(conn);
1370
1371 smp_chan_destroy(conn);
44f1a7ab
JH
1372}
1373
b68fda68
JH
1374static void smp_timeout(struct work_struct *work)
1375{
1376 struct smp_chan *smp = container_of(work, struct smp_chan,
1377 security_timer.work);
1378 struct l2cap_conn *conn = smp->conn;
1379
2e1614f7 1380 bt_dev_dbg(conn->hcon->hdev, "conn %p", conn);
b68fda68 1381
1e91c29e 1382 hci_disconnect(conn->hcon, HCI_ERROR_REMOTE_USER_TERM);
b68fda68
JH
1383}
1384
8aab4757
VCG
1385static struct smp_chan *smp_chan_create(struct l2cap_conn *conn)
1386{
2e1614f7 1387 struct hci_conn *hcon = conn->hcon;
5d88cc73 1388 struct l2cap_chan *chan = conn->smp;
8aab4757
VCG
1389 struct smp_chan *smp;
1390
f1560463 1391 smp = kzalloc(sizeof(*smp), GFP_ATOMIC);
fc75cc86 1392 if (!smp)
8aab4757
VCG
1393 return NULL;
1394
71af2f6b 1395 smp->tfm_cmac = crypto_alloc_shash("cmac(aes)", 0, 0);
407cecf6 1396 if (IS_ERR(smp->tfm_cmac)) {
2e1614f7 1397 bt_dev_err(hcon->hdev, "Unable to create CMAC crypto context");
28a220aa 1398 goto zfree_smp;
47eb2ac8
TA
1399 }
1400
6763f5ea 1401 smp->tfm_ecdh = crypto_alloc_kpp("ecdh-nist-p256", 0, 0);
47eb2ac8 1402 if (IS_ERR(smp->tfm_ecdh)) {
2e1614f7 1403 bt_dev_err(hcon->hdev, "Unable to create ECDH crypto context");
47eb2ac8 1404 goto free_shash;
407cecf6
JH
1405 }
1406
8aab4757 1407 smp->conn = conn;
5d88cc73 1408 chan->data = smp;
8aab4757 1409
b28b4943
JH
1410 SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_FAIL);
1411
b68fda68
JH
1412 INIT_DELAYED_WORK(&smp->security_timer, smp_timeout);
1413
2e1614f7 1414 hci_conn_hold(hcon);
8aab4757
VCG
1415
1416 return smp;
47eb2ac8
TA
1417
1418free_shash:
1419 crypto_free_shash(smp->tfm_cmac);
47eb2ac8 1420zfree_smp:
453431a5 1421 kfree_sensitive(smp);
47eb2ac8 1422 return NULL;
8aab4757
VCG
1423}
1424
760b018b
JH
1425static int sc_mackey_and_ltk(struct smp_chan *smp, u8 mackey[16], u8 ltk[16])
1426{
1427 struct hci_conn *hcon = smp->conn->hcon;
1428 u8 *na, *nb, a[7], b[7];
1429
28cd47f7 1430 if (test_bit(SMP_FLAG_INITIATOR, &smp->flags)) {
760b018b
JH
1431 na = smp->prnd;
1432 nb = smp->rrnd;
1433 } else {
1434 na = smp->rrnd;
1435 nb = smp->prnd;
1436 }
1437
1438 memcpy(a, &hcon->init_addr, 6);
1439 memcpy(b, &hcon->resp_addr, 6);
1440 a[6] = hcon->init_addr_type;
1441 b[6] = hcon->resp_addr_type;
1442
1443 return smp_f5(smp->tfm_cmac, smp->dhkey, na, nb, a, b, mackey, ltk);
1444}
1445
38606f14 1446static void sc_dhkey_check(struct smp_chan *smp)
760b018b
JH
1447{
1448 struct hci_conn *hcon = smp->conn->hcon;
1449 struct smp_cmd_dhkey_check check;
1450 u8 a[7], b[7], *local_addr, *remote_addr;
1451 u8 io_cap[3], r[16];
1452
760b018b
JH
1453 memcpy(a, &hcon->init_addr, 6);
1454 memcpy(b, &hcon->resp_addr, 6);
1455 a[6] = hcon->init_addr_type;
1456 b[6] = hcon->resp_addr_type;
1457
28cd47f7 1458 if (test_bit(SMP_FLAG_INITIATOR, &smp->flags)) {
760b018b
JH
1459 local_addr = a;
1460 remote_addr = b;
1461 memcpy(io_cap, &smp->preq[1], 3);
1462 } else {
1463 local_addr = b;
1464 remote_addr = a;
1465 memcpy(io_cap, &smp->prsp[1], 3);
1466 }
1467
dddd3059
JH
1468 memset(r, 0, sizeof(r));
1469
1470 if (smp->method == REQ_PASSKEY || smp->method == DSP_PASSKEY)
38606f14 1471 put_unaligned_le32(hcon->passkey_notify, r);
760b018b 1472
a29b0733
JH
1473 if (smp->method == REQ_OOB)
1474 memcpy(r, smp->rr, 16);
1475
760b018b
JH
1476 smp_f6(smp->tfm_cmac, smp->mackey, smp->prnd, smp->rrnd, r, io_cap,
1477 local_addr, remote_addr, check.e);
1478
1479 smp_send_cmd(smp->conn, SMP_CMD_DHKEY_CHECK, sizeof(check), &check);
dddd3059
JH
1480}
1481
38606f14
JH
1482static u8 sc_passkey_send_confirm(struct smp_chan *smp)
1483{
1484 struct l2cap_conn *conn = smp->conn;
1485 struct hci_conn *hcon = conn->hcon;
1486 struct smp_cmd_pairing_confirm cfm;
1487 u8 r;
1488
1489 r = ((hcon->passkey_notify >> smp->passkey_round) & 0x01);
1490 r |= 0x80;
1491
1492 get_random_bytes(smp->prnd, sizeof(smp->prnd));
1493
1494 if (smp_f4(smp->tfm_cmac, smp->local_pk, smp->remote_pk, smp->prnd, r,
1495 cfm.confirm_val))
1496 return SMP_UNSPECIFIED;
1497
1498 smp_send_cmd(conn, SMP_CMD_PAIRING_CONFIRM, sizeof(cfm), &cfm);
1499
1500 return 0;
1501}
1502
1503static u8 sc_passkey_round(struct smp_chan *smp, u8 smp_op)
1504{
1505 struct l2cap_conn *conn = smp->conn;
1506 struct hci_conn *hcon = conn->hcon;
1507 struct hci_dev *hdev = hcon->hdev;
1508 u8 cfm[16], r;
1509
1510 /* Ignore the PDU if we've already done 20 rounds (0 - 19) */
1511 if (smp->passkey_round >= 20)
1512 return 0;
1513
1514 switch (smp_op) {
1515 case SMP_CMD_PAIRING_RANDOM:
1516 r = ((hcon->passkey_notify >> smp->passkey_round) & 0x01);
1517 r |= 0x80;
1518
1519 if (smp_f4(smp->tfm_cmac, smp->remote_pk, smp->local_pk,
1520 smp->rrnd, r, cfm))
1521 return SMP_UNSPECIFIED;
1522
329d8230 1523 if (crypto_memneq(smp->pcnf, cfm, 16))
38606f14
JH
1524 return SMP_CONFIRM_FAILED;
1525
1526 smp->passkey_round++;
1527
1528 if (smp->passkey_round == 20) {
1529 /* Generate MacKey and LTK */
1530 if (sc_mackey_and_ltk(smp, smp->mackey, smp->tk))
1531 return SMP_UNSPECIFIED;
1532 }
1533
1534 /* The round is only complete when the initiator
1535 * receives pairing random.
1536 */
28cd47f7 1537 if (!test_bit(SMP_FLAG_INITIATOR, &smp->flags)) {
38606f14
JH
1538 smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM,
1539 sizeof(smp->prnd), smp->prnd);
d3e54a87 1540 if (smp->passkey_round == 20)
38606f14 1541 SMP_ALLOW_CMD(smp, SMP_CMD_DHKEY_CHECK);
d3e54a87 1542 else
38606f14 1543 SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_CONFIRM);
38606f14
JH
1544 return 0;
1545 }
1546
1547 /* Start the next round */
1548 if (smp->passkey_round != 20)
1549 return sc_passkey_round(smp, 0);
1550
1551 /* Passkey rounds are complete - start DHKey Check */
1552 sc_dhkey_check(smp);
1553 SMP_ALLOW_CMD(smp, SMP_CMD_DHKEY_CHECK);
1554
1555 break;
1556
1557 case SMP_CMD_PAIRING_CONFIRM:
1558 if (test_bit(SMP_FLAG_WAIT_USER, &smp->flags)) {
1559 set_bit(SMP_FLAG_CFM_PENDING, &smp->flags);
1560 return 0;
1561 }
1562
1563 SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_RANDOM);
1564
28cd47f7 1565 if (test_bit(SMP_FLAG_INITIATOR, &smp->flags)) {
38606f14
JH
1566 smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM,
1567 sizeof(smp->prnd), smp->prnd);
1568 return 0;
1569 }
1570
1571 return sc_passkey_send_confirm(smp);
1572
1573 case SMP_CMD_PUBLIC_KEY:
1574 default:
1575 /* Initiating device starts the round */
28cd47f7 1576 if (!test_bit(SMP_FLAG_INITIATOR, &smp->flags))
38606f14
JH
1577 return 0;
1578
2e1614f7
LAD
1579 bt_dev_dbg(hdev, "Starting passkey round %u",
1580 smp->passkey_round + 1);
38606f14
JH
1581
1582 SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_CONFIRM);
1583
1584 return sc_passkey_send_confirm(smp);
1585 }
1586
1587 return 0;
1588}
1589
dddd3059
JH
1590static int sc_user_reply(struct smp_chan *smp, u16 mgmt_op, __le32 passkey)
1591{
38606f14
JH
1592 struct l2cap_conn *conn = smp->conn;
1593 struct hci_conn *hcon = conn->hcon;
1594 u8 smp_op;
1595
1596 clear_bit(SMP_FLAG_WAIT_USER, &smp->flags);
1597
dddd3059
JH
1598 switch (mgmt_op) {
1599 case MGMT_OP_USER_PASSKEY_NEG_REPLY:
1600 smp_failure(smp->conn, SMP_PASSKEY_ENTRY_FAILED);
1601 return 0;
1602 case MGMT_OP_USER_CONFIRM_NEG_REPLY:
1603 smp_failure(smp->conn, SMP_NUMERIC_COMP_FAILED);
1604 return 0;
38606f14
JH
1605 case MGMT_OP_USER_PASSKEY_REPLY:
1606 hcon->passkey_notify = le32_to_cpu(passkey);
1607 smp->passkey_round = 0;
1608
1609 if (test_and_clear_bit(SMP_FLAG_CFM_PENDING, &smp->flags))
1610 smp_op = SMP_CMD_PAIRING_CONFIRM;
1611 else
1612 smp_op = 0;
1613
1614 if (sc_passkey_round(smp, smp_op))
1615 return -EIO;
1616
1617 return 0;
dddd3059
JH
1618 }
1619
d3e54a87 1620 /* Initiator sends DHKey check first */
28cd47f7 1621 if (test_bit(SMP_FLAG_INITIATOR, &smp->flags)) {
d3e54a87
JH
1622 sc_dhkey_check(smp);
1623 SMP_ALLOW_CMD(smp, SMP_CMD_DHKEY_CHECK);
1624 } else if (test_and_clear_bit(SMP_FLAG_DHKEY_PENDING, &smp->flags)) {
1625 sc_dhkey_check(smp);
1626 sc_add_ltk(smp);
1627 }
760b018b
JH
1628
1629 return 0;
1630}
1631
2b64d153
BG
1632int smp_user_confirm_reply(struct hci_conn *hcon, u16 mgmt_op, __le32 passkey)
1633{
b10e8017 1634 struct l2cap_conn *conn = hcon->l2cap_data;
5d88cc73 1635 struct l2cap_chan *chan;
2b64d153
BG
1636 struct smp_chan *smp;
1637 u32 value;
fc75cc86 1638 int err;
2b64d153 1639
fc75cc86 1640 if (!conn)
2b64d153
BG
1641 return -ENOTCONN;
1642
0ae8ef67
LAD
1643 bt_dev_dbg(conn->hcon->hdev, "");
1644
5d88cc73
JH
1645 chan = conn->smp;
1646 if (!chan)
1647 return -ENOTCONN;
1648
fc75cc86
JH
1649 l2cap_chan_lock(chan);
1650 if (!chan->data) {
1651 err = -ENOTCONN;
1652 goto unlock;
1653 }
1654
5d88cc73 1655 smp = chan->data;
2b64d153 1656
760b018b
JH
1657 if (test_bit(SMP_FLAG_SC, &smp->flags)) {
1658 err = sc_user_reply(smp, mgmt_op, passkey);
1659 goto unlock;
1660 }
1661
2b64d153
BG
1662 switch (mgmt_op) {
1663 case MGMT_OP_USER_PASSKEY_REPLY:
1664 value = le32_to_cpu(passkey);
943a732a 1665 memset(smp->tk, 0, sizeof(smp->tk));
83b4b195 1666 bt_dev_dbg(conn->hcon->hdev, "PassKey: %u", value);
943a732a 1667 put_unaligned_le32(value, smp->tk);
19186c7b 1668 fallthrough;
2b64d153 1669 case MGMT_OP_USER_CONFIRM_REPLY:
4a74d658 1670 set_bit(SMP_FLAG_TK_VALID, &smp->flags);
2b64d153
BG
1671 break;
1672 case MGMT_OP_USER_PASSKEY_NEG_REPLY:
1673 case MGMT_OP_USER_CONFIRM_NEG_REPLY:
84794e11 1674 smp_failure(conn, SMP_PASSKEY_ENTRY_FAILED);
fc75cc86
JH
1675 err = 0;
1676 goto unlock;
2b64d153 1677 default:
84794e11 1678 smp_failure(conn, SMP_PASSKEY_ENTRY_FAILED);
fc75cc86
JH
1679 err = -EOPNOTSUPP;
1680 goto unlock;
2b64d153
BG
1681 }
1682
fc75cc86
JH
1683 err = 0;
1684
2b64d153 1685 /* If it is our turn to send Pairing Confirm, do so now */
1cc61144
JH
1686 if (test_bit(SMP_FLAG_CFM_PENDING, &smp->flags)) {
1687 u8 rsp = smp_confirm(smp);
1688 if (rsp)
1689 smp_failure(conn, rsp);
1690 }
2b64d153 1691
fc75cc86
JH
1692unlock:
1693 l2cap_chan_unlock(chan);
1694 return err;
2b64d153
BG
1695}
1696
b5ae344d
JH
1697static void build_bredr_pairing_cmd(struct smp_chan *smp,
1698 struct smp_cmd_pairing *req,
1699 struct smp_cmd_pairing *rsp)
1700{
1701 struct l2cap_conn *conn = smp->conn;
1702 struct hci_dev *hdev = conn->hcon->hdev;
1703 u8 local_dist = 0, remote_dist = 0;
1704
d7a5a11d 1705 if (hci_dev_test_flag(hdev, HCI_BONDABLE)) {
b5ae344d
JH
1706 local_dist = SMP_DIST_ENC_KEY | SMP_DIST_SIGN;
1707 remote_dist = SMP_DIST_ENC_KEY | SMP_DIST_SIGN;
1708 }
1709
d7a5a11d 1710 if (hci_dev_test_flag(hdev, HCI_RPA_RESOLVING))
b5ae344d
JH
1711 remote_dist |= SMP_DIST_ID_KEY;
1712
d7a5a11d 1713 if (hci_dev_test_flag(hdev, HCI_PRIVACY))
b5ae344d
JH
1714 local_dist |= SMP_DIST_ID_KEY;
1715
1716 if (!rsp) {
1717 memset(req, 0, sizeof(*req));
1718
a62da6f1 1719 req->auth_req = SMP_AUTH_CT2;
b5ae344d
JH
1720 req->init_key_dist = local_dist;
1721 req->resp_key_dist = remote_dist;
e3f6a257 1722 req->max_key_size = conn->hcon->enc_key_size;
b5ae344d
JH
1723
1724 smp->remote_key_dist = remote_dist;
1725
1726 return;
1727 }
1728
1729 memset(rsp, 0, sizeof(*rsp));
1730
a62da6f1 1731 rsp->auth_req = SMP_AUTH_CT2;
e3f6a257 1732 rsp->max_key_size = conn->hcon->enc_key_size;
b5ae344d
JH
1733 rsp->init_key_dist = req->init_key_dist & remote_dist;
1734 rsp->resp_key_dist = req->resp_key_dist & local_dist;
1735
1736 smp->remote_key_dist = rsp->init_key_dist;
1737}
1738
da85e5e5 1739static u8 smp_cmd_pairing_req(struct l2cap_conn *conn, struct sk_buff *skb)
88ba43b6 1740{
3158c50c 1741 struct smp_cmd_pairing rsp, *req = (void *) skb->data;
fc75cc86 1742 struct l2cap_chan *chan = conn->smp;
b3c6410b 1743 struct hci_dev *hdev = conn->hcon->hdev;
28cd47f7 1744 struct smp_chan *smp = chan->data;
c7262e71 1745 u8 key_size, auth, sec_level;
8aab4757 1746 int ret;
88ba43b6 1747
2e1614f7 1748 bt_dev_dbg(hdev, "conn %p", conn);
88ba43b6 1749
c46b98be 1750 if (skb->len < sizeof(*req))
38e4a915 1751 return SMP_INVALID_PARAMS;
c46b98be 1752
28cd47f7 1753 if (smp && test_bit(SMP_FLAG_INITIATOR, &smp->flags))
2b64d153
BG
1754 return SMP_CMD_NOTSUPP;
1755
28cd47f7 1756 if (!smp) {
8aab4757 1757 smp = smp_chan_create(conn);
28cd47f7
LAD
1758 if (!smp)
1759 return SMP_UNSPECIFIED;
1760 }
d26a2345 1761
c05b9339 1762 /* We didn't start the pairing, so match remote */
0edb14de 1763 auth = req->auth_req & AUTH_REQ_MASK(hdev);
c05b9339 1764
d7a5a11d 1765 if (!hci_dev_test_flag(hdev, HCI_BONDABLE) &&
c05b9339 1766 (auth & SMP_AUTH_BONDING))
b3c6410b
JH
1767 return SMP_PAIRING_NOTSUPP;
1768
d7a5a11d 1769 if (hci_dev_test_flag(hdev, HCI_SC_ONLY) && !(auth & SMP_AUTH_SC))
903b71c7
JH
1770 return SMP_AUTH_REQUIREMENTS;
1771
1c1def09
VCG
1772 smp->preq[0] = SMP_CMD_PAIRING_REQ;
1773 memcpy(&smp->preq[1], req, sizeof(*req));
3158c50c 1774 skb_pull(skb, sizeof(*req));
88ba43b6 1775
cb06d366
JH
1776 /* If the remote side's OOB flag is set it means it has
1777 * successfully received our local OOB data - therefore set the
1778 * flag to indicate that local OOB is in use.
1779 */
94f14e47 1780 if (req->oob_flag == SMP_OOB_PRESENT && SMP_DEV(hdev)->local_oob)
58428563
JH
1781 set_bit(SMP_FLAG_LOCAL_OOB, &smp->flags);
1782
b5ae344d
JH
1783 /* SMP over BR/EDR requires special treatment */
1784 if (conn->hcon->type == ACL_LINK) {
1785 /* We must have a BR/EDR SC link */
08f63cc5 1786 if (!test_bit(HCI_CONN_AES_CCM, &conn->hcon->flags) &&
b7cb93e5 1787 !hci_dev_test_flag(hdev, HCI_FORCE_BREDR_SMP))
b5ae344d
JH
1788 return SMP_CROSS_TRANSP_NOT_ALLOWED;
1789
1790 set_bit(SMP_FLAG_SC, &smp->flags);
1791
1792 build_bredr_pairing_cmd(smp, req, &rsp);
1793
a62da6f1
JH
1794 if (req->auth_req & SMP_AUTH_CT2)
1795 set_bit(SMP_FLAG_CT2, &smp->flags);
1796
b5ae344d
JH
1797 key_size = min(req->max_key_size, rsp.max_key_size);
1798 if (check_enc_key_size(conn, key_size))
1799 return SMP_ENC_KEY_SIZE;
1800
1801 /* Clear bits which are generated but not distributed */
1802 smp->remote_key_dist &= ~SMP_SC_NO_DIST;
1803
1804 smp->prsp[0] = SMP_CMD_PAIRING_RSP;
1805 memcpy(&smp->prsp[1], &rsp, sizeof(rsp));
1806 smp_send_cmd(conn, SMP_CMD_PAIRING_RSP, sizeof(rsp), &rsp);
1807
1808 smp_distribute_keys(smp);
1809 return 0;
1810 }
1811
5e3d3d9b
JH
1812 build_pairing_cmd(conn, req, &rsp, auth);
1813
a62da6f1 1814 if (rsp.auth_req & SMP_AUTH_SC) {
5e3d3d9b
JH
1815 set_bit(SMP_FLAG_SC, &smp->flags);
1816
a62da6f1
JH
1817 if (rsp.auth_req & SMP_AUTH_CT2)
1818 set_bit(SMP_FLAG_CT2, &smp->flags);
1819 }
1820
5be5e275 1821 if (conn->hcon->io_capability == HCI_IO_NO_INPUT_OUTPUT)
1afc2a1a
JH
1822 sec_level = BT_SECURITY_MEDIUM;
1823 else
1824 sec_level = authreq_to_seclevel(auth);
1825
c7262e71
JH
1826 if (sec_level > conn->hcon->pending_sec_level)
1827 conn->hcon->pending_sec_level = sec_level;
fdde0a26 1828
49c922bb 1829 /* If we need MITM check that it can be achieved */
2ed8f65c
JH
1830 if (conn->hcon->pending_sec_level >= BT_SECURITY_HIGH) {
1831 u8 method;
1832
1833 method = get_auth_method(smp, conn->hcon->io_capability,
1834 req->io_capability);
1835 if (method == JUST_WORKS || method == JUST_CFM)
1836 return SMP_AUTH_REQUIREMENTS;
1837 }
1838
3158c50c
VCG
1839 key_size = min(req->max_key_size, rsp.max_key_size);
1840 if (check_enc_key_size(conn, key_size))
1841 return SMP_ENC_KEY_SIZE;
88ba43b6 1842
e84a6b13 1843 get_random_bytes(smp->prnd, sizeof(smp->prnd));
8aab4757 1844
1c1def09
VCG
1845 smp->prsp[0] = SMP_CMD_PAIRING_RSP;
1846 memcpy(&smp->prsp[1], &rsp, sizeof(rsp));
f01ead31 1847
3158c50c 1848 smp_send_cmd(conn, SMP_CMD_PAIRING_RSP, sizeof(rsp), &rsp);
3b19146d
JH
1849
1850 clear_bit(SMP_FLAG_INITIATOR, &smp->flags);
1851
19c5ce9c
JH
1852 /* Strictly speaking we shouldn't allow Pairing Confirm for the
1853 * SC case, however some implementations incorrectly copy RFU auth
1854 * req bits from our security request, which may create a false
1855 * positive SC enablement.
1856 */
1857 SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_CONFIRM);
1858
3b19146d
JH
1859 if (test_bit(SMP_FLAG_SC, &smp->flags)) {
1860 SMP_ALLOW_CMD(smp, SMP_CMD_PUBLIC_KEY);
1861 /* Clear bits which are generated but not distributed */
1862 smp->remote_key_dist &= ~SMP_SC_NO_DIST;
1863 /* Wait for Public Key from Initiating Device */
1864 return 0;
3b19146d 1865 }
da85e5e5 1866
2b64d153
BG
1867 /* Request setup of TK */
1868 ret = tk_request(conn, 0, auth, rsp.io_capability, req->io_capability);
1869 if (ret)
1870 return SMP_UNSPECIFIED;
1871
da85e5e5 1872 return 0;
88ba43b6
AB
1873}
1874
3b19146d
JH
1875static u8 sc_send_public_key(struct smp_chan *smp)
1876{
70157ef5
JH
1877 struct hci_dev *hdev = smp->conn->hcon->hdev;
1878
56860245 1879 bt_dev_dbg(hdev, "");
3b19146d 1880
1a8bab4f 1881 if (test_bit(SMP_FLAG_LOCAL_OOB, &smp->flags)) {
33d0c030
MH
1882 struct l2cap_chan *chan = hdev->smp_data;
1883 struct smp_dev *smp_dev;
1884
1885 if (!chan || !chan->data)
1886 return SMP_UNSPECIFIED;
1887
1888 smp_dev = chan->data;
1889
1890 memcpy(smp->local_pk, smp_dev->local_pk, 64);
fb334fee 1891 memcpy(smp->lr, smp_dev->local_rand, 16);
33d0c030
MH
1892
1893 if (smp_dev->debug_key)
1894 set_bit(SMP_FLAG_DEBUG_KEY, &smp->flags);
1895
1896 goto done;
1897 }
1898
d7a5a11d 1899 if (hci_dev_test_flag(hdev, HCI_USE_DEBUG_KEYS)) {
2e1614f7 1900 bt_dev_dbg(hdev, "Using debug keys");
c0153b0b
TA
1901 if (set_ecdh_privkey(smp->tfm_ecdh, debug_sk))
1902 return SMP_UNSPECIFIED;
70157ef5 1903 memcpy(smp->local_pk, debug_pk, 64);
70157ef5
JH
1904 set_bit(SMP_FLAG_DEBUG_KEY, &smp->flags);
1905 } else {
1906 while (true) {
c0153b0b
TA
1907 /* Generate key pair for Secure Connections */
1908 if (generate_ecdh_keys(smp->tfm_ecdh, smp->local_pk))
70157ef5 1909 return SMP_UNSPECIFIED;
6c0dcc50 1910
70157ef5 1911 /* This is unlikely, but we need to check that
91641b79 1912 * we didn't accidentally generate a debug key.
70157ef5 1913 */
c0153b0b 1914 if (crypto_memneq(smp->local_pk, debug_pk, 64))
70157ef5
JH
1915 break;
1916 }
6c0dcc50 1917 }
3b19146d 1918
33d0c030 1919done:
c7a3d57d 1920 SMP_DBG("Local Public Key X: %32phN", smp->local_pk);
8e4e2ee5 1921 SMP_DBG("Local Public Key Y: %32phN", smp->local_pk + 32);
3b19146d
JH
1922
1923 smp_send_cmd(smp->conn, SMP_CMD_PUBLIC_KEY, 64, smp->local_pk);
1924
1925 return 0;
1926}
1927
da85e5e5 1928static u8 smp_cmd_pairing_rsp(struct l2cap_conn *conn, struct sk_buff *skb)
88ba43b6 1929{
3158c50c 1930 struct smp_cmd_pairing *req, *rsp = (void *) skb->data;
5d88cc73
JH
1931 struct l2cap_chan *chan = conn->smp;
1932 struct smp_chan *smp = chan->data;
0edb14de 1933 struct hci_dev *hdev = conn->hcon->hdev;
3a7dbfb8 1934 u8 key_size, auth;
7d24ddcc 1935 int ret;
88ba43b6 1936
2e1614f7 1937 bt_dev_dbg(hdev, "conn %p", conn);
88ba43b6 1938
c46b98be 1939 if (skb->len < sizeof(*rsp))
38e4a915 1940 return SMP_INVALID_PARAMS;
c46b98be 1941
28cd47f7 1942 if (!test_bit(SMP_FLAG_INITIATOR, &smp->flags))
2b64d153
BG
1943 return SMP_CMD_NOTSUPP;
1944
3158c50c
VCG
1945 skb_pull(skb, sizeof(*rsp));
1946
1c1def09 1947 req = (void *) &smp->preq[1];
da85e5e5 1948
3158c50c
VCG
1949 key_size = min(req->max_key_size, rsp->max_key_size);
1950 if (check_enc_key_size(conn, key_size))
1951 return SMP_ENC_KEY_SIZE;
1952
0edb14de 1953 auth = rsp->auth_req & AUTH_REQ_MASK(hdev);
c05b9339 1954
d7a5a11d 1955 if (hci_dev_test_flag(hdev, HCI_SC_ONLY) && !(auth & SMP_AUTH_SC))
903b71c7
JH
1956 return SMP_AUTH_REQUIREMENTS;
1957
cb06d366
JH
1958 /* If the remote side's OOB flag is set it means it has
1959 * successfully received our local OOB data - therefore set the
1960 * flag to indicate that local OOB is in use.
1961 */
94f14e47 1962 if (rsp->oob_flag == SMP_OOB_PRESENT && SMP_DEV(hdev)->local_oob)
58428563
JH
1963 set_bit(SMP_FLAG_LOCAL_OOB, &smp->flags);
1964
b5ae344d
JH
1965 smp->prsp[0] = SMP_CMD_PAIRING_RSP;
1966 memcpy(&smp->prsp[1], rsp, sizeof(*rsp));
1967
1968 /* Update remote key distribution in case the remote cleared
1969 * some bits that we had enabled in our request.
1970 */
1971 smp->remote_key_dist &= rsp->resp_key_dist;
1972
a62da6f1
JH
1973 if ((req->auth_req & SMP_AUTH_CT2) && (auth & SMP_AUTH_CT2))
1974 set_bit(SMP_FLAG_CT2, &smp->flags);
1975
b5ae344d
JH
1976 /* For BR/EDR this means we're done and can start phase 3 */
1977 if (conn->hcon->type == ACL_LINK) {
1978 /* Clear bits which are generated but not distributed */
1979 smp->remote_key_dist &= ~SMP_SC_NO_DIST;
1980 smp_distribute_keys(smp);
1981 return 0;
1982 }
1983
65668776
JH
1984 if ((req->auth_req & SMP_AUTH_SC) && (auth & SMP_AUTH_SC))
1985 set_bit(SMP_FLAG_SC, &smp->flags);
d2eb9e10
JH
1986 else if (conn->hcon->pending_sec_level > BT_SECURITY_HIGH)
1987 conn->hcon->pending_sec_level = BT_SECURITY_HIGH;
65668776 1988
49c922bb 1989 /* If we need MITM check that it can be achieved */
2ed8f65c
JH
1990 if (conn->hcon->pending_sec_level >= BT_SECURITY_HIGH) {
1991 u8 method;
1992
1993 method = get_auth_method(smp, req->io_capability,
1994 rsp->io_capability);
1995 if (method == JUST_WORKS || method == JUST_CFM)
1996 return SMP_AUTH_REQUIREMENTS;
1997 }
1998
e84a6b13 1999 get_random_bytes(smp->prnd, sizeof(smp->prnd));
7d24ddcc 2000
fdcc4bec
JH
2001 /* Update remote key distribution in case the remote cleared
2002 * some bits that we had enabled in our request.
2003 */
2004 smp->remote_key_dist &= rsp->resp_key_dist;
2005
3b19146d
JH
2006 if (test_bit(SMP_FLAG_SC, &smp->flags)) {
2007 /* Clear bits which are generated but not distributed */
2008 smp->remote_key_dist &= ~SMP_SC_NO_DIST;
2009 SMP_ALLOW_CMD(smp, SMP_CMD_PUBLIC_KEY);
2010 return sc_send_public_key(smp);
2011 }
2012
c05b9339 2013 auth |= req->auth_req;
2b64d153 2014
476585ec 2015 ret = tk_request(conn, 0, auth, req->io_capability, rsp->io_capability);
2b64d153
BG
2016 if (ret)
2017 return SMP_UNSPECIFIED;
2018
4a74d658 2019 set_bit(SMP_FLAG_CFM_PENDING, &smp->flags);
2b64d153
BG
2020
2021 /* Can't compose response until we have been confirmed */
4a74d658 2022 if (test_bit(SMP_FLAG_TK_VALID, &smp->flags))
1cc61144 2023 return smp_confirm(smp);
da85e5e5
VCG
2024
2025 return 0;
88ba43b6
AB
2026}
2027
dcee2b32
JH
2028static u8 sc_check_confirm(struct smp_chan *smp)
2029{
2030 struct l2cap_conn *conn = smp->conn;
2031
2e1614f7 2032 bt_dev_dbg(conn->hcon->hdev, "");
dcee2b32 2033
38606f14
JH
2034 if (smp->method == REQ_PASSKEY || smp->method == DSP_PASSKEY)
2035 return sc_passkey_round(smp, SMP_CMD_PAIRING_CONFIRM);
2036
28cd47f7 2037 if (test_bit(SMP_FLAG_INITIATOR, &smp->flags)) {
dcee2b32
JH
2038 smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM, sizeof(smp->prnd),
2039 smp->prnd);
2040 SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_RANDOM);
2041 }
2042
2043 return 0;
2044}
2045
19c5ce9c
JH
2046/* Work-around for some implementations that incorrectly copy RFU bits
2047 * from our security request and thereby create the impression that
2048 * we're doing SC when in fact the remote doesn't support it.
2049 */
2050static int fixup_sc_false_positive(struct smp_chan *smp)
2051{
2052 struct l2cap_conn *conn = smp->conn;
2053 struct hci_conn *hcon = conn->hcon;
2054 struct hci_dev *hdev = hcon->hdev;
2055 struct smp_cmd_pairing *req, *rsp;
2056 u8 auth;
2057
fad646e1 2058 /* The issue is only observed when we're in responder role */
28cd47f7 2059 if (test_bit(SMP_FLAG_INITIATOR, &smp->flags))
19c5ce9c
JH
2060 return SMP_UNSPECIFIED;
2061
2062 if (hci_dev_test_flag(hdev, HCI_SC_ONLY)) {
2064ee33 2063 bt_dev_err(hdev, "refusing legacy fallback in SC-only mode");
19c5ce9c
JH
2064 return SMP_UNSPECIFIED;
2065 }
2066
2064ee33 2067 bt_dev_err(hdev, "trying to fall back to legacy SMP");
19c5ce9c
JH
2068
2069 req = (void *) &smp->preq[1];
2070 rsp = (void *) &smp->prsp[1];
2071
2072 /* Rebuild key dist flags which may have been cleared for SC */
2073 smp->remote_key_dist = (req->init_key_dist & rsp->resp_key_dist);
2074
2075 auth = req->auth_req & AUTH_REQ_MASK(hdev);
2076
2077 if (tk_request(conn, 0, auth, rsp->io_capability, req->io_capability)) {
2064ee33 2078 bt_dev_err(hdev, "failed to fall back to legacy SMP");
19c5ce9c
JH
2079 return SMP_UNSPECIFIED;
2080 }
2081
2082 clear_bit(SMP_FLAG_SC, &smp->flags);
2083
2084 return 0;
2085}
2086
da85e5e5 2087static u8 smp_cmd_pairing_confirm(struct l2cap_conn *conn, struct sk_buff *skb)
88ba43b6 2088{
5d88cc73
JH
2089 struct l2cap_chan *chan = conn->smp;
2090 struct smp_chan *smp = chan->data;
2e1614f7
LAD
2091 struct hci_conn *hcon = conn->hcon;
2092 struct hci_dev *hdev = hcon->hdev;
7d24ddcc 2093
fad646e1 2094 bt_dev_dbg(hdev, "conn %p %s", conn,
28cd47f7
LAD
2095 test_bit(SMP_FLAG_INITIATOR, &smp->flags) ? "initiator" :
2096 "responder");
88ba43b6 2097
c46b98be 2098 if (skb->len < sizeof(smp->pcnf))
38e4a915 2099 return SMP_INVALID_PARAMS;
c46b98be 2100
1c1def09
VCG
2101 memcpy(smp->pcnf, skb->data, sizeof(smp->pcnf));
2102 skb_pull(skb, sizeof(smp->pcnf));
88ba43b6 2103
19c5ce9c
JH
2104 if (test_bit(SMP_FLAG_SC, &smp->flags)) {
2105 int ret;
2106
2107 /* Public Key exchange must happen before any other steps */
2108 if (test_bit(SMP_FLAG_REMOTE_PK, &smp->flags))
2109 return sc_check_confirm(smp);
2110
2e1614f7 2111 bt_dev_err(hdev, "Unexpected SMP Pairing Confirm");
19c5ce9c
JH
2112
2113 ret = fixup_sc_false_positive(smp);
2114 if (ret)
2115 return ret;
2116 }
dcee2b32 2117
28cd47f7 2118 if (test_bit(SMP_FLAG_INITIATOR, &smp->flags)) {
943a732a
JH
2119 smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM, sizeof(smp->prnd),
2120 smp->prnd);
b28b4943
JH
2121 SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_RANDOM);
2122 return 0;
2123 }
2124
2125 if (test_bit(SMP_FLAG_TK_VALID, &smp->flags))
1cc61144 2126 return smp_confirm(smp);
983f9814
MH
2127
2128 set_bit(SMP_FLAG_CFM_PENDING, &smp->flags);
da85e5e5
VCG
2129
2130 return 0;
88ba43b6
AB
2131}
2132
da85e5e5 2133static u8 smp_cmd_pairing_random(struct l2cap_conn *conn, struct sk_buff *skb)
88ba43b6 2134{
5d88cc73
JH
2135 struct l2cap_chan *chan = conn->smp;
2136 struct smp_chan *smp = chan->data;
191dc7fe 2137 struct hci_conn *hcon = conn->hcon;
eed467b5 2138 u8 *pkax, *pkbx, *na, *nb, confirm_hint;
191dc7fe
JH
2139 u32 passkey;
2140 int err;
7d24ddcc 2141
2e1614f7 2142 bt_dev_dbg(hcon->hdev, "conn %p", conn);
3158c50c 2143
c46b98be 2144 if (skb->len < sizeof(smp->rrnd))
38e4a915 2145 return SMP_INVALID_PARAMS;
c46b98be 2146
943a732a 2147 memcpy(smp->rrnd, skb->data, sizeof(smp->rrnd));
8aab4757 2148 skb_pull(skb, sizeof(smp->rrnd));
e7e62c85 2149
191dc7fe
JH
2150 if (!test_bit(SMP_FLAG_SC, &smp->flags))
2151 return smp_random(smp);
2152
28cd47f7 2153 if (test_bit(SMP_FLAG_INITIATOR, &smp->flags)) {
580039e8
JH
2154 pkax = smp->local_pk;
2155 pkbx = smp->remote_pk;
2156 na = smp->prnd;
2157 nb = smp->rrnd;
2158 } else {
2159 pkax = smp->remote_pk;
2160 pkbx = smp->local_pk;
2161 na = smp->rrnd;
2162 nb = smp->prnd;
2163 }
2164
a29b0733 2165 if (smp->method == REQ_OOB) {
28cd47f7 2166 if (!test_bit(SMP_FLAG_INITIATOR, &smp->flags))
a29b0733
JH
2167 smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM,
2168 sizeof(smp->prnd), smp->prnd);
2169 SMP_ALLOW_CMD(smp, SMP_CMD_DHKEY_CHECK);
2170 goto mackey_and_ltk;
2171 }
2172
38606f14
JH
2173 /* Passkey entry has special treatment */
2174 if (smp->method == REQ_PASSKEY || smp->method == DSP_PASSKEY)
2175 return sc_passkey_round(smp, SMP_CMD_PAIRING_RANDOM);
2176
28cd47f7 2177 if (test_bit(SMP_FLAG_INITIATOR, &smp->flags)) {
191dc7fe
JH
2178 u8 cfm[16];
2179
2180 err = smp_f4(smp->tfm_cmac, smp->remote_pk, smp->local_pk,
2181 smp->rrnd, 0, cfm);
2182 if (err)
2183 return SMP_UNSPECIFIED;
2184
329d8230 2185 if (crypto_memneq(smp->pcnf, cfm, 16))
191dc7fe 2186 return SMP_CONFIRM_FAILED;
191dc7fe
JH
2187 } else {
2188 smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM, sizeof(smp->prnd),
2189 smp->prnd);
2190 SMP_ALLOW_CMD(smp, SMP_CMD_DHKEY_CHECK);
cee5f20f
HC
2191
2192 /* Only Just-Works pairing requires extra checks */
2193 if (smp->method != JUST_WORKS)
2194 goto mackey_and_ltk;
2195
2196 /* If there already exists long term key in local host, leave
2197 * the decision to user space since the remote device could
2198 * be legitimate or malicious.
2199 */
2200 if (hci_find_ltk(hcon->hdev, &hcon->dst, hcon->dst_type,
2201 hcon->role)) {
eed467b5
HC
2202 /* Set passkey to 0. The value can be any number since
2203 * it'll be ignored anyway.
2204 */
2205 passkey = 0;
2206 confirm_hint = 1;
2207 goto confirm;
cee5f20f 2208 }
191dc7fe
JH
2209 }
2210
a29b0733 2211mackey_and_ltk:
760b018b
JH
2212 /* Generate MacKey and LTK */
2213 err = sc_mackey_and_ltk(smp, smp->mackey, smp->tk);
2214 if (err)
2215 return SMP_UNSPECIFIED;
2216
ffee202a 2217 if (smp->method == REQ_OOB) {
28cd47f7 2218 if (test_bit(SMP_FLAG_INITIATOR, &smp->flags)) {
38606f14 2219 sc_dhkey_check(smp);
dddd3059
JH
2220 SMP_ALLOW_CMD(smp, SMP_CMD_DHKEY_CHECK);
2221 }
2222 return 0;
2223 }
2224
38606f14
JH
2225 err = smp_g2(smp->tfm_cmac, pkax, pkbx, na, nb, &passkey);
2226 if (err)
2227 return SMP_UNSPECIFIED;
2228
eed467b5
HC
2229 confirm_hint = 0;
2230
2231confirm:
ffee202a
SS
2232 if (smp->method == JUST_WORKS)
2233 confirm_hint = 1;
2234
38606f14 2235 err = mgmt_user_confirm_request(hcon->hdev, &hcon->dst, hcon->type,
eed467b5 2236 hcon->dst_type, passkey, confirm_hint);
191dc7fe
JH
2237 if (err)
2238 return SMP_UNSPECIFIED;
2239
38606f14
JH
2240 set_bit(SMP_FLAG_WAIT_USER, &smp->flags);
2241
191dc7fe 2242 return 0;
88ba43b6
AB
2243}
2244
f81cd823 2245static bool smp_ltk_encrypt(struct l2cap_conn *conn, u8 sec_level)
988c5997 2246{
c9839a11 2247 struct smp_ltk *key;
988c5997
VCG
2248 struct hci_conn *hcon = conn->hcon;
2249
f3a73d97 2250 key = hci_find_ltk(hcon->hdev, &hcon->dst, hcon->dst_type, hcon->role);
988c5997 2251 if (!key)
f81cd823 2252 return false;
988c5997 2253
a6f7833c 2254 if (smp_ltk_sec_level(key) < sec_level)
f81cd823 2255 return false;
4dab7864 2256
51a8efd7 2257 if (test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &hcon->flags))
f81cd823 2258 return true;
988c5997 2259
8b76ce34 2260 hci_le_start_enc(hcon, key->ediv, key->rand, key->val, key->enc_size);
c9839a11 2261 hcon->enc_key_size = key->enc_size;
988c5997 2262
fad646e1 2263 /* We never store STKs for initiator role, so clear this flag */
fe59a05f
JH
2264 clear_bit(HCI_CONN_STK_ENCRYPT, &hcon->flags);
2265
f81cd823 2266 return true;
988c5997 2267}
f1560463 2268
35dc6f83
JH
2269bool smp_sufficient_security(struct hci_conn *hcon, u8 sec_level,
2270 enum smp_key_pref key_pref)
854f4727
JH
2271{
2272 if (sec_level == BT_SECURITY_LOW)
2273 return true;
2274
35dc6f83
JH
2275 /* If we're encrypted with an STK but the caller prefers using
2276 * LTK claim insufficient security. This way we allow the
2277 * connection to be re-encrypted with an LTK, even if the LTK
2278 * provides the same level of security. Only exception is if we
2279 * don't have an LTK (e.g. because of key distribution bits).
9ab65d60 2280 */
35dc6f83
JH
2281 if (key_pref == SMP_USE_LTK &&
2282 test_bit(HCI_CONN_STK_ENCRYPT, &hcon->flags) &&
f3a73d97 2283 hci_find_ltk(hcon->hdev, &hcon->dst, hcon->dst_type, hcon->role))
9ab65d60
JH
2284 return false;
2285
854f4727
JH
2286 if (hcon->sec_level >= sec_level)
2287 return true;
2288
2289 return false;
2290}
2291
28cd47f7
LAD
2292static void smp_send_pairing_req(struct smp_chan *smp, __u8 auth)
2293{
2294 struct smp_cmd_pairing cp;
2295
2296 if (smp->conn->hcon->type == ACL_LINK)
2297 build_bredr_pairing_cmd(smp, &cp, NULL);
2298 else
2299 build_pairing_cmd(smp->conn, &cp, NULL, auth);
2300
2301 smp->preq[0] = SMP_CMD_PAIRING_REQ;
2302 memcpy(&smp->preq[1], &cp, sizeof(cp));
2303
2304 smp_send_cmd(smp->conn, SMP_CMD_PAIRING_REQ, sizeof(cp), &cp);
2305 SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_RSP);
2306
2307 set_bit(SMP_FLAG_INITIATOR, &smp->flags);
2308}
2309
da85e5e5 2310static u8 smp_cmd_security_req(struct l2cap_conn *conn, struct sk_buff *skb)
88ba43b6
AB
2311{
2312 struct smp_cmd_security_req *rp = (void *) skb->data;
f1cb9af5 2313 struct hci_conn *hcon = conn->hcon;
0edb14de 2314 struct hci_dev *hdev = hcon->hdev;
8aab4757 2315 struct smp_chan *smp;
c05b9339 2316 u8 sec_level, auth;
88ba43b6 2317
2e1614f7 2318 bt_dev_dbg(hdev, "conn %p", conn);
88ba43b6 2319
c46b98be 2320 if (skb->len < sizeof(*rp))
38e4a915 2321 return SMP_INVALID_PARAMS;
c46b98be 2322
40bef302 2323 if (hcon->role != HCI_ROLE_MASTER)
86ca9eac
JH
2324 return SMP_CMD_NOTSUPP;
2325
0edb14de 2326 auth = rp->auth_req & AUTH_REQ_MASK(hdev);
c05b9339 2327
d7a5a11d 2328 if (hci_dev_test_flag(hdev, HCI_SC_ONLY) && !(auth & SMP_AUTH_SC))
903b71c7
JH
2329 return SMP_AUTH_REQUIREMENTS;
2330
5be5e275 2331 if (hcon->io_capability == HCI_IO_NO_INPUT_OUTPUT)
1afc2a1a
JH
2332 sec_level = BT_SECURITY_MEDIUM;
2333 else
2334 sec_level = authreq_to_seclevel(auth);
2335
64e759f5
SJ
2336 if (smp_sufficient_security(hcon, sec_level, SMP_USE_LTK)) {
2337 /* If link is already encrypted with sufficient security we
2338 * still need refresh encryption as per Core Spec 5.0 Vol 3,
2339 * Part H 2.4.6
2340 */
2341 smp_ltk_encrypt(conn, hcon->sec_level);
854f4727 2342 return 0;
64e759f5 2343 }
854f4727 2344
c7262e71
JH
2345 if (sec_level > hcon->pending_sec_level)
2346 hcon->pending_sec_level = sec_level;
feb45eb5 2347
4dab7864 2348 if (smp_ltk_encrypt(conn, hcon->pending_sec_level))
988c5997
VCG
2349 return 0;
2350
8aab4757 2351 smp = smp_chan_create(conn);
c29d2444
JH
2352 if (!smp)
2353 return SMP_UNSPECIFIED;
d26a2345 2354
d7a5a11d 2355 if (!hci_dev_test_flag(hdev, HCI_BONDABLE) &&
c05b9339 2356 (auth & SMP_AUTH_BONDING))
616d55be
JH
2357 return SMP_PAIRING_NOTSUPP;
2358
88ba43b6 2359 skb_pull(skb, sizeof(*rp));
88ba43b6 2360
28cd47f7 2361 smp_send_pairing_req(smp, auth);
88ba43b6 2362
28cd47f7
LAD
2363 return 0;
2364}
f01ead31 2365
28cd47f7
LAD
2366static void smp_send_security_req(struct smp_chan *smp, __u8 auth)
2367{
2368 struct smp_cmd_security_req cp;
f1cb9af5 2369
28cd47f7
LAD
2370 cp.auth_req = auth;
2371 smp_send_cmd(smp->conn, SMP_CMD_SECURITY_REQ, sizeof(cp), &cp);
2372 SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_REQ);
2373
2374 clear_bit(SMP_FLAG_INITIATOR, &smp->flags);
88ba43b6
AB
2375}
2376
cc110922 2377int smp_conn_security(struct hci_conn *hcon, __u8 sec_level)
eb492e01 2378{
cc110922 2379 struct l2cap_conn *conn = hcon->l2cap_data;
c68b7f12 2380 struct l2cap_chan *chan;
0a66cf20 2381 struct smp_chan *smp;
2b64d153 2382 __u8 authreq;
fc75cc86 2383 int ret;
eb492e01 2384
2e1614f7
LAD
2385 bt_dev_dbg(hcon->hdev, "conn %p hcon %p level 0x%2.2x", conn, hcon,
2386 sec_level);
3a0259bb 2387
0a66cf20
JH
2388 /* This may be NULL if there's an unexpected disconnection */
2389 if (!conn)
2390 return 1;
2391
d7a5a11d 2392 if (!hci_dev_test_flag(hcon->hdev, HCI_LE_ENABLED))
2e65c9d2
AG
2393 return 1;
2394
35dc6f83 2395 if (smp_sufficient_security(hcon, sec_level, SMP_USE_LTK))
eb492e01 2396 return 1;
f1cb9af5 2397
c7262e71
JH
2398 if (sec_level > hcon->pending_sec_level)
2399 hcon->pending_sec_level = sec_level;
2400
40bef302 2401 if (hcon->role == HCI_ROLE_MASTER)
c7262e71
JH
2402 if (smp_ltk_encrypt(conn, hcon->pending_sec_level))
2403 return 0;
d26a2345 2404
d8949aad
JH
2405 chan = conn->smp;
2406 if (!chan) {
2064ee33 2407 bt_dev_err(hcon->hdev, "security requested but not available");
d8949aad
JH
2408 return 1;
2409 }
2410
fc75cc86
JH
2411 l2cap_chan_lock(chan);
2412
2413 /* If SMP is already in progress ignore this request */
2414 if (chan->data) {
2415 ret = 0;
2416 goto unlock;
2417 }
d26a2345 2418
8aab4757 2419 smp = smp_chan_create(conn);
fc75cc86
JH
2420 if (!smp) {
2421 ret = 1;
2422 goto unlock;
2423 }
2b64d153
BG
2424
2425 authreq = seclevel_to_authreq(sec_level);
d26a2345 2426
a62da6f1 2427 if (hci_dev_test_flag(hcon->hdev, HCI_SC_ENABLED)) {
d2eb9e10 2428 authreq |= SMP_AUTH_SC;
a62da6f1
JH
2429 if (hci_dev_test_flag(hcon->hdev, HCI_SSP_ENABLED))
2430 authreq |= SMP_AUTH_CT2;
2431 }
d2eb9e10 2432
c2aa30db
AP
2433 /* Don't attempt to set MITM if setting is overridden by debugfs
2434 * Needed to pass certification test SM/MAS/PKE/BV-01-C
2e233644 2435 */
c2aa30db
AP
2436 if (!hci_dev_test_flag(hcon->hdev, HCI_FORCE_NO_MITM)) {
2437 /* Require MITM if IO Capability allows or the security level
2438 * requires it.
2439 */
2440 if (hcon->io_capability != HCI_IO_NO_INPUT_OUTPUT ||
2441 hcon->pending_sec_level > BT_SECURITY_MEDIUM)
2442 authreq |= SMP_AUTH_MITM;
2443 }
2e233644 2444
28cd47f7
LAD
2445 if (hcon->role == HCI_ROLE_MASTER)
2446 smp_send_pairing_req(smp, authreq);
2447 else
2448 smp_send_security_req(smp, authreq);
eb492e01 2449
fc75cc86 2450 ret = 0;
edca792c 2451
fc75cc86
JH
2452unlock:
2453 l2cap_chan_unlock(chan);
2454 return ret;
eb492e01
AB
2455}
2456
cb28c306
MK
2457int smp_cancel_and_remove_pairing(struct hci_dev *hdev, bdaddr_t *bdaddr,
2458 u8 addr_type)
c81d555a 2459{
cb28c306
MK
2460 struct hci_conn *hcon;
2461 struct l2cap_conn *conn;
c81d555a
JH
2462 struct l2cap_chan *chan;
2463 struct smp_chan *smp;
cb28c306
MK
2464 int err;
2465
2466 err = hci_remove_ltk(hdev, bdaddr, addr_type);
2467 hci_remove_irk(hdev, bdaddr, addr_type);
2468
2469 hcon = hci_conn_hash_lookup_le(hdev, bdaddr, addr_type);
2470 if (!hcon)
2471 goto done;
c81d555a 2472
cb28c306 2473 conn = hcon->l2cap_data;
c81d555a 2474 if (!conn)
cb28c306 2475 goto done;
c81d555a
JH
2476
2477 chan = conn->smp;
2478 if (!chan)
cb28c306 2479 goto done;
c81d555a
JH
2480
2481 l2cap_chan_lock(chan);
2482
2483 smp = chan->data;
2484 if (smp) {
cb28c306
MK
2485 /* Set keys to NULL to make sure smp_failure() does not try to
2486 * remove and free already invalidated rcu list entries. */
2487 smp->ltk = NULL;
fad646e1 2488 smp->responder_ltk = NULL;
cb28c306
MK
2489 smp->remote_irk = NULL;
2490
c81d555a
JH
2491 if (test_bit(SMP_FLAG_COMPLETE, &smp->flags))
2492 smp_failure(conn, 0);
2493 else
2494 smp_failure(conn, SMP_UNSPECIFIED);
cb28c306 2495 err = 0;
c81d555a
JH
2496 }
2497
2498 l2cap_chan_unlock(chan);
cb28c306
MK
2499
2500done:
2501 return err;
c81d555a
JH
2502}
2503
7034b911
VCG
2504static int smp_cmd_encrypt_info(struct l2cap_conn *conn, struct sk_buff *skb)
2505{
16b90839 2506 struct smp_cmd_encrypt_info *rp = (void *) skb->data;
5d88cc73
JH
2507 struct l2cap_chan *chan = conn->smp;
2508 struct smp_chan *smp = chan->data;
16b90839 2509
2e1614f7 2510 bt_dev_dbg(conn->hcon->hdev, "conn %p", conn);
c46b98be
JH
2511
2512 if (skb->len < sizeof(*rp))
38e4a915 2513 return SMP_INVALID_PARAMS;
c46b98be 2514
600a8749
AM
2515 /* Pairing is aborted if any blocked keys are distributed */
2516 if (hci_is_blocked_key(conn->hcon->hdev, HCI_BLOCKED_KEY_TYPE_LTK,
2517 rp->ltk)) {
2518 bt_dev_warn_ratelimited(conn->hcon->hdev,
2519 "LTK blocked for %pMR",
2520 &conn->hcon->dst);
2521 return SMP_INVALID_PARAMS;
2522 }
2523
fad646e1 2524 SMP_ALLOW_CMD(smp, SMP_CMD_INITIATOR_IDENT);
6131ddc8 2525
16b90839
VCG
2526 skb_pull(skb, sizeof(*rp));
2527
1c1def09 2528 memcpy(smp->tk, rp->ltk, sizeof(smp->tk));
16b90839 2529
7034b911
VCG
2530 return 0;
2531}
2532
fad646e1 2533static int smp_cmd_initiator_ident(struct l2cap_conn *conn, struct sk_buff *skb)
7034b911 2534{
fad646e1 2535 struct smp_cmd_initiator_ident *rp = (void *)skb->data;
5d88cc73
JH
2536 struct l2cap_chan *chan = conn->smp;
2537 struct smp_chan *smp = chan->data;
c9839a11
VCG
2538 struct hci_dev *hdev = conn->hcon->hdev;
2539 struct hci_conn *hcon = conn->hcon;
23d0e128 2540 struct smp_ltk *ltk;
c9839a11 2541 u8 authenticated;
16b90839 2542
2e1614f7 2543 bt_dev_dbg(hdev, "conn %p", conn);
c46b98be
JH
2544
2545 if (skb->len < sizeof(*rp))
38e4a915 2546 return SMP_INVALID_PARAMS;
c46b98be 2547
9747a9f3
JH
2548 /* Mark the information as received */
2549 smp->remote_key_dist &= ~SMP_DIST_ENC_KEY;
2550
b28b4943
JH
2551 if (smp->remote_key_dist & SMP_DIST_ID_KEY)
2552 SMP_ALLOW_CMD(smp, SMP_CMD_IDENT_INFO);
196332f5
JH
2553 else if (smp->remote_key_dist & SMP_DIST_SIGN)
2554 SMP_ALLOW_CMD(smp, SMP_CMD_SIGN_INFO);
b28b4943 2555
16b90839 2556 skb_pull(skb, sizeof(*rp));
7034b911 2557
ce39fb4e 2558 authenticated = (hcon->sec_level == BT_SECURITY_HIGH);
2ceba539 2559 ltk = hci_add_ltk(hdev, &hcon->dst, hcon->dst_type, SMP_LTK,
23d0e128
JH
2560 authenticated, smp->tk, smp->enc_key_size,
2561 rp->ediv, rp->rand);
2562 smp->ltk = ltk;
c6e81e9a 2563 if (!(smp->remote_key_dist & KEY_DIST_MASK))
d6268e86 2564 smp_distribute_keys(smp);
7034b911
VCG
2565
2566 return 0;
2567}
2568
fd349c02
JH
2569static int smp_cmd_ident_info(struct l2cap_conn *conn, struct sk_buff *skb)
2570{
2571 struct smp_cmd_ident_info *info = (void *) skb->data;
5d88cc73
JH
2572 struct l2cap_chan *chan = conn->smp;
2573 struct smp_chan *smp = chan->data;
fd349c02 2574
2e1614f7 2575 bt_dev_dbg(conn->hcon->hdev, "");
fd349c02
JH
2576
2577 if (skb->len < sizeof(*info))
38e4a915 2578 return SMP_INVALID_PARAMS;
fd349c02 2579
600a8749
AM
2580 /* Pairing is aborted if any blocked keys are distributed */
2581 if (hci_is_blocked_key(conn->hcon->hdev, HCI_BLOCKED_KEY_TYPE_IRK,
2582 info->irk)) {
2583 bt_dev_warn_ratelimited(conn->hcon->hdev,
2584 "Identity key blocked for %pMR",
2585 &conn->hcon->dst);
2586 return SMP_INVALID_PARAMS;
2587 }
2588
b28b4943 2589 SMP_ALLOW_CMD(smp, SMP_CMD_IDENT_ADDR_INFO);
6131ddc8 2590
fd349c02
JH
2591 skb_pull(skb, sizeof(*info));
2592
2593 memcpy(smp->irk, info->irk, 16);
2594
2595 return 0;
2596}
2597
2598static int smp_cmd_ident_addr_info(struct l2cap_conn *conn,
2599 struct sk_buff *skb)
2600{
2601 struct smp_cmd_ident_addr_info *info = (void *) skb->data;
5d88cc73
JH
2602 struct l2cap_chan *chan = conn->smp;
2603 struct smp_chan *smp = chan->data;
fd349c02
JH
2604 struct hci_conn *hcon = conn->hcon;
2605 bdaddr_t rpa;
2606
2e1614f7 2607 bt_dev_dbg(hcon->hdev, "");
fd349c02
JH
2608
2609 if (skb->len < sizeof(*info))
38e4a915 2610 return SMP_INVALID_PARAMS;
fd349c02 2611
9747a9f3
JH
2612 /* Mark the information as received */
2613 smp->remote_key_dist &= ~SMP_DIST_ID_KEY;
2614
b28b4943
JH
2615 if (smp->remote_key_dist & SMP_DIST_SIGN)
2616 SMP_ALLOW_CMD(smp, SMP_CMD_SIGN_INFO);
2617
fd349c02
JH
2618 skb_pull(skb, sizeof(*info));
2619
a9a58f86
JH
2620 /* Strictly speaking the Core Specification (4.1) allows sending
2621 * an empty address which would force us to rely on just the IRK
2622 * as "identity information". However, since such
2623 * implementations are not known of and in order to not over
2624 * complicate our implementation, simply pretend that we never
2625 * received an IRK for such a device.
e12af489
JH
2626 *
2627 * The Identity Address must also be a Static Random or Public
2628 * Address, which hci_is_identity_address() checks for.
a9a58f86 2629 */
e12af489
JH
2630 if (!bacmp(&info->bdaddr, BDADDR_ANY) ||
2631 !hci_is_identity_address(&info->bdaddr, info->addr_type)) {
2064ee33 2632 bt_dev_err(hcon->hdev, "ignoring IRK with no identity address");
31dd624e 2633 goto distribute;
a9a58f86
JH
2634 }
2635
1d87b88b
SJ
2636 /* Drop IRK if peer is using identity address during pairing but is
2637 * providing different address as identity information.
2638 *
2639 * Microsoft Surface Precision Mouse is known to have this bug.
2640 */
2641 if (hci_is_identity_address(&hcon->dst, hcon->dst_type) &&
2642 (bacmp(&info->bdaddr, &hcon->dst) ||
2643 info->addr_type != hcon->dst_type)) {
2644 bt_dev_err(hcon->hdev,
2645 "ignoring IRK with invalid identity address");
2646 goto distribute;
2647 }
2648
fd349c02
JH
2649 bacpy(&smp->id_addr, &info->bdaddr);
2650 smp->id_addr_type = info->addr_type;
2651
2652 if (hci_bdaddr_is_rpa(&hcon->dst, hcon->dst_type))
2653 bacpy(&rpa, &hcon->dst);
2654 else
2655 bacpy(&rpa, BDADDR_ANY);
2656
23d0e128
JH
2657 smp->remote_irk = hci_add_irk(conn->hcon->hdev, &smp->id_addr,
2658 smp->id_addr_type, smp->irk, &rpa);
fd349c02 2659
31dd624e 2660distribute:
c6e81e9a
JH
2661 if (!(smp->remote_key_dist & KEY_DIST_MASK))
2662 smp_distribute_keys(smp);
fd349c02
JH
2663
2664 return 0;
2665}
2666
7ee4ea36
MH
2667static int smp_cmd_sign_info(struct l2cap_conn *conn, struct sk_buff *skb)
2668{
2669 struct smp_cmd_sign_info *rp = (void *) skb->data;
5d88cc73
JH
2670 struct l2cap_chan *chan = conn->smp;
2671 struct smp_chan *smp = chan->data;
7ee4ea36
MH
2672 struct smp_csrk *csrk;
2673
2e1614f7 2674 bt_dev_dbg(conn->hcon->hdev, "conn %p", conn);
7ee4ea36
MH
2675
2676 if (skb->len < sizeof(*rp))
38e4a915 2677 return SMP_INVALID_PARAMS;
7ee4ea36 2678
7ee4ea36
MH
2679 /* Mark the information as received */
2680 smp->remote_key_dist &= ~SMP_DIST_SIGN;
2681
2682 skb_pull(skb, sizeof(*rp));
2683
7ee4ea36
MH
2684 csrk = kzalloc(sizeof(*csrk), GFP_KERNEL);
2685 if (csrk) {
4cd3928a
JH
2686 if (conn->hcon->sec_level > BT_SECURITY_MEDIUM)
2687 csrk->type = MGMT_CSRK_REMOTE_AUTHENTICATED;
2688 else
2689 csrk->type = MGMT_CSRK_REMOTE_UNAUTHENTICATED;
7ee4ea36
MH
2690 memcpy(csrk->val, rp->csrk, sizeof(csrk->val));
2691 }
2692 smp->csrk = csrk;
d6268e86 2693 smp_distribute_keys(smp);
7ee4ea36
MH
2694
2695 return 0;
2696}
2697
5e3d3d9b
JH
2698static u8 sc_select_method(struct smp_chan *smp)
2699{
5e3d3d9b
JH
2700 struct smp_cmd_pairing *local, *remote;
2701 u8 local_mitm, remote_mitm, local_io, remote_io, method;
2702
1a8bab4f
JH
2703 if (test_bit(SMP_FLAG_REMOTE_OOB, &smp->flags) ||
2704 test_bit(SMP_FLAG_LOCAL_OOB, &smp->flags))
a29b0733
JH
2705 return REQ_OOB;
2706
5e3d3d9b
JH
2707 /* The preq/prsp contain the raw Pairing Request/Response PDUs
2708 * which are needed as inputs to some crypto functions. To get
2709 * the "struct smp_cmd_pairing" from them we need to skip the
2710 * first byte which contains the opcode.
2711 */
28cd47f7 2712 if (test_bit(SMP_FLAG_INITIATOR, &smp->flags)) {
5e3d3d9b
JH
2713 local = (void *) &smp->preq[1];
2714 remote = (void *) &smp->prsp[1];
2715 } else {
2716 local = (void *) &smp->prsp[1];
2717 remote = (void *) &smp->preq[1];
2718 }
2719
2720 local_io = local->io_capability;
2721 remote_io = remote->io_capability;
2722
2723 local_mitm = (local->auth_req & SMP_AUTH_MITM);
2724 remote_mitm = (remote->auth_req & SMP_AUTH_MITM);
2725
2726 /* If either side wants MITM, look up the method from the table,
2727 * otherwise use JUST WORKS.
2728 */
2729 if (local_mitm || remote_mitm)
2730 method = get_auth_method(smp, local_io, remote_io);
2731 else
2732 method = JUST_WORKS;
2733
2734 /* Don't confirm locally initiated pairing attempts */
2735 if (method == JUST_CFM && test_bit(SMP_FLAG_INITIATOR, &smp->flags))
2736 method = JUST_WORKS;
2737
2738 return method;
2739}
2740
d8f8edbe
JH
2741static int smp_cmd_public_key(struct l2cap_conn *conn, struct sk_buff *skb)
2742{
2743 struct smp_cmd_public_key *key = (void *) skb->data;
2744 struct hci_conn *hcon = conn->hcon;
2745 struct l2cap_chan *chan = conn->smp;
2746 struct smp_chan *smp = chan->data;
5e3d3d9b 2747 struct hci_dev *hdev = hcon->hdev;
c0153b0b 2748 struct crypto_kpp *tfm_ecdh;
cbbbe3e2 2749 struct smp_cmd_pairing_confirm cfm;
d8f8edbe
JH
2750 int err;
2751
2e1614f7 2752 bt_dev_dbg(hdev, "conn %p", conn);
d8f8edbe
JH
2753
2754 if (skb->len < sizeof(*key))
2755 return SMP_INVALID_PARAMS;
2756
6d19628f
LAD
2757 /* Check if remote and local public keys are the same and debug key is
2758 * not in use.
2759 */
2760 if (!test_bit(SMP_FLAG_DEBUG_KEY, &smp->flags) &&
2761 !crypto_memneq(key, smp->local_pk, 64)) {
2762 bt_dev_err(hdev, "Remote and local public keys are identical");
2763 return SMP_UNSPECIFIED;
2764 }
2765
d8f8edbe
JH
2766 memcpy(smp->remote_pk, key, 64);
2767
a8ca617c
JH
2768 if (test_bit(SMP_FLAG_REMOTE_OOB, &smp->flags)) {
2769 err = smp_f4(smp->tfm_cmac, smp->remote_pk, smp->remote_pk,
2770 smp->rr, 0, cfm.confirm_val);
2771 if (err)
2772 return SMP_UNSPECIFIED;
2773
329d8230 2774 if (crypto_memneq(cfm.confirm_val, smp->pcnf, 16))
a8ca617c
JH
2775 return SMP_CONFIRM_FAILED;
2776 }
2777
d8f8edbe
JH
2778 /* Non-initiating device sends its public key after receiving
2779 * the key from the initiating device.
2780 */
28cd47f7 2781 if (!test_bit(SMP_FLAG_INITIATOR, &smp->flags)) {
d8f8edbe
JH
2782 err = sc_send_public_key(smp);
2783 if (err)
2784 return err;
2785 }
2786
c7a3d57d 2787 SMP_DBG("Remote Public Key X: %32phN", smp->remote_pk);
e091526d 2788 SMP_DBG("Remote Public Key Y: %32phN", smp->remote_pk + 32);
d8f8edbe 2789
c0153b0b
TA
2790 /* Compute the shared secret on the same crypto tfm on which the private
2791 * key was set/generated.
2792 */
2793 if (test_bit(SMP_FLAG_LOCAL_OOB, &smp->flags)) {
4ba5175f
MK
2794 struct l2cap_chan *hchan = hdev->smp_data;
2795 struct smp_dev *smp_dev;
2796
2797 if (!hchan || !hchan->data)
2798 return SMP_UNSPECIFIED;
2799
2800 smp_dev = hchan->data;
c0153b0b
TA
2801
2802 tfm_ecdh = smp_dev->tfm_ecdh;
2803 } else {
2804 tfm_ecdh = smp->tfm_ecdh;
2805 }
2806
2807 if (compute_ecdh_secret(tfm_ecdh, smp->remote_pk, smp->dhkey))
d8f8edbe
JH
2808 return SMP_UNSPECIFIED;
2809
c7a3d57d 2810 SMP_DBG("DHKey %32phN", smp->dhkey);
d8f8edbe
JH
2811
2812 set_bit(SMP_FLAG_REMOTE_PK, &smp->flags);
2813
5e3d3d9b
JH
2814 smp->method = sc_select_method(smp);
2815
2e1614f7 2816 bt_dev_dbg(hdev, "selected method 0x%02x", smp->method);
5e3d3d9b
JH
2817
2818 /* JUST_WORKS and JUST_CFM result in an unauthenticated key */
2819 if (smp->method == JUST_WORKS || smp->method == JUST_CFM)
2820 hcon->pending_sec_level = BT_SECURITY_MEDIUM;
2821 else
2822 hcon->pending_sec_level = BT_SECURITY_FIPS;
2823
329d8230 2824 if (!crypto_memneq(debug_pk, smp->remote_pk, 64))
aeb7d461
JH
2825 set_bit(SMP_FLAG_DEBUG_KEY, &smp->flags);
2826
38606f14
JH
2827 if (smp->method == DSP_PASSKEY) {
2828 get_random_bytes(&hcon->passkey_notify,
2829 sizeof(hcon->passkey_notify));
2830 hcon->passkey_notify %= 1000000;
2831 hcon->passkey_entered = 0;
2832 smp->passkey_round = 0;
2833 if (mgmt_user_passkey_notify(hdev, &hcon->dst, hcon->type,
2834 hcon->dst_type,
2835 hcon->passkey_notify,
2836 hcon->passkey_entered))
2837 return SMP_UNSPECIFIED;
2838 SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_CONFIRM);
2839 return sc_passkey_round(smp, SMP_CMD_PUBLIC_KEY);
2840 }
2841
94ea7257 2842 if (smp->method == REQ_OOB) {
28cd47f7 2843 if (test_bit(SMP_FLAG_INITIATOR, &smp->flags))
a29b0733
JH
2844 smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM,
2845 sizeof(smp->prnd), smp->prnd);
2846
2847 SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_RANDOM);
2848
2849 return 0;
2850 }
2851
28cd47f7 2852 if (test_bit(SMP_FLAG_INITIATOR, &smp->flags))
38606f14
JH
2853 SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_CONFIRM);
2854
2855 if (smp->method == REQ_PASSKEY) {
2856 if (mgmt_user_passkey_request(hdev, &hcon->dst, hcon->type,
2857 hcon->dst_type))
2858 return SMP_UNSPECIFIED;
2859 SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_CONFIRM);
2860 set_bit(SMP_FLAG_WAIT_USER, &smp->flags);
2861 return 0;
2862 }
2863
cbbbe3e2
JH
2864 /* The Initiating device waits for the non-initiating device to
2865 * send the confirm value.
2866 */
28cd47f7 2867 if (test_bit(SMP_FLAG_INITIATOR, &smp->flags))
cbbbe3e2
JH
2868 return 0;
2869
2870 err = smp_f4(smp->tfm_cmac, smp->local_pk, smp->remote_pk, smp->prnd,
2871 0, cfm.confirm_val);
2872 if (err)
2873 return SMP_UNSPECIFIED;
2874
2875 smp_send_cmd(conn, SMP_CMD_PAIRING_CONFIRM, sizeof(cfm), &cfm);
2876 SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_RANDOM);
2877
d8f8edbe
JH
2878 return 0;
2879}
2880
6433a9a2
JH
2881static int smp_cmd_dhkey_check(struct l2cap_conn *conn, struct sk_buff *skb)
2882{
2883 struct smp_cmd_dhkey_check *check = (void *) skb->data;
2884 struct l2cap_chan *chan = conn->smp;
2885 struct hci_conn *hcon = conn->hcon;
2886 struct smp_chan *smp = chan->data;
2887 u8 a[7], b[7], *local_addr, *remote_addr;
2888 u8 io_cap[3], r[16], e[16];
2889 int err;
2890
2e1614f7 2891 bt_dev_dbg(hcon->hdev, "conn %p", conn);
6433a9a2
JH
2892
2893 if (skb->len < sizeof(*check))
2894 return SMP_INVALID_PARAMS;
2895
2896 memcpy(a, &hcon->init_addr, 6);
2897 memcpy(b, &hcon->resp_addr, 6);
2898 a[6] = hcon->init_addr_type;
2899 b[6] = hcon->resp_addr_type;
2900
28cd47f7 2901 if (test_bit(SMP_FLAG_INITIATOR, &smp->flags)) {
6433a9a2
JH
2902 local_addr = a;
2903 remote_addr = b;
2904 memcpy(io_cap, &smp->prsp[1], 3);
2905 } else {
2906 local_addr = b;
2907 remote_addr = a;
2908 memcpy(io_cap, &smp->preq[1], 3);
2909 }
2910
2911 memset(r, 0, sizeof(r));
2912
38606f14
JH
2913 if (smp->method == REQ_PASSKEY || smp->method == DSP_PASSKEY)
2914 put_unaligned_le32(hcon->passkey_notify, r);
882fafad
JH
2915 else if (smp->method == REQ_OOB)
2916 memcpy(r, smp->lr, 16);
38606f14 2917
6433a9a2
JH
2918 err = smp_f6(smp->tfm_cmac, smp->mackey, smp->rrnd, smp->prnd, r,
2919 io_cap, remote_addr, local_addr, e);
2920 if (err)
2921 return SMP_UNSPECIFIED;
2922
329d8230 2923 if (crypto_memneq(check->e, e, 16))
6433a9a2
JH
2924 return SMP_DHKEY_CHECK_FAILED;
2925
28cd47f7 2926 if (!test_bit(SMP_FLAG_INITIATOR, &smp->flags)) {
d3e54a87
JH
2927 if (test_bit(SMP_FLAG_WAIT_USER, &smp->flags)) {
2928 set_bit(SMP_FLAG_DHKEY_PENDING, &smp->flags);
2929 return 0;
2930 }
d378a2d7 2931
fad646e1 2932 /* Responder sends DHKey check as response to initiator */
d3e54a87
JH
2933 sc_dhkey_check(smp);
2934 }
d378a2d7 2935
d3e54a87 2936 sc_add_ltk(smp);
6433a9a2 2937
28cd47f7 2938 if (test_bit(SMP_FLAG_INITIATOR, &smp->flags)) {
8b76ce34 2939 hci_le_start_enc(hcon, 0, 0, smp->tk, smp->enc_key_size);
6433a9a2
JH
2940 hcon->enc_key_size = smp->enc_key_size;
2941 }
2942
2943 return 0;
2944}
2945
1408bb6e
JH
2946static int smp_cmd_keypress_notify(struct l2cap_conn *conn,
2947 struct sk_buff *skb)
2948{
2949 struct smp_cmd_keypress_notify *kp = (void *) skb->data;
2950
2e1614f7 2951 bt_dev_dbg(conn->hcon->hdev, "value 0x%02x", kp->value);
1408bb6e
JH
2952
2953 return 0;
2954}
2955
4befb867 2956static int smp_sig_channel(struct l2cap_chan *chan, struct sk_buff *skb)
eb492e01 2957{
5d88cc73 2958 struct l2cap_conn *conn = chan->conn;
7b9899db 2959 struct hci_conn *hcon = conn->hcon;
b28b4943 2960 struct smp_chan *smp;
92381f5c 2961 __u8 code, reason;
eb492e01
AB
2962 int err = 0;
2963
8ae9b984 2964 if (skb->len < 1)
92381f5c 2965 return -EILSEQ;
92381f5c 2966
d7a5a11d 2967 if (!hci_dev_test_flag(hcon->hdev, HCI_LE_ENABLED)) {
2e65c9d2
AG
2968 reason = SMP_PAIRING_NOTSUPP;
2969 goto done;
2970 }
2971
92381f5c 2972 code = skb->data[0];
eb492e01
AB
2973 skb_pull(skb, sizeof(code));
2974
b28b4943
JH
2975 smp = chan->data;
2976
2977 if (code > SMP_CMD_MAX)
2978 goto drop;
2979
24bd0bd9 2980 if (smp && !test_and_clear_bit(code, &smp->allow_cmd))
b28b4943
JH
2981 goto drop;
2982
2983 /* If we don't have a context the only allowed commands are
2984 * pairing request and security request.
8cf9fa12 2985 */
b28b4943
JH
2986 if (!smp && code != SMP_CMD_PAIRING_REQ && code != SMP_CMD_SECURITY_REQ)
2987 goto drop;
8cf9fa12 2988
eb492e01
AB
2989 switch (code) {
2990 case SMP_CMD_PAIRING_REQ:
da85e5e5 2991 reason = smp_cmd_pairing_req(conn, skb);
eb492e01
AB
2992 break;
2993
2994 case SMP_CMD_PAIRING_FAIL:
84794e11 2995 smp_failure(conn, 0);
da85e5e5 2996 err = -EPERM;
eb492e01
AB
2997 break;
2998
2999 case SMP_CMD_PAIRING_RSP:
da85e5e5 3000 reason = smp_cmd_pairing_rsp(conn, skb);
88ba43b6
AB
3001 break;
3002
3003 case SMP_CMD_SECURITY_REQ:
da85e5e5 3004 reason = smp_cmd_security_req(conn, skb);
88ba43b6
AB
3005 break;
3006
eb492e01 3007 case SMP_CMD_PAIRING_CONFIRM:
da85e5e5 3008 reason = smp_cmd_pairing_confirm(conn, skb);
88ba43b6
AB
3009 break;
3010
eb492e01 3011 case SMP_CMD_PAIRING_RANDOM:
da85e5e5 3012 reason = smp_cmd_pairing_random(conn, skb);
88ba43b6
AB
3013 break;
3014
eb492e01 3015 case SMP_CMD_ENCRYPT_INFO:
7034b911
VCG
3016 reason = smp_cmd_encrypt_info(conn, skb);
3017 break;
3018
fad646e1
AP
3019 case SMP_CMD_INITIATOR_IDENT:
3020 reason = smp_cmd_initiator_ident(conn, skb);
7034b911
VCG
3021 break;
3022
eb492e01 3023 case SMP_CMD_IDENT_INFO:
fd349c02
JH
3024 reason = smp_cmd_ident_info(conn, skb);
3025 break;
3026
eb492e01 3027 case SMP_CMD_IDENT_ADDR_INFO:
fd349c02
JH
3028 reason = smp_cmd_ident_addr_info(conn, skb);
3029 break;
3030
eb492e01 3031 case SMP_CMD_SIGN_INFO:
7ee4ea36 3032 reason = smp_cmd_sign_info(conn, skb);
7034b911
VCG
3033 break;
3034
d8f8edbe
JH
3035 case SMP_CMD_PUBLIC_KEY:
3036 reason = smp_cmd_public_key(conn, skb);
3037 break;
3038
6433a9a2
JH
3039 case SMP_CMD_DHKEY_CHECK:
3040 reason = smp_cmd_dhkey_check(conn, skb);
3041 break;
3042
1408bb6e
JH
3043 case SMP_CMD_KEYPRESS_NOTIFY:
3044 reason = smp_cmd_keypress_notify(conn, skb);
3045 break;
3046
eb492e01 3047 default:
2e1614f7 3048 bt_dev_dbg(hcon->hdev, "Unknown command code 0x%2.2x", code);
eb492e01 3049 reason = SMP_CMD_NOTSUPP;
3a0259bb 3050 goto done;
eb492e01
AB
3051 }
3052
3a0259bb 3053done:
9b7b18ef
JH
3054 if (!err) {
3055 if (reason)
3056 smp_failure(conn, reason);
8ae9b984 3057 kfree_skb(skb);
9b7b18ef
JH
3058 }
3059
eb492e01 3060 return err;
b28b4943
JH
3061
3062drop:
2064ee33
MH
3063 bt_dev_err(hcon->hdev, "unexpected SMP command 0x%02x from %pMR",
3064 code, &hcon->dst);
b28b4943
JH
3065 kfree_skb(skb);
3066 return 0;
eb492e01 3067}
7034b911 3068
70db83c4
JH
3069static void smp_teardown_cb(struct l2cap_chan *chan, int err)
3070{
3071 struct l2cap_conn *conn = chan->conn;
3072
2e1614f7 3073 bt_dev_dbg(conn->hcon->hdev, "chan %p", chan);
70db83c4 3074
fc75cc86 3075 if (chan->data)
5d88cc73 3076 smp_chan_destroy(conn);
5d88cc73 3077
70db83c4
JH
3078 conn->smp = NULL;
3079 l2cap_chan_put(chan);
3080}
3081
b5ae344d
JH
3082static void bredr_pairing(struct l2cap_chan *chan)
3083{
3084 struct l2cap_conn *conn = chan->conn;
3085 struct hci_conn *hcon = conn->hcon;
3086 struct hci_dev *hdev = hcon->hdev;
b5ae344d
JH
3087 struct smp_chan *smp;
3088
2e1614f7 3089 bt_dev_dbg(hdev, "chan %p", chan);
b5ae344d
JH
3090
3091 /* Only new pairings are interesting */
3092 if (!test_bit(HCI_CONN_NEW_LINK_KEY, &hcon->flags))
3093 return;
3094
3095 /* Don't bother if we're not encrypted */
3096 if (!test_bit(HCI_CONN_ENCRYPT, &hcon->flags))
3097 return;
3098
74be523c 3099 /* Only initiator may initiate SMP over BR/EDR */
b5ae344d
JH
3100 if (hcon->role != HCI_ROLE_MASTER)
3101 return;
3102
3103 /* Secure Connections support must be enabled */
d7a5a11d 3104 if (!hci_dev_test_flag(hdev, HCI_SC_ENABLED))
b5ae344d
JH
3105 return;
3106
3107 /* BR/EDR must use Secure Connections for SMP */
3108 if (!test_bit(HCI_CONN_AES_CCM, &hcon->flags) &&
b7cb93e5 3109 !hci_dev_test_flag(hdev, HCI_FORCE_BREDR_SMP))
b5ae344d
JH
3110 return;
3111
3112 /* If our LE support is not enabled don't do anything */
d7a5a11d 3113 if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED))
b5ae344d
JH
3114 return;
3115
3116 /* Don't bother if remote LE support is not enabled */
3117 if (!lmp_host_le_capable(hcon))
3118 return;
3119
3120 /* Remote must support SMP fixed chan for BR/EDR */
3121 if (!(conn->remote_fixed_chan & L2CAP_FC_SMP_BREDR))
3122 return;
3123
3124 /* Don't bother if SMP is already ongoing */
3125 if (chan->data)
3126 return;
3127
3128 smp = smp_chan_create(conn);
3129 if (!smp) {
2064ee33 3130 bt_dev_err(hdev, "unable to create SMP context for BR/EDR");
b5ae344d
JH
3131 return;
3132 }
3133
3134 set_bit(SMP_FLAG_SC, &smp->flags);
3135
2e1614f7 3136 bt_dev_dbg(hdev, "starting SMP over BR/EDR");
b5ae344d 3137
28cd47f7 3138 smp_send_pairing_req(smp, 0x00);
b5ae344d
JH
3139}
3140
44f1a7ab
JH
3141static void smp_resume_cb(struct l2cap_chan *chan)
3142{
b68fda68 3143 struct smp_chan *smp = chan->data;
44f1a7ab
JH
3144 struct l2cap_conn *conn = chan->conn;
3145 struct hci_conn *hcon = conn->hcon;
3146
2e1614f7 3147 bt_dev_dbg(hcon->hdev, "chan %p", chan);
44f1a7ab 3148
b5ae344d
JH
3149 if (hcon->type == ACL_LINK) {
3150 bredr_pairing(chan);
ef8efe4b 3151 return;
b5ae344d 3152 }
ef8efe4b 3153
86d1407c
JH
3154 if (!smp)
3155 return;
b68fda68 3156
84bc0db5
JH
3157 if (!test_bit(HCI_CONN_ENCRYPT, &hcon->flags))
3158 return;
3159
86d1407c
JH
3160 cancel_delayed_work(&smp->security_timer);
3161
d6268e86 3162 smp_distribute_keys(smp);
44f1a7ab
JH
3163}
3164
70db83c4
JH
3165static void smp_ready_cb(struct l2cap_chan *chan)
3166{
3167 struct l2cap_conn *conn = chan->conn;
b5ae344d 3168 struct hci_conn *hcon = conn->hcon;
70db83c4 3169
2e1614f7 3170 bt_dev_dbg(hcon->hdev, "chan %p", chan);
70db83c4 3171
7883746b
JH
3172 /* No need to call l2cap_chan_hold() here since we already own
3173 * the reference taken in smp_new_conn_cb(). This is just the
3174 * first time that we tie it to a specific pointer. The code in
3175 * l2cap_core.c ensures that there's no risk this function wont
3176 * get called if smp_new_conn_cb was previously called.
3177 */
70db83c4 3178 conn->smp = chan;
b5ae344d
JH
3179
3180 if (hcon->type == ACL_LINK && test_bit(HCI_CONN_ENCRYPT, &hcon->flags))
3181 bredr_pairing(chan);
70db83c4
JH
3182}
3183
4befb867
JH
3184static int smp_recv_cb(struct l2cap_chan *chan, struct sk_buff *skb)
3185{
3186 int err;
3187
2e1614f7 3188 bt_dev_dbg(chan->conn->hcon->hdev, "chan %p", chan);
4befb867
JH
3189
3190 err = smp_sig_channel(chan, skb);
3191 if (err) {
b68fda68 3192 struct smp_chan *smp = chan->data;
4befb867 3193
b68fda68
JH
3194 if (smp)
3195 cancel_delayed_work_sync(&smp->security_timer);
4befb867 3196
1e91c29e 3197 hci_disconnect(chan->conn->hcon, HCI_ERROR_AUTH_FAILURE);
4befb867
JH
3198 }
3199
3200 return err;
3201}
3202
70db83c4
JH
3203static struct sk_buff *smp_alloc_skb_cb(struct l2cap_chan *chan,
3204 unsigned long hdr_len,
3205 unsigned long len, int nb)
3206{
3207 struct sk_buff *skb;
3208
3209 skb = bt_skb_alloc(hdr_len + len, GFP_KERNEL);
3210 if (!skb)
3211 return ERR_PTR(-ENOMEM);
3212
3213 skb->priority = HCI_PRIO_MAX;
a4368ff3 3214 bt_cb(skb)->l2cap.chan = chan;
70db83c4
JH
3215
3216 return skb;
3217}
3218
3219static const struct l2cap_ops smp_chan_ops = {
3220 .name = "Security Manager",
3221 .ready = smp_ready_cb,
5d88cc73 3222 .recv = smp_recv_cb,
70db83c4
JH
3223 .alloc_skb = smp_alloc_skb_cb,
3224 .teardown = smp_teardown_cb,
44f1a7ab 3225 .resume = smp_resume_cb,
70db83c4
JH
3226
3227 .new_connection = l2cap_chan_no_new_connection,
70db83c4
JH
3228 .state_change = l2cap_chan_no_state_change,
3229 .close = l2cap_chan_no_close,
3230 .defer = l2cap_chan_no_defer,
3231 .suspend = l2cap_chan_no_suspend,
70db83c4
JH
3232 .set_shutdown = l2cap_chan_no_set_shutdown,
3233 .get_sndtimeo = l2cap_chan_no_get_sndtimeo,
70db83c4
JH
3234};
3235
3236static inline struct l2cap_chan *smp_new_conn_cb(struct l2cap_chan *pchan)
3237{
3238 struct l2cap_chan *chan;
3239
995fca15 3240 BT_DBG("pchan %p", pchan);
70db83c4
JH
3241
3242 chan = l2cap_chan_create();
3243 if (!chan)
3244 return NULL;
3245
3246 chan->chan_type = pchan->chan_type;
3247 chan->ops = &smp_chan_ops;
3248 chan->scid = pchan->scid;
3249 chan->dcid = chan->scid;
3250 chan->imtu = pchan->imtu;
3251 chan->omtu = pchan->omtu;
3252 chan->mode = pchan->mode;
3253
abe84903
JH
3254 /* Other L2CAP channels may request SMP routines in order to
3255 * change the security level. This means that the SMP channel
3256 * lock must be considered in its own category to avoid lockdep
3257 * warnings.
3258 */
3259 atomic_set(&chan->nesting, L2CAP_NESTING_SMP);
3260
995fca15 3261 BT_DBG("created chan %p", chan);
70db83c4
JH
3262
3263 return chan;
3264}
3265
3266static const struct l2cap_ops smp_root_chan_ops = {
3267 .name = "Security Manager Root",
3268 .new_connection = smp_new_conn_cb,
3269
3270 /* None of these are implemented for the root channel */
3271 .close = l2cap_chan_no_close,
3272 .alloc_skb = l2cap_chan_no_alloc_skb,
3273 .recv = l2cap_chan_no_recv,
3274 .state_change = l2cap_chan_no_state_change,
3275 .teardown = l2cap_chan_no_teardown,
3276 .ready = l2cap_chan_no_ready,
3277 .defer = l2cap_chan_no_defer,
3278 .suspend = l2cap_chan_no_suspend,
3279 .resume = l2cap_chan_no_resume,
3280 .set_shutdown = l2cap_chan_no_set_shutdown,
3281 .get_sndtimeo = l2cap_chan_no_get_sndtimeo,
70db83c4
JH
3282};
3283
ef8efe4b 3284static struct l2cap_chan *smp_add_cid(struct hci_dev *hdev, u16 cid)
711eafe3 3285{
70db83c4 3286 struct l2cap_chan *chan;
88a479d9 3287 struct smp_dev *smp;
71af2f6b 3288 struct crypto_shash *tfm_cmac;
47eb2ac8 3289 struct crypto_kpp *tfm_ecdh;
70db83c4 3290
ef8efe4b 3291 if (cid == L2CAP_CID_SMP_BREDR) {
88a479d9 3292 smp = NULL;
ef8efe4b
JH
3293 goto create_chan;
3294 }
711eafe3 3295
88a479d9
MH
3296 smp = kzalloc(sizeof(*smp), GFP_KERNEL);
3297 if (!smp)
3298 return ERR_PTR(-ENOMEM);
3299
71af2f6b 3300 tfm_cmac = crypto_alloc_shash("cmac(aes)", 0, 0);
6e2dc6d1 3301 if (IS_ERR(tfm_cmac)) {
2e1614f7 3302 bt_dev_err(hdev, "Unable to create CMAC crypto context");
453431a5 3303 kfree_sensitive(smp);
6e2dc6d1
MH
3304 return ERR_CAST(tfm_cmac);
3305 }
3306
6763f5ea 3307 tfm_ecdh = crypto_alloc_kpp("ecdh-nist-p256", 0, 0);
47eb2ac8 3308 if (IS_ERR(tfm_ecdh)) {
2e1614f7 3309 bt_dev_err(hdev, "Unable to create ECDH crypto context");
47eb2ac8 3310 crypto_free_shash(tfm_cmac);
453431a5 3311 kfree_sensitive(smp);
47eb2ac8
TA
3312 return ERR_CAST(tfm_ecdh);
3313 }
3314
94f14e47 3315 smp->local_oob = false;
6e2dc6d1 3316 smp->tfm_cmac = tfm_cmac;
47eb2ac8 3317 smp->tfm_ecdh = tfm_ecdh;
88a479d9 3318
ef8efe4b 3319create_chan:
70db83c4
JH
3320 chan = l2cap_chan_create();
3321 if (!chan) {
63511f6d 3322 if (smp) {
71af2f6b 3323 crypto_free_shash(smp->tfm_cmac);
47eb2ac8 3324 crypto_free_kpp(smp->tfm_ecdh);
453431a5 3325 kfree_sensitive(smp);
63511f6d 3326 }
ef8efe4b 3327 return ERR_PTR(-ENOMEM);
70db83c4
JH
3328 }
3329
88a479d9 3330 chan->data = smp;
defce9e8 3331
ef8efe4b 3332 l2cap_add_scid(chan, cid);
70db83c4
JH
3333
3334 l2cap_chan_set_defaults(chan);
3335
157029ba 3336 if (cid == L2CAP_CID_SMP) {
39e3e744
JH
3337 u8 bdaddr_type;
3338
3339 hci_copy_identity_address(hdev, &chan->src, &bdaddr_type);
3340
3341 if (bdaddr_type == ADDR_LE_DEV_PUBLIC)
157029ba 3342 chan->src_type = BDADDR_LE_PUBLIC;
39e3e744
JH
3343 else
3344 chan->src_type = BDADDR_LE_RANDOM;
157029ba
MH
3345 } else {
3346 bacpy(&chan->src, &hdev->bdaddr);
ef8efe4b 3347 chan->src_type = BDADDR_BREDR;
157029ba
MH
3348 }
3349
70db83c4
JH
3350 chan->state = BT_LISTEN;
3351 chan->mode = L2CAP_MODE_BASIC;
3352 chan->imtu = L2CAP_DEFAULT_MTU;
3353 chan->ops = &smp_root_chan_ops;
3354
abe84903
JH
3355 /* Set correct nesting level for a parent/listening channel */
3356 atomic_set(&chan->nesting, L2CAP_NESTING_PARENT);
3357
ef8efe4b 3358 return chan;
711eafe3
JH
3359}
3360
ef8efe4b 3361static void smp_del_chan(struct l2cap_chan *chan)
711eafe3 3362{
88a479d9 3363 struct smp_dev *smp;
70db83c4 3364
995fca15 3365 BT_DBG("chan %p", chan);
711eafe3 3366
88a479d9
MH
3367 smp = chan->data;
3368 if (smp) {
defce9e8 3369 chan->data = NULL;
71af2f6b 3370 crypto_free_shash(smp->tfm_cmac);
47eb2ac8 3371 crypto_free_kpp(smp->tfm_ecdh);
453431a5 3372 kfree_sensitive(smp);
711eafe3 3373 }
70db83c4 3374
70db83c4 3375 l2cap_chan_put(chan);
711eafe3 3376}
ef8efe4b 3377
82493316 3378int smp_force_bredr(struct hci_dev *hdev, bool enable)
300acfde 3379{
b7cb93e5 3380 if (enable == hci_dev_test_flag(hdev, HCI_FORCE_BREDR_SMP))
300acfde
MH
3381 return -EALREADY;
3382
3383 if (enable) {
3384 struct l2cap_chan *chan;
3385
3386 chan = smp_add_cid(hdev, L2CAP_CID_SMP_BREDR);
3387 if (IS_ERR(chan))
3388 return PTR_ERR(chan);
3389
3390 hdev->smp_bredr_data = chan;
3391 } else {
3392 struct l2cap_chan *chan;
3393
3394 chan = hdev->smp_bredr_data;
3395 hdev->smp_bredr_data = NULL;
3396 smp_del_chan(chan);
3397 }
3398
b7cb93e5 3399 hci_dev_change_flag(hdev, HCI_FORCE_BREDR_SMP);
300acfde 3400
82493316 3401 return 0;
300acfde
MH
3402}
3403
ef8efe4b
JH
3404int smp_register(struct hci_dev *hdev)
3405{
3406 struct l2cap_chan *chan;
3407
2e1614f7 3408 bt_dev_dbg(hdev, "");
ef8efe4b 3409
7e7ec445
MH
3410 /* If the controller does not support Low Energy operation, then
3411 * there is also no need to register any SMP channel.
3412 */
3413 if (!lmp_le_capable(hdev))
3414 return 0;
3415
2b8df323
MH
3416 if (WARN_ON(hdev->smp_data)) {
3417 chan = hdev->smp_data;
3418 hdev->smp_data = NULL;
3419 smp_del_chan(chan);
3420 }
3421
ef8efe4b
JH
3422 chan = smp_add_cid(hdev, L2CAP_CID_SMP);
3423 if (IS_ERR(chan))
3424 return PTR_ERR(chan);
3425
3426 hdev->smp_data = chan;
3427
300acfde 3428 if (!lmp_sc_capable(hdev)) {
83ebb9ec
SJ
3429 /* Flag can be already set here (due to power toggle) */
3430 if (!hci_dev_test_flag(hdev, HCI_FORCE_BREDR_SMP))
3431 return 0;
300acfde 3432 }
ef8efe4b 3433
2b8df323
MH
3434 if (WARN_ON(hdev->smp_bredr_data)) {
3435 chan = hdev->smp_bredr_data;
3436 hdev->smp_bredr_data = NULL;
3437 smp_del_chan(chan);
3438 }
3439
ef8efe4b
JH
3440 chan = smp_add_cid(hdev, L2CAP_CID_SMP_BREDR);
3441 if (IS_ERR(chan)) {
3442 int err = PTR_ERR(chan);
3443 chan = hdev->smp_data;
3444 hdev->smp_data = NULL;
3445 smp_del_chan(chan);
3446 return err;
3447 }
3448
3449 hdev->smp_bredr_data = chan;
3450
3451 return 0;
3452}
3453
3454void smp_unregister(struct hci_dev *hdev)
3455{
3456 struct l2cap_chan *chan;
3457
3458 if (hdev->smp_bredr_data) {
3459 chan = hdev->smp_bredr_data;
3460 hdev->smp_bredr_data = NULL;
3461 smp_del_chan(chan);
3462 }
3463
3464 if (hdev->smp_data) {
3465 chan = hdev->smp_data;
3466 hdev->smp_data = NULL;
3467 smp_del_chan(chan);
3468 }
3469}
0a2b0f04
JH
3470
3471#if IS_ENABLED(CONFIG_BT_SELFTEST_SMP)
3472
47eb2ac8 3473static int __init test_debug_key(struct crypto_kpp *tfm_ecdh)
71653eb6 3474{
c0153b0b 3475 u8 pk[64];
a2976416 3476 int err;
71653eb6 3477
c0153b0b 3478 err = set_ecdh_privkey(tfm_ecdh, debug_sk);
a2976416
TA
3479 if (err)
3480 return err;
71653eb6 3481
c0153b0b
TA
3482 err = generate_ecdh_public_key(tfm_ecdh, pk);
3483 if (err)
3484 return err;
71653eb6 3485
329d8230 3486 if (crypto_memneq(pk, debug_pk, 64))
71653eb6
MH
3487 return -EINVAL;
3488
3489 return 0;
3490}
3491
28a220aa 3492static int __init test_ah(void)
cfc4198e
JH
3493{
3494 const u8 irk[16] = {
3495 0x9b, 0x7d, 0x39, 0x0a, 0xa6, 0x10, 0x10, 0x34,
3496 0x05, 0xad, 0xc8, 0x57, 0xa3, 0x34, 0x02, 0xec };
3497 const u8 r[3] = { 0x94, 0x81, 0x70 };
3498 const u8 exp[3] = { 0xaa, 0xfb, 0x0d };
3499 u8 res[3];
3500 int err;
3501
28a220aa 3502 err = smp_ah(irk, r, res);
cfc4198e
JH
3503 if (err)
3504 return err;
3505
329d8230 3506 if (crypto_memneq(res, exp, 3))
cfc4198e
JH
3507 return -EINVAL;
3508
3509 return 0;
3510}
3511
28a220aa 3512static int __init test_c1(void)
cfc4198e
JH
3513{
3514 const u8 k[16] = {
3515 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3516 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
3517 const u8 r[16] = {
3518 0xe0, 0x2e, 0x70, 0xc6, 0x4e, 0x27, 0x88, 0x63,
3519 0x0e, 0x6f, 0xad, 0x56, 0x21, 0xd5, 0x83, 0x57 };
3520 const u8 preq[7] = { 0x01, 0x01, 0x00, 0x00, 0x10, 0x07, 0x07 };
3521 const u8 pres[7] = { 0x02, 0x03, 0x00, 0x00, 0x08, 0x00, 0x05 };
3522 const u8 _iat = 0x01;
3523 const u8 _rat = 0x00;
3524 const bdaddr_t ra = { { 0xb6, 0xb5, 0xb4, 0xb3, 0xb2, 0xb1 } };
3525 const bdaddr_t ia = { { 0xa6, 0xa5, 0xa4, 0xa3, 0xa2, 0xa1 } };
3526 const u8 exp[16] = {
3527 0x86, 0x3b, 0xf1, 0xbe, 0xc5, 0x4d, 0xa7, 0xd2,
3528 0xea, 0x88, 0x89, 0x87, 0xef, 0x3f, 0x1e, 0x1e };
3529 u8 res[16];
3530 int err;
3531
28a220aa 3532 err = smp_c1(k, r, preq, pres, _iat, &ia, _rat, &ra, res);
cfc4198e
JH
3533 if (err)
3534 return err;
3535
329d8230 3536 if (crypto_memneq(res, exp, 16))
cfc4198e
JH
3537 return -EINVAL;
3538
3539 return 0;
3540}
3541
28a220aa 3542static int __init test_s1(void)
cfc4198e
JH
3543{
3544 const u8 k[16] = {
3545 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3546 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
3547 const u8 r1[16] = {
3548 0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11 };
3549 const u8 r2[16] = {
3550 0x00, 0xff, 0xee, 0xdd, 0xcc, 0xbb, 0xaa, 0x99 };
3551 const u8 exp[16] = {
3552 0x62, 0xa0, 0x6d, 0x79, 0xae, 0x16, 0x42, 0x5b,
3553 0x9b, 0xf4, 0xb0, 0xe8, 0xf0, 0xe1, 0x1f, 0x9a };
3554 u8 res[16];
3555 int err;
3556
28a220aa 3557 err = smp_s1(k, r1, r2, res);
cfc4198e
JH
3558 if (err)
3559 return err;
3560
329d8230 3561 if (crypto_memneq(res, exp, 16))
cfc4198e
JH
3562 return -EINVAL;
3563
3564 return 0;
3565}
3566
71af2f6b 3567static int __init test_f4(struct crypto_shash *tfm_cmac)
fb2969a3
JH
3568{
3569 const u8 u[32] = {
3570 0xe6, 0x9d, 0x35, 0x0e, 0x48, 0x01, 0x03, 0xcc,
3571 0xdb, 0xfd, 0xf4, 0xac, 0x11, 0x91, 0xf4, 0xef,
3572 0xb9, 0xa5, 0xf9, 0xe9, 0xa7, 0x83, 0x2c, 0x5e,
3573 0x2c, 0xbe, 0x97, 0xf2, 0xd2, 0x03, 0xb0, 0x20 };
3574 const u8 v[32] = {
3575 0xfd, 0xc5, 0x7f, 0xf4, 0x49, 0xdd, 0x4f, 0x6b,
3576 0xfb, 0x7c, 0x9d, 0xf1, 0xc2, 0x9a, 0xcb, 0x59,
3577 0x2a, 0xe7, 0xd4, 0xee, 0xfb, 0xfc, 0x0a, 0x90,
3578 0x9a, 0xbb, 0xf6, 0x32, 0x3d, 0x8b, 0x18, 0x55 };
3579 const u8 x[16] = {
3580 0xab, 0xae, 0x2b, 0x71, 0xec, 0xb2, 0xff, 0xff,
3581 0x3e, 0x73, 0x77, 0xd1, 0x54, 0x84, 0xcb, 0xd5 };
3582 const u8 z = 0x00;
3583 const u8 exp[16] = {
3584 0x2d, 0x87, 0x74, 0xa9, 0xbe, 0xa1, 0xed, 0xf1,
3585 0x1c, 0xbd, 0xa9, 0x07, 0xf1, 0x16, 0xc9, 0xf2 };
3586 u8 res[16];
3587 int err;
3588
3589 err = smp_f4(tfm_cmac, u, v, x, z, res);
3590 if (err)
3591 return err;
3592
329d8230 3593 if (crypto_memneq(res, exp, 16))
fb2969a3
JH
3594 return -EINVAL;
3595
3596 return 0;
3597}
3598
71af2f6b 3599static int __init test_f5(struct crypto_shash *tfm_cmac)
fb2969a3
JH
3600{
3601 const u8 w[32] = {
3602 0x98, 0xa6, 0xbf, 0x73, 0xf3, 0x34, 0x8d, 0x86,
3603 0xf1, 0x66, 0xf8, 0xb4, 0x13, 0x6b, 0x79, 0x99,
3604 0x9b, 0x7d, 0x39, 0x0a, 0xa6, 0x10, 0x10, 0x34,
3605 0x05, 0xad, 0xc8, 0x57, 0xa3, 0x34, 0x02, 0xec };
3606 const u8 n1[16] = {
3607 0xab, 0xae, 0x2b, 0x71, 0xec, 0xb2, 0xff, 0xff,
3608 0x3e, 0x73, 0x77, 0xd1, 0x54, 0x84, 0xcb, 0xd5 };
3609 const u8 n2[16] = {
3610 0xcf, 0xc4, 0x3d, 0xff, 0xf7, 0x83, 0x65, 0x21,
3611 0x6e, 0x5f, 0xa7, 0x25, 0xcc, 0xe7, 0xe8, 0xa6 };
3612 const u8 a1[7] = { 0xce, 0xbf, 0x37, 0x37, 0x12, 0x56, 0x00 };
3613 const u8 a2[7] = { 0xc1, 0xcf, 0x2d, 0x70, 0x13, 0xa7, 0x00 };
3614 const u8 exp_ltk[16] = {
3615 0x38, 0x0a, 0x75, 0x94, 0xb5, 0x22, 0x05, 0x98,
3616 0x23, 0xcd, 0xd7, 0x69, 0x11, 0x79, 0x86, 0x69 };
3617 const u8 exp_mackey[16] = {
3618 0x20, 0x6e, 0x63, 0xce, 0x20, 0x6a, 0x3f, 0xfd,
3619 0x02, 0x4a, 0x08, 0xa1, 0x76, 0xf1, 0x65, 0x29 };
3620 u8 mackey[16], ltk[16];
3621 int err;
3622
3623 err = smp_f5(tfm_cmac, w, n1, n2, a1, a2, mackey, ltk);
3624 if (err)
3625 return err;
3626
329d8230 3627 if (crypto_memneq(mackey, exp_mackey, 16))
fb2969a3
JH
3628 return -EINVAL;
3629
329d8230 3630 if (crypto_memneq(ltk, exp_ltk, 16))
fb2969a3
JH
3631 return -EINVAL;
3632
3633 return 0;
3634}
3635
71af2f6b 3636static int __init test_f6(struct crypto_shash *tfm_cmac)
fb2969a3
JH
3637{
3638 const u8 w[16] = {
3639 0x20, 0x6e, 0x63, 0xce, 0x20, 0x6a, 0x3f, 0xfd,
3640 0x02, 0x4a, 0x08, 0xa1, 0x76, 0xf1, 0x65, 0x29 };
3641 const u8 n1[16] = {
3642 0xab, 0xae, 0x2b, 0x71, 0xec, 0xb2, 0xff, 0xff,
3643 0x3e, 0x73, 0x77, 0xd1, 0x54, 0x84, 0xcb, 0xd5 };
3644 const u8 n2[16] = {
3645 0xcf, 0xc4, 0x3d, 0xff, 0xf7, 0x83, 0x65, 0x21,
3646 0x6e, 0x5f, 0xa7, 0x25, 0xcc, 0xe7, 0xe8, 0xa6 };
3647 const u8 r[16] = {
3648 0xc8, 0x0f, 0x2d, 0x0c, 0xd2, 0x42, 0xda, 0x08,
3649 0x54, 0xbb, 0x53, 0xb4, 0x3b, 0x34, 0xa3, 0x12 };
3650 const u8 io_cap[3] = { 0x02, 0x01, 0x01 };
3651 const u8 a1[7] = { 0xce, 0xbf, 0x37, 0x37, 0x12, 0x56, 0x00 };
3652 const u8 a2[7] = { 0xc1, 0xcf, 0x2d, 0x70, 0x13, 0xa7, 0x00 };
3653 const u8 exp[16] = {
3654 0x61, 0x8f, 0x95, 0xda, 0x09, 0x0b, 0x6c, 0xd2,
3655 0xc5, 0xe8, 0xd0, 0x9c, 0x98, 0x73, 0xc4, 0xe3 };
3656 u8 res[16];
3657 int err;
3658
3659 err = smp_f6(tfm_cmac, w, n1, n2, r, io_cap, a1, a2, res);
3660 if (err)
3661 return err;
3662
329d8230 3663 if (crypto_memneq(res, exp, 16))
fb2969a3
JH
3664 return -EINVAL;
3665
3666 return 0;
3667}
3668
71af2f6b 3669static int __init test_g2(struct crypto_shash *tfm_cmac)
fb2969a3
JH
3670{
3671 const u8 u[32] = {
3672 0xe6, 0x9d, 0x35, 0x0e, 0x48, 0x01, 0x03, 0xcc,
3673 0xdb, 0xfd, 0xf4, 0xac, 0x11, 0x91, 0xf4, 0xef,
3674 0xb9, 0xa5, 0xf9, 0xe9, 0xa7, 0x83, 0x2c, 0x5e,
3675 0x2c, 0xbe, 0x97, 0xf2, 0xd2, 0x03, 0xb0, 0x20 };
3676 const u8 v[32] = {
3677 0xfd, 0xc5, 0x7f, 0xf4, 0x49, 0xdd, 0x4f, 0x6b,
3678 0xfb, 0x7c, 0x9d, 0xf1, 0xc2, 0x9a, 0xcb, 0x59,
3679 0x2a, 0xe7, 0xd4, 0xee, 0xfb, 0xfc, 0x0a, 0x90,
3680 0x9a, 0xbb, 0xf6, 0x32, 0x3d, 0x8b, 0x18, 0x55 };
3681 const u8 x[16] = {
3682 0xab, 0xae, 0x2b, 0x71, 0xec, 0xb2, 0xff, 0xff,
3683 0x3e, 0x73, 0x77, 0xd1, 0x54, 0x84, 0xcb, 0xd5 };
3684 const u8 y[16] = {
3685 0xcf, 0xc4, 0x3d, 0xff, 0xf7, 0x83, 0x65, 0x21,
3686 0x6e, 0x5f, 0xa7, 0x25, 0xcc, 0xe7, 0xe8, 0xa6 };
3687 const u32 exp_val = 0x2f9ed5ba % 1000000;
3688 u32 val;
3689 int err;
3690
3691 err = smp_g2(tfm_cmac, u, v, x, y, &val);
3692 if (err)
3693 return err;
3694
3695 if (val != exp_val)
3696 return -EINVAL;
3697
3698 return 0;
3699}
3700
71af2f6b 3701static int __init test_h6(struct crypto_shash *tfm_cmac)
fb2969a3
JH
3702{
3703 const u8 w[16] = {
3704 0x9b, 0x7d, 0x39, 0x0a, 0xa6, 0x10, 0x10, 0x34,
3705 0x05, 0xad, 0xc8, 0x57, 0xa3, 0x34, 0x02, 0xec };
3706 const u8 key_id[4] = { 0x72, 0x62, 0x65, 0x6c };
3707 const u8 exp[16] = {
3708 0x99, 0x63, 0xb1, 0x80, 0xe2, 0xa9, 0xd3, 0xe8,
3709 0x1c, 0xc9, 0x6d, 0xe7, 0x02, 0xe1, 0x9a, 0x2d };
3710 u8 res[16];
3711 int err;
3712
3713 err = smp_h6(tfm_cmac, w, key_id, res);
3714 if (err)
3715 return err;
3716
329d8230 3717 if (crypto_memneq(res, exp, 16))
fb2969a3
JH
3718 return -EINVAL;
3719
3720 return 0;
3721}
3722
64dd374e
MH
3723static char test_smp_buffer[32];
3724
3725static ssize_t test_smp_read(struct file *file, char __user *user_buf,
3726 size_t count, loff_t *ppos)
3727{
3728 return simple_read_from_buffer(user_buf, count, ppos, test_smp_buffer,
3729 strlen(test_smp_buffer));
3730}
3731
3732static const struct file_operations test_smp_fops = {
3733 .open = simple_open,
3734 .read = test_smp_read,
3735 .llseek = default_llseek,
3736};
3737
28a220aa 3738static int __init run_selftests(struct crypto_shash *tfm_cmac,
47eb2ac8 3739 struct crypto_kpp *tfm_ecdh)
0a2b0f04 3740{
255047b0
MH
3741 ktime_t calltime, delta, rettime;
3742 unsigned long long duration;
cfc4198e
JH
3743 int err;
3744
255047b0
MH
3745 calltime = ktime_get();
3746
47eb2ac8 3747 err = test_debug_key(tfm_ecdh);
71653eb6
MH
3748 if (err) {
3749 BT_ERR("debug_key test failed");
3750 goto done;
3751 }
3752
28a220aa 3753 err = test_ah();
cfc4198e
JH
3754 if (err) {
3755 BT_ERR("smp_ah test failed");
64dd374e 3756 goto done;
cfc4198e
JH
3757 }
3758
28a220aa 3759 err = test_c1();
cfc4198e
JH
3760 if (err) {
3761 BT_ERR("smp_c1 test failed");
64dd374e 3762 goto done;
cfc4198e
JH
3763 }
3764
28a220aa 3765 err = test_s1();
cfc4198e
JH
3766 if (err) {
3767 BT_ERR("smp_s1 test failed");
64dd374e 3768 goto done;
cfc4198e
JH
3769 }
3770
fb2969a3
JH
3771 err = test_f4(tfm_cmac);
3772 if (err) {
3773 BT_ERR("smp_f4 test failed");
64dd374e 3774 goto done;
fb2969a3
JH
3775 }
3776
3777 err = test_f5(tfm_cmac);
3778 if (err) {
3779 BT_ERR("smp_f5 test failed");
64dd374e 3780 goto done;
fb2969a3
JH
3781 }
3782
3783 err = test_f6(tfm_cmac);
3784 if (err) {
3785 BT_ERR("smp_f6 test failed");
64dd374e 3786 goto done;
fb2969a3
JH
3787 }
3788
3789 err = test_g2(tfm_cmac);
3790 if (err) {
3791 BT_ERR("smp_g2 test failed");
64dd374e 3792 goto done;
fb2969a3
JH
3793 }
3794
3795 err = test_h6(tfm_cmac);
3796 if (err) {
3797 BT_ERR("smp_h6 test failed");
64dd374e 3798 goto done;
fb2969a3
JH
3799 }
3800
255047b0
MH
3801 rettime = ktime_get();
3802 delta = ktime_sub(rettime, calltime);
3803 duration = (unsigned long long) ktime_to_ns(delta) >> 10;
3804
5ced2464 3805 BT_INFO("SMP test passed in %llu usecs", duration);
0a2b0f04 3806
64dd374e
MH
3807done:
3808 if (!err)
3809 snprintf(test_smp_buffer, sizeof(test_smp_buffer),
3810 "PASS (%llu usecs)\n", duration);
3811 else
3812 snprintf(test_smp_buffer, sizeof(test_smp_buffer), "FAIL\n");
3813
3814 debugfs_create_file("selftest_smp", 0444, bt_debugfs, NULL,
3815 &test_smp_fops);
3816
3817 return err;
0a2b0f04
JH
3818}
3819
3820int __init bt_selftest_smp(void)
3821{
71af2f6b 3822 struct crypto_shash *tfm_cmac;
47eb2ac8 3823 struct crypto_kpp *tfm_ecdh;
0a2b0f04
JH
3824 int err;
3825
3d234b33 3826 tfm_cmac = crypto_alloc_shash("cmac(aes)", 0, 0);
0a2b0f04
JH
3827 if (IS_ERR(tfm_cmac)) {
3828 BT_ERR("Unable to create CMAC crypto context");
0a2b0f04
JH
3829 return PTR_ERR(tfm_cmac);
3830 }
3831
6763f5ea 3832 tfm_ecdh = crypto_alloc_kpp("ecdh-nist-p256", 0, 0);
47eb2ac8
TA
3833 if (IS_ERR(tfm_ecdh)) {
3834 BT_ERR("Unable to create ECDH crypto context");
3835 crypto_free_shash(tfm_cmac);
47eb2ac8
TA
3836 return PTR_ERR(tfm_ecdh);
3837 }
3838
28a220aa 3839 err = run_selftests(tfm_cmac, tfm_ecdh);
0a2b0f04 3840
71af2f6b 3841 crypto_free_shash(tfm_cmac);
47eb2ac8 3842 crypto_free_kpp(tfm_ecdh);
0a2b0f04
JH
3843
3844 return err;
3845}
3846
3847#endif