~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/net/bluetooth/smp.c

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /*
  2    BlueZ - Bluetooth protocol stack for Linux
  3    Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
  4 
  5    This program is free software; you can redistribute it and/or modify
  6    it under the terms of the GNU General Public License version 2 as
  7    published by the Free Software Foundation;
  8 
  9    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 10    OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 11    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
 12    IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
 13    CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
 14    WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 15    ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 16    OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 17 
 18    ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
 19    COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
 20    SOFTWARE IS DISCLAIMED.
 21 */
 22 
 23 #include <linux/debugfs.h>
 24 #include <linux/scatterlist.h>
 25 #include <crypto/aes.h>
 26 #include <crypto/hash.h>
 27 #include <crypto/kpp.h>
 28 #include <crypto/utils.h>
 29 
 30 #include <net/bluetooth/bluetooth.h>
 31 #include <net/bluetooth/hci_core.h>
 32 #include <net/bluetooth/l2cap.h>
 33 #include <net/bluetooth/mgmt.h>
 34 
 35 #include "ecdh_helper.h"
 36 #include "smp.h"
 37 
 38 #define SMP_DEV(hdev) \
 39         ((struct smp_dev *)((struct l2cap_chan *)((hdev)->smp_data))->data)
 40 
 41 /* Low-level debug macros to be used for stuff that we don't want
 42  * accidentally in dmesg, i.e. the values of the various crypto keys
 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 
 53 #define SMP_ALLOW_CMD(smp, code)        set_bit(code, &smp->allow_cmd)
 54 
 55 /* Keys which are not distributed with Secure Connections */
 56 #define SMP_SC_NO_DIST (SMP_DIST_ENC_KEY | SMP_DIST_LINK_KEY)
 57 
 58 #define SMP_TIMEOUT     msecs_to_jiffies(30000)
 59 
 60 #define ID_ADDR_TIMEOUT msecs_to_jiffies(200)
 61 
 62 #define AUTH_REQ_MASK(dev)      (hci_dev_test_flag(dev, HCI_SC_ENABLED) ? \
 63                                  0x3f : 0x07)
 64 #define KEY_DIST_MASK           0x07
 65 
 66 /* Maximum message length that can be passed to aes_cmac */
 67 #define CMAC_MSG_MAX    80
 68 
 69 enum {
 70         SMP_FLAG_TK_VALID,
 71         SMP_FLAG_CFM_PENDING,
 72         SMP_FLAG_MITM_AUTH,
 73         SMP_FLAG_COMPLETE,
 74         SMP_FLAG_INITIATOR,
 75         SMP_FLAG_SC,
 76         SMP_FLAG_REMOTE_PK,
 77         SMP_FLAG_DEBUG_KEY,
 78         SMP_FLAG_WAIT_USER,
 79         SMP_FLAG_DHKEY_PENDING,
 80         SMP_FLAG_REMOTE_OOB,
 81         SMP_FLAG_LOCAL_OOB,
 82         SMP_FLAG_CT2,
 83 };
 84 
 85 struct smp_dev {
 86         /* Secure Connections OOB data */
 87         bool                    local_oob;
 88         u8                      local_pk[64];
 89         u8                      local_rand[16];
 90         bool                    debug_key;
 91 
 92         struct crypto_shash     *tfm_cmac;
 93         struct crypto_kpp       *tfm_ecdh;
 94 };
 95 
 96 struct smp_chan {
 97         struct l2cap_conn       *conn;
 98         struct delayed_work     security_timer;
 99         unsigned long           allow_cmd; /* Bitmask of allowed commands */
100 
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 */
107         u8              rr[16]; /* Remote OOB ra/rb value */
108         u8              lr[16]; /* Local OOB ra/rb value */
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;
115         struct smp_csrk *responder_csrk;
116         struct smp_ltk  *ltk;
117         struct smp_ltk  *responder_ltk;
118         struct smp_irk  *remote_irk;
119         u8              *link_key;
120         unsigned long   flags;
121         u8              method;
122         u8              passkey_round;
123 
124         /* Secure Connections variables */
125         u8                      local_pk[64];
126         u8                      remote_pk[64];
127         u8                      dhkey[32];
128         u8                      mackey[16];
129 
130         struct crypto_shash     *tfm_cmac;
131         struct crypto_kpp       *tfm_ecdh;
132 };
133 
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  */
138 static 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 
150 static 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 
157 static inline void swap_buf(const u8 *src, u8 *dst, size_t len)
158 {
159         size_t i;
160 
161         for (i = 0; i < len; i++)
162                 dst[len - 1 - i] = src[i];
163 }
164 
165 /* The following functions map to the LE SC SMP crypto functions
166  * AES-CMAC, f4, f5, f6, g2 and h6.
167  */
168 
169 static int aes_cmac(struct crypto_shash *tfm, const u8 k[16], const u8 *m,
170                     size_t len, u8 mac[16])
171 {
172         uint8_t tmp[16], mac_msb[16], msg_msb[CMAC_MSG_MAX];
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 
183         /* Swap key and message from LSB to MSB */
184         swap_buf(k, tmp, 16);
185         swap_buf(m, msg_msb, len);
186 
187         SMP_DBG("msg (len %zu) %*phN", len, (int) len, m);
188         SMP_DBG("key %16phN", k);
189 
190         err = crypto_shash_setkey(tfm, tmp, 16);
191         if (err) {
192                 BT_ERR("cipher setkey failed: %d", err);
193                 return err;
194         }
195 
196         err = crypto_shash_tfm_digest(tfm, msg_msb, len, mac_msb);
197         if (err) {
198                 BT_ERR("Hash computation error %d", err);
199                 return err;
200         }
201 
202         swap_buf(mac_msb, mac, 16);
203 
204         SMP_DBG("mac %16phN", mac);
205 
206         return 0;
207 }
208 
209 static 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])
211 {
212         u8 m[65];
213         int err;
214 
215         SMP_DBG("u %32phN", u);
216         SMP_DBG("v %32phN", v);
217         SMP_DBG("x %16phN z %02x", x, z);
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 
227         SMP_DBG("res %16phN", res);
228 
229         return err;
230 }
231 
232 static int smp_f5(struct crypto_shash *tfm_cmac, const u8 w[32],
233                   const u8 n1[16], const u8 n2[16], const u8 a1[7],
234                   const u8 a2[7], u8 mackey[16], u8 ltk[16])
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 
249         SMP_DBG("w %32phN", w);
250         SMP_DBG("n1 %16phN n2 %16phN", n1, n2);
251         SMP_DBG("a1 %7phN a2 %7phN", a1, a2);
252 
253         err = aes_cmac(tfm_cmac, salt, w, 32, t);
254         if (err)
255                 return err;
256 
257         SMP_DBG("t %16phN", t);
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 
272         SMP_DBG("mackey %16phN", mackey);
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 
280         SMP_DBG("ltk %16phN", ltk);
281 
282         return 0;
283 }
284 
285 static int smp_f6(struct crypto_shash *tfm_cmac, const u8 w[16],
286                   const u8 n1[16], const u8 n2[16], const u8 r[16],
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 
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);
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 
308         SMP_DBG("res %16phN", res);
309 
310         return err;
311 }
312 
313 static int smp_g2(struct crypto_shash *tfm_cmac, const u8 u[32], const u8 v[32],
314                   const u8 x[16], const u8 y[16], u32 *val)
315 {
316         u8 m[80], tmp[16];
317         int err;
318 
319         SMP_DBG("u %32phN", u);
320         SMP_DBG("v %32phN", v);
321         SMP_DBG("x %16phN y %16phN", x, y);
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 
334         SMP_DBG("val %06u", *val);
335 
336         return 0;
337 }
338 
339 static int smp_h6(struct crypto_shash *tfm_cmac, const u8 w[16],
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 
355 static 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 
371 /* The following functions map to the legacy SMP crypto functions e, c1,
372  * s1 and ah.
373  */
374 
375 static int smp_e(const u8 *k, u8 *r)
376 {
377         struct crypto_aes_ctx ctx;
378         uint8_t tmp[16], data[16];
379         int err;
380 
381         SMP_DBG("k %16phN r %16phN", k, r);
382 
383         /* The most significant octet of key corresponds to k[0] */
384         swap_buf(k, tmp, 16);
385 
386         err = aes_expandkey(&ctx, tmp, 16);
387         if (err) {
388                 BT_ERR("cipher setkey failed: %d", err);
389                 return err;
390         }
391 
392         /* Most significant octet of plaintextData corresponds to data[0] */
393         swap_buf(r, data, 16);
394 
395         aes_encrypt(&ctx, data, data);
396 
397         /* Most significant octet of encryptedData corresponds to data[0] */
398         swap_buf(data, r, 16);
399 
400         SMP_DBG("r %16phN", r);
401 
402         memzero_explicit(&ctx, sizeof(ctx));
403         return err;
404 }
405 
406 static int smp_c1(const u8 k[16],
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])
409 {
410         u8 p1[16], p2[16];
411         int err;
412 
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 
417         memset(p1, 0, 16);
418 
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 
425         SMP_DBG("p1 %16phN", p1);
426 
427         /* res = r XOR p1 */
428         crypto_xor_cpy(res, r, p1, sizeof(p1));
429 
430         /* res = e(k, res) */
431         err = smp_e(k, res);
432         if (err) {
433                 BT_ERR("Encrypt data error");
434                 return err;
435         }
436 
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 
444         /* res = res XOR p2 */
445         crypto_xor(res, p2, sizeof(p2));
446 
447         /* res = e(k, res) */
448         err = smp_e(k, res);
449         if (err)
450                 BT_ERR("Encrypt data error");
451 
452         return err;
453 }
454 
455 static int smp_s1(const u8 k[16],
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 
464         err = smp_e(k, _r);
465         if (err)
466                 BT_ERR("Encrypt data error");
467 
468         return err;
469 }
470 
471 static int smp_ah(const u8 irk[16], const u8 r[3], u8 res[3])
472 {
473         u8 _res[16];
474         int err;
475 
476         /* r' = padding || r */
477         memcpy(_res, r, 3);
478         memset(_res + 3, 0, 13);
479 
480         err = smp_e(irk, _res);
481         if (err) {
482                 BT_ERR("Encrypt error");
483                 return err;
484         }
485 
486         /* The output of the random address function ah is:
487          *      ah(k, r) = e(k, r') mod 2^24
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          */
492         memcpy(res, _res, 3);
493 
494         return 0;
495 }
496 
497 bool smp_irk_matches(struct hci_dev *hdev, const u8 irk[16],
498                      const bdaddr_t *bdaddr)
499 {
500         struct l2cap_chan *chan = hdev->smp_data;
501         u8 hash[3];
502         int err;
503 
504         if (!chan || !chan->data)
505                 return false;
506 
507         bt_dev_dbg(hdev, "RPA %pMR IRK %*phN", bdaddr, 16, irk);
508 
509         err = smp_ah(irk, &bdaddr->b[3], hash);
510         if (err)
511                 return false;
512 
513         return !crypto_memneq(bdaddr->b, hash, 3);
514 }
515 
516 int smp_generate_rpa(struct hci_dev *hdev, const u8 irk[16], bdaddr_t *rpa)
517 {
518         struct l2cap_chan *chan = hdev->smp_data;
519         int err;
520 
521         if (!chan || !chan->data)
522                 return -EOPNOTSUPP;
523 
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 
529         err = smp_ah(irk, &rpa->b[3], rpa->b);
530         if (err < 0)
531                 return err;
532 
533         bt_dev_dbg(hdev, "RPA %pMR", rpa);
534 
535         return 0;
536 }
537 
538 int 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)) {
550                 bt_dev_dbg(hdev, "Using debug keys");
551                 err = set_ecdh_privkey(smp->tfm_ecdh, debug_sk);
552                 if (err)
553                         return err;
554                 memcpy(smp->local_pk, debug_pk, 64);
555                 smp->debug_key = true;
556         } else {
557                 while (true) {
558                         /* Generate key pair for Secure Connections */
559                         err = generate_ecdh_keys(smp->tfm_ecdh, smp->local_pk);
560                         if (err)
561                                 return err;
562 
563                         /* This is unlikely, but we need to check that
564                          * we didn't accidentally generate a debug key.
565                          */
566                         if (crypto_memneq(smp->local_pk, debug_pk, 64))
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);
574 
575         get_random_bytes(smp->local_rand, 16);
576 
577         err = smp_f4(smp->tfm_cmac, smp->local_pk, smp->local_pk,
578                      smp->local_rand, 0, hash);
579         if (err < 0)
580                 return err;
581 
582         memcpy(rand, smp->local_rand, 16);
583 
584         smp->local_oob = true;
585 
586         return 0;
587 }
588 
589 static void smp_send_cmd(struct l2cap_conn *conn, u8 code, u16 len, void *data)
590 {
591         struct l2cap_chan *chan = conn->smp;
592         struct smp_chan *smp;
593         struct kvec iv[2];
594         struct msghdr msg;
595 
596         if (!chan)
597                 return;
598 
599         bt_dev_dbg(conn->hcon->hdev, "code 0x%2.2x", code);
600 
601         iv[0].iov_base = &code;
602         iv[0].iov_len = 1;
603 
604         iv[1].iov_base = data;
605         iv[1].iov_len = len;
606 
607         memset(&msg, 0, sizeof(msg));
608 
609         iov_iter_kvec(&msg.msg_iter, ITER_SOURCE, iv, 2, 1 + len);
610 
611         l2cap_chan_send(chan, &msg, 1 + len);
612 
613         if (!chan->data)
614                 return;
615 
616         smp = chan->data;
617 
618         cancel_delayed_work_sync(&smp->security_timer);
619         schedule_delayed_work(&smp->security_timer, SMP_TIMEOUT);
620 }
621 
622 static u8 authreq_to_seclevel(u8 authreq)
623 {
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 {
630                 return BT_SECURITY_MEDIUM;
631         }
632 }
633 
634 static __u8 seclevel_to_authreq(__u8 sec_level)
635 {
636         switch (sec_level) {
637         case BT_SECURITY_FIPS:
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 
647 static void build_pairing_cmd(struct l2cap_conn *conn,
648                               struct smp_cmd_pairing *req,
649                               struct smp_cmd_pairing *rsp, __u8 authreq)
650 {
651         struct l2cap_chan *chan = conn->smp;
652         struct smp_chan *smp = chan->data;
653         struct hci_conn *hcon = conn->hcon;
654         struct hci_dev *hdev = hcon->hdev;
655         u8 local_dist = 0, remote_dist = 0, oob_flag = SMP_OOB_NOT_PRESENT;
656 
657         if (hci_dev_test_flag(hdev, HCI_BONDABLE)) {
658                 local_dist = SMP_DIST_ENC_KEY | SMP_DIST_SIGN;
659                 remote_dist = SMP_DIST_ENC_KEY | SMP_DIST_SIGN;
660                 authreq |= SMP_AUTH_BONDING;
661         } else {
662                 authreq &= ~SMP_AUTH_BONDING;
663         }
664 
665         if (hci_dev_test_flag(hdev, HCI_RPA_RESOLVING))
666                 remote_dist |= SMP_DIST_ID_KEY;
667 
668         if (hci_dev_test_flag(hdev, HCI_PRIVACY))
669                 local_dist |= SMP_DIST_ID_KEY;
670 
671         if (hci_dev_test_flag(hdev, HCI_SC_ENABLED) &&
672             (authreq & SMP_AUTH_SC)) {
673                 struct oob_data *oob_data;
674                 u8 bdaddr_type;
675 
676                 if (hci_dev_test_flag(hdev, HCI_SSP_ENABLED)) {
677                         local_dist |= SMP_DIST_LINK_KEY;
678                         remote_dist |= SMP_DIST_LINK_KEY;
679                 }
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);
688                 if (oob_data && oob_data->present) {
689                         set_bit(SMP_FLAG_REMOTE_OOB, &smp->flags);
690                         oob_flag = SMP_OOB_PRESENT;
691                         memcpy(smp->rr, oob_data->rand256, 16);
692                         memcpy(smp->pcnf, oob_data->hash256, 16);
693                         SMP_DBG("OOB Remote Confirmation: %16phN", smp->pcnf);
694                         SMP_DBG("OOB Remote Random: %16phN", smp->rr);
695                 }
696 
697         } else {
698                 authreq &= ~SMP_AUTH_SC;
699         }
700 
701         if (rsp == NULL) {
702                 req->io_capability = conn->hcon->io_capability;
703                 req->oob_flag = oob_flag;
704                 req->max_key_size = hdev->le_max_key_size;
705                 req->init_key_dist = local_dist;
706                 req->resp_key_dist = remote_dist;
707                 req->auth_req = (authreq & AUTH_REQ_MASK(hdev));
708 
709                 smp->remote_key_dist = remote_dist;
710                 return;
711         }
712 
713         rsp->io_capability = conn->hcon->io_capability;
714         rsp->oob_flag = oob_flag;
715         rsp->max_key_size = hdev->le_max_key_size;
716         rsp->init_key_dist = req->init_key_dist & remote_dist;
717         rsp->resp_key_dist = req->resp_key_dist & local_dist;
718         rsp->auth_req = (authreq & AUTH_REQ_MASK(hdev));
719 
720         smp->remote_key_dist = rsp->init_key_dist;
721 }
722 
723 static u8 check_enc_key_size(struct l2cap_conn *conn, __u8 max_key_size)
724 {
725         struct l2cap_chan *chan = conn->smp;
726         struct hci_dev *hdev = conn->hcon->hdev;
727         struct smp_chan *smp = chan->data;
728 
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 
733         if (max_key_size > hdev->le_max_key_size ||
734             max_key_size < SMP_MIN_ENC_KEY_SIZE)
735                 return SMP_ENC_KEY_SIZE;
736 
737         smp->enc_key_size = max_key_size;
738 
739         return 0;
740 }
741 
742 static void smp_chan_destroy(struct l2cap_conn *conn)
743 {
744         struct l2cap_chan *chan = conn->smp;
745         struct smp_chan *smp = chan->data;
746         struct hci_conn *hcon = conn->hcon;
747         bool complete;
748 
749         BUG_ON(!smp);
750 
751         cancel_delayed_work_sync(&smp->security_timer);
752 
753         complete = test_bit(SMP_FLAG_COMPLETE, &smp->flags);
754         mgmt_smp_complete(hcon, complete);
755 
756         kfree_sensitive(smp->csrk);
757         kfree_sensitive(smp->responder_csrk);
758         kfree_sensitive(smp->link_key);
759 
760         crypto_free_shash(smp->tfm_cmac);
761         crypto_free_kpp(smp->tfm_ecdh);
762 
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 &&
767             !hci_dev_test_flag(hcon->hdev, HCI_KEEP_DEBUG_KEYS)) {
768                 list_del_rcu(&smp->ltk->list);
769                 kfree_rcu(smp->ltk, rcu);
770                 smp->ltk = NULL;
771         }
772 
773         /* If pairing failed clean up any keys we might have */
774         if (!complete) {
775                 if (smp->ltk) {
776                         list_del_rcu(&smp->ltk->list);
777                         kfree_rcu(smp->ltk, rcu);
778                 }
779 
780                 if (smp->responder_ltk) {
781                         list_del_rcu(&smp->responder_ltk->list);
782                         kfree_rcu(smp->responder_ltk, rcu);
783                 }
784 
785                 if (smp->remote_irk) {
786                         list_del_rcu(&smp->remote_irk->list);
787                         kfree_rcu(smp->remote_irk, rcu);
788                 }
789         }
790 
791         chan->data = NULL;
792         kfree_sensitive(smp);
793         hci_conn_drop(hcon);
794 }
795 
796 static void smp_failure(struct l2cap_conn *conn, u8 reason)
797 {
798         struct hci_conn *hcon = conn->hcon;
799         struct l2cap_chan *chan = conn->smp;
800 
801         if (reason)
802                 smp_send_cmd(conn, SMP_CMD_PAIRING_FAIL, sizeof(reason),
803                              &reason);
804 
805         mgmt_auth_failed(hcon, HCI_ERROR_AUTH_FAILURE);
806 
807         if (chan->data)
808                 smp_chan_destroy(conn);
809 }
810 
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
816 #define DSP_PASSKEY     0x05
817 #define OVERLAP         0xFF
818 
819 static 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 
827 static 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 
835 static u8 get_auth_method(struct smp_chan *smp, u8 local_io, u8 remote_io)
836 {
837         /* If either side has unknown io_caps, use JUST_CFM (which gets
838          * converted later to JUST_WORKS if we're initiators.
839          */
840         if (local_io > SMP_IO_KEYBOARD_DISPLAY ||
841             remote_io > SMP_IO_KEYBOARD_DISPLAY)
842                 return JUST_CFM;
843 
844         if (test_bit(SMP_FLAG_SC, &smp->flags))
845                 return sc_method[remote_io][local_io];
846 
847         return gen_method[remote_io][local_io];
848 }
849 
850 static 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;
854         struct l2cap_chan *chan = conn->smp;
855         struct smp_chan *smp = chan->data;
856         u32 passkey = 0;
857         int ret;
858 
859         /* Initialize key for JUST WORKS */
860         memset(smp->tk, 0, sizeof(smp->tk));
861         clear_bit(SMP_FLAG_TK_VALID, &smp->flags);
862 
863         bt_dev_dbg(hcon->hdev, "auth:%u lcl:%u rem:%u", auth, local_io,
864                    remote_io);
865 
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          */
872         if (!(auth & SMP_AUTH_MITM))
873                 smp->method = JUST_CFM;
874         else
875                 smp->method = get_auth_method(smp, local_io, remote_io);
876 
877         /* Don't confirm locally initiated pairing attempts */
878         if (smp->method == JUST_CFM && test_bit(SMP_FLAG_INITIATOR,
879                                                 &smp->flags))
880                 smp->method = JUST_WORKS;
881 
882         /* Don't bother user space with no IO capabilities */
883         if (smp->method == JUST_CFM &&
884             hcon->io_capability == HCI_IO_NO_INPUT_OUTPUT)
885                 smp->method = JUST_WORKS;
886 
887         /* If Just Works, Continue with Zero TK and ask user-space for
888          * confirmation */
889         if (smp->method == JUST_WORKS) {
890                 ret = mgmt_user_confirm_request(hcon->hdev, &hcon->dst,
891                                                 hcon->type,
892                                                 hcon->dst_type,
893                                                 passkey, 1);
894                 if (ret)
895                         return ret;
896                 set_bit(SMP_FLAG_WAIT_USER, &smp->flags);
897                 return 0;
898         }
899 
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 
906         /* Not Just Works/Confirm results in MITM Authentication */
907         if (smp->method != JUST_CFM) {
908                 set_bit(SMP_FLAG_MITM_AUTH, &smp->flags);
909                 if (hcon->pending_sec_level < BT_SECURITY_HIGH)
910                         hcon->pending_sec_level = BT_SECURITY_HIGH;
911         }
912 
913         /* If both devices have Keyboard-Display I/O, the initiator
914          * Confirms and the responder Enters the passkey.
915          */
916         if (smp->method == OVERLAP) {
917                 if (test_bit(SMP_FLAG_INITIATOR, &smp->flags))
918                         smp->method = CFM_PASSKEY;
919                 else
920                         smp->method = REQ_PASSKEY;
921         }
922 
923         /* Generate random passkey. */
924         if (smp->method == CFM_PASSKEY) {
925                 memset(smp->tk, 0, sizeof(smp->tk));
926                 get_random_bytes(&passkey, sizeof(passkey));
927                 passkey %= 1000000;
928                 put_unaligned_le32(passkey, smp->tk);
929                 bt_dev_dbg(hcon->hdev, "PassKey: %u", passkey);
930                 set_bit(SMP_FLAG_TK_VALID, &smp->flags);
931         }
932 
933         if (smp->method == REQ_PASSKEY)
934                 ret = mgmt_user_passkey_request(hcon->hdev, &hcon->dst,
935                                                 hcon->type, hcon->dst_type);
936         else if (smp->method == JUST_CFM)
937                 ret = mgmt_user_confirm_request(hcon->hdev, &hcon->dst,
938                                                 hcon->type, hcon->dst_type,
939                                                 passkey, 1);
940         else
941                 ret = mgmt_user_passkey_notify(hcon->hdev, &hcon->dst,
942                                                 hcon->type, hcon->dst_type,
943                                                 passkey, 0);
944 
945         return ret;
946 }
947 
948 static u8 smp_confirm(struct smp_chan *smp)
949 {
950         struct l2cap_conn *conn = smp->conn;
951         struct smp_cmd_pairing_confirm cp;
952         int ret;
953 
954         bt_dev_dbg(conn->hcon->hdev, "conn %p", conn);
955 
956         ret = smp_c1(smp->tk, smp->prnd, smp->preq, smp->prsp,
957                      conn->hcon->init_addr_type, &conn->hcon->init_addr,
958                      conn->hcon->resp_addr_type, &conn->hcon->resp_addr,
959                      cp.confirm_val);
960         if (ret)
961                 return SMP_UNSPECIFIED;
962 
963         clear_bit(SMP_FLAG_CFM_PENDING, &smp->flags);
964 
965         smp_send_cmd(smp->conn, SMP_CMD_PAIRING_CONFIRM, sizeof(cp), &cp);
966 
967         if (test_bit(SMP_FLAG_INITIATOR, &smp->flags))
968                 SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_CONFIRM);
969         else
970                 SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_RANDOM);
971 
972         return 0;
973 }
974 
975 static u8 smp_random(struct smp_chan *smp)
976 {
977         struct l2cap_conn *conn = smp->conn;
978         struct hci_conn *hcon = conn->hcon;
979         u8 confirm[16];
980         int ret;
981 
982         bt_dev_dbg(conn->hcon->hdev, "conn %p %s", conn,
983                    test_bit(SMP_FLAG_INITIATOR, &smp->flags) ? "initiator" :
984                    "responder");
985 
986         ret = smp_c1(smp->tk, smp->rrnd, smp->preq, smp->prsp,
987                      hcon->init_addr_type, &hcon->init_addr,
988                      hcon->resp_addr_type, &hcon->resp_addr, confirm);
989         if (ret)
990                 return SMP_UNSPECIFIED;
991 
992         if (crypto_memneq(smp->pcnf, confirm, sizeof(smp->pcnf))) {
993                 bt_dev_err(hcon->hdev, "pairing failed "
994                            "(confirmation values mismatch)");
995                 return SMP_CONFIRM_FAILED;
996         }
997 
998         if (test_bit(SMP_FLAG_INITIATOR, &smp->flags)) {
999                 u8 stk[16];
1000                 __le64 rand = 0;
1001                 __le16 ediv = 0;
1002 
1003                 smp_s1(smp->tk, smp->rrnd, smp->prnd, stk);
1004 
1005                 if (test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &hcon->flags))
1006                         return SMP_UNSPECIFIED;
1007 
1008                 hci_le_start_enc(hcon, ediv, rand, stk, smp->enc_key_size);
1009                 hcon->enc_key_size = smp->enc_key_size;
1010                 set_bit(HCI_CONN_STK_ENCRYPT, &hcon->flags);
1011         } else {
1012                 u8 stk[16], auth;
1013                 __le64 rand = 0;
1014                 __le16 ediv = 0;
1015 
1016                 smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM, sizeof(smp->prnd),
1017                              smp->prnd);
1018 
1019                 smp_s1(smp->tk, smp->prnd, smp->rrnd, stk);
1020 
1021                 if (hcon->pending_sec_level == BT_SECURITY_HIGH)
1022                         auth = 1;
1023                 else
1024                         auth = 0;
1025 
1026                 /* Even though there's no _RESPONDER suffix this is the
1027                  * responder STK we're adding for later lookup (the initiator
1028                  * STK never needs to be stored).
1029                  */
1030                 hci_add_ltk(hcon->hdev, &hcon->dst, hcon->dst_type,
1031                             SMP_STK, auth, stk, smp->enc_key_size, ediv, rand);
1032         }
1033 
1034         return 0;
1035 }
1036 
1037 static 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 
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 
1062         if (smp->remote_irk) {
1063                 mgmt_new_irk(hdev, smp->remote_irk, persistent);
1064 
1065                 /* Now that user space can be considered to know the
1066                  * identity address track the connection based on it
1067                  * from now on (assuming this is an LE link).
1068                  */
1069                 if (hcon->type == LE_LINK) {
1070                         bacpy(&hcon->dst, &smp->remote_irk->bdaddr);
1071                         hcon->dst_type = smp->remote_irk->addr_type;
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);
1078                 }
1079         }
1080 
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 
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);
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 
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);
1103         }
1104 
1105         if (smp->link_key) {
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                          */
1124                         if (!hci_dev_test_flag(hdev, HCI_KEEP_DEBUG_KEYS) &&
1125                             key->type == HCI_LK_DEBUG_COMBINATION) {
1126                                 list_del_rcu(&key->list);
1127                                 kfree_rcu(key, rcu);
1128                         }
1129                 }
1130         }
1131 }
1132 
1133 static 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 
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 
1153 static void sc_generate_link_key(struct smp_chan *smp)
1154 {
1155         /* From core spec. Spells out in ASCII as 'lebr'. */
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 
1162         if (test_bit(SMP_FLAG_CT2, &smp->flags)) {
1163                 /* SALT = 0x000000000000000000000000746D7031 */
1164                 const u8 salt[16] = { 0x31, 0x70, 0x6d, 0x74 };
1165 
1166                 if (smp_h7(smp->tfm_cmac, smp->tk, salt, smp->link_key)) {
1167                         kfree_sensitive(smp->link_key);
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)) {
1176                         kfree_sensitive(smp->link_key);
1177                         smp->link_key = NULL;
1178                         return;
1179                 }
1180         }
1181 
1182         if (smp_h6(smp->tfm_cmac, smp->link_key, lebr, smp->link_key)) {
1183                 kfree_sensitive(smp->link_key);
1184                 smp->link_key = NULL;
1185                 return;
1186         }
1187 }
1188 
1189 static 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 
1203 static void sc_generate_ltk(struct smp_chan *smp)
1204 {
1205         /* From core spec. Spells out in ASCII as 'brle'. */
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) {
1213                 bt_dev_err(hdev, "no Link Key found to generate LTK");
1214                 return;
1215         }
1216 
1217         if (key->type == HCI_LK_DEBUG_COMBINATION)
1218                 set_bit(SMP_FLAG_DEBUG_KEY, &smp->flags);
1219 
1220         if (test_bit(SMP_FLAG_CT2, &smp->flags)) {
1221                 /* SALT = 0x000000000000000000000000746D7032 */
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         }
1233 
1234         if (smp_h6(smp->tfm_cmac, smp->tk, brle, smp->tk))
1235                 return;
1236 
1237         sc_add_ltk(smp);
1238 }
1239 
1240 static void smp_distribute_keys(struct smp_chan *smp)
1241 {
1242         struct smp_cmd_pairing *req, *rsp;
1243         struct l2cap_conn *conn = smp->conn;
1244         struct hci_conn *hcon = conn->hcon;
1245         struct hci_dev *hdev = hcon->hdev;
1246         __u8 *keydist;
1247 
1248         bt_dev_dbg(hdev, "conn %p", conn);
1249 
1250         rsp = (void *) &smp->prsp[1];
1251 
1252         /* The responder sends its keys first */
1253         if (test_bit(SMP_FLAG_INITIATOR, &smp->flags) &&
1254             (smp->remote_key_dist & KEY_DIST_MASK)) {
1255                 smp_allow_key_dist(smp);
1256                 return;
1257         }
1258 
1259         req = (void *) &smp->preq[1];
1260 
1261         if (test_bit(SMP_FLAG_INITIATOR, &smp->flags)) {
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 
1269         if (test_bit(SMP_FLAG_SC, &smp->flags)) {
1270                 if (hcon->type == LE_LINK && (*keydist & SMP_DIST_LINK_KEY))
1271                         sc_generate_link_key(smp);
1272                 if (hcon->type == ACL_LINK && (*keydist & SMP_DIST_ENC_KEY))
1273                         sc_generate_ltk(smp);
1274 
1275                 /* Clear the keys which are generated but not distributed */
1276                 *keydist &= ~SMP_SC_NO_DIST;
1277         }
1278 
1279         bt_dev_dbg(hdev, "keydist 0x%x", *keydist);
1280 
1281         if (*keydist & SMP_DIST_ENC_KEY) {
1282                 struct smp_cmd_encrypt_info enc;
1283                 struct smp_cmd_initiator_ident ident;
1284                 struct smp_ltk *ltk;
1285                 u8 authenticated;
1286                 __le16 ediv;
1287                 __le64 rand;
1288 
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 
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,
1304                                   SMP_LTK_RESPONDER, authenticated, enc.ltk,
1305                                   smp->enc_key_size, ediv, rand);
1306                 smp->responder_ltk = ltk;
1307 
1308                 ident.ediv = ediv;
1309                 ident.rand = rand;
1310 
1311                 smp_send_cmd(conn, SMP_CMD_INITIATOR_IDENT, sizeof(ident),
1312                              &ident);
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) {
1349                         if (hcon->sec_level > BT_SECURITY_MEDIUM)
1350                                 csrk->type = MGMT_CSRK_LOCAL_AUTHENTICATED;
1351                         else
1352                                 csrk->type = MGMT_CSRK_LOCAL_UNAUTHENTICATED;
1353                         memcpy(csrk->val, sign.csrk, sizeof(csrk->val));
1354                 }
1355                 smp->responder_csrk = csrk;
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 */
1363         if (smp->remote_key_dist & KEY_DIST_MASK) {
1364                 smp_allow_key_dist(smp);
1365                 return;
1366         }
1367 
1368         set_bit(SMP_FLAG_COMPLETE, &smp->flags);
1369         smp_notify_keys(conn);
1370 
1371         smp_chan_destroy(conn);
1372 }
1373 
1374 static 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 
1380         bt_dev_dbg(conn->hcon->hdev, "conn %p", conn);
1381 
1382         hci_disconnect(conn->hcon, HCI_ERROR_REMOTE_USER_TERM);
1383 }
1384 
1385 static struct smp_chan *smp_chan_create(struct l2cap_conn *conn)
1386 {
1387         struct hci_conn *hcon = conn->hcon;
1388         struct l2cap_chan *chan = conn->smp;
1389         struct smp_chan *smp;
1390 
1391         smp = kzalloc(sizeof(*smp), GFP_ATOMIC);
1392         if (!smp)
1393                 return NULL;
1394 
1395         smp->tfm_cmac = crypto_alloc_shash("cmac(aes)", 0, 0);
1396         if (IS_ERR(smp->tfm_cmac)) {
1397                 bt_dev_err(hcon->hdev, "Unable to create CMAC crypto context");
1398                 goto zfree_smp;
1399         }
1400 
1401         smp->tfm_ecdh = crypto_alloc_kpp("ecdh-nist-p256", 0, 0);
1402         if (IS_ERR(smp->tfm_ecdh)) {
1403                 bt_dev_err(hcon->hdev, "Unable to create ECDH crypto context");
1404                 goto free_shash;
1405         }
1406 
1407         smp->conn = conn;
1408         chan->data = smp;
1409 
1410         SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_FAIL);
1411 
1412         INIT_DELAYED_WORK(&smp->security_timer, smp_timeout);
1413 
1414         hci_conn_hold(hcon);
1415 
1416         return smp;
1417 
1418 free_shash:
1419         crypto_free_shash(smp->tfm_cmac);
1420 zfree_smp:
1421         kfree_sensitive(smp);
1422         return NULL;
1423 }
1424 
1425 static 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 
1430         if (test_bit(SMP_FLAG_INITIATOR, &smp->flags)) {
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 
1446 static void sc_dhkey_check(struct smp_chan *smp)
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 
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 
1458         if (test_bit(SMP_FLAG_INITIATOR, &smp->flags)) {
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 
1468         memset(r, 0, sizeof(r));
1469 
1470         if (smp->method == REQ_PASSKEY || smp->method == DSP_PASSKEY)
1471                 put_unaligned_le32(hcon->passkey_notify, r);
1472 
1473         if (smp->method == REQ_OOB)
1474                 memcpy(r, smp->rr, 16);
1475 
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);
1480 }
1481 
1482 static 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 
1503 static 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 
1523                 if (crypto_memneq(smp->pcnf, cfm, 16))
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                  */
1537                 if (!test_bit(SMP_FLAG_INITIATOR, &smp->flags)) {
1538                         smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM,
1539                                      sizeof(smp->prnd), smp->prnd);
1540                         if (smp->passkey_round == 20)
1541                                 SMP_ALLOW_CMD(smp, SMP_CMD_DHKEY_CHECK);
1542                         else
1543                                 SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_CONFIRM);
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 
1565                 if (test_bit(SMP_FLAG_INITIATOR, &smp->flags)) {
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 */
1576                 if (!test_bit(SMP_FLAG_INITIATOR, &smp->flags))
1577                         return 0;
1578 
1579                 bt_dev_dbg(hdev, "Starting passkey round %u",
1580                            smp->passkey_round + 1);
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 
1590 static int sc_user_reply(struct smp_chan *smp, u16 mgmt_op, __le32 passkey)
1591 {
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 
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;
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;
1618         }
1619 
1620         /* Initiator sends DHKey check first */
1621         if (test_bit(SMP_FLAG_INITIATOR, &smp->flags)) {
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         }
1628 
1629         return 0;
1630 }
1631 
1632 int smp_user_confirm_reply(struct hci_conn *hcon, u16 mgmt_op, __le32 passkey)
1633 {
1634         struct l2cap_conn *conn = hcon->l2cap_data;
1635         struct l2cap_chan *chan;
1636         struct smp_chan *smp;
1637         u32 value;
1638         int err;
1639 
1640         if (!conn)
1641                 return -ENOTCONN;
1642 
1643         bt_dev_dbg(conn->hcon->hdev, "");
1644 
1645         chan = conn->smp;
1646         if (!chan)
1647                 return -ENOTCONN;
1648 
1649         l2cap_chan_lock(chan);
1650         if (!chan->data) {
1651                 err = -ENOTCONN;
1652                 goto unlock;
1653         }
1654 
1655         smp = chan->data;
1656 
1657         if (test_bit(SMP_FLAG_SC, &smp->flags)) {
1658                 err = sc_user_reply(smp, mgmt_op, passkey);
1659                 goto unlock;
1660         }
1661 
1662         switch (mgmt_op) {
1663         case MGMT_OP_USER_PASSKEY_REPLY:
1664                 value = le32_to_cpu(passkey);
1665                 memset(smp->tk, 0, sizeof(smp->tk));
1666                 bt_dev_dbg(conn->hcon->hdev, "PassKey: %u", value);
1667                 put_unaligned_le32(value, smp->tk);
1668                 fallthrough;
1669         case MGMT_OP_USER_CONFIRM_REPLY:
1670                 set_bit(SMP_FLAG_TK_VALID, &smp->flags);
1671                 break;
1672         case MGMT_OP_USER_PASSKEY_NEG_REPLY:
1673         case MGMT_OP_USER_CONFIRM_NEG_REPLY:
1674                 smp_failure(conn, SMP_PASSKEY_ENTRY_FAILED);
1675                 err = 0;
1676                 goto unlock;
1677         default:
1678                 smp_failure(conn, SMP_PASSKEY_ENTRY_FAILED);
1679                 err = -EOPNOTSUPP;
1680                 goto unlock;
1681         }
1682 
1683         err = 0;
1684 
1685         /* If it is our turn to send Pairing Confirm, do so now */
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         }
1691 
1692 unlock:
1693         l2cap_chan_unlock(chan);
1694         return err;
1695 }
1696 
1697 static 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 
1705         if (hci_dev_test_flag(hdev, HCI_BONDABLE)) {
1706                 local_dist = SMP_DIST_ENC_KEY | SMP_DIST_SIGN;
1707                 remote_dist = SMP_DIST_ENC_KEY | SMP_DIST_SIGN;
1708         }
1709 
1710         if (hci_dev_test_flag(hdev, HCI_RPA_RESOLVING))
1711                 remote_dist |= SMP_DIST_ID_KEY;
1712 
1713         if (hci_dev_test_flag(hdev, HCI_PRIVACY))
1714                 local_dist |= SMP_DIST_ID_KEY;
1715 
1716         if (!rsp) {
1717                 memset(req, 0, sizeof(*req));
1718 
1719                 req->auth_req        = SMP_AUTH_CT2;
1720                 req->init_key_dist   = local_dist;
1721                 req->resp_key_dist   = remote_dist;
1722                 req->max_key_size    = conn->hcon->enc_key_size;
1723 
1724                 smp->remote_key_dist = remote_dist;
1725 
1726                 return;
1727         }
1728 
1729         memset(rsp, 0, sizeof(*rsp));
1730 
1731         rsp->auth_req        = SMP_AUTH_CT2;
1732         rsp->max_key_size    = conn->hcon->enc_key_size;
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 
1739 static u8 smp_cmd_pairing_req(struct l2cap_conn *conn, struct sk_buff *skb)
1740 {
1741         struct smp_cmd_pairing rsp, *req = (void *) skb->data;
1742         struct l2cap_chan *chan = conn->smp;
1743         struct hci_dev *hdev = conn->hcon->hdev;
1744         struct smp_chan *smp = chan->data;
1745         u8 key_size, auth, sec_level;
1746         int ret;
1747 
1748         bt_dev_dbg(hdev, "conn %p", conn);
1749 
1750         if (skb->len < sizeof(*req))
1751                 return SMP_INVALID_PARAMS;
1752 
1753         if (smp && test_bit(SMP_FLAG_INITIATOR, &smp->flags))
1754                 return SMP_CMD_NOTSUPP;
1755 
1756         if (!smp) {
1757                 smp = smp_chan_create(conn);
1758                 if (!smp)
1759                         return SMP_UNSPECIFIED;
1760         }
1761 
1762         /* We didn't start the pairing, so match remote */
1763         auth = req->auth_req & AUTH_REQ_MASK(hdev);
1764 
1765         if (!hci_dev_test_flag(hdev, HCI_BONDABLE) &&
1766             (auth & SMP_AUTH_BONDING))
1767                 return SMP_PAIRING_NOTSUPP;
1768 
1769         if (hci_dev_test_flag(hdev, HCI_SC_ONLY) && !(auth & SMP_AUTH_SC))
1770                 return SMP_AUTH_REQUIREMENTS;
1771 
1772         smp->preq[0] = SMP_CMD_PAIRING_REQ;
1773         memcpy(&smp->preq[1], req, sizeof(*req));
1774         skb_pull(skb, sizeof(*req));
1775 
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          */
1780         if (req->oob_flag == SMP_OOB_PRESENT && SMP_DEV(hdev)->local_oob)
1781                 set_bit(SMP_FLAG_LOCAL_OOB, &smp->flags);
1782 
1783         /* SMP over BR/EDR requires special treatment */
1784         if (conn->hcon->type == ACL_LINK) {
1785                 /* We must have a BR/EDR SC link */
1786                 if (!test_bit(HCI_CONN_AES_CCM, &conn->hcon->flags) &&
1787                     !hci_dev_test_flag(hdev, HCI_FORCE_BREDR_SMP))
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 
1794                 if (req->auth_req & SMP_AUTH_CT2)
1795                         set_bit(SMP_FLAG_CT2, &smp->flags);
1796 
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 
1812         build_pairing_cmd(conn, req, &rsp, auth);
1813 
1814         if (rsp.auth_req & SMP_AUTH_SC) {
1815                 set_bit(SMP_FLAG_SC, &smp->flags);
1816 
1817                 if (rsp.auth_req & SMP_AUTH_CT2)
1818                         set_bit(SMP_FLAG_CT2, &smp->flags);
1819         }
1820 
1821         if (conn->hcon->io_capability == HCI_IO_NO_INPUT_OUTPUT)
1822                 sec_level = BT_SECURITY_MEDIUM;
1823         else
1824                 sec_level = authreq_to_seclevel(auth);
1825 
1826         if (sec_level > conn->hcon->pending_sec_level)
1827                 conn->hcon->pending_sec_level = sec_level;
1828 
1829         /* If we need MITM check that it can be achieved */
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 
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;
1842 
1843         get_random_bytes(smp->prnd, sizeof(smp->prnd));
1844 
1845         smp->prsp[0] = SMP_CMD_PAIRING_RSP;
1846         memcpy(&smp->prsp[1], &rsp, sizeof(rsp));
1847 
1848         smp_send_cmd(conn, SMP_CMD_PAIRING_RSP, sizeof(rsp), &rsp);
1849 
1850         clear_bit(SMP_FLAG_INITIATOR, &smp->flags);
1851 
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 
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;
1865         }
1866 
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 
1872         return 0;
1873 }
1874 
1875 static u8 sc_send_public_key(struct smp_chan *smp)
1876 {
1877         struct hci_dev *hdev = smp->conn->hcon->hdev;
1878 
1879         bt_dev_dbg(hdev, "");
1880 
1881         if (test_bit(SMP_FLAG_LOCAL_OOB, &smp->flags)) {
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);
1891                 memcpy(smp->lr, smp_dev->local_rand, 16);
1892 
1893                 if (smp_dev->debug_key)
1894                         set_bit(SMP_FLAG_DEBUG_KEY, &smp->flags);
1895 
1896                 goto done;
1897         }
1898 
1899         if (hci_dev_test_flag(hdev, HCI_USE_DEBUG_KEYS)) {
1900                 bt_dev_dbg(hdev, "Using debug keys");
1901                 if (set_ecdh_privkey(smp->tfm_ecdh, debug_sk))
1902                         return SMP_UNSPECIFIED;
1903                 memcpy(smp->local_pk, debug_pk, 64);
1904                 set_bit(SMP_FLAG_DEBUG_KEY, &smp->flags);
1905         } else {
1906                 while (true) {
1907                         /* Generate key pair for Secure Connections */
1908                         if (generate_ecdh_keys(smp->tfm_ecdh, smp->local_pk))
1909                                 return SMP_UNSPECIFIED;
1910 
1911                         /* This is unlikely, but we need to check that
1912                          * we didn't accidentally generate a debug key.
1913                          */
1914                         if (crypto_memneq(smp->local_pk, debug_pk, 64))
1915                                 break;
1916                 }
1917         }
1918 
1919 done:
1920         SMP_DBG("Local Public Key X: %32phN", smp->local_pk);
1921         SMP_DBG("Local Public Key Y: %32phN", smp->local_pk + 32);
1922 
1923         smp_send_cmd(smp->conn, SMP_CMD_PUBLIC_KEY, 64, smp->local_pk);
1924 
1925         return 0;
1926 }
1927 
1928 static u8 smp_cmd_pairing_rsp(struct l2cap_conn *conn, struct sk_buff *skb)
1929 {
1930         struct smp_cmd_pairing *req, *rsp = (void *) skb->data;
1931         struct l2cap_chan *chan = conn->smp;
1932         struct smp_chan *smp = chan->data;
1933         struct hci_dev *hdev = conn->hcon->hdev;
1934         u8 key_size, auth;
1935         int ret;
1936 
1937         bt_dev_dbg(hdev, "conn %p", conn);
1938 
1939         if (skb->len < sizeof(*rsp))
1940                 return SMP_INVALID_PARAMS;
1941 
1942         if (!test_bit(SMP_FLAG_INITIATOR, &smp->flags))
1943                 return SMP_CMD_NOTSUPP;
1944 
1945         skb_pull(skb, sizeof(*rsp));
1946 
1947         req = (void *) &smp->preq[1];
1948 
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 
1953         auth = rsp->auth_req & AUTH_REQ_MASK(hdev);
1954 
1955         if (hci_dev_test_flag(hdev, HCI_SC_ONLY) && !(auth & SMP_AUTH_SC))
1956                 return SMP_AUTH_REQUIREMENTS;
1957 
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          */
1962         if (rsp->oob_flag == SMP_OOB_PRESENT && SMP_DEV(hdev)->local_oob)
1963                 set_bit(SMP_FLAG_LOCAL_OOB, &smp->flags);
1964 
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 
1973         if ((req->auth_req & SMP_AUTH_CT2) && (auth & SMP_AUTH_CT2))
1974                 set_bit(SMP_FLAG_CT2, &smp->flags);
1975 
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 
1984         if ((req->auth_req & SMP_AUTH_SC) && (auth & SMP_AUTH_SC))
1985                 set_bit(SMP_FLAG_SC, &smp->flags);
1986         else if (conn->hcon->pending_sec_level > BT_SECURITY_HIGH)
1987                 conn->hcon->pending_sec_level = BT_SECURITY_HIGH;
1988 
1989         /* If we need MITM check that it can be achieved */
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 
1999         get_random_bytes(smp->prnd, sizeof(smp->prnd));
2000 
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 
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 
2013         auth |= req->auth_req;
2014 
2015         ret = tk_request(conn, 0, auth, req->io_capability, rsp->io_capability);
2016         if (ret)
2017                 return SMP_UNSPECIFIED;
2018 
2019         set_bit(SMP_FLAG_CFM_PENDING, &smp->flags);
2020 
2021         /* Can't compose response until we have been confirmed */
2022         if (test_bit(SMP_FLAG_TK_VALID, &smp->flags))
2023                 return smp_confirm(smp);
2024 
2025         return 0;
2026 }
2027 
2028 static u8 sc_check_confirm(struct smp_chan *smp)
2029 {
2030         struct l2cap_conn *conn = smp->conn;
2031 
2032         bt_dev_dbg(conn->hcon->hdev, "");
2033 
2034         if (smp->method == REQ_PASSKEY || smp->method == DSP_PASSKEY)
2035                 return sc_passkey_round(smp, SMP_CMD_PAIRING_CONFIRM);
2036 
2037         if (test_bit(SMP_FLAG_INITIATOR, &smp->flags)) {
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 
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  */
2050 static 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 
2058         /* The issue is only observed when we're in responder role */
2059         if (test_bit(SMP_FLAG_INITIATOR, &smp->flags))
2060                 return SMP_UNSPECIFIED;
2061 
2062         if (hci_dev_test_flag(hdev, HCI_SC_ONLY)) {
2063                 bt_dev_err(hdev, "refusing legacy fallback in SC-only mode");
2064                 return SMP_UNSPECIFIED;
2065         }
2066 
2067         bt_dev_err(hdev, "trying to fall back to legacy SMP");
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)) {
2078                 bt_dev_err(hdev, "failed to fall back to legacy SMP");
2079                 return SMP_UNSPECIFIED;
2080         }
2081 
2082         clear_bit(SMP_FLAG_SC, &smp->flags);
2083 
2084         return 0;
2085 }
2086 
2087 static u8 smp_cmd_pairing_confirm(struct l2cap_conn *conn, struct sk_buff *skb)
2088 {
2089         struct l2cap_chan *chan = conn->smp;
2090         struct smp_chan *smp = chan->data;
2091         struct hci_conn *hcon = conn->hcon;
2092         struct hci_dev *hdev = hcon->hdev;
2093 
2094         bt_dev_dbg(hdev, "conn %p %s", conn,
2095                    test_bit(SMP_FLAG_INITIATOR, &smp->flags) ? "initiator" :
2096                    "responder");
2097 
2098         if (skb->len < sizeof(smp->pcnf))
2099                 return SMP_INVALID_PARAMS;
2100 
2101         memcpy(smp->pcnf, skb->data, sizeof(smp->pcnf));
2102         skb_pull(skb, sizeof(smp->pcnf));
2103 
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 
2111                 bt_dev_err(hdev, "Unexpected SMP Pairing Confirm");
2112 
2113                 ret = fixup_sc_false_positive(smp);
2114                 if (ret)
2115                         return ret;
2116         }
2117 
2118         if (test_bit(SMP_FLAG_INITIATOR, &smp->flags)) {
2119                 smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM, sizeof(smp->prnd),
2120                              smp->prnd);
2121                 SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_RANDOM);
2122                 return 0;
2123         }
2124 
2125         if (test_bit(SMP_FLAG_TK_VALID, &smp->flags))
2126                 return smp_confirm(smp);
2127 
2128         set_bit(SMP_FLAG_CFM_PENDING, &smp->flags);
2129 
2130         return 0;
2131 }
2132 
2133 static u8 smp_cmd_pairing_random(struct l2cap_conn *conn, struct sk_buff *skb)
2134 {
2135         struct l2cap_chan *chan = conn->smp;
2136         struct smp_chan *smp = chan->data;
2137         struct hci_conn *hcon = conn->hcon;
2138         u8 *pkax, *pkbx, *na, *nb, confirm_hint;
2139         u32 passkey;
2140         int err;
2141 
2142         bt_dev_dbg(hcon->hdev, "conn %p", conn);
2143 
2144         if (skb->len < sizeof(smp->rrnd))
2145                 return SMP_INVALID_PARAMS;
2146 
2147         memcpy(smp->rrnd, skb->data, sizeof(smp->rrnd));
2148         skb_pull(skb, sizeof(smp->rrnd));
2149 
2150         if (!test_bit(SMP_FLAG_SC, &smp->flags))
2151                 return smp_random(smp);
2152 
2153         if (test_bit(SMP_FLAG_INITIATOR, &smp->flags)) {
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 
2165         if (smp->method == REQ_OOB) {
2166                 if (!test_bit(SMP_FLAG_INITIATOR, &smp->flags))
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 
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 
2177         if (test_bit(SMP_FLAG_INITIATOR, &smp->flags)) {
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 
2185                 if (crypto_memneq(smp->pcnf, cfm, 16))
2186                         return SMP_CONFIRM_FAILED;
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);
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)) {
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;
2208                 }
2209         }
2210 
2211 mackey_and_ltk:
2212         /* Generate MacKey and LTK */
2213         err = sc_mackey_and_ltk(smp, smp->mackey, smp->tk);
2214         if (err)
2215                 return SMP_UNSPECIFIED;
2216 
2217         if (smp->method == REQ_OOB) {
2218                 if (test_bit(SMP_FLAG_INITIATOR, &smp->flags)) {
2219                         sc_dhkey_check(smp);
2220                         SMP_ALLOW_CMD(smp, SMP_CMD_DHKEY_CHECK);
2221                 }
2222                 return 0;
2223         }
2224 
2225         err = smp_g2(smp->tfm_cmac, pkax, pkbx, na, nb, &passkey);
2226         if (err)
2227                 return SMP_UNSPECIFIED;
2228 
2229         confirm_hint = 0;
2230 
2231 confirm:
2232         if (smp->method == JUST_WORKS)
2233                 confirm_hint = 1;
2234 
2235         err = mgmt_user_confirm_request(hcon->hdev, &hcon->dst, hcon->type,
2236                                         hcon->dst_type, passkey, confirm_hint);
2237         if (err)
2238                 return SMP_UNSPECIFIED;
2239 
2240         set_bit(SMP_FLAG_WAIT_USER, &smp->flags);
2241 
2242         return 0;
2243 }
2244 
2245 static bool smp_ltk_encrypt(struct l2cap_conn *conn, u8 sec_level)
2246 {
2247         struct smp_ltk *key;
2248         struct hci_conn *hcon = conn->hcon;
2249 
2250         key = hci_find_ltk(hcon->hdev, &hcon->dst, hcon->dst_type, hcon->role);
2251         if (!key)
2252                 return false;
2253 
2254         if (smp_ltk_sec_level(key) < sec_level)
2255                 return false;
2256 
2257         if (test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &hcon->flags))
2258                 return true;
2259 
2260         hci_le_start_enc(hcon, key->ediv, key->rand, key->val, key->enc_size);
2261         hcon->enc_key_size = key->enc_size;
2262 
2263         /* We never store STKs for initiator role, so clear this flag */
2264         clear_bit(HCI_CONN_STK_ENCRYPT, &hcon->flags);
2265 
2266         return true;
2267 }
2268 
2269 bool smp_sufficient_security(struct hci_conn *hcon, u8 sec_level,
2270                              enum smp_key_pref key_pref)
2271 {
2272         if (sec_level == BT_SECURITY_LOW)
2273                 return true;
2274 
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).
2280          */
2281         if (key_pref == SMP_USE_LTK &&
2282             test_bit(HCI_CONN_STK_ENCRYPT, &hcon->flags) &&
2283             hci_find_ltk(hcon->hdev, &hcon->dst, hcon->dst_type, hcon->role))
2284                 return false;
2285 
2286         if (hcon->sec_level >= sec_level)
2287                 return true;
2288 
2289         return false;
2290 }
2291 
2292 static 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 
2310 static u8 smp_cmd_security_req(struct l2cap_conn *conn, struct sk_buff *skb)
2311 {
2312         struct smp_cmd_security_req *rp = (void *) skb->data;
2313         struct hci_conn *hcon = conn->hcon;
2314         struct hci_dev *hdev = hcon->hdev;
2315         struct smp_chan *smp;
2316         u8 sec_level, auth;
2317 
2318         bt_dev_dbg(hdev, "conn %p", conn);
2319 
2320         if (skb->len < sizeof(*rp))
2321                 return SMP_INVALID_PARAMS;
2322 
2323         if (hcon->role != HCI_ROLE_MASTER)
2324                 return SMP_CMD_NOTSUPP;
2325 
2326         auth = rp->auth_req & AUTH_REQ_MASK(hdev);
2327 
2328         if (hci_dev_test_flag(hdev, HCI_SC_ONLY) && !(auth & SMP_AUTH_SC))
2329                 return SMP_AUTH_REQUIREMENTS;
2330 
2331         if (hcon->io_capability == HCI_IO_NO_INPUT_OUTPUT)
2332                 sec_level = BT_SECURITY_MEDIUM;
2333         else
2334                 sec_level = authreq_to_seclevel(auth);
2335 
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);
2342                 return 0;
2343         }
2344 
2345         if (sec_level > hcon->pending_sec_level)
2346                 hcon->pending_sec_level = sec_level;
2347 
2348         if (smp_ltk_encrypt(conn, hcon->pending_sec_level))
2349                 return 0;
2350 
2351         smp = smp_chan_create(conn);
2352         if (!smp)
2353                 return SMP_UNSPECIFIED;
2354 
2355         if (!hci_dev_test_flag(hdev, HCI_BONDABLE) &&
2356             (auth & SMP_AUTH_BONDING))
2357                 return SMP_PAIRING_NOTSUPP;
2358 
2359         skb_pull(skb, sizeof(*rp));
2360 
2361         smp_send_pairing_req(smp, auth);
2362 
2363         return 0;
2364 }
2365 
2366 static void smp_send_security_req(struct smp_chan *smp, __u8 auth)
2367 {
2368         struct smp_cmd_security_req cp;
2369 
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);
2375 }
2376 
2377 int smp_conn_security(struct hci_conn *hcon, __u8 sec_level)
2378 {
2379         struct l2cap_conn *conn = hcon->l2cap_data;
2380         struct l2cap_chan *chan;
2381         struct smp_chan *smp;
2382         __u8 authreq;
2383         int ret;
2384 
2385         bt_dev_dbg(hcon->hdev, "conn %p hcon %p level 0x%2.2x", conn, hcon,
2386                    sec_level);
2387 
2388         /* This may be NULL if there's an unexpected disconnection */
2389         if (!conn)
2390                 return 1;
2391 
2392         if (!hci_dev_test_flag(hcon->hdev, HCI_LE_ENABLED))
2393                 return 1;
2394 
2395         if (smp_sufficient_security(hcon, sec_level, SMP_USE_LTK))
2396                 return 1;
2397 
2398         if (sec_level > hcon->pending_sec_level)
2399                 hcon->pending_sec_level = sec_level;
2400 
2401         if (hcon->role == HCI_ROLE_MASTER)
2402                 if (smp_ltk_encrypt(conn, hcon->pending_sec_level))
2403                         return 0;
2404 
2405         chan = conn->smp;
2406         if (!chan) {
2407                 bt_dev_err(hcon->hdev, "security requested but not available");
2408                 return 1;
2409         }
2410 
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         }
2418 
2419         smp = smp_chan_create(conn);
2420         if (!smp) {
2421                 ret = 1;
2422                 goto unlock;
2423         }
2424 
2425         authreq = seclevel_to_authreq(sec_level);
2426 
2427         if (hci_dev_test_flag(hcon->hdev, HCI_SC_ENABLED)) {
2428                 authreq |= SMP_AUTH_SC;
2429                 if (hci_dev_test_flag(hcon->hdev, HCI_SSP_ENABLED))
2430                         authreq |= SMP_AUTH_CT2;
2431         }
2432 
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
2435          */
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         }
2444 
2445         if (hcon->role == HCI_ROLE_MASTER)
2446                 smp_send_pairing_req(smp, authreq);
2447         else
2448                 smp_send_security_req(smp, authreq);
2449 
2450         ret = 0;
2451 
2452 unlock:
2453         l2cap_chan_unlock(chan);
2454         return ret;
2455 }
2456 
2457 int smp_cancel_and_remove_pairing(struct hci_dev *hdev, bdaddr_t *bdaddr,
2458                                   u8 addr_type)
2459 {
2460         struct hci_conn *hcon;
2461         struct l2cap_conn *conn;
2462         struct l2cap_chan *chan;
2463         struct smp_chan *smp;
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;
2472 
2473         conn = hcon->l2cap_data;
2474         if (!conn)
2475                 goto done;
2476 
2477         chan = conn->smp;
2478         if (!chan)
2479                 goto done;
2480 
2481         l2cap_chan_lock(chan);
2482 
2483         smp = chan->data;
2484         if (smp) {
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;
2488                 smp->responder_ltk = NULL;
2489                 smp->remote_irk = NULL;
2490 
2491                 if (test_bit(SMP_FLAG_COMPLETE, &smp->flags))
2492                         smp_failure(conn, 0);
2493                 else
2494                         smp_failure(conn, SMP_UNSPECIFIED);
2495                 err = 0;
2496         }
2497 
2498         l2cap_chan_unlock(chan);
2499 
2500 done:
2501         return err;
2502 }
2503 
2504 static int smp_cmd_encrypt_info(struct l2cap_conn *conn, struct sk_buff *skb)
2505 {
2506         struct smp_cmd_encrypt_info *rp = (void *) skb->data;
2507         struct l2cap_chan *chan = conn->smp;
2508         struct smp_chan *smp = chan->data;
2509 
2510         bt_dev_dbg(conn->hcon->hdev, "conn %p", conn);
2511 
2512         if (skb->len < sizeof(*rp))
2513                 return SMP_INVALID_PARAMS;
2514 
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 
2524         SMP_ALLOW_CMD(smp, SMP_CMD_INITIATOR_IDENT);
2525 
2526         skb_pull(skb, sizeof(*rp));
2527 
2528         memcpy(smp->tk, rp->ltk, sizeof(smp->tk));
2529 
2530         return 0;
2531 }
2532 
2533 static int smp_cmd_initiator_ident(struct l2cap_conn *conn, struct sk_buff *skb)
2534 {
2535         struct smp_cmd_initiator_ident *rp = (void *)skb->data;
2536         struct l2cap_chan *chan = conn->smp;
2537         struct smp_chan *smp = chan->data;
2538         struct hci_dev *hdev = conn->hcon->hdev;
2539         struct hci_conn *hcon = conn->hcon;
2540         struct smp_ltk *ltk;
2541         u8 authenticated;
2542 
2543         bt_dev_dbg(hdev, "conn %p", conn);
2544 
2545         if (skb->len < sizeof(*rp))
2546                 return SMP_INVALID_PARAMS;
2547 
2548         /* Mark the information as received */
2549         smp->remote_key_dist &= ~SMP_DIST_ENC_KEY;
2550 
2551         if (smp->remote_key_dist & SMP_DIST_ID_KEY)
2552                 SMP_ALLOW_CMD(smp, SMP_CMD_IDENT_INFO);
2553         else if (smp->remote_key_dist & SMP_DIST_SIGN)
2554                 SMP_ALLOW_CMD(smp, SMP_CMD_SIGN_INFO);
2555 
2556         skb_pull(skb, sizeof(*rp));
2557 
2558         authenticated = (hcon->sec_level == BT_SECURITY_HIGH);
2559         ltk = hci_add_ltk(hdev, &hcon->dst, hcon->dst_type, SMP_LTK,
2560                           authenticated, smp->tk, smp->enc_key_size,
2561                           rp->ediv, rp->rand);
2562         smp->ltk = ltk;
2563         if (!(smp->remote_key_dist & KEY_DIST_MASK))
2564                 smp_distribute_keys(smp);
2565 
2566         return 0;
2567 }
2568 
2569 static int smp_cmd_ident_info(struct l2cap_conn *conn, struct sk_buff *skb)
2570 {
2571         struct smp_cmd_ident_info *info = (void *) skb->data;
2572         struct l2cap_chan *chan = conn->smp;
2573         struct smp_chan *smp = chan->data;
2574 
2575         bt_dev_dbg(conn->hcon->hdev, "");
2576 
2577         if (skb->len < sizeof(*info))
2578                 return SMP_INVALID_PARAMS;
2579 
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 
2589         SMP_ALLOW_CMD(smp, SMP_CMD_IDENT_ADDR_INFO);
2590 
2591         skb_pull(skb, sizeof(*info));
2592 
2593         memcpy(smp->irk, info->irk, 16);
2594 
2595         return 0;
2596 }
2597 
2598 static 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;
2602         struct l2cap_chan *chan = conn->smp;
2603         struct smp_chan *smp = chan->data;
2604         struct hci_conn *hcon = conn->hcon;
2605         bdaddr_t rpa;
2606 
2607         bt_dev_dbg(hcon->hdev, "");
2608 
2609         if (skb->len < sizeof(*info))
2610                 return SMP_INVALID_PARAMS;
2611 
2612         /* Mark the information as received */
2613         smp->remote_key_dist &= ~SMP_DIST_ID_KEY;
2614 
2615         if (smp->remote_key_dist & SMP_DIST_SIGN)
2616                 SMP_ALLOW_CMD(smp, SMP_CMD_SIGN_INFO);
2617 
2618         skb_pull(skb, sizeof(*info));
2619 
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.
2626          *
2627          * The Identity Address must also be a Static Random or Public
2628          * Address, which hci_is_identity_address() checks for.
2629          */
2630         if (!bacmp(&info->bdaddr, BDADDR_ANY) ||
2631             !hci_is_identity_address(&info->bdaddr, info->addr_type)) {
2632                 bt_dev_err(hcon->hdev, "ignoring IRK with no identity address");
2633                 goto distribute;
2634         }
2635 
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 
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 
2657         smp->remote_irk = hci_add_irk(conn->hcon->hdev, &smp->id_addr,
2658                                       smp->id_addr_type, smp->irk, &rpa);
2659 
2660 distribute:
2661         if (!(smp->remote_key_dist & KEY_DIST_MASK))
2662                 smp_distribute_keys(smp);
2663 
2664         return 0;
2665 }
2666 
2667 static int smp_cmd_sign_info(struct l2cap_conn *conn, struct sk_buff *skb)
2668 {
2669         struct smp_cmd_sign_info *rp = (void *) skb->data;
2670         struct l2cap_chan *chan = conn->smp;
2671         struct smp_chan *smp = chan->data;
2672         struct smp_csrk *csrk;
2673 
2674         bt_dev_dbg(conn->hcon->hdev, "conn %p", conn);
2675 
2676         if (skb->len < sizeof(*rp))
2677                 return SMP_INVALID_PARAMS;
2678 
2679         /* Mark the information as received */
2680         smp->remote_key_dist &= ~SMP_DIST_SIGN;
2681 
2682         skb_pull(skb, sizeof(*rp));
2683 
2684         csrk = kzalloc(sizeof(*csrk), GFP_KERNEL);
2685         if (csrk) {
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;
2690                 memcpy(csrk->val, rp->csrk, sizeof(csrk->val));
2691         }
2692         smp->csrk = csrk;
2693         smp_distribute_keys(smp);
2694 
2695         return 0;
2696 }
2697 
2698 static u8 sc_select_method(struct smp_chan *smp)
2699 {
2700         struct smp_cmd_pairing *local, *remote;
2701         u8 local_mitm, remote_mitm, local_io, remote_io, method;
2702 
2703         if (test_bit(SMP_FLAG_REMOTE_OOB, &smp->flags) ||
2704             test_bit(SMP_FLAG_LOCAL_OOB, &smp->flags))
2705                 return REQ_OOB;
2706 
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          */
2712         if (test_bit(SMP_FLAG_INITIATOR, &smp->flags)) {
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 
2741 static 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;
2747         struct hci_dev *hdev = hcon->hdev;
2748         struct crypto_kpp *tfm_ecdh;
2749         struct smp_cmd_pairing_confirm cfm;
2750         int err;
2751 
2752         bt_dev_dbg(hdev, "conn %p", conn);
2753 
2754         if (skb->len < sizeof(*key))
2755                 return SMP_INVALID_PARAMS;
2756 
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 
2766         memcpy(smp->remote_pk, key, 64);
2767 
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 
2774                 if (crypto_memneq(cfm.confirm_val, smp->pcnf, 16))
2775                         return SMP_CONFIRM_FAILED;
2776         }
2777 
2778         /* Non-initiating device sends its public key after receiving
2779          * the key from the initiating device.
2780          */
2781         if (!test_bit(SMP_FLAG_INITIATOR, &smp->flags)) {
2782                 err = sc_send_public_key(smp);
2783                 if (err)
2784                         return err;
2785         }
2786 
2787         SMP_DBG("Remote Public Key X: %32phN", smp->remote_pk);
2788         SMP_DBG("Remote Public Key Y: %32phN", smp->remote_pk + 32);
2789 
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)) {
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;
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))
2808                 return SMP_UNSPECIFIED;
2809 
2810         SMP_DBG("DHKey %32phN", smp->dhkey);
2811 
2812         set_bit(SMP_FLAG_REMOTE_PK, &smp->flags);
2813 
2814         smp->method = sc_select_method(smp);
2815 
2816         bt_dev_dbg(hdev, "selected method 0x%02x", smp->method);
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 
2824         if (!crypto_memneq(debug_pk, smp->remote_pk, 64))
2825                 set_bit(SMP_FLAG_DEBUG_KEY, &smp->flags);
2826 
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 
2842         if (smp->method == REQ_OOB) {
2843                 if (test_bit(SMP_FLAG_INITIATOR, &smp->flags))
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 
2852         if (test_bit(SMP_FLAG_INITIATOR, &smp->flags))
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 
2864         /* The Initiating device waits for the non-initiating device to
2865          * send the confirm value.
2866          */
2867         if (test_bit(SMP_FLAG_INITIATOR, &smp->flags))
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 
2878         return 0;
2879 }
2880 
2881 static 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 
2891         bt_dev_dbg(hcon->hdev, "conn %p", conn);
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 
2901         if (test_bit(SMP_FLAG_INITIATOR, &smp->flags)) {
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 
2913         if (smp->method == REQ_PASSKEY || smp->method == DSP_PASSKEY)
2914                 put_unaligned_le32(hcon->passkey_notify, r);
2915         else if (smp->method == REQ_OOB)
2916                 memcpy(r, smp->lr, 16);
2917 
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 
2923         if (crypto_memneq(check->e, e, 16))
2924                 return SMP_DHKEY_CHECK_FAILED;
2925 
2926         if (!test_bit(SMP_FLAG_INITIATOR, &smp->flags)) {
2927                 if (test_bit(SMP_FLAG_WAIT_USER, &smp->flags)) {
2928                         set_bit(SMP_FLAG_DHKEY_PENDING, &smp->flags);
2929                         return 0;
2930                 }
2931 
2932                 /* Responder sends DHKey check as response to initiator */
2933                 sc_dhkey_check(smp);
2934         }
2935 
2936         sc_add_ltk(smp);
2937 
2938         if (test_bit(SMP_FLAG_INITIATOR, &smp->flags)) {
2939                 hci_le_start_enc(hcon, 0, 0, smp->tk, smp->enc_key_size);
2940                 hcon->enc_key_size = smp->enc_key_size;
2941         }
2942 
2943         return 0;
2944 }
2945 
2946 static 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 
2951         bt_dev_dbg(conn->hcon->hdev, "value 0x%02x", kp->value);
2952 
2953         return 0;
2954 }
2955 
2956 static int smp_sig_channel(struct l2cap_chan *chan, struct sk_buff *skb)
2957 {
2958         struct l2cap_conn *conn = chan->conn;
2959         struct hci_conn *hcon = conn->hcon;
2960         struct smp_chan *smp;
2961         __u8 code, reason;
2962         int err = 0;
2963 
2964         if (skb->len < 1)
2965                 return -EILSEQ;
2966 
2967         if (!hci_dev_test_flag(hcon->hdev, HCI_LE_ENABLED)) {
2968                 reason = SMP_PAIRING_NOTSUPP;
2969                 goto done;
2970         }
2971 
2972         code = skb->data[0];
2973         skb_pull(skb, sizeof(code));
2974 
2975         smp = chan->data;
2976 
2977         if (code > SMP_CMD_MAX)
2978                 goto drop;
2979 
2980         if (smp && !test_and_clear_bit(code, &smp->allow_cmd))
2981                 goto drop;
2982 
2983         /* If we don't have a context the only allowed commands are
2984          * pairing request and security request.
2985          */
2986         if (!smp && code != SMP_CMD_PAIRING_REQ && code != SMP_CMD_SECURITY_REQ)
2987                 goto drop;
2988 
2989         switch (code) {
2990         case SMP_CMD_PAIRING_REQ:
2991                 reason = smp_cmd_pairing_req(conn, skb);
2992                 break;
2993 
2994         case SMP_CMD_PAIRING_FAIL:
2995                 smp_failure(conn, 0);
2996                 err = -EPERM;
2997                 break;
2998 
2999         case SMP_CMD_PAIRING_RSP:
3000                 reason = smp_cmd_pairing_rsp(conn, skb);
3001                 break;
3002 
3003         case SMP_CMD_SECURITY_REQ:
3004                 reason = smp_cmd_security_req(conn, skb);
3005                 break;
3006 
3007         case SMP_CMD_PAIRING_CONFIRM:
3008                 reason = smp_cmd_pairing_confirm(conn, skb);
3009                 break;
3010 
3011         case SMP_CMD_PAIRING_RANDOM:
3012                 reason = smp_cmd_pairing_random(conn, skb);
3013                 break;
3014 
3015         case SMP_CMD_ENCRYPT_INFO:
3016                 reason = smp_cmd_encrypt_info(conn, skb);
3017                 break;
3018 
3019         case SMP_CMD_INITIATOR_IDENT:
3020                 reason = smp_cmd_initiator_ident(conn, skb);
3021                 break;
3022 
3023         case SMP_CMD_IDENT_INFO:
3024                 reason = smp_cmd_ident_info(conn, skb);
3025                 break;
3026 
3027         case SMP_CMD_IDENT_ADDR_INFO:
3028                 reason = smp_cmd_ident_addr_info(conn, skb);
3029                 break;
3030 
3031         case SMP_CMD_SIGN_INFO:
3032                 reason = smp_cmd_sign_info(conn, skb);
3033                 break;
3034 
3035         case SMP_CMD_PUBLIC_KEY:
3036                 reason = smp_cmd_public_key(conn, skb);
3037                 break;
3038 
3039         case SMP_CMD_DHKEY_CHECK:
3040                 reason = smp_cmd_dhkey_check(conn, skb);
3041                 break;
3042 
3043         case SMP_CMD_KEYPRESS_NOTIFY:
3044                 reason = smp_cmd_keypress_notify(conn, skb);
3045                 break;
3046 
3047         default:
3048                 bt_dev_dbg(hcon->hdev, "Unknown command code 0x%2.2x", code);
3049                 reason = SMP_CMD_NOTSUPP;
3050                 goto done;
3051         }
3052 
3053 done:
3054         if (!err) {
3055                 if (reason)
3056                         smp_failure(conn, reason);
3057                 kfree_skb(skb);
3058         }
3059 
3060         return err;
3061 
3062 drop:
3063         bt_dev_err(hcon->hdev, "unexpected SMP command 0x%02x from %pMR",
3064                    code, &hcon->dst);
3065         kfree_skb(skb);
3066         return 0;
3067 }
3068 
3069 static void smp_teardown_cb(struct l2cap_chan *chan, int err)
3070 {
3071         struct l2cap_conn *conn = chan->conn;
3072 
3073         bt_dev_dbg(conn->hcon->hdev, "chan %p", chan);
3074 
3075         if (chan->data)
3076                 smp_chan_destroy(conn);
3077 
3078         conn->smp = NULL;
3079         l2cap_chan_put(chan);
3080 }
3081 
3082 static 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;
3087         struct smp_chan *smp;
3088 
3089         bt_dev_dbg(hdev, "chan %p", chan);
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 
3099         /* Only initiator may initiate SMP over BR/EDR */
3100         if (hcon->role != HCI_ROLE_MASTER)
3101                 return;
3102 
3103         /* Secure Connections support must be enabled */
3104         if (!hci_dev_test_flag(hdev, HCI_SC_ENABLED))
3105                 return;
3106 
3107         /* BR/EDR must use Secure Connections for SMP */
3108         if (!test_bit(HCI_CONN_AES_CCM, &hcon->flags) &&
3109             !hci_dev_test_flag(hdev, HCI_FORCE_BREDR_SMP))
3110                 return;
3111 
3112         /* If our LE support is not enabled don't do anything */
3113         if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED))
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) {
3130                 bt_dev_err(hdev, "unable to create SMP context for BR/EDR");
3131                 return;
3132         }
3133 
3134         set_bit(SMP_FLAG_SC, &smp->flags);
3135 
3136         bt_dev_dbg(hdev, "starting SMP over BR/EDR");
3137 
3138         smp_send_pairing_req(smp, 0x00);
3139 }
3140 
3141 static void smp_resume_cb(struct l2cap_chan *chan)
3142 {
3143         struct smp_chan *smp = chan->data;
3144         struct l2cap_conn *conn = chan->conn;
3145         struct hci_conn *hcon = conn->hcon;
3146 
3147         bt_dev_dbg(hcon->hdev, "chan %p", chan);
3148 
3149         if (hcon->type == ACL_LINK) {
3150                 bredr_pairing(chan);
3151                 return;
3152         }
3153 
3154         if (!smp)
3155                 return;
3156 
3157         if (!test_bit(HCI_CONN_ENCRYPT, &hcon->flags))
3158                 return;
3159 
3160         cancel_delayed_work(&smp->security_timer);
3161 
3162         smp_distribute_keys(smp);
3163 }
3164 
3165 static void smp_ready_cb(struct l2cap_chan *chan)
3166 {
3167         struct l2cap_conn *conn = chan->conn;
3168         struct hci_conn *hcon = conn->hcon;
3169 
3170         bt_dev_dbg(hcon->hdev, "chan %p", chan);
3171 
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          */
3178         conn->smp = chan;
3179 
3180         if (hcon->type == ACL_LINK && test_bit(HCI_CONN_ENCRYPT, &hcon->flags))
3181                 bredr_pairing(chan);
3182 }
3183 
3184 static int smp_recv_cb(struct l2cap_chan *chan, struct sk_buff *skb)
3185 {
3186         int err;
3187 
3188         bt_dev_dbg(chan->conn->hcon->hdev, "chan %p", chan);
3189 
3190         err = smp_sig_channel(chan, skb);
3191         if (err) {
3192                 struct smp_chan *smp = chan->data;
3193 
3194                 if (smp)
3195                         cancel_delayed_work_sync(&smp->security_timer);
3196 
3197                 hci_disconnect(chan->conn->hcon, HCI_ERROR_AUTH_FAILURE);
3198         }
3199 
3200         return err;
3201 }
3202 
3203 static 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;
3214         bt_cb(skb)->l2cap.chan = chan;
3215 
3216         return skb;
3217 }
3218 
3219 static const struct l2cap_ops smp_chan_ops = {
3220         .name                   = "Security Manager",
3221         .ready                  = smp_ready_cb,
3222         .recv                   = smp_recv_cb,
3223         .alloc_skb              = smp_alloc_skb_cb,
3224         .teardown               = smp_teardown_cb,
3225         .resume                 = smp_resume_cb,
3226 
3227         .new_connection         = l2cap_chan_no_new_connection,
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,
3232         .set_shutdown           = l2cap_chan_no_set_shutdown,
3233         .get_sndtimeo           = l2cap_chan_no_get_sndtimeo,
3234 };
3235 
3236 static inline struct l2cap_chan *smp_new_conn_cb(struct l2cap_chan *pchan)
3237 {
3238         struct l2cap_chan *chan;
3239 
3240         BT_DBG("pchan %p", pchan);
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 
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 
3261         BT_DBG("created chan %p", chan);
3262 
3263         return chan;
3264 }
3265 
3266 static 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,
3282 };
3283 
3284 static struct l2cap_chan *smp_add_cid(struct hci_dev *hdev, u16 cid)
3285 {
3286         struct l2cap_chan *chan;
3287         struct smp_dev *smp;
3288         struct crypto_shash *tfm_cmac;
3289         struct crypto_kpp *tfm_ecdh;
3290 
3291         if (cid == L2CAP_CID_SMP_BREDR) {
3292                 smp = NULL;
3293                 goto create_chan;
3294         }
3295 
3296         smp = kzalloc(sizeof(*smp), GFP_KERNEL);
3297         if (!smp)
3298                 return ERR_PTR(-ENOMEM);
3299 
3300         tfm_cmac = crypto_alloc_shash("cmac(aes)", 0, 0);
3301         if (IS_ERR(tfm_cmac)) {
3302                 bt_dev_err(hdev, "Unable to create CMAC crypto context");
3303                 kfree_sensitive(smp);
3304                 return ERR_CAST(tfm_cmac);
3305         }
3306 
3307         tfm_ecdh = crypto_alloc_kpp("ecdh-nist-p256", 0, 0);
3308         if (IS_ERR(tfm_ecdh)) {
3309                 bt_dev_err(hdev, "Unable to create ECDH crypto context");
3310                 crypto_free_shash(tfm_cmac);
3311                 kfree_sensitive(smp);
3312                 return ERR_CAST(tfm_ecdh);
3313         }
3314 
3315         smp->local_oob = false;
3316         smp->tfm_cmac = tfm_cmac;
3317         smp->tfm_ecdh = tfm_ecdh;
3318 
3319 create_chan:
3320         chan = l2cap_chan_create();
3321         if (!chan) {
3322                 if (smp) {
3323                         crypto_free_shash(smp->tfm_cmac);
3324                         crypto_free_kpp(smp->tfm_ecdh);
3325                         kfree_sensitive(smp);
3326                 }
3327                 return ERR_PTR(-ENOMEM);
3328         }
3329 
3330         chan->data = smp;
3331 
3332         l2cap_add_scid(chan, cid);
3333 
3334         l2cap_chan_set_defaults(chan);
3335 
3336         if (cid == L2CAP_CID_SMP) {
3337                 u8 bdaddr_type;
3338 
3339                 hci_copy_identity_address(hdev, &chan->src, &bdaddr_type);
3340 
3341                 if (bdaddr_type == ADDR_LE_DEV_PUBLIC)
3342                         chan->src_type = BDADDR_LE_PUBLIC;
3343                 else
3344                         chan->src_type = BDADDR_LE_RANDOM;
3345         } else {
3346                 bacpy(&chan->src, &hdev->bdaddr);
3347                 chan->src_type = BDADDR_BREDR;
3348         }
3349 
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 
3355         /* Set correct nesting level for a parent/listening channel */
3356         atomic_set(&chan->nesting, L2CAP_NESTING_PARENT);
3357 
3358         return chan;
3359 }
3360 
3361 static void smp_del_chan(struct l2cap_chan *chan)
3362 {
3363         struct smp_dev *smp;
3364 
3365         BT_DBG("chan %p", chan);
3366 
3367         smp = chan->data;
3368         if (smp) {
3369                 chan->data = NULL;
3370                 crypto_free_shash(smp->tfm_cmac);
3371                 crypto_free_kpp(smp->tfm_ecdh);
3372                 kfree_sensitive(smp);
3373         }
3374 
3375         l2cap_chan_put(chan);
3376 }
3377 
3378 int smp_force_bredr(struct hci_dev *hdev, bool enable)
3379 {
3380         if (enable == hci_dev_test_flag(hdev, HCI_FORCE_BREDR_SMP))
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 
3399         hci_dev_change_flag(hdev, HCI_FORCE_BREDR_SMP);
3400 
3401         return 0;
3402 }
3403 
3404 int smp_register(struct hci_dev *hdev)
3405 {
3406         struct l2cap_chan *chan;
3407 
3408         bt_dev_dbg(hdev, "");
3409 
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 
3416         if (WARN_ON(hdev->smp_data)) {
3417                 chan = hdev->smp_data;
3418                 hdev->smp_data = NULL;
3419                 smp_del_chan(chan);
3420         }
3421 
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 
3428         if (!lmp_sc_capable(hdev)) {
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;
3432         }
3433 
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 
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 
3454 void 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 }
3470 
3471 #if IS_ENABLED(CONFIG_BT_SELFTEST_SMP)
3472 
3473 static int __init test_debug_key(struct crypto_kpp *tfm_ecdh)
3474 {
3475         u8 pk[64];
3476         int err;
3477 
3478         err = set_ecdh_privkey(tfm_ecdh, debug_sk);
3479         if (err)
3480                 return err;
3481 
3482         err = generate_ecdh_public_key(tfm_ecdh, pk);
3483         if (err)
3484                 return err;
3485 
3486         if (crypto_memneq(pk, debug_pk, 64))
3487                 return -EINVAL;
3488 
3489         return 0;
3490 }
3491 
3492 static int __init test_ah(void)
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 
3502         err = smp_ah(irk, r, res);
3503         if (err)
3504                 return err;
3505 
3506         if (crypto_memneq(res, exp, 3))
3507                 return -EINVAL;
3508 
3509         return 0;
3510 }
3511 
3512 static int __init test_c1(void)
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 
3532         err = smp_c1(k, r, preq, pres, _iat, &ia, _rat, &ra, res);
3533         if (err)
3534                 return err;
3535 
3536         if (crypto_memneq(res, exp, 16))
3537                 return -EINVAL;
3538 
3539         return 0;
3540 }
3541 
3542 static int __init test_s1(void)
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 
3557         err = smp_s1(k, r1, r2, res);
3558         if (err)
3559                 return err;
3560 
3561         if (crypto_memneq(res, exp, 16))
3562                 return -EINVAL;
3563 
3564         return 0;
3565 }
3566 
3567 static int __init test_f4(struct crypto_shash *tfm_cmac)
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 
3593         if (crypto_memneq(res, exp, 16))
3594                 return -EINVAL;
3595 
3596         return 0;
3597 }
3598 
3599 static int __init test_f5(struct crypto_shash *tfm_cmac)
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 
3627         if (crypto_memneq(mackey, exp_mackey, 16))
3628                 return -EINVAL;
3629 
3630         if (crypto_memneq(ltk, exp_ltk, 16))
3631                 return -EINVAL;
3632 
3633         return 0;
3634 }
3635 
3636 static int __init test_f6(struct crypto_shash *tfm_cmac)
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 
3663         if (crypto_memneq(res, exp, 16))
3664                 return -EINVAL;
3665 
3666         return 0;
3667 }
3668 
3669 static int __init test_g2(struct crypto_shash *tfm_cmac)
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 
3701 static int __init test_h6(struct crypto_shash *tfm_cmac)
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 
3717         if (crypto_memneq(res, exp, 16))
3718                 return -EINVAL;
3719 
3720         return 0;
3721 }
3722 
3723 static char test_smp_buffer[32];
3724 
3725 static 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 
3732 static const struct file_operations test_smp_fops = {
3733         .open           = simple_open,
3734         .read           = test_smp_read,
3735         .llseek         = default_llseek,
3736 };
3737 
3738 static int __init run_selftests(struct crypto_shash *tfm_cmac,
3739                                 struct crypto_kpp *tfm_ecdh)
3740 {
3741         ktime_t calltime, delta, rettime;
3742         unsigned long long duration;
3743         int err;
3744 
3745         calltime = ktime_get();
3746 
3747         err = test_debug_key(tfm_ecdh);
3748         if (err) {
3749                 BT_ERR("debug_key test failed");
3750                 goto done;
3751         }
3752 
3753         err = test_ah();
3754         if (err) {
3755                 BT_ERR("smp_ah test failed");
3756                 goto done;
3757         }
3758 
3759         err = test_c1();
3760         if (err) {
3761                 BT_ERR("smp_c1 test failed");
3762                 goto done;
3763         }
3764 
3765         err = test_s1();
3766         if (err) {
3767                 BT_ERR("smp_s1 test failed");
3768                 goto done;
3769         }
3770 
3771         err = test_f4(tfm_cmac);
3772         if (err) {
3773                 BT_ERR("smp_f4 test failed");
3774                 goto done;
3775         }
3776 
3777         err = test_f5(tfm_cmac);
3778         if (err) {
3779                 BT_ERR("smp_f5 test failed");
3780                 goto done;
3781         }
3782 
3783         err = test_f6(tfm_cmac);
3784         if (err) {
3785                 BT_ERR("smp_f6 test failed");
3786                 goto done;
3787         }
3788 
3789         err = test_g2(tfm_cmac);
3790         if (err) {
3791                 BT_ERR("smp_g2 test failed");
3792                 goto done;
3793         }
3794 
3795         err = test_h6(tfm_cmac);
3796         if (err) {
3797                 BT_ERR("smp_h6 test failed");
3798                 goto done;
3799         }
3800 
3801         rettime = ktime_get();
3802         delta = ktime_sub(rettime, calltime);
3803         duration = (unsigned long long) ktime_to_ns(delta) >> 10;
3804 
3805         BT_INFO("SMP test passed in %llu usecs", duration);
3806 
3807 done:
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;
3818 }
3819 
3820 int __init bt_selftest_smp(void)
3821 {
3822         struct crypto_shash *tfm_cmac;
3823         struct crypto_kpp *tfm_ecdh;
3824         int err;
3825 
3826         tfm_cmac = crypto_alloc_shash("cmac(aes)", 0, 0);
3827         if (IS_ERR(tfm_cmac)) {
3828                 BT_ERR("Unable to create CMAC crypto context");
3829                 return PTR_ERR(tfm_cmac);
3830         }
3831 
3832         tfm_ecdh = crypto_alloc_kpp("ecdh-nist-p256", 0, 0);
3833         if (IS_ERR(tfm_ecdh)) {
3834                 BT_ERR("Unable to create ECDH crypto context");
3835                 crypto_free_shash(tfm_cmac);
3836                 return PTR_ERR(tfm_ecdh);
3837         }
3838 
3839         err = run_selftests(tfm_cmac, tfm_ecdh);
3840 
3841         crypto_free_shash(tfm_cmac);
3842         crypto_free_kpp(tfm_ecdh);
3843 
3844         return err;
3845 }
3846 
3847 #endif
3848 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php