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