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