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/crypto.h> 24 #include <linux/scatterlist.h> 25 #include <crypto/b128ops.h> 26 27 #include <net/bluetooth/bluetooth.h> 28 #include <net/bluetooth/hci_core.h> 29 #include <net/bluetooth/l2cap.h> 30 #include <net/bluetooth/mgmt.h> 31 32 #include "smp.h" 33 34 #define SMP_ALLOW_CMD(smp, code) set_bit(code, &smp->allow_cmd) 35 36 #define SMP_TIMEOUT msecs_to_jiffies(30000) 37 38 #define AUTH_REQ_MASK 0x07 39 #define KEY_DIST_MASK 0x07 40 41 enum { 42 SMP_FLAG_TK_VALID, 43 SMP_FLAG_CFM_PENDING, 44 SMP_FLAG_MITM_AUTH, 45 SMP_FLAG_COMPLETE, 46 SMP_FLAG_INITIATOR, 47 }; 48 49 struct smp_chan { 50 struct l2cap_conn *conn; 51 struct delayed_work security_timer; 52 unsigned long allow_cmd; /* Bitmask of allowed commands */ 53 54 u8 preq[7]; /* SMP Pairing Request */ 55 u8 prsp[7]; /* SMP Pairing Response */ 56 u8 prnd[16]; /* SMP Pairing Random (local) */ 57 u8 rrnd[16]; /* SMP Pairing Random (remote) */ 58 u8 pcnf[16]; /* SMP Pairing Confirm */ 59 u8 tk[16]; /* SMP Temporary Key */ 60 u8 enc_key_size; 61 u8 remote_key_dist; 62 bdaddr_t id_addr; 63 u8 id_addr_type; 64 u8 irk[16]; 65 struct smp_csrk *csrk; 66 struct smp_csrk *slave_csrk; 67 struct smp_ltk *ltk; 68 struct smp_ltk *slave_ltk; 69 struct smp_irk *remote_irk; 70 unsigned long flags; 71 72 struct crypto_blkcipher *tfm_aes; 73 }; 74 75 static inline void swap_buf(const u8 *src, u8 *dst, size_t len) 76 { 77 size_t i; 78 79 for (i = 0; i < len; i++) 80 dst[len - 1 - i] = src[i]; 81 } 82 83 static int smp_e(struct crypto_blkcipher *tfm, const u8 *k, u8 *r) 84 { 85 struct blkcipher_desc desc; 86 struct scatterlist sg; 87 uint8_t tmp[16], data[16]; 88 int err; 89 90 if (tfm == NULL) { 91 BT_ERR("tfm %p", tfm); 92 return -EINVAL; 93 } 94 95 desc.tfm = tfm; 96 desc.flags = 0; 97 98 /* The most significant octet of key corresponds to k[0] */ 99 swap_buf(k, tmp, 16); 100 101 err = crypto_blkcipher_setkey(tfm, tmp, 16); 102 if (err) { 103 BT_ERR("cipher setkey failed: %d", err); 104 return err; 105 } 106 107 /* Most significant octet of plaintextData corresponds to data[0] */ 108 swap_buf(r, data, 16); 109 110 sg_init_one(&sg, data, 16); 111 112 err = crypto_blkcipher_encrypt(&desc, &sg, &sg, 16); 113 if (err) 114 BT_ERR("Encrypt data error %d", err); 115 116 /* Most significant octet of encryptedData corresponds to data[0] */ 117 swap_buf(data, r, 16); 118 119 return err; 120 } 121 122 static int smp_ah(struct crypto_blkcipher *tfm, u8 irk[16], u8 r[3], u8 res[3]) 123 { 124 u8 _res[16]; 125 int err; 126 127 /* r' = padding || r */ 128 memcpy(_res, r, 3); 129 memset(_res + 3, 0, 13); 130 131 err = smp_e(tfm, irk, _res); 132 if (err) { 133 BT_ERR("Encrypt error"); 134 return err; 135 } 136 137 /* The output of the random address function ah is: 138 * ah(h, r) = e(k, r') mod 2^24 139 * The output of the security function e is then truncated to 24 bits 140 * by taking the least significant 24 bits of the output of e as the 141 * result of ah. 142 */ 143 memcpy(res, _res, 3); 144 145 return 0; 146 } 147 148 bool smp_irk_matches(struct hci_dev *hdev, u8 irk[16], bdaddr_t *bdaddr) 149 { 150 struct l2cap_chan *chan = hdev->smp_data; 151 struct crypto_blkcipher *tfm; 152 u8 hash[3]; 153 int err; 154 155 if (!chan || !chan->data) 156 return false; 157 158 tfm = chan->data; 159 160 BT_DBG("RPA %pMR IRK %*phN", bdaddr, 16, irk); 161 162 err = smp_ah(tfm, irk, &bdaddr->b[3], hash); 163 if (err) 164 return false; 165 166 return !memcmp(bdaddr->b, hash, 3); 167 } 168 169 int smp_generate_rpa(struct hci_dev *hdev, u8 irk[16], bdaddr_t *rpa) 170 { 171 struct l2cap_chan *chan = hdev->smp_data; 172 struct crypto_blkcipher *tfm; 173 int err; 174 175 if (!chan || !chan->data) 176 return -EOPNOTSUPP; 177 178 tfm = chan->data; 179 180 get_random_bytes(&rpa->b[3], 3); 181 182 rpa->b[5] &= 0x3f; /* Clear two most significant bits */ 183 rpa->b[5] |= 0x40; /* Set second most significant bit */ 184 185 err = smp_ah(tfm, irk, &rpa->b[3], rpa->b); 186 if (err < 0) 187 return err; 188 189 BT_DBG("RPA %pMR", rpa); 190 191 return 0; 192 } 193 194 static int smp_c1(struct smp_chan *smp, u8 k[16], u8 r[16], u8 preq[7], 195 u8 pres[7], u8 _iat, bdaddr_t *ia, u8 _rat, bdaddr_t *ra, 196 u8 res[16]) 197 { 198 struct hci_dev *hdev = smp->conn->hcon->hdev; 199 u8 p1[16], p2[16]; 200 int err; 201 202 BT_DBG("%s", hdev->name); 203 204 memset(p1, 0, 16); 205 206 /* p1 = pres || preq || _rat || _iat */ 207 p1[0] = _iat; 208 p1[1] = _rat; 209 memcpy(p1 + 2, preq, 7); 210 memcpy(p1 + 9, pres, 7); 211 212 /* p2 = padding || ia || ra */ 213 memcpy(p2, ra, 6); 214 memcpy(p2 + 6, ia, 6); 215 memset(p2 + 12, 0, 4); 216 217 /* res = r XOR p1 */ 218 u128_xor((u128 *) res, (u128 *) r, (u128 *) p1); 219 220 /* res = e(k, res) */ 221 err = smp_e(smp->tfm_aes, k, res); 222 if (err) { 223 BT_ERR("Encrypt data error"); 224 return err; 225 } 226 227 /* res = res XOR p2 */ 228 u128_xor((u128 *) res, (u128 *) res, (u128 *) p2); 229 230 /* res = e(k, res) */ 231 err = smp_e(smp->tfm_aes, k, res); 232 if (err) 233 BT_ERR("Encrypt data error"); 234 235 return err; 236 } 237 238 static int smp_s1(struct smp_chan *smp, u8 k[16], u8 r1[16], u8 r2[16], 239 u8 _r[16]) 240 { 241 struct hci_dev *hdev = smp->conn->hcon->hdev; 242 int err; 243 244 BT_DBG("%s", hdev->name); 245 246 /* Just least significant octets from r1 and r2 are considered */ 247 memcpy(_r, r2, 8); 248 memcpy(_r + 8, r1, 8); 249 250 err = smp_e(smp->tfm_aes, k, _r); 251 if (err) 252 BT_ERR("Encrypt data error"); 253 254 return err; 255 } 256 257 static void smp_send_cmd(struct l2cap_conn *conn, u8 code, u16 len, void *data) 258 { 259 struct l2cap_chan *chan = conn->smp; 260 struct smp_chan *smp; 261 struct kvec iv[2]; 262 struct msghdr msg; 263 264 if (!chan) 265 return; 266 267 BT_DBG("code 0x%2.2x", code); 268 269 iv[0].iov_base = &code; 270 iv[0].iov_len = 1; 271 272 iv[1].iov_base = data; 273 iv[1].iov_len = len; 274 275 memset(&msg, 0, sizeof(msg)); 276 277 msg.msg_iov = (struct iovec *) &iv; 278 msg.msg_iovlen = 2; 279 280 l2cap_chan_send(chan, &msg, 1 + len); 281 282 if (!chan->data) 283 return; 284 285 smp = chan->data; 286 287 cancel_delayed_work_sync(&smp->security_timer); 288 schedule_delayed_work(&smp->security_timer, SMP_TIMEOUT); 289 } 290 291 static __u8 authreq_to_seclevel(__u8 authreq) 292 { 293 if (authreq & SMP_AUTH_MITM) 294 return BT_SECURITY_HIGH; 295 else 296 return BT_SECURITY_MEDIUM; 297 } 298 299 static __u8 seclevel_to_authreq(__u8 sec_level) 300 { 301 switch (sec_level) { 302 case BT_SECURITY_HIGH: 303 return SMP_AUTH_MITM | SMP_AUTH_BONDING; 304 case BT_SECURITY_MEDIUM: 305 return SMP_AUTH_BONDING; 306 default: 307 return SMP_AUTH_NONE; 308 } 309 } 310 311 static void build_pairing_cmd(struct l2cap_conn *conn, 312 struct smp_cmd_pairing *req, 313 struct smp_cmd_pairing *rsp, __u8 authreq) 314 { 315 struct l2cap_chan *chan = conn->smp; 316 struct smp_chan *smp = chan->data; 317 struct hci_conn *hcon = conn->hcon; 318 struct hci_dev *hdev = hcon->hdev; 319 u8 local_dist = 0, remote_dist = 0; 320 321 if (test_bit(HCI_BONDABLE, &conn->hcon->hdev->dev_flags)) { 322 local_dist = SMP_DIST_ENC_KEY | SMP_DIST_SIGN; 323 remote_dist = SMP_DIST_ENC_KEY | SMP_DIST_SIGN; 324 authreq |= SMP_AUTH_BONDING; 325 } else { 326 authreq &= ~SMP_AUTH_BONDING; 327 } 328 329 if (test_bit(HCI_RPA_RESOLVING, &hdev->dev_flags)) 330 remote_dist |= SMP_DIST_ID_KEY; 331 332 if (test_bit(HCI_PRIVACY, &hdev->dev_flags)) 333 local_dist |= SMP_DIST_ID_KEY; 334 335 if (rsp == NULL) { 336 req->io_capability = conn->hcon->io_capability; 337 req->oob_flag = SMP_OOB_NOT_PRESENT; 338 req->max_key_size = SMP_MAX_ENC_KEY_SIZE; 339 req->init_key_dist = local_dist; 340 req->resp_key_dist = remote_dist; 341 req->auth_req = (authreq & AUTH_REQ_MASK); 342 343 smp->remote_key_dist = remote_dist; 344 return; 345 } 346 347 rsp->io_capability = conn->hcon->io_capability; 348 rsp->oob_flag = SMP_OOB_NOT_PRESENT; 349 rsp->max_key_size = SMP_MAX_ENC_KEY_SIZE; 350 rsp->init_key_dist = req->init_key_dist & remote_dist; 351 rsp->resp_key_dist = req->resp_key_dist & local_dist; 352 rsp->auth_req = (authreq & AUTH_REQ_MASK); 353 354 smp->remote_key_dist = rsp->init_key_dist; 355 } 356 357 static u8 check_enc_key_size(struct l2cap_conn *conn, __u8 max_key_size) 358 { 359 struct l2cap_chan *chan = conn->smp; 360 struct smp_chan *smp = chan->data; 361 362 if ((max_key_size > SMP_MAX_ENC_KEY_SIZE) || 363 (max_key_size < SMP_MIN_ENC_KEY_SIZE)) 364 return SMP_ENC_KEY_SIZE; 365 366 smp->enc_key_size = max_key_size; 367 368 return 0; 369 } 370 371 static void smp_chan_destroy(struct l2cap_conn *conn) 372 { 373 struct l2cap_chan *chan = conn->smp; 374 struct smp_chan *smp = chan->data; 375 bool complete; 376 377 BUG_ON(!smp); 378 379 cancel_delayed_work_sync(&smp->security_timer); 380 381 complete = test_bit(SMP_FLAG_COMPLETE, &smp->flags); 382 mgmt_smp_complete(conn->hcon, complete); 383 384 kfree(smp->csrk); 385 kfree(smp->slave_csrk); 386 387 crypto_free_blkcipher(smp->tfm_aes); 388 389 /* If pairing failed clean up any keys we might have */ 390 if (!complete) { 391 if (smp->ltk) { 392 list_del(&smp->ltk->list); 393 kfree(smp->ltk); 394 } 395 396 if (smp->slave_ltk) { 397 list_del(&smp->slave_ltk->list); 398 kfree(smp->slave_ltk); 399 } 400 401 if (smp->remote_irk) { 402 list_del(&smp->remote_irk->list); 403 kfree(smp->remote_irk); 404 } 405 } 406 407 chan->data = NULL; 408 kfree(smp); 409 hci_conn_drop(conn->hcon); 410 } 411 412 static void smp_failure(struct l2cap_conn *conn, u8 reason) 413 { 414 struct hci_conn *hcon = conn->hcon; 415 struct l2cap_chan *chan = conn->smp; 416 417 if (reason) 418 smp_send_cmd(conn, SMP_CMD_PAIRING_FAIL, sizeof(reason), 419 &reason); 420 421 clear_bit(HCI_CONN_ENCRYPT_PEND, &hcon->flags); 422 mgmt_auth_failed(hcon, HCI_ERROR_AUTH_FAILURE); 423 424 if (chan->data) 425 smp_chan_destroy(conn); 426 } 427 428 #define JUST_WORKS 0x00 429 #define JUST_CFM 0x01 430 #define REQ_PASSKEY 0x02 431 #define CFM_PASSKEY 0x03 432 #define REQ_OOB 0x04 433 #define OVERLAP 0xFF 434 435 static const u8 gen_method[5][5] = { 436 { JUST_WORKS, JUST_CFM, REQ_PASSKEY, JUST_WORKS, REQ_PASSKEY }, 437 { JUST_WORKS, JUST_CFM, REQ_PASSKEY, JUST_WORKS, REQ_PASSKEY }, 438 { CFM_PASSKEY, CFM_PASSKEY, REQ_PASSKEY, JUST_WORKS, CFM_PASSKEY }, 439 { JUST_WORKS, JUST_CFM, JUST_WORKS, JUST_WORKS, JUST_CFM }, 440 { CFM_PASSKEY, CFM_PASSKEY, REQ_PASSKEY, JUST_WORKS, OVERLAP }, 441 }; 442 443 static u8 get_auth_method(struct smp_chan *smp, u8 local_io, u8 remote_io) 444 { 445 /* If either side has unknown io_caps, use JUST_CFM (which gets 446 * converted later to JUST_WORKS if we're initiators. 447 */ 448 if (local_io > SMP_IO_KEYBOARD_DISPLAY || 449 remote_io > SMP_IO_KEYBOARD_DISPLAY) 450 return JUST_CFM; 451 452 return gen_method[remote_io][local_io]; 453 } 454 455 static int tk_request(struct l2cap_conn *conn, u8 remote_oob, u8 auth, 456 u8 local_io, u8 remote_io) 457 { 458 struct hci_conn *hcon = conn->hcon; 459 struct l2cap_chan *chan = conn->smp; 460 struct smp_chan *smp = chan->data; 461 u8 method; 462 u32 passkey = 0; 463 int ret = 0; 464 465 /* Initialize key for JUST WORKS */ 466 memset(smp->tk, 0, sizeof(smp->tk)); 467 clear_bit(SMP_FLAG_TK_VALID, &smp->flags); 468 469 BT_DBG("tk_request: auth:%d lcl:%d rem:%d", auth, local_io, remote_io); 470 471 /* If neither side wants MITM, either "just" confirm an incoming 472 * request or use just-works for outgoing ones. The JUST_CFM 473 * will be converted to JUST_WORKS if necessary later in this 474 * function. If either side has MITM look up the method from the 475 * table. 476 */ 477 if (!(auth & SMP_AUTH_MITM)) 478 method = JUST_CFM; 479 else 480 method = get_auth_method(smp, local_io, remote_io); 481 482 /* Don't confirm locally initiated pairing attempts */ 483 if (method == JUST_CFM && test_bit(SMP_FLAG_INITIATOR, &smp->flags)) 484 method = JUST_WORKS; 485 486 /* Don't bother user space with no IO capabilities */ 487 if (method == JUST_CFM && hcon->io_capability == HCI_IO_NO_INPUT_OUTPUT) 488 method = JUST_WORKS; 489 490 /* If Just Works, Continue with Zero TK */ 491 if (method == JUST_WORKS) { 492 set_bit(SMP_FLAG_TK_VALID, &smp->flags); 493 return 0; 494 } 495 496 /* Not Just Works/Confirm results in MITM Authentication */ 497 if (method != JUST_CFM) { 498 set_bit(SMP_FLAG_MITM_AUTH, &smp->flags); 499 if (hcon->pending_sec_level < BT_SECURITY_HIGH) 500 hcon->pending_sec_level = BT_SECURITY_HIGH; 501 } 502 503 /* If both devices have Keyoard-Display I/O, the master 504 * Confirms and the slave Enters the passkey. 505 */ 506 if (method == OVERLAP) { 507 if (hcon->role == HCI_ROLE_MASTER) 508 method = CFM_PASSKEY; 509 else 510 method = REQ_PASSKEY; 511 } 512 513 /* Generate random passkey. */ 514 if (method == CFM_PASSKEY) { 515 memset(smp->tk, 0, sizeof(smp->tk)); 516 get_random_bytes(&passkey, sizeof(passkey)); 517 passkey %= 1000000; 518 put_unaligned_le32(passkey, smp->tk); 519 BT_DBG("PassKey: %d", passkey); 520 set_bit(SMP_FLAG_TK_VALID, &smp->flags); 521 } 522 523 hci_dev_lock(hcon->hdev); 524 525 if (method == REQ_PASSKEY) 526 ret = mgmt_user_passkey_request(hcon->hdev, &hcon->dst, 527 hcon->type, hcon->dst_type); 528 else if (method == JUST_CFM) 529 ret = mgmt_user_confirm_request(hcon->hdev, &hcon->dst, 530 hcon->type, hcon->dst_type, 531 passkey, 1); 532 else 533 ret = mgmt_user_passkey_notify(hcon->hdev, &hcon->dst, 534 hcon->type, hcon->dst_type, 535 passkey, 0); 536 537 hci_dev_unlock(hcon->hdev); 538 539 return ret; 540 } 541 542 static u8 smp_confirm(struct smp_chan *smp) 543 { 544 struct l2cap_conn *conn = smp->conn; 545 struct smp_cmd_pairing_confirm cp; 546 int ret; 547 548 BT_DBG("conn %p", conn); 549 550 ret = smp_c1(smp, smp->tk, smp->prnd, smp->preq, smp->prsp, 551 conn->hcon->init_addr_type, &conn->hcon->init_addr, 552 conn->hcon->resp_addr_type, &conn->hcon->resp_addr, 553 cp.confirm_val); 554 if (ret) 555 return SMP_UNSPECIFIED; 556 557 clear_bit(SMP_FLAG_CFM_PENDING, &smp->flags); 558 559 smp_send_cmd(smp->conn, SMP_CMD_PAIRING_CONFIRM, sizeof(cp), &cp); 560 561 if (conn->hcon->out) 562 SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_CONFIRM); 563 else 564 SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_RANDOM); 565 566 return 0; 567 } 568 569 static u8 smp_random(struct smp_chan *smp) 570 { 571 struct l2cap_conn *conn = smp->conn; 572 struct hci_conn *hcon = conn->hcon; 573 u8 confirm[16]; 574 int ret; 575 576 if (IS_ERR_OR_NULL(smp->tfm_aes)) 577 return SMP_UNSPECIFIED; 578 579 BT_DBG("conn %p %s", conn, conn->hcon->out ? "master" : "slave"); 580 581 ret = smp_c1(smp, smp->tk, smp->rrnd, smp->preq, smp->prsp, 582 hcon->init_addr_type, &hcon->init_addr, 583 hcon->resp_addr_type, &hcon->resp_addr, confirm); 584 if (ret) 585 return SMP_UNSPECIFIED; 586 587 if (memcmp(smp->pcnf, confirm, sizeof(smp->pcnf)) != 0) { 588 BT_ERR("Pairing failed (confirmation values mismatch)"); 589 return SMP_CONFIRM_FAILED; 590 } 591 592 if (hcon->out) { 593 u8 stk[16]; 594 __le64 rand = 0; 595 __le16 ediv = 0; 596 597 smp_s1(smp, smp->tk, smp->rrnd, smp->prnd, stk); 598 599 memset(stk + smp->enc_key_size, 0, 600 SMP_MAX_ENC_KEY_SIZE - smp->enc_key_size); 601 602 if (test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &hcon->flags)) 603 return SMP_UNSPECIFIED; 604 605 hci_le_start_enc(hcon, ediv, rand, stk); 606 hcon->enc_key_size = smp->enc_key_size; 607 set_bit(HCI_CONN_STK_ENCRYPT, &hcon->flags); 608 } else { 609 u8 stk[16], auth; 610 __le64 rand = 0; 611 __le16 ediv = 0; 612 613 smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM, sizeof(smp->prnd), 614 smp->prnd); 615 616 smp_s1(smp, smp->tk, smp->prnd, smp->rrnd, stk); 617 618 memset(stk + smp->enc_key_size, 0, 619 SMP_MAX_ENC_KEY_SIZE - smp->enc_key_size); 620 621 if (hcon->pending_sec_level == BT_SECURITY_HIGH) 622 auth = 1; 623 else 624 auth = 0; 625 626 /* Even though there's no _SLAVE suffix this is the 627 * slave STK we're adding for later lookup (the master 628 * STK never needs to be stored). 629 */ 630 hci_add_ltk(hcon->hdev, &hcon->dst, hcon->dst_type, 631 SMP_STK, auth, stk, smp->enc_key_size, ediv, rand); 632 } 633 634 return 0; 635 } 636 637 static void smp_notify_keys(struct l2cap_conn *conn) 638 { 639 struct l2cap_chan *chan = conn->smp; 640 struct smp_chan *smp = chan->data; 641 struct hci_conn *hcon = conn->hcon; 642 struct hci_dev *hdev = hcon->hdev; 643 struct smp_cmd_pairing *req = (void *) &smp->preq[1]; 644 struct smp_cmd_pairing *rsp = (void *) &smp->prsp[1]; 645 bool persistent; 646 647 if (smp->remote_irk) { 648 mgmt_new_irk(hdev, smp->remote_irk); 649 /* Now that user space can be considered to know the 650 * identity address track the connection based on it 651 * from now on. 652 */ 653 bacpy(&hcon->dst, &smp->remote_irk->bdaddr); 654 hcon->dst_type = smp->remote_irk->addr_type; 655 queue_work(hdev->workqueue, &conn->id_addr_update_work); 656 657 /* When receiving an indentity resolving key for 658 * a remote device that does not use a resolvable 659 * private address, just remove the key so that 660 * it is possible to use the controller white 661 * list for scanning. 662 * 663 * Userspace will have been told to not store 664 * this key at this point. So it is safe to 665 * just remove it. 666 */ 667 if (!bacmp(&smp->remote_irk->rpa, BDADDR_ANY)) { 668 list_del(&smp->remote_irk->list); 669 kfree(smp->remote_irk); 670 smp->remote_irk = NULL; 671 } 672 } 673 674 /* The LTKs and CSRKs should be persistent only if both sides 675 * had the bonding bit set in their authentication requests. 676 */ 677 persistent = !!((req->auth_req & rsp->auth_req) & SMP_AUTH_BONDING); 678 679 if (smp->csrk) { 680 smp->csrk->bdaddr_type = hcon->dst_type; 681 bacpy(&smp->csrk->bdaddr, &hcon->dst); 682 mgmt_new_csrk(hdev, smp->csrk, persistent); 683 } 684 685 if (smp->slave_csrk) { 686 smp->slave_csrk->bdaddr_type = hcon->dst_type; 687 bacpy(&smp->slave_csrk->bdaddr, &hcon->dst); 688 mgmt_new_csrk(hdev, smp->slave_csrk, persistent); 689 } 690 691 if (smp->ltk) { 692 smp->ltk->bdaddr_type = hcon->dst_type; 693 bacpy(&smp->ltk->bdaddr, &hcon->dst); 694 mgmt_new_ltk(hdev, smp->ltk, persistent); 695 } 696 697 if (smp->slave_ltk) { 698 smp->slave_ltk->bdaddr_type = hcon->dst_type; 699 bacpy(&smp->slave_ltk->bdaddr, &hcon->dst); 700 mgmt_new_ltk(hdev, smp->slave_ltk, persistent); 701 } 702 } 703 704 static void smp_allow_key_dist(struct smp_chan *smp) 705 { 706 /* Allow the first expected phase 3 PDU. The rest of the PDUs 707 * will be allowed in each PDU handler to ensure we receive 708 * them in the correct order. 709 */ 710 if (smp->remote_key_dist & SMP_DIST_ENC_KEY) 711 SMP_ALLOW_CMD(smp, SMP_CMD_ENCRYPT_INFO); 712 else if (smp->remote_key_dist & SMP_DIST_ID_KEY) 713 SMP_ALLOW_CMD(smp, SMP_CMD_IDENT_INFO); 714 else if (smp->remote_key_dist & SMP_DIST_SIGN) 715 SMP_ALLOW_CMD(smp, SMP_CMD_SIGN_INFO); 716 } 717 718 static void smp_distribute_keys(struct smp_chan *smp) 719 { 720 struct smp_cmd_pairing *req, *rsp; 721 struct l2cap_conn *conn = smp->conn; 722 struct hci_conn *hcon = conn->hcon; 723 struct hci_dev *hdev = hcon->hdev; 724 __u8 *keydist; 725 726 BT_DBG("conn %p", conn); 727 728 rsp = (void *) &smp->prsp[1]; 729 730 /* The responder sends its keys first */ 731 if (hcon->out && (smp->remote_key_dist & KEY_DIST_MASK)) { 732 smp_allow_key_dist(smp); 733 return; 734 } 735 736 req = (void *) &smp->preq[1]; 737 738 if (hcon->out) { 739 keydist = &rsp->init_key_dist; 740 *keydist &= req->init_key_dist; 741 } else { 742 keydist = &rsp->resp_key_dist; 743 *keydist &= req->resp_key_dist; 744 } 745 746 BT_DBG("keydist 0x%x", *keydist); 747 748 if (*keydist & SMP_DIST_ENC_KEY) { 749 struct smp_cmd_encrypt_info enc; 750 struct smp_cmd_master_ident ident; 751 struct smp_ltk *ltk; 752 u8 authenticated; 753 __le16 ediv; 754 __le64 rand; 755 756 get_random_bytes(enc.ltk, sizeof(enc.ltk)); 757 get_random_bytes(&ediv, sizeof(ediv)); 758 get_random_bytes(&rand, sizeof(rand)); 759 760 smp_send_cmd(conn, SMP_CMD_ENCRYPT_INFO, sizeof(enc), &enc); 761 762 authenticated = hcon->sec_level == BT_SECURITY_HIGH; 763 ltk = hci_add_ltk(hdev, &hcon->dst, hcon->dst_type, 764 SMP_LTK_SLAVE, authenticated, enc.ltk, 765 smp->enc_key_size, ediv, rand); 766 smp->slave_ltk = ltk; 767 768 ident.ediv = ediv; 769 ident.rand = rand; 770 771 smp_send_cmd(conn, SMP_CMD_MASTER_IDENT, sizeof(ident), &ident); 772 773 *keydist &= ~SMP_DIST_ENC_KEY; 774 } 775 776 if (*keydist & SMP_DIST_ID_KEY) { 777 struct smp_cmd_ident_addr_info addrinfo; 778 struct smp_cmd_ident_info idinfo; 779 780 memcpy(idinfo.irk, hdev->irk, sizeof(idinfo.irk)); 781 782 smp_send_cmd(conn, SMP_CMD_IDENT_INFO, sizeof(idinfo), &idinfo); 783 784 /* The hci_conn contains the local identity address 785 * after the connection has been established. 786 * 787 * This is true even when the connection has been 788 * established using a resolvable random address. 789 */ 790 bacpy(&addrinfo.bdaddr, &hcon->src); 791 addrinfo.addr_type = hcon->src_type; 792 793 smp_send_cmd(conn, SMP_CMD_IDENT_ADDR_INFO, sizeof(addrinfo), 794 &addrinfo); 795 796 *keydist &= ~SMP_DIST_ID_KEY; 797 } 798 799 if (*keydist & SMP_DIST_SIGN) { 800 struct smp_cmd_sign_info sign; 801 struct smp_csrk *csrk; 802 803 /* Generate a new random key */ 804 get_random_bytes(sign.csrk, sizeof(sign.csrk)); 805 806 csrk = kzalloc(sizeof(*csrk), GFP_KERNEL); 807 if (csrk) { 808 csrk->master = 0x00; 809 memcpy(csrk->val, sign.csrk, sizeof(csrk->val)); 810 } 811 smp->slave_csrk = csrk; 812 813 smp_send_cmd(conn, SMP_CMD_SIGN_INFO, sizeof(sign), &sign); 814 815 *keydist &= ~SMP_DIST_SIGN; 816 } 817 818 /* If there are still keys to be received wait for them */ 819 if (smp->remote_key_dist & KEY_DIST_MASK) { 820 smp_allow_key_dist(smp); 821 return; 822 } 823 824 set_bit(SMP_FLAG_COMPLETE, &smp->flags); 825 smp_notify_keys(conn); 826 827 smp_chan_destroy(conn); 828 } 829 830 static void smp_timeout(struct work_struct *work) 831 { 832 struct smp_chan *smp = container_of(work, struct smp_chan, 833 security_timer.work); 834 struct l2cap_conn *conn = smp->conn; 835 836 BT_DBG("conn %p", conn); 837 838 hci_disconnect(conn->hcon, HCI_ERROR_REMOTE_USER_TERM); 839 } 840 841 static struct smp_chan *smp_chan_create(struct l2cap_conn *conn) 842 { 843 struct l2cap_chan *chan = conn->smp; 844 struct smp_chan *smp; 845 846 smp = kzalloc(sizeof(*smp), GFP_ATOMIC); 847 if (!smp) 848 return NULL; 849 850 smp->tfm_aes = crypto_alloc_blkcipher("ecb(aes)", 0, CRYPTO_ALG_ASYNC); 851 if (IS_ERR(smp->tfm_aes)) { 852 BT_ERR("Unable to create ECB crypto context"); 853 kfree(smp); 854 return NULL; 855 } 856 857 smp->conn = conn; 858 chan->data = smp; 859 860 SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_FAIL); 861 862 INIT_DELAYED_WORK(&smp->security_timer, smp_timeout); 863 864 hci_conn_hold(conn->hcon); 865 866 return smp; 867 } 868 869 int smp_user_confirm_reply(struct hci_conn *hcon, u16 mgmt_op, __le32 passkey) 870 { 871 struct l2cap_conn *conn = hcon->l2cap_data; 872 struct l2cap_chan *chan; 873 struct smp_chan *smp; 874 u32 value; 875 int err; 876 877 BT_DBG(""); 878 879 if (!conn) 880 return -ENOTCONN; 881 882 chan = conn->smp; 883 if (!chan) 884 return -ENOTCONN; 885 886 l2cap_chan_lock(chan); 887 if (!chan->data) { 888 err = -ENOTCONN; 889 goto unlock; 890 } 891 892 smp = chan->data; 893 894 switch (mgmt_op) { 895 case MGMT_OP_USER_PASSKEY_REPLY: 896 value = le32_to_cpu(passkey); 897 memset(smp->tk, 0, sizeof(smp->tk)); 898 BT_DBG("PassKey: %d", value); 899 put_unaligned_le32(value, smp->tk); 900 /* Fall Through */ 901 case MGMT_OP_USER_CONFIRM_REPLY: 902 set_bit(SMP_FLAG_TK_VALID, &smp->flags); 903 break; 904 case MGMT_OP_USER_PASSKEY_NEG_REPLY: 905 case MGMT_OP_USER_CONFIRM_NEG_REPLY: 906 smp_failure(conn, SMP_PASSKEY_ENTRY_FAILED); 907 err = 0; 908 goto unlock; 909 default: 910 smp_failure(conn, SMP_PASSKEY_ENTRY_FAILED); 911 err = -EOPNOTSUPP; 912 goto unlock; 913 } 914 915 err = 0; 916 917 /* If it is our turn to send Pairing Confirm, do so now */ 918 if (test_bit(SMP_FLAG_CFM_PENDING, &smp->flags)) { 919 u8 rsp = smp_confirm(smp); 920 if (rsp) 921 smp_failure(conn, rsp); 922 } 923 924 unlock: 925 l2cap_chan_unlock(chan); 926 return err; 927 } 928 929 static u8 smp_cmd_pairing_req(struct l2cap_conn *conn, struct sk_buff *skb) 930 { 931 struct smp_cmd_pairing rsp, *req = (void *) skb->data; 932 struct l2cap_chan *chan = conn->smp; 933 struct hci_dev *hdev = conn->hcon->hdev; 934 struct smp_chan *smp; 935 u8 key_size, auth, sec_level; 936 int ret; 937 938 BT_DBG("conn %p", conn); 939 940 if (skb->len < sizeof(*req)) 941 return SMP_INVALID_PARAMS; 942 943 if (conn->hcon->role != HCI_ROLE_SLAVE) 944 return SMP_CMD_NOTSUPP; 945 946 if (!chan->data) 947 smp = smp_chan_create(conn); 948 else 949 smp = chan->data; 950 951 if (!smp) 952 return SMP_UNSPECIFIED; 953 954 /* We didn't start the pairing, so match remote */ 955 auth = req->auth_req & AUTH_REQ_MASK; 956 957 if (!test_bit(HCI_BONDABLE, &hdev->dev_flags) && 958 (auth & SMP_AUTH_BONDING)) 959 return SMP_PAIRING_NOTSUPP; 960 961 smp->preq[0] = SMP_CMD_PAIRING_REQ; 962 memcpy(&smp->preq[1], req, sizeof(*req)); 963 skb_pull(skb, sizeof(*req)); 964 965 if (conn->hcon->io_capability == HCI_IO_NO_INPUT_OUTPUT) 966 sec_level = BT_SECURITY_MEDIUM; 967 else 968 sec_level = authreq_to_seclevel(auth); 969 970 if (sec_level > conn->hcon->pending_sec_level) 971 conn->hcon->pending_sec_level = sec_level; 972 973 /* If we need MITM check that it can be acheived */ 974 if (conn->hcon->pending_sec_level >= BT_SECURITY_HIGH) { 975 u8 method; 976 977 method = get_auth_method(smp, conn->hcon->io_capability, 978 req->io_capability); 979 if (method == JUST_WORKS || method == JUST_CFM) 980 return SMP_AUTH_REQUIREMENTS; 981 } 982 983 build_pairing_cmd(conn, req, &rsp, auth); 984 985 key_size = min(req->max_key_size, rsp.max_key_size); 986 if (check_enc_key_size(conn, key_size)) 987 return SMP_ENC_KEY_SIZE; 988 989 get_random_bytes(smp->prnd, sizeof(smp->prnd)); 990 991 smp->prsp[0] = SMP_CMD_PAIRING_RSP; 992 memcpy(&smp->prsp[1], &rsp, sizeof(rsp)); 993 994 smp_send_cmd(conn, SMP_CMD_PAIRING_RSP, sizeof(rsp), &rsp); 995 SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_CONFIRM); 996 997 /* Request setup of TK */ 998 ret = tk_request(conn, 0, auth, rsp.io_capability, req->io_capability); 999 if (ret) 1000 return SMP_UNSPECIFIED; 1001 1002 return 0; 1003 } 1004 1005 static u8 smp_cmd_pairing_rsp(struct l2cap_conn *conn, struct sk_buff *skb) 1006 { 1007 struct smp_cmd_pairing *req, *rsp = (void *) skb->data; 1008 struct l2cap_chan *chan = conn->smp; 1009 struct smp_chan *smp = chan->data; 1010 u8 key_size, auth; 1011 int ret; 1012 1013 BT_DBG("conn %p", conn); 1014 1015 if (skb->len < sizeof(*rsp)) 1016 return SMP_INVALID_PARAMS; 1017 1018 if (conn->hcon->role != HCI_ROLE_MASTER) 1019 return SMP_CMD_NOTSUPP; 1020 1021 skb_pull(skb, sizeof(*rsp)); 1022 1023 req = (void *) &smp->preq[1]; 1024 1025 key_size = min(req->max_key_size, rsp->max_key_size); 1026 if (check_enc_key_size(conn, key_size)) 1027 return SMP_ENC_KEY_SIZE; 1028 1029 auth = rsp->auth_req & AUTH_REQ_MASK; 1030 1031 /* If we need MITM check that it can be acheived */ 1032 if (conn->hcon->pending_sec_level >= BT_SECURITY_HIGH) { 1033 u8 method; 1034 1035 method = get_auth_method(smp, req->io_capability, 1036 rsp->io_capability); 1037 if (method == JUST_WORKS || method == JUST_CFM) 1038 return SMP_AUTH_REQUIREMENTS; 1039 } 1040 1041 get_random_bytes(smp->prnd, sizeof(smp->prnd)); 1042 1043 smp->prsp[0] = SMP_CMD_PAIRING_RSP; 1044 memcpy(&smp->prsp[1], rsp, sizeof(*rsp)); 1045 1046 /* Update remote key distribution in case the remote cleared 1047 * some bits that we had enabled in our request. 1048 */ 1049 smp->remote_key_dist &= rsp->resp_key_dist; 1050 1051 auth |= req->auth_req; 1052 1053 ret = tk_request(conn, 0, auth, req->io_capability, rsp->io_capability); 1054 if (ret) 1055 return SMP_UNSPECIFIED; 1056 1057 set_bit(SMP_FLAG_CFM_PENDING, &smp->flags); 1058 1059 /* Can't compose response until we have been confirmed */ 1060 if (test_bit(SMP_FLAG_TK_VALID, &smp->flags)) 1061 return smp_confirm(smp); 1062 1063 return 0; 1064 } 1065 1066 static u8 smp_cmd_pairing_confirm(struct l2cap_conn *conn, struct sk_buff *skb) 1067 { 1068 struct l2cap_chan *chan = conn->smp; 1069 struct smp_chan *smp = chan->data; 1070 1071 BT_DBG("conn %p %s", conn, conn->hcon->out ? "master" : "slave"); 1072 1073 if (skb->len < sizeof(smp->pcnf)) 1074 return SMP_INVALID_PARAMS; 1075 1076 memcpy(smp->pcnf, skb->data, sizeof(smp->pcnf)); 1077 skb_pull(skb, sizeof(smp->pcnf)); 1078 1079 if (conn->hcon->out) { 1080 smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM, sizeof(smp->prnd), 1081 smp->prnd); 1082 SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_RANDOM); 1083 return 0; 1084 } 1085 1086 if (test_bit(SMP_FLAG_TK_VALID, &smp->flags)) 1087 return smp_confirm(smp); 1088 else 1089 set_bit(SMP_FLAG_CFM_PENDING, &smp->flags); 1090 1091 return 0; 1092 } 1093 1094 static u8 smp_cmd_pairing_random(struct l2cap_conn *conn, struct sk_buff *skb) 1095 { 1096 struct l2cap_chan *chan = conn->smp; 1097 struct smp_chan *smp = chan->data; 1098 1099 BT_DBG("conn %p", conn); 1100 1101 if (skb->len < sizeof(smp->rrnd)) 1102 return SMP_INVALID_PARAMS; 1103 1104 memcpy(smp->rrnd, skb->data, sizeof(smp->rrnd)); 1105 skb_pull(skb, sizeof(smp->rrnd)); 1106 1107 return smp_random(smp); 1108 } 1109 1110 static bool smp_ltk_encrypt(struct l2cap_conn *conn, u8 sec_level) 1111 { 1112 struct smp_ltk *key; 1113 struct hci_conn *hcon = conn->hcon; 1114 1115 key = hci_find_ltk_by_addr(hcon->hdev, &hcon->dst, hcon->dst_type, 1116 hcon->role); 1117 if (!key) 1118 return false; 1119 1120 if (smp_ltk_sec_level(key) < sec_level) 1121 return false; 1122 1123 if (test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &hcon->flags)) 1124 return true; 1125 1126 hci_le_start_enc(hcon, key->ediv, key->rand, key->val); 1127 hcon->enc_key_size = key->enc_size; 1128 1129 /* We never store STKs for master role, so clear this flag */ 1130 clear_bit(HCI_CONN_STK_ENCRYPT, &hcon->flags); 1131 1132 return true; 1133 } 1134 1135 bool smp_sufficient_security(struct hci_conn *hcon, u8 sec_level) 1136 { 1137 if (sec_level == BT_SECURITY_LOW) 1138 return true; 1139 1140 /* If we're encrypted with an STK always claim insufficient 1141 * security. This way we allow the connection to be re-encrypted 1142 * with an LTK, even if the LTK provides the same level of 1143 * security. Only exception is if we don't have an LTK (e.g. 1144 * because of key distribution bits). 1145 */ 1146 if (test_bit(HCI_CONN_STK_ENCRYPT, &hcon->flags) && 1147 hci_find_ltk_by_addr(hcon->hdev, &hcon->dst, hcon->dst_type, 1148 hcon->role)) 1149 return false; 1150 1151 if (hcon->sec_level >= sec_level) 1152 return true; 1153 1154 return false; 1155 } 1156 1157 static u8 smp_cmd_security_req(struct l2cap_conn *conn, struct sk_buff *skb) 1158 { 1159 struct smp_cmd_security_req *rp = (void *) skb->data; 1160 struct smp_cmd_pairing cp; 1161 struct hci_conn *hcon = conn->hcon; 1162 struct smp_chan *smp; 1163 u8 sec_level, auth; 1164 1165 BT_DBG("conn %p", conn); 1166 1167 if (skb->len < sizeof(*rp)) 1168 return SMP_INVALID_PARAMS; 1169 1170 if (hcon->role != HCI_ROLE_MASTER) 1171 return SMP_CMD_NOTSUPP; 1172 1173 auth = rp->auth_req & AUTH_REQ_MASK; 1174 1175 if (hcon->io_capability == HCI_IO_NO_INPUT_OUTPUT) 1176 sec_level = BT_SECURITY_MEDIUM; 1177 else 1178 sec_level = authreq_to_seclevel(auth); 1179 1180 if (smp_sufficient_security(hcon, sec_level)) 1181 return 0; 1182 1183 if (sec_level > hcon->pending_sec_level) 1184 hcon->pending_sec_level = sec_level; 1185 1186 if (smp_ltk_encrypt(conn, hcon->pending_sec_level)) 1187 return 0; 1188 1189 smp = smp_chan_create(conn); 1190 if (!smp) 1191 return SMP_UNSPECIFIED; 1192 1193 if (!test_bit(HCI_BONDABLE, &hcon->hdev->dev_flags) && 1194 (auth & SMP_AUTH_BONDING)) 1195 return SMP_PAIRING_NOTSUPP; 1196 1197 skb_pull(skb, sizeof(*rp)); 1198 1199 memset(&cp, 0, sizeof(cp)); 1200 build_pairing_cmd(conn, &cp, NULL, auth); 1201 1202 smp->preq[0] = SMP_CMD_PAIRING_REQ; 1203 memcpy(&smp->preq[1], &cp, sizeof(cp)); 1204 1205 smp_send_cmd(conn, SMP_CMD_PAIRING_REQ, sizeof(cp), &cp); 1206 SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_RSP); 1207 1208 return 0; 1209 } 1210 1211 int smp_conn_security(struct hci_conn *hcon, __u8 sec_level) 1212 { 1213 struct l2cap_conn *conn = hcon->l2cap_data; 1214 struct l2cap_chan *chan; 1215 struct smp_chan *smp; 1216 __u8 authreq; 1217 int ret; 1218 1219 BT_DBG("conn %p hcon %p level 0x%2.2x", conn, hcon, sec_level); 1220 1221 /* This may be NULL if there's an unexpected disconnection */ 1222 if (!conn) 1223 return 1; 1224 1225 chan = conn->smp; 1226 1227 if (!test_bit(HCI_LE_ENABLED, &hcon->hdev->dev_flags)) 1228 return 1; 1229 1230 if (smp_sufficient_security(hcon, sec_level)) 1231 return 1; 1232 1233 if (sec_level > hcon->pending_sec_level) 1234 hcon->pending_sec_level = sec_level; 1235 1236 if (hcon->role == HCI_ROLE_MASTER) 1237 if (smp_ltk_encrypt(conn, hcon->pending_sec_level)) 1238 return 0; 1239 1240 l2cap_chan_lock(chan); 1241 1242 /* If SMP is already in progress ignore this request */ 1243 if (chan->data) { 1244 ret = 0; 1245 goto unlock; 1246 } 1247 1248 smp = smp_chan_create(conn); 1249 if (!smp) { 1250 ret = 1; 1251 goto unlock; 1252 } 1253 1254 authreq = seclevel_to_authreq(sec_level); 1255 1256 /* Require MITM if IO Capability allows or the security level 1257 * requires it. 1258 */ 1259 if (hcon->io_capability != HCI_IO_NO_INPUT_OUTPUT || 1260 hcon->pending_sec_level > BT_SECURITY_MEDIUM) 1261 authreq |= SMP_AUTH_MITM; 1262 1263 if (hcon->role == HCI_ROLE_MASTER) { 1264 struct smp_cmd_pairing cp; 1265 1266 build_pairing_cmd(conn, &cp, NULL, authreq); 1267 smp->preq[0] = SMP_CMD_PAIRING_REQ; 1268 memcpy(&smp->preq[1], &cp, sizeof(cp)); 1269 1270 smp_send_cmd(conn, SMP_CMD_PAIRING_REQ, sizeof(cp), &cp); 1271 SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_RSP); 1272 } else { 1273 struct smp_cmd_security_req cp; 1274 cp.auth_req = authreq; 1275 smp_send_cmd(conn, SMP_CMD_SECURITY_REQ, sizeof(cp), &cp); 1276 SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_REQ); 1277 } 1278 1279 set_bit(SMP_FLAG_INITIATOR, &smp->flags); 1280 ret = 0; 1281 1282 unlock: 1283 l2cap_chan_unlock(chan); 1284 return ret; 1285 } 1286 1287 static int smp_cmd_encrypt_info(struct l2cap_conn *conn, struct sk_buff *skb) 1288 { 1289 struct smp_cmd_encrypt_info *rp = (void *) skb->data; 1290 struct l2cap_chan *chan = conn->smp; 1291 struct smp_chan *smp = chan->data; 1292 1293 BT_DBG("conn %p", conn); 1294 1295 if (skb->len < sizeof(*rp)) 1296 return SMP_INVALID_PARAMS; 1297 1298 SMP_ALLOW_CMD(smp, SMP_CMD_MASTER_IDENT); 1299 1300 skb_pull(skb, sizeof(*rp)); 1301 1302 memcpy(smp->tk, rp->ltk, sizeof(smp->tk)); 1303 1304 return 0; 1305 } 1306 1307 static int smp_cmd_master_ident(struct l2cap_conn *conn, struct sk_buff *skb) 1308 { 1309 struct smp_cmd_master_ident *rp = (void *) skb->data; 1310 struct l2cap_chan *chan = conn->smp; 1311 struct smp_chan *smp = chan->data; 1312 struct hci_dev *hdev = conn->hcon->hdev; 1313 struct hci_conn *hcon = conn->hcon; 1314 struct smp_ltk *ltk; 1315 u8 authenticated; 1316 1317 BT_DBG("conn %p", conn); 1318 1319 if (skb->len < sizeof(*rp)) 1320 return SMP_INVALID_PARAMS; 1321 1322 /* Mark the information as received */ 1323 smp->remote_key_dist &= ~SMP_DIST_ENC_KEY; 1324 1325 if (smp->remote_key_dist & SMP_DIST_ID_KEY) 1326 SMP_ALLOW_CMD(smp, SMP_CMD_IDENT_INFO); 1327 else if (smp->remote_key_dist & SMP_DIST_SIGN) 1328 SMP_ALLOW_CMD(smp, SMP_CMD_SIGN_INFO); 1329 1330 skb_pull(skb, sizeof(*rp)); 1331 1332 hci_dev_lock(hdev); 1333 authenticated = (hcon->sec_level == BT_SECURITY_HIGH); 1334 ltk = hci_add_ltk(hdev, &hcon->dst, hcon->dst_type, SMP_LTK, 1335 authenticated, smp->tk, smp->enc_key_size, 1336 rp->ediv, rp->rand); 1337 smp->ltk = ltk; 1338 if (!(smp->remote_key_dist & KEY_DIST_MASK)) 1339 smp_distribute_keys(smp); 1340 hci_dev_unlock(hdev); 1341 1342 return 0; 1343 } 1344 1345 static int smp_cmd_ident_info(struct l2cap_conn *conn, struct sk_buff *skb) 1346 { 1347 struct smp_cmd_ident_info *info = (void *) skb->data; 1348 struct l2cap_chan *chan = conn->smp; 1349 struct smp_chan *smp = chan->data; 1350 1351 BT_DBG(""); 1352 1353 if (skb->len < sizeof(*info)) 1354 return SMP_INVALID_PARAMS; 1355 1356 SMP_ALLOW_CMD(smp, SMP_CMD_IDENT_ADDR_INFO); 1357 1358 skb_pull(skb, sizeof(*info)); 1359 1360 memcpy(smp->irk, info->irk, 16); 1361 1362 return 0; 1363 } 1364 1365 static int smp_cmd_ident_addr_info(struct l2cap_conn *conn, 1366 struct sk_buff *skb) 1367 { 1368 struct smp_cmd_ident_addr_info *info = (void *) skb->data; 1369 struct l2cap_chan *chan = conn->smp; 1370 struct smp_chan *smp = chan->data; 1371 struct hci_conn *hcon = conn->hcon; 1372 bdaddr_t rpa; 1373 1374 BT_DBG(""); 1375 1376 if (skb->len < sizeof(*info)) 1377 return SMP_INVALID_PARAMS; 1378 1379 /* Mark the information as received */ 1380 smp->remote_key_dist &= ~SMP_DIST_ID_KEY; 1381 1382 if (smp->remote_key_dist & SMP_DIST_SIGN) 1383 SMP_ALLOW_CMD(smp, SMP_CMD_SIGN_INFO); 1384 1385 skb_pull(skb, sizeof(*info)); 1386 1387 hci_dev_lock(hcon->hdev); 1388 1389 /* Strictly speaking the Core Specification (4.1) allows sending 1390 * an empty address which would force us to rely on just the IRK 1391 * as "identity information". However, since such 1392 * implementations are not known of and in order to not over 1393 * complicate our implementation, simply pretend that we never 1394 * received an IRK for such a device. 1395 */ 1396 if (!bacmp(&info->bdaddr, BDADDR_ANY)) { 1397 BT_ERR("Ignoring IRK with no identity address"); 1398 goto distribute; 1399 } 1400 1401 bacpy(&smp->id_addr, &info->bdaddr); 1402 smp->id_addr_type = info->addr_type; 1403 1404 if (hci_bdaddr_is_rpa(&hcon->dst, hcon->dst_type)) 1405 bacpy(&rpa, &hcon->dst); 1406 else 1407 bacpy(&rpa, BDADDR_ANY); 1408 1409 smp->remote_irk = hci_add_irk(conn->hcon->hdev, &smp->id_addr, 1410 smp->id_addr_type, smp->irk, &rpa); 1411 1412 distribute: 1413 if (!(smp->remote_key_dist & KEY_DIST_MASK)) 1414 smp_distribute_keys(smp); 1415 1416 hci_dev_unlock(hcon->hdev); 1417 1418 return 0; 1419 } 1420 1421 static int smp_cmd_sign_info(struct l2cap_conn *conn, struct sk_buff *skb) 1422 { 1423 struct smp_cmd_sign_info *rp = (void *) skb->data; 1424 struct l2cap_chan *chan = conn->smp; 1425 struct smp_chan *smp = chan->data; 1426 struct hci_dev *hdev = conn->hcon->hdev; 1427 struct smp_csrk *csrk; 1428 1429 BT_DBG("conn %p", conn); 1430 1431 if (skb->len < sizeof(*rp)) 1432 return SMP_INVALID_PARAMS; 1433 1434 /* Mark the information as received */ 1435 smp->remote_key_dist &= ~SMP_DIST_SIGN; 1436 1437 skb_pull(skb, sizeof(*rp)); 1438 1439 hci_dev_lock(hdev); 1440 csrk = kzalloc(sizeof(*csrk), GFP_KERNEL); 1441 if (csrk) { 1442 csrk->master = 0x01; 1443 memcpy(csrk->val, rp->csrk, sizeof(csrk->val)); 1444 } 1445 smp->csrk = csrk; 1446 smp_distribute_keys(smp); 1447 hci_dev_unlock(hdev); 1448 1449 return 0; 1450 } 1451 1452 static int smp_sig_channel(struct l2cap_chan *chan, struct sk_buff *skb) 1453 { 1454 struct l2cap_conn *conn = chan->conn; 1455 struct hci_conn *hcon = conn->hcon; 1456 struct smp_chan *smp; 1457 __u8 code, reason; 1458 int err = 0; 1459 1460 if (hcon->type != LE_LINK) { 1461 kfree_skb(skb); 1462 return 0; 1463 } 1464 1465 if (skb->len < 1) 1466 return -EILSEQ; 1467 1468 if (!test_bit(HCI_LE_ENABLED, &hcon->hdev->dev_flags)) { 1469 reason = SMP_PAIRING_NOTSUPP; 1470 goto done; 1471 } 1472 1473 code = skb->data[0]; 1474 skb_pull(skb, sizeof(code)); 1475 1476 smp = chan->data; 1477 1478 if (code > SMP_CMD_MAX) 1479 goto drop; 1480 1481 if (smp && !test_and_clear_bit(code, &smp->allow_cmd)) 1482 goto drop; 1483 1484 /* If we don't have a context the only allowed commands are 1485 * pairing request and security request. 1486 */ 1487 if (!smp && code != SMP_CMD_PAIRING_REQ && code != SMP_CMD_SECURITY_REQ) 1488 goto drop; 1489 1490 switch (code) { 1491 case SMP_CMD_PAIRING_REQ: 1492 reason = smp_cmd_pairing_req(conn, skb); 1493 break; 1494 1495 case SMP_CMD_PAIRING_FAIL: 1496 smp_failure(conn, 0); 1497 err = -EPERM; 1498 break; 1499 1500 case SMP_CMD_PAIRING_RSP: 1501 reason = smp_cmd_pairing_rsp(conn, skb); 1502 break; 1503 1504 case SMP_CMD_SECURITY_REQ: 1505 reason = smp_cmd_security_req(conn, skb); 1506 break; 1507 1508 case SMP_CMD_PAIRING_CONFIRM: 1509 reason = smp_cmd_pairing_confirm(conn, skb); 1510 break; 1511 1512 case SMP_CMD_PAIRING_RANDOM: 1513 reason = smp_cmd_pairing_random(conn, skb); 1514 break; 1515 1516 case SMP_CMD_ENCRYPT_INFO: 1517 reason = smp_cmd_encrypt_info(conn, skb); 1518 break; 1519 1520 case SMP_CMD_MASTER_IDENT: 1521 reason = smp_cmd_master_ident(conn, skb); 1522 break; 1523 1524 case SMP_CMD_IDENT_INFO: 1525 reason = smp_cmd_ident_info(conn, skb); 1526 break; 1527 1528 case SMP_CMD_IDENT_ADDR_INFO: 1529 reason = smp_cmd_ident_addr_info(conn, skb); 1530 break; 1531 1532 case SMP_CMD_SIGN_INFO: 1533 reason = smp_cmd_sign_info(conn, skb); 1534 break; 1535 1536 default: 1537 BT_DBG("Unknown command code 0x%2.2x", code); 1538 reason = SMP_CMD_NOTSUPP; 1539 goto done; 1540 } 1541 1542 done: 1543 if (!err) { 1544 if (reason) 1545 smp_failure(conn, reason); 1546 kfree_skb(skb); 1547 } 1548 1549 return err; 1550 1551 drop: 1552 BT_ERR("%s unexpected SMP command 0x%02x from %pMR", hcon->hdev->name, 1553 code, &hcon->dst); 1554 kfree_skb(skb); 1555 return 0; 1556 } 1557 1558 static void smp_teardown_cb(struct l2cap_chan *chan, int err) 1559 { 1560 struct l2cap_conn *conn = chan->conn; 1561 1562 BT_DBG("chan %p", chan); 1563 1564 if (chan->data) 1565 smp_chan_destroy(conn); 1566 1567 conn->smp = NULL; 1568 l2cap_chan_put(chan); 1569 } 1570 1571 static void smp_resume_cb(struct l2cap_chan *chan) 1572 { 1573 struct smp_chan *smp = chan->data; 1574 struct l2cap_conn *conn = chan->conn; 1575 struct hci_conn *hcon = conn->hcon; 1576 1577 BT_DBG("chan %p", chan); 1578 1579 if (!smp) 1580 return; 1581 1582 if (!test_bit(HCI_CONN_ENCRYPT, &hcon->flags)) 1583 return; 1584 1585 cancel_delayed_work(&smp->security_timer); 1586 1587 smp_distribute_keys(smp); 1588 } 1589 1590 static void smp_ready_cb(struct l2cap_chan *chan) 1591 { 1592 struct l2cap_conn *conn = chan->conn; 1593 1594 BT_DBG("chan %p", chan); 1595 1596 conn->smp = chan; 1597 l2cap_chan_hold(chan); 1598 } 1599 1600 static int smp_recv_cb(struct l2cap_chan *chan, struct sk_buff *skb) 1601 { 1602 int err; 1603 1604 BT_DBG("chan %p", chan); 1605 1606 err = smp_sig_channel(chan, skb); 1607 if (err) { 1608 struct smp_chan *smp = chan->data; 1609 1610 if (smp) 1611 cancel_delayed_work_sync(&smp->security_timer); 1612 1613 hci_disconnect(chan->conn->hcon, HCI_ERROR_AUTH_FAILURE); 1614 } 1615 1616 return err; 1617 } 1618 1619 static struct sk_buff *smp_alloc_skb_cb(struct l2cap_chan *chan, 1620 unsigned long hdr_len, 1621 unsigned long len, int nb) 1622 { 1623 struct sk_buff *skb; 1624 1625 skb = bt_skb_alloc(hdr_len + len, GFP_KERNEL); 1626 if (!skb) 1627 return ERR_PTR(-ENOMEM); 1628 1629 skb->priority = HCI_PRIO_MAX; 1630 bt_cb(skb)->chan = chan; 1631 1632 return skb; 1633 } 1634 1635 static const struct l2cap_ops smp_chan_ops = { 1636 .name = "Security Manager", 1637 .ready = smp_ready_cb, 1638 .recv = smp_recv_cb, 1639 .alloc_skb = smp_alloc_skb_cb, 1640 .teardown = smp_teardown_cb, 1641 .resume = smp_resume_cb, 1642 1643 .new_connection = l2cap_chan_no_new_connection, 1644 .state_change = l2cap_chan_no_state_change, 1645 .close = l2cap_chan_no_close, 1646 .defer = l2cap_chan_no_defer, 1647 .suspend = l2cap_chan_no_suspend, 1648 .set_shutdown = l2cap_chan_no_set_shutdown, 1649 .get_sndtimeo = l2cap_chan_no_get_sndtimeo, 1650 .memcpy_fromiovec = l2cap_chan_no_memcpy_fromiovec, 1651 }; 1652 1653 static inline struct l2cap_chan *smp_new_conn_cb(struct l2cap_chan *pchan) 1654 { 1655 struct l2cap_chan *chan; 1656 1657 BT_DBG("pchan %p", pchan); 1658 1659 chan = l2cap_chan_create(); 1660 if (!chan) 1661 return NULL; 1662 1663 chan->chan_type = pchan->chan_type; 1664 chan->ops = &smp_chan_ops; 1665 chan->scid = pchan->scid; 1666 chan->dcid = chan->scid; 1667 chan->imtu = pchan->imtu; 1668 chan->omtu = pchan->omtu; 1669 chan->mode = pchan->mode; 1670 1671 BT_DBG("created chan %p", chan); 1672 1673 return chan; 1674 } 1675 1676 static const struct l2cap_ops smp_root_chan_ops = { 1677 .name = "Security Manager Root", 1678 .new_connection = smp_new_conn_cb, 1679 1680 /* None of these are implemented for the root channel */ 1681 .close = l2cap_chan_no_close, 1682 .alloc_skb = l2cap_chan_no_alloc_skb, 1683 .recv = l2cap_chan_no_recv, 1684 .state_change = l2cap_chan_no_state_change, 1685 .teardown = l2cap_chan_no_teardown, 1686 .ready = l2cap_chan_no_ready, 1687 .defer = l2cap_chan_no_defer, 1688 .suspend = l2cap_chan_no_suspend, 1689 .resume = l2cap_chan_no_resume, 1690 .set_shutdown = l2cap_chan_no_set_shutdown, 1691 .get_sndtimeo = l2cap_chan_no_get_sndtimeo, 1692 .memcpy_fromiovec = l2cap_chan_no_memcpy_fromiovec, 1693 }; 1694 1695 int smp_register(struct hci_dev *hdev) 1696 { 1697 struct l2cap_chan *chan; 1698 struct crypto_blkcipher *tfm_aes; 1699 1700 BT_DBG("%s", hdev->name); 1701 1702 tfm_aes = crypto_alloc_blkcipher("ecb(aes)", 0, CRYPTO_ALG_ASYNC); 1703 if (IS_ERR(tfm_aes)) { 1704 int err = PTR_ERR(tfm_aes); 1705 BT_ERR("Unable to create crypto context"); 1706 return err; 1707 } 1708 1709 chan = l2cap_chan_create(); 1710 if (!chan) { 1711 crypto_free_blkcipher(tfm_aes); 1712 return -ENOMEM; 1713 } 1714 1715 chan->data = tfm_aes; 1716 1717 l2cap_add_scid(chan, L2CAP_CID_SMP); 1718 1719 l2cap_chan_set_defaults(chan); 1720 1721 bacpy(&chan->src, &hdev->bdaddr); 1722 chan->src_type = BDADDR_LE_PUBLIC; 1723 chan->state = BT_LISTEN; 1724 chan->mode = L2CAP_MODE_BASIC; 1725 chan->imtu = L2CAP_DEFAULT_MTU; 1726 chan->ops = &smp_root_chan_ops; 1727 1728 hdev->smp_data = chan; 1729 1730 return 0; 1731 } 1732 1733 void smp_unregister(struct hci_dev *hdev) 1734 { 1735 struct l2cap_chan *chan = hdev->smp_data; 1736 struct crypto_blkcipher *tfm_aes; 1737 1738 if (!chan) 1739 return; 1740 1741 BT_DBG("%s chan %p", hdev->name, chan); 1742 1743 tfm_aes = chan->data; 1744 if (tfm_aes) { 1745 chan->data = NULL; 1746 crypto_free_blkcipher(tfm_aes); 1747 } 1748 1749 hdev->smp_data = NULL; 1750 l2cap_chan_put(chan); 1751 } 1752