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