1 /* 2 BlueZ - Bluetooth protocol stack for Linux 3 4 Copyright (C) 2010 Nokia Corporation 5 Copyright (C) 2011-2012 Intel Corporation 6 7 This program is free software; you can redistribute it and/or modify 8 it under the terms of the GNU General Public License version 2 as 9 published by the Free Software Foundation; 10 11 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 12 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 13 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. 14 IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY 15 CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES 16 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 17 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 18 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 19 20 ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS, 21 COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS 22 SOFTWARE IS DISCLAIMED. 23 */ 24 25 /* Bluetooth HCI Management interface */ 26 27 #include <linux/module.h> 28 #include <asm/unaligned.h> 29 30 #include <net/bluetooth/bluetooth.h> 31 #include <net/bluetooth/hci_core.h> 32 #include <net/bluetooth/hci_sock.h> 33 #include <net/bluetooth/l2cap.h> 34 #include <net/bluetooth/mgmt.h> 35 36 #include "hci_request.h" 37 #include "smp.h" 38 #include "mgmt_util.h" 39 #include "mgmt_config.h" 40 #include "msft.h" 41 #include "eir.h" 42 #include "aosp.h" 43 44 #define MGMT_VERSION 1 45 #define MGMT_REVISION 22 46 47 static const u16 mgmt_commands[] = { 48 MGMT_OP_READ_INDEX_LIST, 49 MGMT_OP_READ_INFO, 50 MGMT_OP_SET_POWERED, 51 MGMT_OP_SET_DISCOVERABLE, 52 MGMT_OP_SET_CONNECTABLE, 53 MGMT_OP_SET_FAST_CONNECTABLE, 54 MGMT_OP_SET_BONDABLE, 55 MGMT_OP_SET_LINK_SECURITY, 56 MGMT_OP_SET_SSP, 57 MGMT_OP_SET_HS, 58 MGMT_OP_SET_LE, 59 MGMT_OP_SET_DEV_CLASS, 60 MGMT_OP_SET_LOCAL_NAME, 61 MGMT_OP_ADD_UUID, 62 MGMT_OP_REMOVE_UUID, 63 MGMT_OP_LOAD_LINK_KEYS, 64 MGMT_OP_LOAD_LONG_TERM_KEYS, 65 MGMT_OP_DISCONNECT, 66 MGMT_OP_GET_CONNECTIONS, 67 MGMT_OP_PIN_CODE_REPLY, 68 MGMT_OP_PIN_CODE_NEG_REPLY, 69 MGMT_OP_SET_IO_CAPABILITY, 70 MGMT_OP_PAIR_DEVICE, 71 MGMT_OP_CANCEL_PAIR_DEVICE, 72 MGMT_OP_UNPAIR_DEVICE, 73 MGMT_OP_USER_CONFIRM_REPLY, 74 MGMT_OP_USER_CONFIRM_NEG_REPLY, 75 MGMT_OP_USER_PASSKEY_REPLY, 76 MGMT_OP_USER_PASSKEY_NEG_REPLY, 77 MGMT_OP_READ_LOCAL_OOB_DATA, 78 MGMT_OP_ADD_REMOTE_OOB_DATA, 79 MGMT_OP_REMOVE_REMOTE_OOB_DATA, 80 MGMT_OP_START_DISCOVERY, 81 MGMT_OP_STOP_DISCOVERY, 82 MGMT_OP_CONFIRM_NAME, 83 MGMT_OP_BLOCK_DEVICE, 84 MGMT_OP_UNBLOCK_DEVICE, 85 MGMT_OP_SET_DEVICE_ID, 86 MGMT_OP_SET_ADVERTISING, 87 MGMT_OP_SET_BREDR, 88 MGMT_OP_SET_STATIC_ADDRESS, 89 MGMT_OP_SET_SCAN_PARAMS, 90 MGMT_OP_SET_SECURE_CONN, 91 MGMT_OP_SET_DEBUG_KEYS, 92 MGMT_OP_SET_PRIVACY, 93 MGMT_OP_LOAD_IRKS, 94 MGMT_OP_GET_CONN_INFO, 95 MGMT_OP_GET_CLOCK_INFO, 96 MGMT_OP_ADD_DEVICE, 97 MGMT_OP_REMOVE_DEVICE, 98 MGMT_OP_LOAD_CONN_PARAM, 99 MGMT_OP_READ_UNCONF_INDEX_LIST, 100 MGMT_OP_READ_CONFIG_INFO, 101 MGMT_OP_SET_EXTERNAL_CONFIG, 102 MGMT_OP_SET_PUBLIC_ADDRESS, 103 MGMT_OP_START_SERVICE_DISCOVERY, 104 MGMT_OP_READ_LOCAL_OOB_EXT_DATA, 105 MGMT_OP_READ_EXT_INDEX_LIST, 106 MGMT_OP_READ_ADV_FEATURES, 107 MGMT_OP_ADD_ADVERTISING, 108 MGMT_OP_REMOVE_ADVERTISING, 109 MGMT_OP_GET_ADV_SIZE_INFO, 110 MGMT_OP_START_LIMITED_DISCOVERY, 111 MGMT_OP_READ_EXT_INFO, 112 MGMT_OP_SET_APPEARANCE, 113 MGMT_OP_GET_PHY_CONFIGURATION, 114 MGMT_OP_SET_PHY_CONFIGURATION, 115 MGMT_OP_SET_BLOCKED_KEYS, 116 MGMT_OP_SET_WIDEBAND_SPEECH, 117 MGMT_OP_READ_CONTROLLER_CAP, 118 MGMT_OP_READ_EXP_FEATURES_INFO, 119 MGMT_OP_SET_EXP_FEATURE, 120 MGMT_OP_READ_DEF_SYSTEM_CONFIG, 121 MGMT_OP_SET_DEF_SYSTEM_CONFIG, 122 MGMT_OP_READ_DEF_RUNTIME_CONFIG, 123 MGMT_OP_SET_DEF_RUNTIME_CONFIG, 124 MGMT_OP_GET_DEVICE_FLAGS, 125 MGMT_OP_SET_DEVICE_FLAGS, 126 MGMT_OP_READ_ADV_MONITOR_FEATURES, 127 MGMT_OP_ADD_ADV_PATTERNS_MONITOR, 128 MGMT_OP_REMOVE_ADV_MONITOR, 129 MGMT_OP_ADD_EXT_ADV_PARAMS, 130 MGMT_OP_ADD_EXT_ADV_DATA, 131 MGMT_OP_ADD_ADV_PATTERNS_MONITOR_RSSI, 132 MGMT_OP_SET_MESH_RECEIVER, 133 MGMT_OP_MESH_READ_FEATURES, 134 MGMT_OP_MESH_SEND, 135 MGMT_OP_MESH_SEND_CANCEL, 136 }; 137 138 static const u16 mgmt_events[] = { 139 MGMT_EV_CONTROLLER_ERROR, 140 MGMT_EV_INDEX_ADDED, 141 MGMT_EV_INDEX_REMOVED, 142 MGMT_EV_NEW_SETTINGS, 143 MGMT_EV_CLASS_OF_DEV_CHANGED, 144 MGMT_EV_LOCAL_NAME_CHANGED, 145 MGMT_EV_NEW_LINK_KEY, 146 MGMT_EV_NEW_LONG_TERM_KEY, 147 MGMT_EV_DEVICE_CONNECTED, 148 MGMT_EV_DEVICE_DISCONNECTED, 149 MGMT_EV_CONNECT_FAILED, 150 MGMT_EV_PIN_CODE_REQUEST, 151 MGMT_EV_USER_CONFIRM_REQUEST, 152 MGMT_EV_USER_PASSKEY_REQUEST, 153 MGMT_EV_AUTH_FAILED, 154 MGMT_EV_DEVICE_FOUND, 155 MGMT_EV_DISCOVERING, 156 MGMT_EV_DEVICE_BLOCKED, 157 MGMT_EV_DEVICE_UNBLOCKED, 158 MGMT_EV_DEVICE_UNPAIRED, 159 MGMT_EV_PASSKEY_NOTIFY, 160 MGMT_EV_NEW_IRK, 161 MGMT_EV_NEW_CSRK, 162 MGMT_EV_DEVICE_ADDED, 163 MGMT_EV_DEVICE_REMOVED, 164 MGMT_EV_NEW_CONN_PARAM, 165 MGMT_EV_UNCONF_INDEX_ADDED, 166 MGMT_EV_UNCONF_INDEX_REMOVED, 167 MGMT_EV_NEW_CONFIG_OPTIONS, 168 MGMT_EV_EXT_INDEX_ADDED, 169 MGMT_EV_EXT_INDEX_REMOVED, 170 MGMT_EV_LOCAL_OOB_DATA_UPDATED, 171 MGMT_EV_ADVERTISING_ADDED, 172 MGMT_EV_ADVERTISING_REMOVED, 173 MGMT_EV_EXT_INFO_CHANGED, 174 MGMT_EV_PHY_CONFIGURATION_CHANGED, 175 MGMT_EV_EXP_FEATURE_CHANGED, 176 MGMT_EV_DEVICE_FLAGS_CHANGED, 177 MGMT_EV_ADV_MONITOR_ADDED, 178 MGMT_EV_ADV_MONITOR_REMOVED, 179 MGMT_EV_CONTROLLER_SUSPEND, 180 MGMT_EV_CONTROLLER_RESUME, 181 MGMT_EV_ADV_MONITOR_DEVICE_FOUND, 182 MGMT_EV_ADV_MONITOR_DEVICE_LOST, 183 }; 184 185 static const u16 mgmt_untrusted_commands[] = { 186 MGMT_OP_READ_INDEX_LIST, 187 MGMT_OP_READ_INFO, 188 MGMT_OP_READ_UNCONF_INDEX_LIST, 189 MGMT_OP_READ_CONFIG_INFO, 190 MGMT_OP_READ_EXT_INDEX_LIST, 191 MGMT_OP_READ_EXT_INFO, 192 MGMT_OP_READ_CONTROLLER_CAP, 193 MGMT_OP_READ_EXP_FEATURES_INFO, 194 MGMT_OP_READ_DEF_SYSTEM_CONFIG, 195 MGMT_OP_READ_DEF_RUNTIME_CONFIG, 196 }; 197 198 static const u16 mgmt_untrusted_events[] = { 199 MGMT_EV_INDEX_ADDED, 200 MGMT_EV_INDEX_REMOVED, 201 MGMT_EV_NEW_SETTINGS, 202 MGMT_EV_CLASS_OF_DEV_CHANGED, 203 MGMT_EV_LOCAL_NAME_CHANGED, 204 MGMT_EV_UNCONF_INDEX_ADDED, 205 MGMT_EV_UNCONF_INDEX_REMOVED, 206 MGMT_EV_NEW_CONFIG_OPTIONS, 207 MGMT_EV_EXT_INDEX_ADDED, 208 MGMT_EV_EXT_INDEX_REMOVED, 209 MGMT_EV_EXT_INFO_CHANGED, 210 MGMT_EV_EXP_FEATURE_CHANGED, 211 }; 212 213 #define CACHE_TIMEOUT msecs_to_jiffies(2 * 1000) 214 215 #define ZERO_KEY "\x00\x00\x00\x00\x00\x00\x00\x00" \ 216 "\x00\x00\x00\x00\x00\x00\x00\x00" 217 218 /* HCI to MGMT error code conversion table */ 219 static const u8 mgmt_status_table[] = { 220 MGMT_STATUS_SUCCESS, 221 MGMT_STATUS_UNKNOWN_COMMAND, /* Unknown Command */ 222 MGMT_STATUS_NOT_CONNECTED, /* No Connection */ 223 MGMT_STATUS_FAILED, /* Hardware Failure */ 224 MGMT_STATUS_CONNECT_FAILED, /* Page Timeout */ 225 MGMT_STATUS_AUTH_FAILED, /* Authentication Failed */ 226 MGMT_STATUS_AUTH_FAILED, /* PIN or Key Missing */ 227 MGMT_STATUS_NO_RESOURCES, /* Memory Full */ 228 MGMT_STATUS_TIMEOUT, /* Connection Timeout */ 229 MGMT_STATUS_NO_RESOURCES, /* Max Number of Connections */ 230 MGMT_STATUS_NO_RESOURCES, /* Max Number of SCO Connections */ 231 MGMT_STATUS_ALREADY_CONNECTED, /* ACL Connection Exists */ 232 MGMT_STATUS_BUSY, /* Command Disallowed */ 233 MGMT_STATUS_NO_RESOURCES, /* Rejected Limited Resources */ 234 MGMT_STATUS_REJECTED, /* Rejected Security */ 235 MGMT_STATUS_REJECTED, /* Rejected Personal */ 236 MGMT_STATUS_TIMEOUT, /* Host Timeout */ 237 MGMT_STATUS_NOT_SUPPORTED, /* Unsupported Feature */ 238 MGMT_STATUS_INVALID_PARAMS, /* Invalid Parameters */ 239 MGMT_STATUS_DISCONNECTED, /* OE User Ended Connection */ 240 MGMT_STATUS_NO_RESOURCES, /* OE Low Resources */ 241 MGMT_STATUS_DISCONNECTED, /* OE Power Off */ 242 MGMT_STATUS_DISCONNECTED, /* Connection Terminated */ 243 MGMT_STATUS_BUSY, /* Repeated Attempts */ 244 MGMT_STATUS_REJECTED, /* Pairing Not Allowed */ 245 MGMT_STATUS_FAILED, /* Unknown LMP PDU */ 246 MGMT_STATUS_NOT_SUPPORTED, /* Unsupported Remote Feature */ 247 MGMT_STATUS_REJECTED, /* SCO Offset Rejected */ 248 MGMT_STATUS_REJECTED, /* SCO Interval Rejected */ 249 MGMT_STATUS_REJECTED, /* Air Mode Rejected */ 250 MGMT_STATUS_INVALID_PARAMS, /* Invalid LMP Parameters */ 251 MGMT_STATUS_FAILED, /* Unspecified Error */ 252 MGMT_STATUS_NOT_SUPPORTED, /* Unsupported LMP Parameter Value */ 253 MGMT_STATUS_FAILED, /* Role Change Not Allowed */ 254 MGMT_STATUS_TIMEOUT, /* LMP Response Timeout */ 255 MGMT_STATUS_FAILED, /* LMP Error Transaction Collision */ 256 MGMT_STATUS_FAILED, /* LMP PDU Not Allowed */ 257 MGMT_STATUS_REJECTED, /* Encryption Mode Not Accepted */ 258 MGMT_STATUS_FAILED, /* Unit Link Key Used */ 259 MGMT_STATUS_NOT_SUPPORTED, /* QoS Not Supported */ 260 MGMT_STATUS_TIMEOUT, /* Instant Passed */ 261 MGMT_STATUS_NOT_SUPPORTED, /* Pairing Not Supported */ 262 MGMT_STATUS_FAILED, /* Transaction Collision */ 263 MGMT_STATUS_FAILED, /* Reserved for future use */ 264 MGMT_STATUS_INVALID_PARAMS, /* Unacceptable Parameter */ 265 MGMT_STATUS_REJECTED, /* QoS Rejected */ 266 MGMT_STATUS_NOT_SUPPORTED, /* Classification Not Supported */ 267 MGMT_STATUS_REJECTED, /* Insufficient Security */ 268 MGMT_STATUS_INVALID_PARAMS, /* Parameter Out Of Range */ 269 MGMT_STATUS_FAILED, /* Reserved for future use */ 270 MGMT_STATUS_BUSY, /* Role Switch Pending */ 271 MGMT_STATUS_FAILED, /* Reserved for future use */ 272 MGMT_STATUS_FAILED, /* Slot Violation */ 273 MGMT_STATUS_FAILED, /* Role Switch Failed */ 274 MGMT_STATUS_INVALID_PARAMS, /* EIR Too Large */ 275 MGMT_STATUS_NOT_SUPPORTED, /* Simple Pairing Not Supported */ 276 MGMT_STATUS_BUSY, /* Host Busy Pairing */ 277 MGMT_STATUS_REJECTED, /* Rejected, No Suitable Channel */ 278 MGMT_STATUS_BUSY, /* Controller Busy */ 279 MGMT_STATUS_INVALID_PARAMS, /* Unsuitable Connection Interval */ 280 MGMT_STATUS_TIMEOUT, /* Directed Advertising Timeout */ 281 MGMT_STATUS_AUTH_FAILED, /* Terminated Due to MIC Failure */ 282 MGMT_STATUS_CONNECT_FAILED, /* Connection Establishment Failed */ 283 MGMT_STATUS_CONNECT_FAILED, /* MAC Connection Failed */ 284 }; 285 286 static u8 mgmt_errno_status(int err) 287 { 288 switch (err) { 289 case 0: 290 return MGMT_STATUS_SUCCESS; 291 case -EPERM: 292 return MGMT_STATUS_REJECTED; 293 case -EINVAL: 294 return MGMT_STATUS_INVALID_PARAMS; 295 case -EOPNOTSUPP: 296 return MGMT_STATUS_NOT_SUPPORTED; 297 case -EBUSY: 298 return MGMT_STATUS_BUSY; 299 case -ETIMEDOUT: 300 return MGMT_STATUS_AUTH_FAILED; 301 case -ENOMEM: 302 return MGMT_STATUS_NO_RESOURCES; 303 case -EISCONN: 304 return MGMT_STATUS_ALREADY_CONNECTED; 305 case -ENOTCONN: 306 return MGMT_STATUS_DISCONNECTED; 307 } 308 309 return MGMT_STATUS_FAILED; 310 } 311 312 static u8 mgmt_status(int err) 313 { 314 if (err < 0) 315 return mgmt_errno_status(err); 316 317 if (err < ARRAY_SIZE(mgmt_status_table)) 318 return mgmt_status_table[err]; 319 320 return MGMT_STATUS_FAILED; 321 } 322 323 static int mgmt_index_event(u16 event, struct hci_dev *hdev, void *data, 324 u16 len, int flag) 325 { 326 return mgmt_send_event(event, hdev, HCI_CHANNEL_CONTROL, data, len, 327 flag, NULL); 328 } 329 330 static int mgmt_limited_event(u16 event, struct hci_dev *hdev, void *data, 331 u16 len, int flag, struct sock *skip_sk) 332 { 333 return mgmt_send_event(event, hdev, HCI_CHANNEL_CONTROL, data, len, 334 flag, skip_sk); 335 } 336 337 static int mgmt_event(u16 event, struct hci_dev *hdev, void *data, u16 len, 338 struct sock *skip_sk) 339 { 340 return mgmt_send_event(event, hdev, HCI_CHANNEL_CONTROL, data, len, 341 HCI_SOCK_TRUSTED, skip_sk); 342 } 343 344 static int mgmt_event_skb(struct sk_buff *skb, struct sock *skip_sk) 345 { 346 return mgmt_send_event_skb(HCI_CHANNEL_CONTROL, skb, HCI_SOCK_TRUSTED, 347 skip_sk); 348 } 349 350 static u8 le_addr_type(u8 mgmt_addr_type) 351 { 352 if (mgmt_addr_type == BDADDR_LE_PUBLIC) 353 return ADDR_LE_DEV_PUBLIC; 354 else 355 return ADDR_LE_DEV_RANDOM; 356 } 357 358 void mgmt_fill_version_info(void *ver) 359 { 360 struct mgmt_rp_read_version *rp = ver; 361 362 rp->version = MGMT_VERSION; 363 rp->revision = cpu_to_le16(MGMT_REVISION); 364 } 365 366 static int read_version(struct sock *sk, struct hci_dev *hdev, void *data, 367 u16 data_len) 368 { 369 struct mgmt_rp_read_version rp; 370 371 bt_dev_dbg(hdev, "sock %p", sk); 372 373 mgmt_fill_version_info(&rp); 374 375 return mgmt_cmd_complete(sk, MGMT_INDEX_NONE, MGMT_OP_READ_VERSION, 0, 376 &rp, sizeof(rp)); 377 } 378 379 static int read_commands(struct sock *sk, struct hci_dev *hdev, void *data, 380 u16 data_len) 381 { 382 struct mgmt_rp_read_commands *rp; 383 u16 num_commands, num_events; 384 size_t rp_size; 385 int i, err; 386 387 bt_dev_dbg(hdev, "sock %p", sk); 388 389 if (hci_sock_test_flag(sk, HCI_SOCK_TRUSTED)) { 390 num_commands = ARRAY_SIZE(mgmt_commands); 391 num_events = ARRAY_SIZE(mgmt_events); 392 } else { 393 num_commands = ARRAY_SIZE(mgmt_untrusted_commands); 394 num_events = ARRAY_SIZE(mgmt_untrusted_events); 395 } 396 397 rp_size = sizeof(*rp) + ((num_commands + num_events) * sizeof(u16)); 398 399 rp = kmalloc(rp_size, GFP_KERNEL); 400 if (!rp) 401 return -ENOMEM; 402 403 rp->num_commands = cpu_to_le16(num_commands); 404 rp->num_events = cpu_to_le16(num_events); 405 406 if (hci_sock_test_flag(sk, HCI_SOCK_TRUSTED)) { 407 __le16 *opcode = rp->opcodes; 408 409 for (i = 0; i < num_commands; i++, opcode++) 410 put_unaligned_le16(mgmt_commands[i], opcode); 411 412 for (i = 0; i < num_events; i++, opcode++) 413 put_unaligned_le16(mgmt_events[i], opcode); 414 } else { 415 __le16 *opcode = rp->opcodes; 416 417 for (i = 0; i < num_commands; i++, opcode++) 418 put_unaligned_le16(mgmt_untrusted_commands[i], opcode); 419 420 for (i = 0; i < num_events; i++, opcode++) 421 put_unaligned_le16(mgmt_untrusted_events[i], opcode); 422 } 423 424 err = mgmt_cmd_complete(sk, MGMT_INDEX_NONE, MGMT_OP_READ_COMMANDS, 0, 425 rp, rp_size); 426 kfree(rp); 427 428 return err; 429 } 430 431 static int read_index_list(struct sock *sk, struct hci_dev *hdev, void *data, 432 u16 data_len) 433 { 434 struct mgmt_rp_read_index_list *rp; 435 struct hci_dev *d; 436 size_t rp_len; 437 u16 count; 438 int err; 439 440 bt_dev_dbg(hdev, "sock %p", sk); 441 442 read_lock(&hci_dev_list_lock); 443 444 count = 0; 445 list_for_each_entry(d, &hci_dev_list, list) { 446 if (d->dev_type == HCI_PRIMARY && 447 !hci_dev_test_flag(d, HCI_UNCONFIGURED)) 448 count++; 449 } 450 451 rp_len = sizeof(*rp) + (2 * count); 452 rp = kmalloc(rp_len, GFP_ATOMIC); 453 if (!rp) { 454 read_unlock(&hci_dev_list_lock); 455 return -ENOMEM; 456 } 457 458 count = 0; 459 list_for_each_entry(d, &hci_dev_list, list) { 460 if (hci_dev_test_flag(d, HCI_SETUP) || 461 hci_dev_test_flag(d, HCI_CONFIG) || 462 hci_dev_test_flag(d, HCI_USER_CHANNEL)) 463 continue; 464 465 /* Devices marked as raw-only are neither configured 466 * nor unconfigured controllers. 467 */ 468 if (test_bit(HCI_QUIRK_RAW_DEVICE, &d->quirks)) 469 continue; 470 471 if (d->dev_type == HCI_PRIMARY && 472 !hci_dev_test_flag(d, HCI_UNCONFIGURED)) { 473 rp->index[count++] = cpu_to_le16(d->id); 474 bt_dev_dbg(hdev, "Added hci%u", d->id); 475 } 476 } 477 478 rp->num_controllers = cpu_to_le16(count); 479 rp_len = sizeof(*rp) + (2 * count); 480 481 read_unlock(&hci_dev_list_lock); 482 483 err = mgmt_cmd_complete(sk, MGMT_INDEX_NONE, MGMT_OP_READ_INDEX_LIST, 484 0, rp, rp_len); 485 486 kfree(rp); 487 488 return err; 489 } 490 491 static int read_unconf_index_list(struct sock *sk, struct hci_dev *hdev, 492 void *data, u16 data_len) 493 { 494 struct mgmt_rp_read_unconf_index_list *rp; 495 struct hci_dev *d; 496 size_t rp_len; 497 u16 count; 498 int err; 499 500 bt_dev_dbg(hdev, "sock %p", sk); 501 502 read_lock(&hci_dev_list_lock); 503 504 count = 0; 505 list_for_each_entry(d, &hci_dev_list, list) { 506 if (d->dev_type == HCI_PRIMARY && 507 hci_dev_test_flag(d, HCI_UNCONFIGURED)) 508 count++; 509 } 510 511 rp_len = sizeof(*rp) + (2 * count); 512 rp = kmalloc(rp_len, GFP_ATOMIC); 513 if (!rp) { 514 read_unlock(&hci_dev_list_lock); 515 return -ENOMEM; 516 } 517 518 count = 0; 519 list_for_each_entry(d, &hci_dev_list, list) { 520 if (hci_dev_test_flag(d, HCI_SETUP) || 521 hci_dev_test_flag(d, HCI_CONFIG) || 522 hci_dev_test_flag(d, HCI_USER_CHANNEL)) 523 continue; 524 525 /* Devices marked as raw-only are neither configured 526 * nor unconfigured controllers. 527 */ 528 if (test_bit(HCI_QUIRK_RAW_DEVICE, &d->quirks)) 529 continue; 530 531 if (d->dev_type == HCI_PRIMARY && 532 hci_dev_test_flag(d, HCI_UNCONFIGURED)) { 533 rp->index[count++] = cpu_to_le16(d->id); 534 bt_dev_dbg(hdev, "Added hci%u", d->id); 535 } 536 } 537 538 rp->num_controllers = cpu_to_le16(count); 539 rp_len = sizeof(*rp) + (2 * count); 540 541 read_unlock(&hci_dev_list_lock); 542 543 err = mgmt_cmd_complete(sk, MGMT_INDEX_NONE, 544 MGMT_OP_READ_UNCONF_INDEX_LIST, 0, rp, rp_len); 545 546 kfree(rp); 547 548 return err; 549 } 550 551 static int read_ext_index_list(struct sock *sk, struct hci_dev *hdev, 552 void *data, u16 data_len) 553 { 554 struct mgmt_rp_read_ext_index_list *rp; 555 struct hci_dev *d; 556 u16 count; 557 int err; 558 559 bt_dev_dbg(hdev, "sock %p", sk); 560 561 read_lock(&hci_dev_list_lock); 562 563 count = 0; 564 list_for_each_entry(d, &hci_dev_list, list) { 565 if (d->dev_type == HCI_PRIMARY || d->dev_type == HCI_AMP) 566 count++; 567 } 568 569 rp = kmalloc(struct_size(rp, entry, count), GFP_ATOMIC); 570 if (!rp) { 571 read_unlock(&hci_dev_list_lock); 572 return -ENOMEM; 573 } 574 575 count = 0; 576 list_for_each_entry(d, &hci_dev_list, list) { 577 if (hci_dev_test_flag(d, HCI_SETUP) || 578 hci_dev_test_flag(d, HCI_CONFIG) || 579 hci_dev_test_flag(d, HCI_USER_CHANNEL)) 580 continue; 581 582 /* Devices marked as raw-only are neither configured 583 * nor unconfigured controllers. 584 */ 585 if (test_bit(HCI_QUIRK_RAW_DEVICE, &d->quirks)) 586 continue; 587 588 if (d->dev_type == HCI_PRIMARY) { 589 if (hci_dev_test_flag(d, HCI_UNCONFIGURED)) 590 rp->entry[count].type = 0x01; 591 else 592 rp->entry[count].type = 0x00; 593 } else if (d->dev_type == HCI_AMP) { 594 rp->entry[count].type = 0x02; 595 } else { 596 continue; 597 } 598 599 rp->entry[count].bus = d->bus; 600 rp->entry[count++].index = cpu_to_le16(d->id); 601 bt_dev_dbg(hdev, "Added hci%u", d->id); 602 } 603 604 rp->num_controllers = cpu_to_le16(count); 605 606 read_unlock(&hci_dev_list_lock); 607 608 /* If this command is called at least once, then all the 609 * default index and unconfigured index events are disabled 610 * and from now on only extended index events are used. 611 */ 612 hci_sock_set_flag(sk, HCI_MGMT_EXT_INDEX_EVENTS); 613 hci_sock_clear_flag(sk, HCI_MGMT_INDEX_EVENTS); 614 hci_sock_clear_flag(sk, HCI_MGMT_UNCONF_INDEX_EVENTS); 615 616 err = mgmt_cmd_complete(sk, MGMT_INDEX_NONE, 617 MGMT_OP_READ_EXT_INDEX_LIST, 0, rp, 618 struct_size(rp, entry, count)); 619 620 kfree(rp); 621 622 return err; 623 } 624 625 static bool is_configured(struct hci_dev *hdev) 626 { 627 if (test_bit(HCI_QUIRK_EXTERNAL_CONFIG, &hdev->quirks) && 628 !hci_dev_test_flag(hdev, HCI_EXT_CONFIGURED)) 629 return false; 630 631 if ((test_bit(HCI_QUIRK_INVALID_BDADDR, &hdev->quirks) || 632 test_bit(HCI_QUIRK_USE_BDADDR_PROPERTY, &hdev->quirks)) && 633 !bacmp(&hdev->public_addr, BDADDR_ANY)) 634 return false; 635 636 return true; 637 } 638 639 static __le32 get_missing_options(struct hci_dev *hdev) 640 { 641 u32 options = 0; 642 643 if (test_bit(HCI_QUIRK_EXTERNAL_CONFIG, &hdev->quirks) && 644 !hci_dev_test_flag(hdev, HCI_EXT_CONFIGURED)) 645 options |= MGMT_OPTION_EXTERNAL_CONFIG; 646 647 if ((test_bit(HCI_QUIRK_INVALID_BDADDR, &hdev->quirks) || 648 test_bit(HCI_QUIRK_USE_BDADDR_PROPERTY, &hdev->quirks)) && 649 !bacmp(&hdev->public_addr, BDADDR_ANY)) 650 options |= MGMT_OPTION_PUBLIC_ADDRESS; 651 652 return cpu_to_le32(options); 653 } 654 655 static int new_options(struct hci_dev *hdev, struct sock *skip) 656 { 657 __le32 options = get_missing_options(hdev); 658 659 return mgmt_limited_event(MGMT_EV_NEW_CONFIG_OPTIONS, hdev, &options, 660 sizeof(options), HCI_MGMT_OPTION_EVENTS, skip); 661 } 662 663 static int send_options_rsp(struct sock *sk, u16 opcode, struct hci_dev *hdev) 664 { 665 __le32 options = get_missing_options(hdev); 666 667 return mgmt_cmd_complete(sk, hdev->id, opcode, 0, &options, 668 sizeof(options)); 669 } 670 671 static int read_config_info(struct sock *sk, struct hci_dev *hdev, 672 void *data, u16 data_len) 673 { 674 struct mgmt_rp_read_config_info rp; 675 u32 options = 0; 676 677 bt_dev_dbg(hdev, "sock %p", sk); 678 679 hci_dev_lock(hdev); 680 681 memset(&rp, 0, sizeof(rp)); 682 rp.manufacturer = cpu_to_le16(hdev->manufacturer); 683 684 if (test_bit(HCI_QUIRK_EXTERNAL_CONFIG, &hdev->quirks)) 685 options |= MGMT_OPTION_EXTERNAL_CONFIG; 686 687 if (hdev->set_bdaddr) 688 options |= MGMT_OPTION_PUBLIC_ADDRESS; 689 690 rp.supported_options = cpu_to_le32(options); 691 rp.missing_options = get_missing_options(hdev); 692 693 hci_dev_unlock(hdev); 694 695 return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_READ_CONFIG_INFO, 0, 696 &rp, sizeof(rp)); 697 } 698 699 static u32 get_supported_phys(struct hci_dev *hdev) 700 { 701 u32 supported_phys = 0; 702 703 if (lmp_bredr_capable(hdev)) { 704 supported_phys |= MGMT_PHY_BR_1M_1SLOT; 705 706 if (hdev->features[0][0] & LMP_3SLOT) 707 supported_phys |= MGMT_PHY_BR_1M_3SLOT; 708 709 if (hdev->features[0][0] & LMP_5SLOT) 710 supported_phys |= MGMT_PHY_BR_1M_5SLOT; 711 712 if (lmp_edr_2m_capable(hdev)) { 713 supported_phys |= MGMT_PHY_EDR_2M_1SLOT; 714 715 if (lmp_edr_3slot_capable(hdev)) 716 supported_phys |= MGMT_PHY_EDR_2M_3SLOT; 717 718 if (lmp_edr_5slot_capable(hdev)) 719 supported_phys |= MGMT_PHY_EDR_2M_5SLOT; 720 721 if (lmp_edr_3m_capable(hdev)) { 722 supported_phys |= MGMT_PHY_EDR_3M_1SLOT; 723 724 if (lmp_edr_3slot_capable(hdev)) 725 supported_phys |= MGMT_PHY_EDR_3M_3SLOT; 726 727 if (lmp_edr_5slot_capable(hdev)) 728 supported_phys |= MGMT_PHY_EDR_3M_5SLOT; 729 } 730 } 731 } 732 733 if (lmp_le_capable(hdev)) { 734 supported_phys |= MGMT_PHY_LE_1M_TX; 735 supported_phys |= MGMT_PHY_LE_1M_RX; 736 737 if (hdev->le_features[1] & HCI_LE_PHY_2M) { 738 supported_phys |= MGMT_PHY_LE_2M_TX; 739 supported_phys |= MGMT_PHY_LE_2M_RX; 740 } 741 742 if (hdev->le_features[1] & HCI_LE_PHY_CODED) { 743 supported_phys |= MGMT_PHY_LE_CODED_TX; 744 supported_phys |= MGMT_PHY_LE_CODED_RX; 745 } 746 } 747 748 return supported_phys; 749 } 750 751 static u32 get_selected_phys(struct hci_dev *hdev) 752 { 753 u32 selected_phys = 0; 754 755 if (lmp_bredr_capable(hdev)) { 756 selected_phys |= MGMT_PHY_BR_1M_1SLOT; 757 758 if (hdev->pkt_type & (HCI_DM3 | HCI_DH3)) 759 selected_phys |= MGMT_PHY_BR_1M_3SLOT; 760 761 if (hdev->pkt_type & (HCI_DM5 | HCI_DH5)) 762 selected_phys |= MGMT_PHY_BR_1M_5SLOT; 763 764 if (lmp_edr_2m_capable(hdev)) { 765 if (!(hdev->pkt_type & HCI_2DH1)) 766 selected_phys |= MGMT_PHY_EDR_2M_1SLOT; 767 768 if (lmp_edr_3slot_capable(hdev) && 769 !(hdev->pkt_type & HCI_2DH3)) 770 selected_phys |= MGMT_PHY_EDR_2M_3SLOT; 771 772 if (lmp_edr_5slot_capable(hdev) && 773 !(hdev->pkt_type & HCI_2DH5)) 774 selected_phys |= MGMT_PHY_EDR_2M_5SLOT; 775 776 if (lmp_edr_3m_capable(hdev)) { 777 if (!(hdev->pkt_type & HCI_3DH1)) 778 selected_phys |= MGMT_PHY_EDR_3M_1SLOT; 779 780 if (lmp_edr_3slot_capable(hdev) && 781 !(hdev->pkt_type & HCI_3DH3)) 782 selected_phys |= MGMT_PHY_EDR_3M_3SLOT; 783 784 if (lmp_edr_5slot_capable(hdev) && 785 !(hdev->pkt_type & HCI_3DH5)) 786 selected_phys |= MGMT_PHY_EDR_3M_5SLOT; 787 } 788 } 789 } 790 791 if (lmp_le_capable(hdev)) { 792 if (hdev->le_tx_def_phys & HCI_LE_SET_PHY_1M) 793 selected_phys |= MGMT_PHY_LE_1M_TX; 794 795 if (hdev->le_rx_def_phys & HCI_LE_SET_PHY_1M) 796 selected_phys |= MGMT_PHY_LE_1M_RX; 797 798 if (hdev->le_tx_def_phys & HCI_LE_SET_PHY_2M) 799 selected_phys |= MGMT_PHY_LE_2M_TX; 800 801 if (hdev->le_rx_def_phys & HCI_LE_SET_PHY_2M) 802 selected_phys |= MGMT_PHY_LE_2M_RX; 803 804 if (hdev->le_tx_def_phys & HCI_LE_SET_PHY_CODED) 805 selected_phys |= MGMT_PHY_LE_CODED_TX; 806 807 if (hdev->le_rx_def_phys & HCI_LE_SET_PHY_CODED) 808 selected_phys |= MGMT_PHY_LE_CODED_RX; 809 } 810 811 return selected_phys; 812 } 813 814 static u32 get_configurable_phys(struct hci_dev *hdev) 815 { 816 return (get_supported_phys(hdev) & ~MGMT_PHY_BR_1M_1SLOT & 817 ~MGMT_PHY_LE_1M_TX & ~MGMT_PHY_LE_1M_RX); 818 } 819 820 static u32 get_supported_settings(struct hci_dev *hdev) 821 { 822 u32 settings = 0; 823 824 settings |= MGMT_SETTING_POWERED; 825 settings |= MGMT_SETTING_BONDABLE; 826 settings |= MGMT_SETTING_DEBUG_KEYS; 827 settings |= MGMT_SETTING_CONNECTABLE; 828 settings |= MGMT_SETTING_DISCOVERABLE; 829 830 if (lmp_bredr_capable(hdev)) { 831 if (hdev->hci_ver >= BLUETOOTH_VER_1_2) 832 settings |= MGMT_SETTING_FAST_CONNECTABLE; 833 settings |= MGMT_SETTING_BREDR; 834 settings |= MGMT_SETTING_LINK_SECURITY; 835 836 if (lmp_ssp_capable(hdev)) { 837 settings |= MGMT_SETTING_SSP; 838 } 839 840 if (lmp_sc_capable(hdev)) 841 settings |= MGMT_SETTING_SECURE_CONN; 842 843 if (test_bit(HCI_QUIRK_WIDEBAND_SPEECH_SUPPORTED, 844 &hdev->quirks)) 845 settings |= MGMT_SETTING_WIDEBAND_SPEECH; 846 } 847 848 if (lmp_le_capable(hdev)) { 849 settings |= MGMT_SETTING_LE; 850 settings |= MGMT_SETTING_SECURE_CONN; 851 settings |= MGMT_SETTING_PRIVACY; 852 settings |= MGMT_SETTING_STATIC_ADDRESS; 853 settings |= MGMT_SETTING_ADVERTISING; 854 } 855 856 if (test_bit(HCI_QUIRK_EXTERNAL_CONFIG, &hdev->quirks) || 857 hdev->set_bdaddr) 858 settings |= MGMT_SETTING_CONFIGURATION; 859 860 if (cis_central_capable(hdev)) 861 settings |= MGMT_SETTING_CIS_CENTRAL; 862 863 if (cis_peripheral_capable(hdev)) 864 settings |= MGMT_SETTING_CIS_PERIPHERAL; 865 866 settings |= MGMT_SETTING_PHY_CONFIGURATION; 867 868 return settings; 869 } 870 871 static u32 get_current_settings(struct hci_dev *hdev) 872 { 873 u32 settings = 0; 874 875 if (hdev_is_powered(hdev)) 876 settings |= MGMT_SETTING_POWERED; 877 878 if (hci_dev_test_flag(hdev, HCI_CONNECTABLE)) 879 settings |= MGMT_SETTING_CONNECTABLE; 880 881 if (hci_dev_test_flag(hdev, HCI_FAST_CONNECTABLE)) 882 settings |= MGMT_SETTING_FAST_CONNECTABLE; 883 884 if (hci_dev_test_flag(hdev, HCI_DISCOVERABLE)) 885 settings |= MGMT_SETTING_DISCOVERABLE; 886 887 if (hci_dev_test_flag(hdev, HCI_BONDABLE)) 888 settings |= MGMT_SETTING_BONDABLE; 889 890 if (hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) 891 settings |= MGMT_SETTING_BREDR; 892 893 if (hci_dev_test_flag(hdev, HCI_LE_ENABLED)) 894 settings |= MGMT_SETTING_LE; 895 896 if (hci_dev_test_flag(hdev, HCI_LINK_SECURITY)) 897 settings |= MGMT_SETTING_LINK_SECURITY; 898 899 if (hci_dev_test_flag(hdev, HCI_SSP_ENABLED)) 900 settings |= MGMT_SETTING_SSP; 901 902 if (hci_dev_test_flag(hdev, HCI_ADVERTISING)) 903 settings |= MGMT_SETTING_ADVERTISING; 904 905 if (hci_dev_test_flag(hdev, HCI_SC_ENABLED)) 906 settings |= MGMT_SETTING_SECURE_CONN; 907 908 if (hci_dev_test_flag(hdev, HCI_KEEP_DEBUG_KEYS)) 909 settings |= MGMT_SETTING_DEBUG_KEYS; 910 911 if (hci_dev_test_flag(hdev, HCI_PRIVACY)) 912 settings |= MGMT_SETTING_PRIVACY; 913 914 /* The current setting for static address has two purposes. The 915 * first is to indicate if the static address will be used and 916 * the second is to indicate if it is actually set. 917 * 918 * This means if the static address is not configured, this flag 919 * will never be set. If the address is configured, then if the 920 * address is actually used decides if the flag is set or not. 921 * 922 * For single mode LE only controllers and dual-mode controllers 923 * with BR/EDR disabled, the existence of the static address will 924 * be evaluated. 925 */ 926 if (hci_dev_test_flag(hdev, HCI_FORCE_STATIC_ADDR) || 927 !hci_dev_test_flag(hdev, HCI_BREDR_ENABLED) || 928 !bacmp(&hdev->bdaddr, BDADDR_ANY)) { 929 if (bacmp(&hdev->static_addr, BDADDR_ANY)) 930 settings |= MGMT_SETTING_STATIC_ADDRESS; 931 } 932 933 if (hci_dev_test_flag(hdev, HCI_WIDEBAND_SPEECH_ENABLED)) 934 settings |= MGMT_SETTING_WIDEBAND_SPEECH; 935 936 if (cis_central_capable(hdev)) 937 settings |= MGMT_SETTING_CIS_CENTRAL; 938 939 if (cis_peripheral_capable(hdev)) 940 settings |= MGMT_SETTING_CIS_PERIPHERAL; 941 942 if (bis_capable(hdev)) 943 settings |= MGMT_SETTING_ISO_BROADCASTER; 944 945 if (sync_recv_capable(hdev)) 946 settings |= MGMT_SETTING_ISO_SYNC_RECEIVER; 947 948 return settings; 949 } 950 951 static struct mgmt_pending_cmd *pending_find(u16 opcode, struct hci_dev *hdev) 952 { 953 return mgmt_pending_find(HCI_CHANNEL_CONTROL, opcode, hdev); 954 } 955 956 u8 mgmt_get_adv_discov_flags(struct hci_dev *hdev) 957 { 958 struct mgmt_pending_cmd *cmd; 959 960 /* If there's a pending mgmt command the flags will not yet have 961 * their final values, so check for this first. 962 */ 963 cmd = pending_find(MGMT_OP_SET_DISCOVERABLE, hdev); 964 if (cmd) { 965 struct mgmt_mode *cp = cmd->param; 966 if (cp->val == 0x01) 967 return LE_AD_GENERAL; 968 else if (cp->val == 0x02) 969 return LE_AD_LIMITED; 970 } else { 971 if (hci_dev_test_flag(hdev, HCI_LIMITED_DISCOVERABLE)) 972 return LE_AD_LIMITED; 973 else if (hci_dev_test_flag(hdev, HCI_DISCOVERABLE)) 974 return LE_AD_GENERAL; 975 } 976 977 return 0; 978 } 979 980 bool mgmt_get_connectable(struct hci_dev *hdev) 981 { 982 struct mgmt_pending_cmd *cmd; 983 984 /* If there's a pending mgmt command the flag will not yet have 985 * it's final value, so check for this first. 986 */ 987 cmd = pending_find(MGMT_OP_SET_CONNECTABLE, hdev); 988 if (cmd) { 989 struct mgmt_mode *cp = cmd->param; 990 991 return cp->val; 992 } 993 994 return hci_dev_test_flag(hdev, HCI_CONNECTABLE); 995 } 996 997 static int service_cache_sync(struct hci_dev *hdev, void *data) 998 { 999 hci_update_eir_sync(hdev); 1000 hci_update_class_sync(hdev); 1001 1002 return 0; 1003 } 1004 1005 static void service_cache_off(struct work_struct *work) 1006 { 1007 struct hci_dev *hdev = container_of(work, struct hci_dev, 1008 service_cache.work); 1009 1010 if (!hci_dev_test_and_clear_flag(hdev, HCI_SERVICE_CACHE)) 1011 return; 1012 1013 hci_cmd_sync_queue(hdev, service_cache_sync, NULL, NULL); 1014 } 1015 1016 static int rpa_expired_sync(struct hci_dev *hdev, void *data) 1017 { 1018 /* The generation of a new RPA and programming it into the 1019 * controller happens in the hci_req_enable_advertising() 1020 * function. 1021 */ 1022 if (ext_adv_capable(hdev)) 1023 return hci_start_ext_adv_sync(hdev, hdev->cur_adv_instance); 1024 else 1025 return hci_enable_advertising_sync(hdev); 1026 } 1027 1028 static void rpa_expired(struct work_struct *work) 1029 { 1030 struct hci_dev *hdev = container_of(work, struct hci_dev, 1031 rpa_expired.work); 1032 1033 bt_dev_dbg(hdev, ""); 1034 1035 hci_dev_set_flag(hdev, HCI_RPA_EXPIRED); 1036 1037 if (!hci_dev_test_flag(hdev, HCI_ADVERTISING)) 1038 return; 1039 1040 hci_cmd_sync_queue(hdev, rpa_expired_sync, NULL, NULL); 1041 } 1042 1043 static int set_discoverable_sync(struct hci_dev *hdev, void *data); 1044 1045 static void discov_off(struct work_struct *work) 1046 { 1047 struct hci_dev *hdev = container_of(work, struct hci_dev, 1048 discov_off.work); 1049 1050 bt_dev_dbg(hdev, ""); 1051 1052 hci_dev_lock(hdev); 1053 1054 /* When discoverable timeout triggers, then just make sure 1055 * the limited discoverable flag is cleared. Even in the case 1056 * of a timeout triggered from general discoverable, it is 1057 * safe to unconditionally clear the flag. 1058 */ 1059 hci_dev_clear_flag(hdev, HCI_LIMITED_DISCOVERABLE); 1060 hci_dev_clear_flag(hdev, HCI_DISCOVERABLE); 1061 hdev->discov_timeout = 0; 1062 1063 hci_cmd_sync_queue(hdev, set_discoverable_sync, NULL, NULL); 1064 1065 mgmt_new_settings(hdev); 1066 1067 hci_dev_unlock(hdev); 1068 } 1069 1070 static int send_settings_rsp(struct sock *sk, u16 opcode, struct hci_dev *hdev); 1071 1072 static void mesh_send_complete(struct hci_dev *hdev, 1073 struct mgmt_mesh_tx *mesh_tx, bool silent) 1074 { 1075 u8 handle = mesh_tx->handle; 1076 1077 if (!silent) 1078 mgmt_event(MGMT_EV_MESH_PACKET_CMPLT, hdev, &handle, 1079 sizeof(handle), NULL); 1080 1081 mgmt_mesh_remove(mesh_tx); 1082 } 1083 1084 static int mesh_send_done_sync(struct hci_dev *hdev, void *data) 1085 { 1086 struct mgmt_mesh_tx *mesh_tx; 1087 1088 hci_dev_clear_flag(hdev, HCI_MESH_SENDING); 1089 hci_disable_advertising_sync(hdev); 1090 mesh_tx = mgmt_mesh_next(hdev, NULL); 1091 1092 if (mesh_tx) 1093 mesh_send_complete(hdev, mesh_tx, false); 1094 1095 return 0; 1096 } 1097 1098 static int mesh_send_sync(struct hci_dev *hdev, void *data); 1099 static void mesh_send_start_complete(struct hci_dev *hdev, void *data, int err); 1100 static void mesh_next(struct hci_dev *hdev, void *data, int err) 1101 { 1102 struct mgmt_mesh_tx *mesh_tx = mgmt_mesh_next(hdev, NULL); 1103 1104 if (!mesh_tx) 1105 return; 1106 1107 err = hci_cmd_sync_queue(hdev, mesh_send_sync, mesh_tx, 1108 mesh_send_start_complete); 1109 1110 if (err < 0) 1111 mesh_send_complete(hdev, mesh_tx, false); 1112 else 1113 hci_dev_set_flag(hdev, HCI_MESH_SENDING); 1114 } 1115 1116 static void mesh_send_done(struct work_struct *work) 1117 { 1118 struct hci_dev *hdev = container_of(work, struct hci_dev, 1119 mesh_send_done.work); 1120 1121 if (!hci_dev_test_flag(hdev, HCI_MESH_SENDING)) 1122 return; 1123 1124 hci_cmd_sync_queue(hdev, mesh_send_done_sync, NULL, mesh_next); 1125 } 1126 1127 static void mgmt_init_hdev(struct sock *sk, struct hci_dev *hdev) 1128 { 1129 if (hci_dev_test_flag(hdev, HCI_MGMT)) 1130 return; 1131 1132 BT_INFO("MGMT ver %d.%d", MGMT_VERSION, MGMT_REVISION); 1133 1134 INIT_DELAYED_WORK(&hdev->discov_off, discov_off); 1135 INIT_DELAYED_WORK(&hdev->service_cache, service_cache_off); 1136 INIT_DELAYED_WORK(&hdev->rpa_expired, rpa_expired); 1137 INIT_DELAYED_WORK(&hdev->mesh_send_done, mesh_send_done); 1138 1139 /* Non-mgmt controlled devices get this bit set 1140 * implicitly so that pairing works for them, however 1141 * for mgmt we require user-space to explicitly enable 1142 * it 1143 */ 1144 hci_dev_clear_flag(hdev, HCI_BONDABLE); 1145 1146 hci_dev_set_flag(hdev, HCI_MGMT); 1147 } 1148 1149 static int read_controller_info(struct sock *sk, struct hci_dev *hdev, 1150 void *data, u16 data_len) 1151 { 1152 struct mgmt_rp_read_info rp; 1153 1154 bt_dev_dbg(hdev, "sock %p", sk); 1155 1156 hci_dev_lock(hdev); 1157 1158 memset(&rp, 0, sizeof(rp)); 1159 1160 bacpy(&rp.bdaddr, &hdev->bdaddr); 1161 1162 rp.version = hdev->hci_ver; 1163 rp.manufacturer = cpu_to_le16(hdev->manufacturer); 1164 1165 rp.supported_settings = cpu_to_le32(get_supported_settings(hdev)); 1166 rp.current_settings = cpu_to_le32(get_current_settings(hdev)); 1167 1168 memcpy(rp.dev_class, hdev->dev_class, 3); 1169 1170 memcpy(rp.name, hdev->dev_name, sizeof(hdev->dev_name)); 1171 memcpy(rp.short_name, hdev->short_name, sizeof(hdev->short_name)); 1172 1173 hci_dev_unlock(hdev); 1174 1175 return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_READ_INFO, 0, &rp, 1176 sizeof(rp)); 1177 } 1178 1179 static u16 append_eir_data_to_buf(struct hci_dev *hdev, u8 *eir) 1180 { 1181 u16 eir_len = 0; 1182 size_t name_len; 1183 1184 if (hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) 1185 eir_len = eir_append_data(eir, eir_len, EIR_CLASS_OF_DEV, 1186 hdev->dev_class, 3); 1187 1188 if (hci_dev_test_flag(hdev, HCI_LE_ENABLED)) 1189 eir_len = eir_append_le16(eir, eir_len, EIR_APPEARANCE, 1190 hdev->appearance); 1191 1192 name_len = strnlen(hdev->dev_name, sizeof(hdev->dev_name)); 1193 eir_len = eir_append_data(eir, eir_len, EIR_NAME_COMPLETE, 1194 hdev->dev_name, name_len); 1195 1196 name_len = strnlen(hdev->short_name, sizeof(hdev->short_name)); 1197 eir_len = eir_append_data(eir, eir_len, EIR_NAME_SHORT, 1198 hdev->short_name, name_len); 1199 1200 return eir_len; 1201 } 1202 1203 static int read_ext_controller_info(struct sock *sk, struct hci_dev *hdev, 1204 void *data, u16 data_len) 1205 { 1206 char buf[512]; 1207 struct mgmt_rp_read_ext_info *rp = (void *)buf; 1208 u16 eir_len; 1209 1210 bt_dev_dbg(hdev, "sock %p", sk); 1211 1212 memset(&buf, 0, sizeof(buf)); 1213 1214 hci_dev_lock(hdev); 1215 1216 bacpy(&rp->bdaddr, &hdev->bdaddr); 1217 1218 rp->version = hdev->hci_ver; 1219 rp->manufacturer = cpu_to_le16(hdev->manufacturer); 1220 1221 rp->supported_settings = cpu_to_le32(get_supported_settings(hdev)); 1222 rp->current_settings = cpu_to_le32(get_current_settings(hdev)); 1223 1224 1225 eir_len = append_eir_data_to_buf(hdev, rp->eir); 1226 rp->eir_len = cpu_to_le16(eir_len); 1227 1228 hci_dev_unlock(hdev); 1229 1230 /* If this command is called at least once, then the events 1231 * for class of device and local name changes are disabled 1232 * and only the new extended controller information event 1233 * is used. 1234 */ 1235 hci_sock_set_flag(sk, HCI_MGMT_EXT_INFO_EVENTS); 1236 hci_sock_clear_flag(sk, HCI_MGMT_DEV_CLASS_EVENTS); 1237 hci_sock_clear_flag(sk, HCI_MGMT_LOCAL_NAME_EVENTS); 1238 1239 return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_READ_EXT_INFO, 0, rp, 1240 sizeof(*rp) + eir_len); 1241 } 1242 1243 static int ext_info_changed(struct hci_dev *hdev, struct sock *skip) 1244 { 1245 char buf[512]; 1246 struct mgmt_ev_ext_info_changed *ev = (void *)buf; 1247 u16 eir_len; 1248 1249 memset(buf, 0, sizeof(buf)); 1250 1251 eir_len = append_eir_data_to_buf(hdev, ev->eir); 1252 ev->eir_len = cpu_to_le16(eir_len); 1253 1254 return mgmt_limited_event(MGMT_EV_EXT_INFO_CHANGED, hdev, ev, 1255 sizeof(*ev) + eir_len, 1256 HCI_MGMT_EXT_INFO_EVENTS, skip); 1257 } 1258 1259 static int send_settings_rsp(struct sock *sk, u16 opcode, struct hci_dev *hdev) 1260 { 1261 __le32 settings = cpu_to_le32(get_current_settings(hdev)); 1262 1263 return mgmt_cmd_complete(sk, hdev->id, opcode, 0, &settings, 1264 sizeof(settings)); 1265 } 1266 1267 void mgmt_advertising_added(struct sock *sk, struct hci_dev *hdev, u8 instance) 1268 { 1269 struct mgmt_ev_advertising_added ev; 1270 1271 ev.instance = instance; 1272 1273 mgmt_event(MGMT_EV_ADVERTISING_ADDED, hdev, &ev, sizeof(ev), sk); 1274 } 1275 1276 void mgmt_advertising_removed(struct sock *sk, struct hci_dev *hdev, 1277 u8 instance) 1278 { 1279 struct mgmt_ev_advertising_removed ev; 1280 1281 ev.instance = instance; 1282 1283 mgmt_event(MGMT_EV_ADVERTISING_REMOVED, hdev, &ev, sizeof(ev), sk); 1284 } 1285 1286 static void cancel_adv_timeout(struct hci_dev *hdev) 1287 { 1288 if (hdev->adv_instance_timeout) { 1289 hdev->adv_instance_timeout = 0; 1290 cancel_delayed_work(&hdev->adv_instance_expire); 1291 } 1292 } 1293 1294 /* This function requires the caller holds hdev->lock */ 1295 static void restart_le_actions(struct hci_dev *hdev) 1296 { 1297 struct hci_conn_params *p; 1298 1299 list_for_each_entry(p, &hdev->le_conn_params, list) { 1300 /* Needed for AUTO_OFF case where might not "really" 1301 * have been powered off. 1302 */ 1303 hci_pend_le_list_del_init(p); 1304 1305 switch (p->auto_connect) { 1306 case HCI_AUTO_CONN_DIRECT: 1307 case HCI_AUTO_CONN_ALWAYS: 1308 hci_pend_le_list_add(p, &hdev->pend_le_conns); 1309 break; 1310 case HCI_AUTO_CONN_REPORT: 1311 hci_pend_le_list_add(p, &hdev->pend_le_reports); 1312 break; 1313 default: 1314 break; 1315 } 1316 } 1317 } 1318 1319 static int new_settings(struct hci_dev *hdev, struct sock *skip) 1320 { 1321 __le32 ev = cpu_to_le32(get_current_settings(hdev)); 1322 1323 return mgmt_limited_event(MGMT_EV_NEW_SETTINGS, hdev, &ev, 1324 sizeof(ev), HCI_MGMT_SETTING_EVENTS, skip); 1325 } 1326 1327 static void mgmt_set_powered_complete(struct hci_dev *hdev, void *data, int err) 1328 { 1329 struct mgmt_pending_cmd *cmd = data; 1330 struct mgmt_mode *cp; 1331 1332 /* Make sure cmd still outstanding. */ 1333 if (cmd != pending_find(MGMT_OP_SET_POWERED, hdev)) 1334 return; 1335 1336 cp = cmd->param; 1337 1338 bt_dev_dbg(hdev, "err %d", err); 1339 1340 if (!err) { 1341 if (cp->val) { 1342 hci_dev_lock(hdev); 1343 restart_le_actions(hdev); 1344 hci_update_passive_scan(hdev); 1345 hci_dev_unlock(hdev); 1346 } 1347 1348 send_settings_rsp(cmd->sk, cmd->opcode, hdev); 1349 1350 /* Only call new_setting for power on as power off is deferred 1351 * to hdev->power_off work which does call hci_dev_do_close. 1352 */ 1353 if (cp->val) 1354 new_settings(hdev, cmd->sk); 1355 } else { 1356 mgmt_cmd_status(cmd->sk, hdev->id, MGMT_OP_SET_POWERED, 1357 mgmt_status(err)); 1358 } 1359 1360 mgmt_pending_remove(cmd); 1361 } 1362 1363 static int set_powered_sync(struct hci_dev *hdev, void *data) 1364 { 1365 struct mgmt_pending_cmd *cmd = data; 1366 struct mgmt_mode *cp = cmd->param; 1367 1368 BT_DBG("%s", hdev->name); 1369 1370 return hci_set_powered_sync(hdev, cp->val); 1371 } 1372 1373 static int set_powered(struct sock *sk, struct hci_dev *hdev, void *data, 1374 u16 len) 1375 { 1376 struct mgmt_mode *cp = data; 1377 struct mgmt_pending_cmd *cmd; 1378 int err; 1379 1380 bt_dev_dbg(hdev, "sock %p", sk); 1381 1382 if (cp->val != 0x00 && cp->val != 0x01) 1383 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_POWERED, 1384 MGMT_STATUS_INVALID_PARAMS); 1385 1386 hci_dev_lock(hdev); 1387 1388 if (!cp->val) { 1389 if (hci_dev_test_flag(hdev, HCI_POWERING_DOWN)) { 1390 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_POWERED, 1391 MGMT_STATUS_BUSY); 1392 goto failed; 1393 } 1394 } 1395 1396 if (pending_find(MGMT_OP_SET_POWERED, hdev)) { 1397 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_POWERED, 1398 MGMT_STATUS_BUSY); 1399 goto failed; 1400 } 1401 1402 if (!!cp->val == hdev_is_powered(hdev)) { 1403 err = send_settings_rsp(sk, MGMT_OP_SET_POWERED, hdev); 1404 goto failed; 1405 } 1406 1407 cmd = mgmt_pending_add(sk, MGMT_OP_SET_POWERED, hdev, data, len); 1408 if (!cmd) { 1409 err = -ENOMEM; 1410 goto failed; 1411 } 1412 1413 /* Cancel potentially blocking sync operation before power off */ 1414 if (cp->val == 0x00) { 1415 hci_cmd_sync_cancel_sync(hdev, -EHOSTDOWN); 1416 err = hci_cmd_sync_queue(hdev, set_powered_sync, cmd, 1417 mgmt_set_powered_complete); 1418 } else { 1419 /* Use hci_cmd_sync_submit since hdev might not be running */ 1420 err = hci_cmd_sync_submit(hdev, set_powered_sync, cmd, 1421 mgmt_set_powered_complete); 1422 } 1423 1424 if (err < 0) 1425 mgmt_pending_remove(cmd); 1426 1427 failed: 1428 hci_dev_unlock(hdev); 1429 return err; 1430 } 1431 1432 int mgmt_new_settings(struct hci_dev *hdev) 1433 { 1434 return new_settings(hdev, NULL); 1435 } 1436 1437 struct cmd_lookup { 1438 struct sock *sk; 1439 struct hci_dev *hdev; 1440 u8 mgmt_status; 1441 }; 1442 1443 static void settings_rsp(struct mgmt_pending_cmd *cmd, void *data) 1444 { 1445 struct cmd_lookup *match = data; 1446 1447 send_settings_rsp(cmd->sk, cmd->opcode, match->hdev); 1448 1449 list_del(&cmd->list); 1450 1451 if (match->sk == NULL) { 1452 match->sk = cmd->sk; 1453 sock_hold(match->sk); 1454 } 1455 1456 mgmt_pending_free(cmd); 1457 } 1458 1459 static void cmd_status_rsp(struct mgmt_pending_cmd *cmd, void *data) 1460 { 1461 u8 *status = data; 1462 1463 mgmt_cmd_status(cmd->sk, cmd->index, cmd->opcode, *status); 1464 mgmt_pending_remove(cmd); 1465 } 1466 1467 static void cmd_complete_rsp(struct mgmt_pending_cmd *cmd, void *data) 1468 { 1469 if (cmd->cmd_complete) { 1470 u8 *status = data; 1471 1472 cmd->cmd_complete(cmd, *status); 1473 mgmt_pending_remove(cmd); 1474 1475 return; 1476 } 1477 1478 cmd_status_rsp(cmd, data); 1479 } 1480 1481 static int generic_cmd_complete(struct mgmt_pending_cmd *cmd, u8 status) 1482 { 1483 return mgmt_cmd_complete(cmd->sk, cmd->index, cmd->opcode, status, 1484 cmd->param, cmd->param_len); 1485 } 1486 1487 static int addr_cmd_complete(struct mgmt_pending_cmd *cmd, u8 status) 1488 { 1489 return mgmt_cmd_complete(cmd->sk, cmd->index, cmd->opcode, status, 1490 cmd->param, sizeof(struct mgmt_addr_info)); 1491 } 1492 1493 static u8 mgmt_bredr_support(struct hci_dev *hdev) 1494 { 1495 if (!lmp_bredr_capable(hdev)) 1496 return MGMT_STATUS_NOT_SUPPORTED; 1497 else if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) 1498 return MGMT_STATUS_REJECTED; 1499 else 1500 return MGMT_STATUS_SUCCESS; 1501 } 1502 1503 static u8 mgmt_le_support(struct hci_dev *hdev) 1504 { 1505 if (!lmp_le_capable(hdev)) 1506 return MGMT_STATUS_NOT_SUPPORTED; 1507 else if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED)) 1508 return MGMT_STATUS_REJECTED; 1509 else 1510 return MGMT_STATUS_SUCCESS; 1511 } 1512 1513 static void mgmt_set_discoverable_complete(struct hci_dev *hdev, void *data, 1514 int err) 1515 { 1516 struct mgmt_pending_cmd *cmd = data; 1517 1518 bt_dev_dbg(hdev, "err %d", err); 1519 1520 /* Make sure cmd still outstanding. */ 1521 if (cmd != pending_find(MGMT_OP_SET_DISCOVERABLE, hdev)) 1522 return; 1523 1524 hci_dev_lock(hdev); 1525 1526 if (err) { 1527 u8 mgmt_err = mgmt_status(err); 1528 mgmt_cmd_status(cmd->sk, cmd->index, cmd->opcode, mgmt_err); 1529 hci_dev_clear_flag(hdev, HCI_LIMITED_DISCOVERABLE); 1530 goto done; 1531 } 1532 1533 if (hci_dev_test_flag(hdev, HCI_DISCOVERABLE) && 1534 hdev->discov_timeout > 0) { 1535 int to = msecs_to_jiffies(hdev->discov_timeout * 1000); 1536 queue_delayed_work(hdev->req_workqueue, &hdev->discov_off, to); 1537 } 1538 1539 send_settings_rsp(cmd->sk, MGMT_OP_SET_DISCOVERABLE, hdev); 1540 new_settings(hdev, cmd->sk); 1541 1542 done: 1543 mgmt_pending_remove(cmd); 1544 hci_dev_unlock(hdev); 1545 } 1546 1547 static int set_discoverable_sync(struct hci_dev *hdev, void *data) 1548 { 1549 BT_DBG("%s", hdev->name); 1550 1551 return hci_update_discoverable_sync(hdev); 1552 } 1553 1554 static int set_discoverable(struct sock *sk, struct hci_dev *hdev, void *data, 1555 u16 len) 1556 { 1557 struct mgmt_cp_set_discoverable *cp = data; 1558 struct mgmt_pending_cmd *cmd; 1559 u16 timeout; 1560 int err; 1561 1562 bt_dev_dbg(hdev, "sock %p", sk); 1563 1564 if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED) && 1565 !hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) 1566 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_DISCOVERABLE, 1567 MGMT_STATUS_REJECTED); 1568 1569 if (cp->val != 0x00 && cp->val != 0x01 && cp->val != 0x02) 1570 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_DISCOVERABLE, 1571 MGMT_STATUS_INVALID_PARAMS); 1572 1573 timeout = __le16_to_cpu(cp->timeout); 1574 1575 /* Disabling discoverable requires that no timeout is set, 1576 * and enabling limited discoverable requires a timeout. 1577 */ 1578 if ((cp->val == 0x00 && timeout > 0) || 1579 (cp->val == 0x02 && timeout == 0)) 1580 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_DISCOVERABLE, 1581 MGMT_STATUS_INVALID_PARAMS); 1582 1583 hci_dev_lock(hdev); 1584 1585 if (!hdev_is_powered(hdev) && timeout > 0) { 1586 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_DISCOVERABLE, 1587 MGMT_STATUS_NOT_POWERED); 1588 goto failed; 1589 } 1590 1591 if (pending_find(MGMT_OP_SET_DISCOVERABLE, hdev) || 1592 pending_find(MGMT_OP_SET_CONNECTABLE, hdev)) { 1593 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_DISCOVERABLE, 1594 MGMT_STATUS_BUSY); 1595 goto failed; 1596 } 1597 1598 if (!hci_dev_test_flag(hdev, HCI_CONNECTABLE)) { 1599 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_DISCOVERABLE, 1600 MGMT_STATUS_REJECTED); 1601 goto failed; 1602 } 1603 1604 if (hdev->advertising_paused) { 1605 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_DISCOVERABLE, 1606 MGMT_STATUS_BUSY); 1607 goto failed; 1608 } 1609 1610 if (!hdev_is_powered(hdev)) { 1611 bool changed = false; 1612 1613 /* Setting limited discoverable when powered off is 1614 * not a valid operation since it requires a timeout 1615 * and so no need to check HCI_LIMITED_DISCOVERABLE. 1616 */ 1617 if (!!cp->val != hci_dev_test_flag(hdev, HCI_DISCOVERABLE)) { 1618 hci_dev_change_flag(hdev, HCI_DISCOVERABLE); 1619 changed = true; 1620 } 1621 1622 err = send_settings_rsp(sk, MGMT_OP_SET_DISCOVERABLE, hdev); 1623 if (err < 0) 1624 goto failed; 1625 1626 if (changed) 1627 err = new_settings(hdev, sk); 1628 1629 goto failed; 1630 } 1631 1632 /* If the current mode is the same, then just update the timeout 1633 * value with the new value. And if only the timeout gets updated, 1634 * then no need for any HCI transactions. 1635 */ 1636 if (!!cp->val == hci_dev_test_flag(hdev, HCI_DISCOVERABLE) && 1637 (cp->val == 0x02) == hci_dev_test_flag(hdev, 1638 HCI_LIMITED_DISCOVERABLE)) { 1639 cancel_delayed_work(&hdev->discov_off); 1640 hdev->discov_timeout = timeout; 1641 1642 if (cp->val && hdev->discov_timeout > 0) { 1643 int to = msecs_to_jiffies(hdev->discov_timeout * 1000); 1644 queue_delayed_work(hdev->req_workqueue, 1645 &hdev->discov_off, to); 1646 } 1647 1648 err = send_settings_rsp(sk, MGMT_OP_SET_DISCOVERABLE, hdev); 1649 goto failed; 1650 } 1651 1652 cmd = mgmt_pending_add(sk, MGMT_OP_SET_DISCOVERABLE, hdev, data, len); 1653 if (!cmd) { 1654 err = -ENOMEM; 1655 goto failed; 1656 } 1657 1658 /* Cancel any potential discoverable timeout that might be 1659 * still active and store new timeout value. The arming of 1660 * the timeout happens in the complete handler. 1661 */ 1662 cancel_delayed_work(&hdev->discov_off); 1663 hdev->discov_timeout = timeout; 1664 1665 if (cp->val) 1666 hci_dev_set_flag(hdev, HCI_DISCOVERABLE); 1667 else 1668 hci_dev_clear_flag(hdev, HCI_DISCOVERABLE); 1669 1670 /* Limited discoverable mode */ 1671 if (cp->val == 0x02) 1672 hci_dev_set_flag(hdev, HCI_LIMITED_DISCOVERABLE); 1673 else 1674 hci_dev_clear_flag(hdev, HCI_LIMITED_DISCOVERABLE); 1675 1676 err = hci_cmd_sync_queue(hdev, set_discoverable_sync, cmd, 1677 mgmt_set_discoverable_complete); 1678 1679 if (err < 0) 1680 mgmt_pending_remove(cmd); 1681 1682 failed: 1683 hci_dev_unlock(hdev); 1684 return err; 1685 } 1686 1687 static void mgmt_set_connectable_complete(struct hci_dev *hdev, void *data, 1688 int err) 1689 { 1690 struct mgmt_pending_cmd *cmd = data; 1691 1692 bt_dev_dbg(hdev, "err %d", err); 1693 1694 /* Make sure cmd still outstanding. */ 1695 if (cmd != pending_find(MGMT_OP_SET_CONNECTABLE, hdev)) 1696 return; 1697 1698 hci_dev_lock(hdev); 1699 1700 if (err) { 1701 u8 mgmt_err = mgmt_status(err); 1702 mgmt_cmd_status(cmd->sk, cmd->index, cmd->opcode, mgmt_err); 1703 goto done; 1704 } 1705 1706 send_settings_rsp(cmd->sk, MGMT_OP_SET_CONNECTABLE, hdev); 1707 new_settings(hdev, cmd->sk); 1708 1709 done: 1710 mgmt_pending_remove(cmd); 1711 1712 hci_dev_unlock(hdev); 1713 } 1714 1715 static int set_connectable_update_settings(struct hci_dev *hdev, 1716 struct sock *sk, u8 val) 1717 { 1718 bool changed = false; 1719 int err; 1720 1721 if (!!val != hci_dev_test_flag(hdev, HCI_CONNECTABLE)) 1722 changed = true; 1723 1724 if (val) { 1725 hci_dev_set_flag(hdev, HCI_CONNECTABLE); 1726 } else { 1727 hci_dev_clear_flag(hdev, HCI_CONNECTABLE); 1728 hci_dev_clear_flag(hdev, HCI_DISCOVERABLE); 1729 } 1730 1731 err = send_settings_rsp(sk, MGMT_OP_SET_CONNECTABLE, hdev); 1732 if (err < 0) 1733 return err; 1734 1735 if (changed) { 1736 hci_update_scan(hdev); 1737 hci_update_passive_scan(hdev); 1738 return new_settings(hdev, sk); 1739 } 1740 1741 return 0; 1742 } 1743 1744 static int set_connectable_sync(struct hci_dev *hdev, void *data) 1745 { 1746 BT_DBG("%s", hdev->name); 1747 1748 return hci_update_connectable_sync(hdev); 1749 } 1750 1751 static int set_connectable(struct sock *sk, struct hci_dev *hdev, void *data, 1752 u16 len) 1753 { 1754 struct mgmt_mode *cp = data; 1755 struct mgmt_pending_cmd *cmd; 1756 int err; 1757 1758 bt_dev_dbg(hdev, "sock %p", sk); 1759 1760 if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED) && 1761 !hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) 1762 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_CONNECTABLE, 1763 MGMT_STATUS_REJECTED); 1764 1765 if (cp->val != 0x00 && cp->val != 0x01) 1766 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_CONNECTABLE, 1767 MGMT_STATUS_INVALID_PARAMS); 1768 1769 hci_dev_lock(hdev); 1770 1771 if (!hdev_is_powered(hdev)) { 1772 err = set_connectable_update_settings(hdev, sk, cp->val); 1773 goto failed; 1774 } 1775 1776 if (pending_find(MGMT_OP_SET_DISCOVERABLE, hdev) || 1777 pending_find(MGMT_OP_SET_CONNECTABLE, hdev)) { 1778 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_CONNECTABLE, 1779 MGMT_STATUS_BUSY); 1780 goto failed; 1781 } 1782 1783 cmd = mgmt_pending_add(sk, MGMT_OP_SET_CONNECTABLE, hdev, data, len); 1784 if (!cmd) { 1785 err = -ENOMEM; 1786 goto failed; 1787 } 1788 1789 if (cp->val) { 1790 hci_dev_set_flag(hdev, HCI_CONNECTABLE); 1791 } else { 1792 if (hdev->discov_timeout > 0) 1793 cancel_delayed_work(&hdev->discov_off); 1794 1795 hci_dev_clear_flag(hdev, HCI_LIMITED_DISCOVERABLE); 1796 hci_dev_clear_flag(hdev, HCI_DISCOVERABLE); 1797 hci_dev_clear_flag(hdev, HCI_CONNECTABLE); 1798 } 1799 1800 err = hci_cmd_sync_queue(hdev, set_connectable_sync, cmd, 1801 mgmt_set_connectable_complete); 1802 1803 if (err < 0) 1804 mgmt_pending_remove(cmd); 1805 1806 failed: 1807 hci_dev_unlock(hdev); 1808 return err; 1809 } 1810 1811 static int set_bondable(struct sock *sk, struct hci_dev *hdev, void *data, 1812 u16 len) 1813 { 1814 struct mgmt_mode *cp = data; 1815 bool changed; 1816 int err; 1817 1818 bt_dev_dbg(hdev, "sock %p", sk); 1819 1820 if (cp->val != 0x00 && cp->val != 0x01) 1821 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_BONDABLE, 1822 MGMT_STATUS_INVALID_PARAMS); 1823 1824 hci_dev_lock(hdev); 1825 1826 if (cp->val) 1827 changed = !hci_dev_test_and_set_flag(hdev, HCI_BONDABLE); 1828 else 1829 changed = hci_dev_test_and_clear_flag(hdev, HCI_BONDABLE); 1830 1831 err = send_settings_rsp(sk, MGMT_OP_SET_BONDABLE, hdev); 1832 if (err < 0) 1833 goto unlock; 1834 1835 if (changed) { 1836 /* In limited privacy mode the change of bondable mode 1837 * may affect the local advertising address. 1838 */ 1839 hci_update_discoverable(hdev); 1840 1841 err = new_settings(hdev, sk); 1842 } 1843 1844 unlock: 1845 hci_dev_unlock(hdev); 1846 return err; 1847 } 1848 1849 static int set_link_security(struct sock *sk, struct hci_dev *hdev, void *data, 1850 u16 len) 1851 { 1852 struct mgmt_mode *cp = data; 1853 struct mgmt_pending_cmd *cmd; 1854 u8 val, status; 1855 int err; 1856 1857 bt_dev_dbg(hdev, "sock %p", sk); 1858 1859 status = mgmt_bredr_support(hdev); 1860 if (status) 1861 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_LINK_SECURITY, 1862 status); 1863 1864 if (cp->val != 0x00 && cp->val != 0x01) 1865 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_LINK_SECURITY, 1866 MGMT_STATUS_INVALID_PARAMS); 1867 1868 hci_dev_lock(hdev); 1869 1870 if (!hdev_is_powered(hdev)) { 1871 bool changed = false; 1872 1873 if (!!cp->val != hci_dev_test_flag(hdev, HCI_LINK_SECURITY)) { 1874 hci_dev_change_flag(hdev, HCI_LINK_SECURITY); 1875 changed = true; 1876 } 1877 1878 err = send_settings_rsp(sk, MGMT_OP_SET_LINK_SECURITY, hdev); 1879 if (err < 0) 1880 goto failed; 1881 1882 if (changed) 1883 err = new_settings(hdev, sk); 1884 1885 goto failed; 1886 } 1887 1888 if (pending_find(MGMT_OP_SET_LINK_SECURITY, hdev)) { 1889 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_LINK_SECURITY, 1890 MGMT_STATUS_BUSY); 1891 goto failed; 1892 } 1893 1894 val = !!cp->val; 1895 1896 if (test_bit(HCI_AUTH, &hdev->flags) == val) { 1897 err = send_settings_rsp(sk, MGMT_OP_SET_LINK_SECURITY, hdev); 1898 goto failed; 1899 } 1900 1901 cmd = mgmt_pending_add(sk, MGMT_OP_SET_LINK_SECURITY, hdev, data, len); 1902 if (!cmd) { 1903 err = -ENOMEM; 1904 goto failed; 1905 } 1906 1907 err = hci_send_cmd(hdev, HCI_OP_WRITE_AUTH_ENABLE, sizeof(val), &val); 1908 if (err < 0) { 1909 mgmt_pending_remove(cmd); 1910 goto failed; 1911 } 1912 1913 failed: 1914 hci_dev_unlock(hdev); 1915 return err; 1916 } 1917 1918 static void set_ssp_complete(struct hci_dev *hdev, void *data, int err) 1919 { 1920 struct cmd_lookup match = { NULL, hdev }; 1921 struct mgmt_pending_cmd *cmd = data; 1922 struct mgmt_mode *cp = cmd->param; 1923 u8 enable = cp->val; 1924 bool changed; 1925 1926 /* Make sure cmd still outstanding. */ 1927 if (cmd != pending_find(MGMT_OP_SET_SSP, hdev)) 1928 return; 1929 1930 if (err) { 1931 u8 mgmt_err = mgmt_status(err); 1932 1933 if (enable && hci_dev_test_and_clear_flag(hdev, 1934 HCI_SSP_ENABLED)) { 1935 new_settings(hdev, NULL); 1936 } 1937 1938 mgmt_pending_foreach(MGMT_OP_SET_SSP, hdev, cmd_status_rsp, 1939 &mgmt_err); 1940 return; 1941 } 1942 1943 if (enable) { 1944 changed = !hci_dev_test_and_set_flag(hdev, HCI_SSP_ENABLED); 1945 } else { 1946 changed = hci_dev_test_and_clear_flag(hdev, HCI_SSP_ENABLED); 1947 } 1948 1949 mgmt_pending_foreach(MGMT_OP_SET_SSP, hdev, settings_rsp, &match); 1950 1951 if (changed) 1952 new_settings(hdev, match.sk); 1953 1954 if (match.sk) 1955 sock_put(match.sk); 1956 1957 hci_update_eir_sync(hdev); 1958 } 1959 1960 static int set_ssp_sync(struct hci_dev *hdev, void *data) 1961 { 1962 struct mgmt_pending_cmd *cmd = data; 1963 struct mgmt_mode *cp = cmd->param; 1964 bool changed = false; 1965 int err; 1966 1967 if (cp->val) 1968 changed = !hci_dev_test_and_set_flag(hdev, HCI_SSP_ENABLED); 1969 1970 err = hci_write_ssp_mode_sync(hdev, cp->val); 1971 1972 if (!err && changed) 1973 hci_dev_clear_flag(hdev, HCI_SSP_ENABLED); 1974 1975 return err; 1976 } 1977 1978 static int set_ssp(struct sock *sk, struct hci_dev *hdev, void *data, u16 len) 1979 { 1980 struct mgmt_mode *cp = data; 1981 struct mgmt_pending_cmd *cmd; 1982 u8 status; 1983 int err; 1984 1985 bt_dev_dbg(hdev, "sock %p", sk); 1986 1987 status = mgmt_bredr_support(hdev); 1988 if (status) 1989 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_SSP, status); 1990 1991 if (!lmp_ssp_capable(hdev)) 1992 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_SSP, 1993 MGMT_STATUS_NOT_SUPPORTED); 1994 1995 if (cp->val != 0x00 && cp->val != 0x01) 1996 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_SSP, 1997 MGMT_STATUS_INVALID_PARAMS); 1998 1999 hci_dev_lock(hdev); 2000 2001 if (!hdev_is_powered(hdev)) { 2002 bool changed; 2003 2004 if (cp->val) { 2005 changed = !hci_dev_test_and_set_flag(hdev, 2006 HCI_SSP_ENABLED); 2007 } else { 2008 changed = hci_dev_test_and_clear_flag(hdev, 2009 HCI_SSP_ENABLED); 2010 } 2011 2012 err = send_settings_rsp(sk, MGMT_OP_SET_SSP, hdev); 2013 if (err < 0) 2014 goto failed; 2015 2016 if (changed) 2017 err = new_settings(hdev, sk); 2018 2019 goto failed; 2020 } 2021 2022 if (pending_find(MGMT_OP_SET_SSP, hdev)) { 2023 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_SSP, 2024 MGMT_STATUS_BUSY); 2025 goto failed; 2026 } 2027 2028 if (!!cp->val == hci_dev_test_flag(hdev, HCI_SSP_ENABLED)) { 2029 err = send_settings_rsp(sk, MGMT_OP_SET_SSP, hdev); 2030 goto failed; 2031 } 2032 2033 cmd = mgmt_pending_add(sk, MGMT_OP_SET_SSP, hdev, data, len); 2034 if (!cmd) 2035 err = -ENOMEM; 2036 else 2037 err = hci_cmd_sync_queue(hdev, set_ssp_sync, cmd, 2038 set_ssp_complete); 2039 2040 if (err < 0) { 2041 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_SSP, 2042 MGMT_STATUS_FAILED); 2043 2044 if (cmd) 2045 mgmt_pending_remove(cmd); 2046 } 2047 2048 failed: 2049 hci_dev_unlock(hdev); 2050 return err; 2051 } 2052 2053 static int set_hs(struct sock *sk, struct hci_dev *hdev, void *data, u16 len) 2054 { 2055 bt_dev_dbg(hdev, "sock %p", sk); 2056 2057 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_HS, 2058 MGMT_STATUS_NOT_SUPPORTED); 2059 } 2060 2061 static void set_le_complete(struct hci_dev *hdev, void *data, int err) 2062 { 2063 struct cmd_lookup match = { NULL, hdev }; 2064 u8 status = mgmt_status(err); 2065 2066 bt_dev_dbg(hdev, "err %d", err); 2067 2068 if (status) { 2069 mgmt_pending_foreach(MGMT_OP_SET_LE, hdev, cmd_status_rsp, 2070 &status); 2071 return; 2072 } 2073 2074 mgmt_pending_foreach(MGMT_OP_SET_LE, hdev, settings_rsp, &match); 2075 2076 new_settings(hdev, match.sk); 2077 2078 if (match.sk) 2079 sock_put(match.sk); 2080 } 2081 2082 static int set_le_sync(struct hci_dev *hdev, void *data) 2083 { 2084 struct mgmt_pending_cmd *cmd = data; 2085 struct mgmt_mode *cp = cmd->param; 2086 u8 val = !!cp->val; 2087 int err; 2088 2089 if (!val) { 2090 hci_clear_adv_instance_sync(hdev, NULL, 0x00, true); 2091 2092 if (hci_dev_test_flag(hdev, HCI_LE_ADV)) 2093 hci_disable_advertising_sync(hdev); 2094 2095 if (ext_adv_capable(hdev)) 2096 hci_remove_ext_adv_instance_sync(hdev, 0, cmd->sk); 2097 } else { 2098 hci_dev_set_flag(hdev, HCI_LE_ENABLED); 2099 } 2100 2101 err = hci_write_le_host_supported_sync(hdev, val, 0); 2102 2103 /* Make sure the controller has a good default for 2104 * advertising data. Restrict the update to when LE 2105 * has actually been enabled. During power on, the 2106 * update in powered_update_hci will take care of it. 2107 */ 2108 if (!err && hci_dev_test_flag(hdev, HCI_LE_ENABLED)) { 2109 if (ext_adv_capable(hdev)) { 2110 int status; 2111 2112 status = hci_setup_ext_adv_instance_sync(hdev, 0x00); 2113 if (!status) 2114 hci_update_scan_rsp_data_sync(hdev, 0x00); 2115 } else { 2116 hci_update_adv_data_sync(hdev, 0x00); 2117 hci_update_scan_rsp_data_sync(hdev, 0x00); 2118 } 2119 2120 hci_update_passive_scan(hdev); 2121 } 2122 2123 return err; 2124 } 2125 2126 static void set_mesh_complete(struct hci_dev *hdev, void *data, int err) 2127 { 2128 struct mgmt_pending_cmd *cmd = data; 2129 u8 status = mgmt_status(err); 2130 struct sock *sk = cmd->sk; 2131 2132 if (status) { 2133 mgmt_pending_foreach(MGMT_OP_SET_MESH_RECEIVER, hdev, 2134 cmd_status_rsp, &status); 2135 return; 2136 } 2137 2138 mgmt_pending_remove(cmd); 2139 mgmt_cmd_complete(sk, hdev->id, MGMT_OP_SET_MESH_RECEIVER, 0, NULL, 0); 2140 } 2141 2142 static int set_mesh_sync(struct hci_dev *hdev, void *data) 2143 { 2144 struct mgmt_pending_cmd *cmd = data; 2145 struct mgmt_cp_set_mesh *cp = cmd->param; 2146 size_t len = cmd->param_len; 2147 2148 memset(hdev->mesh_ad_types, 0, sizeof(hdev->mesh_ad_types)); 2149 2150 if (cp->enable) 2151 hci_dev_set_flag(hdev, HCI_MESH); 2152 else 2153 hci_dev_clear_flag(hdev, HCI_MESH); 2154 2155 len -= sizeof(*cp); 2156 2157 /* If filters don't fit, forward all adv pkts */ 2158 if (len <= sizeof(hdev->mesh_ad_types)) 2159 memcpy(hdev->mesh_ad_types, cp->ad_types, len); 2160 2161 hci_update_passive_scan_sync(hdev); 2162 return 0; 2163 } 2164 2165 static int set_mesh(struct sock *sk, struct hci_dev *hdev, void *data, u16 len) 2166 { 2167 struct mgmt_cp_set_mesh *cp = data; 2168 struct mgmt_pending_cmd *cmd; 2169 int err = 0; 2170 2171 bt_dev_dbg(hdev, "sock %p", sk); 2172 2173 if (!lmp_le_capable(hdev) || 2174 !hci_dev_test_flag(hdev, HCI_MESH_EXPERIMENTAL)) 2175 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_MESH_RECEIVER, 2176 MGMT_STATUS_NOT_SUPPORTED); 2177 2178 if (cp->enable != 0x00 && cp->enable != 0x01) 2179 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_MESH_RECEIVER, 2180 MGMT_STATUS_INVALID_PARAMS); 2181 2182 hci_dev_lock(hdev); 2183 2184 cmd = mgmt_pending_add(sk, MGMT_OP_SET_MESH_RECEIVER, hdev, data, len); 2185 if (!cmd) 2186 err = -ENOMEM; 2187 else 2188 err = hci_cmd_sync_queue(hdev, set_mesh_sync, cmd, 2189 set_mesh_complete); 2190 2191 if (err < 0) { 2192 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_MESH_RECEIVER, 2193 MGMT_STATUS_FAILED); 2194 2195 if (cmd) 2196 mgmt_pending_remove(cmd); 2197 } 2198 2199 hci_dev_unlock(hdev); 2200 return err; 2201 } 2202 2203 static void mesh_send_start_complete(struct hci_dev *hdev, void *data, int err) 2204 { 2205 struct mgmt_mesh_tx *mesh_tx = data; 2206 struct mgmt_cp_mesh_send *send = (void *)mesh_tx->param; 2207 unsigned long mesh_send_interval; 2208 u8 mgmt_err = mgmt_status(err); 2209 2210 /* Report any errors here, but don't report completion */ 2211 2212 if (mgmt_err) { 2213 hci_dev_clear_flag(hdev, HCI_MESH_SENDING); 2214 /* Send Complete Error Code for handle */ 2215 mesh_send_complete(hdev, mesh_tx, false); 2216 return; 2217 } 2218 2219 mesh_send_interval = msecs_to_jiffies((send->cnt) * 25); 2220 queue_delayed_work(hdev->req_workqueue, &hdev->mesh_send_done, 2221 mesh_send_interval); 2222 } 2223 2224 static int mesh_send_sync(struct hci_dev *hdev, void *data) 2225 { 2226 struct mgmt_mesh_tx *mesh_tx = data; 2227 struct mgmt_cp_mesh_send *send = (void *)mesh_tx->param; 2228 struct adv_info *adv, *next_instance; 2229 u8 instance = hdev->le_num_of_adv_sets + 1; 2230 u16 timeout, duration; 2231 int err = 0; 2232 2233 if (hdev->le_num_of_adv_sets <= hdev->adv_instance_cnt) 2234 return MGMT_STATUS_BUSY; 2235 2236 timeout = 1000; 2237 duration = send->cnt * INTERVAL_TO_MS(hdev->le_adv_max_interval); 2238 adv = hci_add_adv_instance(hdev, instance, 0, 2239 send->adv_data_len, send->adv_data, 2240 0, NULL, 2241 timeout, duration, 2242 HCI_ADV_TX_POWER_NO_PREFERENCE, 2243 hdev->le_adv_min_interval, 2244 hdev->le_adv_max_interval, 2245 mesh_tx->handle); 2246 2247 if (!IS_ERR(adv)) 2248 mesh_tx->instance = instance; 2249 else 2250 err = PTR_ERR(adv); 2251 2252 if (hdev->cur_adv_instance == instance) { 2253 /* If the currently advertised instance is being changed then 2254 * cancel the current advertising and schedule the next 2255 * instance. If there is only one instance then the overridden 2256 * advertising data will be visible right away. 2257 */ 2258 cancel_adv_timeout(hdev); 2259 2260 next_instance = hci_get_next_instance(hdev, instance); 2261 if (next_instance) 2262 instance = next_instance->instance; 2263 else 2264 instance = 0; 2265 } else if (hdev->adv_instance_timeout) { 2266 /* Immediately advertise the new instance if no other, or 2267 * let it go naturally from queue if ADV is already happening 2268 */ 2269 instance = 0; 2270 } 2271 2272 if (instance) 2273 return hci_schedule_adv_instance_sync(hdev, instance, true); 2274 2275 return err; 2276 } 2277 2278 static void send_count(struct mgmt_mesh_tx *mesh_tx, void *data) 2279 { 2280 struct mgmt_rp_mesh_read_features *rp = data; 2281 2282 if (rp->used_handles >= rp->max_handles) 2283 return; 2284 2285 rp->handles[rp->used_handles++] = mesh_tx->handle; 2286 } 2287 2288 static int mesh_features(struct sock *sk, struct hci_dev *hdev, 2289 void *data, u16 len) 2290 { 2291 struct mgmt_rp_mesh_read_features rp; 2292 2293 if (!lmp_le_capable(hdev) || 2294 !hci_dev_test_flag(hdev, HCI_MESH_EXPERIMENTAL)) 2295 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_MESH_READ_FEATURES, 2296 MGMT_STATUS_NOT_SUPPORTED); 2297 2298 memset(&rp, 0, sizeof(rp)); 2299 rp.index = cpu_to_le16(hdev->id); 2300 if (hci_dev_test_flag(hdev, HCI_LE_ENABLED)) 2301 rp.max_handles = MESH_HANDLES_MAX; 2302 2303 hci_dev_lock(hdev); 2304 2305 if (rp.max_handles) 2306 mgmt_mesh_foreach(hdev, send_count, &rp, sk); 2307 2308 mgmt_cmd_complete(sk, hdev->id, MGMT_OP_MESH_READ_FEATURES, 0, &rp, 2309 rp.used_handles + sizeof(rp) - MESH_HANDLES_MAX); 2310 2311 hci_dev_unlock(hdev); 2312 return 0; 2313 } 2314 2315 static int send_cancel(struct hci_dev *hdev, void *data) 2316 { 2317 struct mgmt_pending_cmd *cmd = data; 2318 struct mgmt_cp_mesh_send_cancel *cancel = (void *)cmd->param; 2319 struct mgmt_mesh_tx *mesh_tx; 2320 2321 if (!cancel->handle) { 2322 do { 2323 mesh_tx = mgmt_mesh_next(hdev, cmd->sk); 2324 2325 if (mesh_tx) 2326 mesh_send_complete(hdev, mesh_tx, false); 2327 } while (mesh_tx); 2328 } else { 2329 mesh_tx = mgmt_mesh_find(hdev, cancel->handle); 2330 2331 if (mesh_tx && mesh_tx->sk == cmd->sk) 2332 mesh_send_complete(hdev, mesh_tx, false); 2333 } 2334 2335 mgmt_cmd_complete(cmd->sk, hdev->id, MGMT_OP_MESH_SEND_CANCEL, 2336 0, NULL, 0); 2337 mgmt_pending_free(cmd); 2338 2339 return 0; 2340 } 2341 2342 static int mesh_send_cancel(struct sock *sk, struct hci_dev *hdev, 2343 void *data, u16 len) 2344 { 2345 struct mgmt_pending_cmd *cmd; 2346 int err; 2347 2348 if (!lmp_le_capable(hdev) || 2349 !hci_dev_test_flag(hdev, HCI_MESH_EXPERIMENTAL)) 2350 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_MESH_SEND_CANCEL, 2351 MGMT_STATUS_NOT_SUPPORTED); 2352 2353 if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED)) 2354 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_MESH_SEND_CANCEL, 2355 MGMT_STATUS_REJECTED); 2356 2357 hci_dev_lock(hdev); 2358 cmd = mgmt_pending_new(sk, MGMT_OP_MESH_SEND_CANCEL, hdev, data, len); 2359 if (!cmd) 2360 err = -ENOMEM; 2361 else 2362 err = hci_cmd_sync_queue(hdev, send_cancel, cmd, NULL); 2363 2364 if (err < 0) { 2365 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_MESH_SEND_CANCEL, 2366 MGMT_STATUS_FAILED); 2367 2368 if (cmd) 2369 mgmt_pending_free(cmd); 2370 } 2371 2372 hci_dev_unlock(hdev); 2373 return err; 2374 } 2375 2376 static int mesh_send(struct sock *sk, struct hci_dev *hdev, void *data, u16 len) 2377 { 2378 struct mgmt_mesh_tx *mesh_tx; 2379 struct mgmt_cp_mesh_send *send = data; 2380 struct mgmt_rp_mesh_read_features rp; 2381 bool sending; 2382 int err = 0; 2383 2384 if (!lmp_le_capable(hdev) || 2385 !hci_dev_test_flag(hdev, HCI_MESH_EXPERIMENTAL)) 2386 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_MESH_SEND, 2387 MGMT_STATUS_NOT_SUPPORTED); 2388 if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED) || 2389 len <= MGMT_MESH_SEND_SIZE || 2390 len > (MGMT_MESH_SEND_SIZE + 31)) 2391 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_MESH_SEND, 2392 MGMT_STATUS_REJECTED); 2393 2394 hci_dev_lock(hdev); 2395 2396 memset(&rp, 0, sizeof(rp)); 2397 rp.max_handles = MESH_HANDLES_MAX; 2398 2399 mgmt_mesh_foreach(hdev, send_count, &rp, sk); 2400 2401 if (rp.max_handles <= rp.used_handles) { 2402 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_MESH_SEND, 2403 MGMT_STATUS_BUSY); 2404 goto done; 2405 } 2406 2407 sending = hci_dev_test_flag(hdev, HCI_MESH_SENDING); 2408 mesh_tx = mgmt_mesh_add(sk, hdev, send, len); 2409 2410 if (!mesh_tx) 2411 err = -ENOMEM; 2412 else if (!sending) 2413 err = hci_cmd_sync_queue(hdev, mesh_send_sync, mesh_tx, 2414 mesh_send_start_complete); 2415 2416 if (err < 0) { 2417 bt_dev_err(hdev, "Send Mesh Failed %d", err); 2418 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_MESH_SEND, 2419 MGMT_STATUS_FAILED); 2420 2421 if (mesh_tx) { 2422 if (sending) 2423 mgmt_mesh_remove(mesh_tx); 2424 } 2425 } else { 2426 hci_dev_set_flag(hdev, HCI_MESH_SENDING); 2427 2428 mgmt_cmd_complete(sk, hdev->id, MGMT_OP_MESH_SEND, 0, 2429 &mesh_tx->handle, 1); 2430 } 2431 2432 done: 2433 hci_dev_unlock(hdev); 2434 return err; 2435 } 2436 2437 static int set_le(struct sock *sk, struct hci_dev *hdev, void *data, u16 len) 2438 { 2439 struct mgmt_mode *cp = data; 2440 struct mgmt_pending_cmd *cmd; 2441 int err; 2442 u8 val, enabled; 2443 2444 bt_dev_dbg(hdev, "sock %p", sk); 2445 2446 if (!lmp_le_capable(hdev)) 2447 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_LE, 2448 MGMT_STATUS_NOT_SUPPORTED); 2449 2450 if (cp->val != 0x00 && cp->val != 0x01) 2451 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_LE, 2452 MGMT_STATUS_INVALID_PARAMS); 2453 2454 /* Bluetooth single mode LE only controllers or dual-mode 2455 * controllers configured as LE only devices, do not allow 2456 * switching LE off. These have either LE enabled explicitly 2457 * or BR/EDR has been previously switched off. 2458 * 2459 * When trying to enable an already enabled LE, then gracefully 2460 * send a positive response. Trying to disable it however will 2461 * result into rejection. 2462 */ 2463 if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) { 2464 if (cp->val == 0x01) 2465 return send_settings_rsp(sk, MGMT_OP_SET_LE, hdev); 2466 2467 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_LE, 2468 MGMT_STATUS_REJECTED); 2469 } 2470 2471 hci_dev_lock(hdev); 2472 2473 val = !!cp->val; 2474 enabled = lmp_host_le_capable(hdev); 2475 2476 if (!hdev_is_powered(hdev) || val == enabled) { 2477 bool changed = false; 2478 2479 if (val != hci_dev_test_flag(hdev, HCI_LE_ENABLED)) { 2480 hci_dev_change_flag(hdev, HCI_LE_ENABLED); 2481 changed = true; 2482 } 2483 2484 if (!val && hci_dev_test_flag(hdev, HCI_ADVERTISING)) { 2485 hci_dev_clear_flag(hdev, HCI_ADVERTISING); 2486 changed = true; 2487 } 2488 2489 err = send_settings_rsp(sk, MGMT_OP_SET_LE, hdev); 2490 if (err < 0) 2491 goto unlock; 2492 2493 if (changed) 2494 err = new_settings(hdev, sk); 2495 2496 goto unlock; 2497 } 2498 2499 if (pending_find(MGMT_OP_SET_LE, hdev) || 2500 pending_find(MGMT_OP_SET_ADVERTISING, hdev)) { 2501 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_LE, 2502 MGMT_STATUS_BUSY); 2503 goto unlock; 2504 } 2505 2506 cmd = mgmt_pending_add(sk, MGMT_OP_SET_LE, hdev, data, len); 2507 if (!cmd) 2508 err = -ENOMEM; 2509 else 2510 err = hci_cmd_sync_queue(hdev, set_le_sync, cmd, 2511 set_le_complete); 2512 2513 if (err < 0) { 2514 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_LE, 2515 MGMT_STATUS_FAILED); 2516 2517 if (cmd) 2518 mgmt_pending_remove(cmd); 2519 } 2520 2521 unlock: 2522 hci_dev_unlock(hdev); 2523 return err; 2524 } 2525 2526 /* This is a helper function to test for pending mgmt commands that can 2527 * cause CoD or EIR HCI commands. We can only allow one such pending 2528 * mgmt command at a time since otherwise we cannot easily track what 2529 * the current values are, will be, and based on that calculate if a new 2530 * HCI command needs to be sent and if yes with what value. 2531 */ 2532 static bool pending_eir_or_class(struct hci_dev *hdev) 2533 { 2534 struct mgmt_pending_cmd *cmd; 2535 2536 list_for_each_entry(cmd, &hdev->mgmt_pending, list) { 2537 switch (cmd->opcode) { 2538 case MGMT_OP_ADD_UUID: 2539 case MGMT_OP_REMOVE_UUID: 2540 case MGMT_OP_SET_DEV_CLASS: 2541 case MGMT_OP_SET_POWERED: 2542 return true; 2543 } 2544 } 2545 2546 return false; 2547 } 2548 2549 static const u8 bluetooth_base_uuid[] = { 2550 0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80, 2551 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 2552 }; 2553 2554 static u8 get_uuid_size(const u8 *uuid) 2555 { 2556 u32 val; 2557 2558 if (memcmp(uuid, bluetooth_base_uuid, 12)) 2559 return 128; 2560 2561 val = get_unaligned_le32(&uuid[12]); 2562 if (val > 0xffff) 2563 return 32; 2564 2565 return 16; 2566 } 2567 2568 static void mgmt_class_complete(struct hci_dev *hdev, void *data, int err) 2569 { 2570 struct mgmt_pending_cmd *cmd = data; 2571 2572 bt_dev_dbg(hdev, "err %d", err); 2573 2574 mgmt_cmd_complete(cmd->sk, cmd->index, cmd->opcode, 2575 mgmt_status(err), hdev->dev_class, 3); 2576 2577 mgmt_pending_free(cmd); 2578 } 2579 2580 static int add_uuid_sync(struct hci_dev *hdev, void *data) 2581 { 2582 int err; 2583 2584 err = hci_update_class_sync(hdev); 2585 if (err) 2586 return err; 2587 2588 return hci_update_eir_sync(hdev); 2589 } 2590 2591 static int add_uuid(struct sock *sk, struct hci_dev *hdev, void *data, u16 len) 2592 { 2593 struct mgmt_cp_add_uuid *cp = data; 2594 struct mgmt_pending_cmd *cmd; 2595 struct bt_uuid *uuid; 2596 int err; 2597 2598 bt_dev_dbg(hdev, "sock %p", sk); 2599 2600 hci_dev_lock(hdev); 2601 2602 if (pending_eir_or_class(hdev)) { 2603 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_ADD_UUID, 2604 MGMT_STATUS_BUSY); 2605 goto failed; 2606 } 2607 2608 uuid = kmalloc(sizeof(*uuid), GFP_KERNEL); 2609 if (!uuid) { 2610 err = -ENOMEM; 2611 goto failed; 2612 } 2613 2614 memcpy(uuid->uuid, cp->uuid, 16); 2615 uuid->svc_hint = cp->svc_hint; 2616 uuid->size = get_uuid_size(cp->uuid); 2617 2618 list_add_tail(&uuid->list, &hdev->uuids); 2619 2620 cmd = mgmt_pending_new(sk, MGMT_OP_ADD_UUID, hdev, data, len); 2621 if (!cmd) { 2622 err = -ENOMEM; 2623 goto failed; 2624 } 2625 2626 /* MGMT_OP_ADD_UUID don't require adapter the UP/Running so use 2627 * hci_cmd_sync_submit instead of hci_cmd_sync_queue. 2628 */ 2629 err = hci_cmd_sync_submit(hdev, add_uuid_sync, cmd, 2630 mgmt_class_complete); 2631 if (err < 0) { 2632 mgmt_pending_free(cmd); 2633 goto failed; 2634 } 2635 2636 failed: 2637 hci_dev_unlock(hdev); 2638 return err; 2639 } 2640 2641 static bool enable_service_cache(struct hci_dev *hdev) 2642 { 2643 if (!hdev_is_powered(hdev)) 2644 return false; 2645 2646 if (!hci_dev_test_and_set_flag(hdev, HCI_SERVICE_CACHE)) { 2647 queue_delayed_work(hdev->workqueue, &hdev->service_cache, 2648 CACHE_TIMEOUT); 2649 return true; 2650 } 2651 2652 return false; 2653 } 2654 2655 static int remove_uuid_sync(struct hci_dev *hdev, void *data) 2656 { 2657 int err; 2658 2659 err = hci_update_class_sync(hdev); 2660 if (err) 2661 return err; 2662 2663 return hci_update_eir_sync(hdev); 2664 } 2665 2666 static int remove_uuid(struct sock *sk, struct hci_dev *hdev, void *data, 2667 u16 len) 2668 { 2669 struct mgmt_cp_remove_uuid *cp = data; 2670 struct mgmt_pending_cmd *cmd; 2671 struct bt_uuid *match, *tmp; 2672 static const u8 bt_uuid_any[] = { 2673 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 2674 }; 2675 int err, found; 2676 2677 bt_dev_dbg(hdev, "sock %p", sk); 2678 2679 hci_dev_lock(hdev); 2680 2681 if (pending_eir_or_class(hdev)) { 2682 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_REMOVE_UUID, 2683 MGMT_STATUS_BUSY); 2684 goto unlock; 2685 } 2686 2687 if (memcmp(cp->uuid, bt_uuid_any, 16) == 0) { 2688 hci_uuids_clear(hdev); 2689 2690 if (enable_service_cache(hdev)) { 2691 err = mgmt_cmd_complete(sk, hdev->id, 2692 MGMT_OP_REMOVE_UUID, 2693 0, hdev->dev_class, 3); 2694 goto unlock; 2695 } 2696 2697 goto update_class; 2698 } 2699 2700 found = 0; 2701 2702 list_for_each_entry_safe(match, tmp, &hdev->uuids, list) { 2703 if (memcmp(match->uuid, cp->uuid, 16) != 0) 2704 continue; 2705 2706 list_del(&match->list); 2707 kfree(match); 2708 found++; 2709 } 2710 2711 if (found == 0) { 2712 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_REMOVE_UUID, 2713 MGMT_STATUS_INVALID_PARAMS); 2714 goto unlock; 2715 } 2716 2717 update_class: 2718 cmd = mgmt_pending_new(sk, MGMT_OP_REMOVE_UUID, hdev, data, len); 2719 if (!cmd) { 2720 err = -ENOMEM; 2721 goto unlock; 2722 } 2723 2724 /* MGMT_OP_REMOVE_UUID don't require adapter the UP/Running so use 2725 * hci_cmd_sync_submit instead of hci_cmd_sync_queue. 2726 */ 2727 err = hci_cmd_sync_submit(hdev, remove_uuid_sync, cmd, 2728 mgmt_class_complete); 2729 if (err < 0) 2730 mgmt_pending_free(cmd); 2731 2732 unlock: 2733 hci_dev_unlock(hdev); 2734 return err; 2735 } 2736 2737 static int set_class_sync(struct hci_dev *hdev, void *data) 2738 { 2739 int err = 0; 2740 2741 if (hci_dev_test_and_clear_flag(hdev, HCI_SERVICE_CACHE)) { 2742 cancel_delayed_work_sync(&hdev->service_cache); 2743 err = hci_update_eir_sync(hdev); 2744 } 2745 2746 if (err) 2747 return err; 2748 2749 return hci_update_class_sync(hdev); 2750 } 2751 2752 static int set_dev_class(struct sock *sk, struct hci_dev *hdev, void *data, 2753 u16 len) 2754 { 2755 struct mgmt_cp_set_dev_class *cp = data; 2756 struct mgmt_pending_cmd *cmd; 2757 int err; 2758 2759 bt_dev_dbg(hdev, "sock %p", sk); 2760 2761 if (!lmp_bredr_capable(hdev)) 2762 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_DEV_CLASS, 2763 MGMT_STATUS_NOT_SUPPORTED); 2764 2765 hci_dev_lock(hdev); 2766 2767 if (pending_eir_or_class(hdev)) { 2768 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_DEV_CLASS, 2769 MGMT_STATUS_BUSY); 2770 goto unlock; 2771 } 2772 2773 if ((cp->minor & 0x03) != 0 || (cp->major & 0xe0) != 0) { 2774 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_DEV_CLASS, 2775 MGMT_STATUS_INVALID_PARAMS); 2776 goto unlock; 2777 } 2778 2779 hdev->major_class = cp->major; 2780 hdev->minor_class = cp->minor; 2781 2782 if (!hdev_is_powered(hdev)) { 2783 err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_SET_DEV_CLASS, 0, 2784 hdev->dev_class, 3); 2785 goto unlock; 2786 } 2787 2788 cmd = mgmt_pending_new(sk, MGMT_OP_SET_DEV_CLASS, hdev, data, len); 2789 if (!cmd) { 2790 err = -ENOMEM; 2791 goto unlock; 2792 } 2793 2794 /* MGMT_OP_SET_DEV_CLASS don't require adapter the UP/Running so use 2795 * hci_cmd_sync_submit instead of hci_cmd_sync_queue. 2796 */ 2797 err = hci_cmd_sync_submit(hdev, set_class_sync, cmd, 2798 mgmt_class_complete); 2799 if (err < 0) 2800 mgmt_pending_free(cmd); 2801 2802 unlock: 2803 hci_dev_unlock(hdev); 2804 return err; 2805 } 2806 2807 static int load_link_keys(struct sock *sk, struct hci_dev *hdev, void *data, 2808 u16 len) 2809 { 2810 struct mgmt_cp_load_link_keys *cp = data; 2811 const u16 max_key_count = ((U16_MAX - sizeof(*cp)) / 2812 sizeof(struct mgmt_link_key_info)); 2813 u16 key_count, expected_len; 2814 bool changed; 2815 int i; 2816 2817 bt_dev_dbg(hdev, "sock %p", sk); 2818 2819 if (!lmp_bredr_capable(hdev)) 2820 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_LOAD_LINK_KEYS, 2821 MGMT_STATUS_NOT_SUPPORTED); 2822 2823 key_count = __le16_to_cpu(cp->key_count); 2824 if (key_count > max_key_count) { 2825 bt_dev_err(hdev, "load_link_keys: too big key_count value %u", 2826 key_count); 2827 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_LOAD_LINK_KEYS, 2828 MGMT_STATUS_INVALID_PARAMS); 2829 } 2830 2831 expected_len = struct_size(cp, keys, key_count); 2832 if (expected_len != len) { 2833 bt_dev_err(hdev, "load_link_keys: expected %u bytes, got %u bytes", 2834 expected_len, len); 2835 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_LOAD_LINK_KEYS, 2836 MGMT_STATUS_INVALID_PARAMS); 2837 } 2838 2839 if (cp->debug_keys != 0x00 && cp->debug_keys != 0x01) 2840 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_LOAD_LINK_KEYS, 2841 MGMT_STATUS_INVALID_PARAMS); 2842 2843 bt_dev_dbg(hdev, "debug_keys %u key_count %u", cp->debug_keys, 2844 key_count); 2845 2846 for (i = 0; i < key_count; i++) { 2847 struct mgmt_link_key_info *key = &cp->keys[i]; 2848 2849 /* Considering SMP over BREDR/LE, there is no need to check addr_type */ 2850 if (key->type > 0x08) 2851 return mgmt_cmd_status(sk, hdev->id, 2852 MGMT_OP_LOAD_LINK_KEYS, 2853 MGMT_STATUS_INVALID_PARAMS); 2854 } 2855 2856 hci_dev_lock(hdev); 2857 2858 hci_link_keys_clear(hdev); 2859 2860 if (cp->debug_keys) 2861 changed = !hci_dev_test_and_set_flag(hdev, HCI_KEEP_DEBUG_KEYS); 2862 else 2863 changed = hci_dev_test_and_clear_flag(hdev, 2864 HCI_KEEP_DEBUG_KEYS); 2865 2866 if (changed) 2867 new_settings(hdev, NULL); 2868 2869 for (i = 0; i < key_count; i++) { 2870 struct mgmt_link_key_info *key = &cp->keys[i]; 2871 2872 if (hci_is_blocked_key(hdev, 2873 HCI_BLOCKED_KEY_TYPE_LINKKEY, 2874 key->val)) { 2875 bt_dev_warn(hdev, "Skipping blocked link key for %pMR", 2876 &key->addr.bdaddr); 2877 continue; 2878 } 2879 2880 /* Always ignore debug keys and require a new pairing if 2881 * the user wants to use them. 2882 */ 2883 if (key->type == HCI_LK_DEBUG_COMBINATION) 2884 continue; 2885 2886 hci_add_link_key(hdev, NULL, &key->addr.bdaddr, key->val, 2887 key->type, key->pin_len, NULL); 2888 } 2889 2890 mgmt_cmd_complete(sk, hdev->id, MGMT_OP_LOAD_LINK_KEYS, 0, NULL, 0); 2891 2892 hci_dev_unlock(hdev); 2893 2894 return 0; 2895 } 2896 2897 static int device_unpaired(struct hci_dev *hdev, bdaddr_t *bdaddr, 2898 u8 addr_type, struct sock *skip_sk) 2899 { 2900 struct mgmt_ev_device_unpaired ev; 2901 2902 bacpy(&ev.addr.bdaddr, bdaddr); 2903 ev.addr.type = addr_type; 2904 2905 return mgmt_event(MGMT_EV_DEVICE_UNPAIRED, hdev, &ev, sizeof(ev), 2906 skip_sk); 2907 } 2908 2909 static void unpair_device_complete(struct hci_dev *hdev, void *data, int err) 2910 { 2911 struct mgmt_pending_cmd *cmd = data; 2912 struct mgmt_cp_unpair_device *cp = cmd->param; 2913 2914 if (!err) 2915 device_unpaired(hdev, &cp->addr.bdaddr, cp->addr.type, cmd->sk); 2916 2917 cmd->cmd_complete(cmd, err); 2918 mgmt_pending_free(cmd); 2919 } 2920 2921 static int unpair_device_sync(struct hci_dev *hdev, void *data) 2922 { 2923 struct mgmt_pending_cmd *cmd = data; 2924 struct mgmt_cp_unpair_device *cp = cmd->param; 2925 struct hci_conn *conn; 2926 2927 if (cp->addr.type == BDADDR_BREDR) 2928 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, 2929 &cp->addr.bdaddr); 2930 else 2931 conn = hci_conn_hash_lookup_le(hdev, &cp->addr.bdaddr, 2932 le_addr_type(cp->addr.type)); 2933 2934 if (!conn) 2935 return 0; 2936 2937 return hci_abort_conn_sync(hdev, conn, HCI_ERROR_REMOTE_USER_TERM); 2938 } 2939 2940 static int unpair_device(struct sock *sk, struct hci_dev *hdev, void *data, 2941 u16 len) 2942 { 2943 struct mgmt_cp_unpair_device *cp = data; 2944 struct mgmt_rp_unpair_device rp; 2945 struct hci_conn_params *params; 2946 struct mgmt_pending_cmd *cmd; 2947 struct hci_conn *conn; 2948 u8 addr_type; 2949 int err; 2950 2951 memset(&rp, 0, sizeof(rp)); 2952 bacpy(&rp.addr.bdaddr, &cp->addr.bdaddr); 2953 rp.addr.type = cp->addr.type; 2954 2955 if (!bdaddr_type_is_valid(cp->addr.type)) 2956 return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_UNPAIR_DEVICE, 2957 MGMT_STATUS_INVALID_PARAMS, 2958 &rp, sizeof(rp)); 2959 2960 if (cp->disconnect != 0x00 && cp->disconnect != 0x01) 2961 return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_UNPAIR_DEVICE, 2962 MGMT_STATUS_INVALID_PARAMS, 2963 &rp, sizeof(rp)); 2964 2965 hci_dev_lock(hdev); 2966 2967 if (!hdev_is_powered(hdev)) { 2968 err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_UNPAIR_DEVICE, 2969 MGMT_STATUS_NOT_POWERED, &rp, 2970 sizeof(rp)); 2971 goto unlock; 2972 } 2973 2974 if (cp->addr.type == BDADDR_BREDR) { 2975 /* If disconnection is requested, then look up the 2976 * connection. If the remote device is connected, it 2977 * will be later used to terminate the link. 2978 * 2979 * Setting it to NULL explicitly will cause no 2980 * termination of the link. 2981 */ 2982 if (cp->disconnect) 2983 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, 2984 &cp->addr.bdaddr); 2985 else 2986 conn = NULL; 2987 2988 err = hci_remove_link_key(hdev, &cp->addr.bdaddr); 2989 if (err < 0) { 2990 err = mgmt_cmd_complete(sk, hdev->id, 2991 MGMT_OP_UNPAIR_DEVICE, 2992 MGMT_STATUS_NOT_PAIRED, &rp, 2993 sizeof(rp)); 2994 goto unlock; 2995 } 2996 2997 goto done; 2998 } 2999 3000 /* LE address type */ 3001 addr_type = le_addr_type(cp->addr.type); 3002 3003 /* Abort any ongoing SMP pairing. Removes ltk and irk if they exist. */ 3004 err = smp_cancel_and_remove_pairing(hdev, &cp->addr.bdaddr, addr_type); 3005 if (err < 0) { 3006 err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_UNPAIR_DEVICE, 3007 MGMT_STATUS_NOT_PAIRED, &rp, 3008 sizeof(rp)); 3009 goto unlock; 3010 } 3011 3012 conn = hci_conn_hash_lookup_le(hdev, &cp->addr.bdaddr, addr_type); 3013 if (!conn) { 3014 hci_conn_params_del(hdev, &cp->addr.bdaddr, addr_type); 3015 goto done; 3016 } 3017 3018 3019 /* Defer clearing up the connection parameters until closing to 3020 * give a chance of keeping them if a repairing happens. 3021 */ 3022 set_bit(HCI_CONN_PARAM_REMOVAL_PEND, &conn->flags); 3023 3024 /* Disable auto-connection parameters if present */ 3025 params = hci_conn_params_lookup(hdev, &cp->addr.bdaddr, addr_type); 3026 if (params) { 3027 if (params->explicit_connect) 3028 params->auto_connect = HCI_AUTO_CONN_EXPLICIT; 3029 else 3030 params->auto_connect = HCI_AUTO_CONN_DISABLED; 3031 } 3032 3033 /* If disconnection is not requested, then clear the connection 3034 * variable so that the link is not terminated. 3035 */ 3036 if (!cp->disconnect) 3037 conn = NULL; 3038 3039 done: 3040 /* If the connection variable is set, then termination of the 3041 * link is requested. 3042 */ 3043 if (!conn) { 3044 err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_UNPAIR_DEVICE, 0, 3045 &rp, sizeof(rp)); 3046 device_unpaired(hdev, &cp->addr.bdaddr, cp->addr.type, sk); 3047 goto unlock; 3048 } 3049 3050 cmd = mgmt_pending_new(sk, MGMT_OP_UNPAIR_DEVICE, hdev, cp, 3051 sizeof(*cp)); 3052 if (!cmd) { 3053 err = -ENOMEM; 3054 goto unlock; 3055 } 3056 3057 cmd->cmd_complete = addr_cmd_complete; 3058 3059 err = hci_cmd_sync_queue(hdev, unpair_device_sync, cmd, 3060 unpair_device_complete); 3061 if (err < 0) 3062 mgmt_pending_free(cmd); 3063 3064 unlock: 3065 hci_dev_unlock(hdev); 3066 return err; 3067 } 3068 3069 static int disconnect(struct sock *sk, struct hci_dev *hdev, void *data, 3070 u16 len) 3071 { 3072 struct mgmt_cp_disconnect *cp = data; 3073 struct mgmt_rp_disconnect rp; 3074 struct mgmt_pending_cmd *cmd; 3075 struct hci_conn *conn; 3076 int err; 3077 3078 bt_dev_dbg(hdev, "sock %p", sk); 3079 3080 memset(&rp, 0, sizeof(rp)); 3081 bacpy(&rp.addr.bdaddr, &cp->addr.bdaddr); 3082 rp.addr.type = cp->addr.type; 3083 3084 if (!bdaddr_type_is_valid(cp->addr.type)) 3085 return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_DISCONNECT, 3086 MGMT_STATUS_INVALID_PARAMS, 3087 &rp, sizeof(rp)); 3088 3089 hci_dev_lock(hdev); 3090 3091 if (!test_bit(HCI_UP, &hdev->flags)) { 3092 err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_DISCONNECT, 3093 MGMT_STATUS_NOT_POWERED, &rp, 3094 sizeof(rp)); 3095 goto failed; 3096 } 3097 3098 if (pending_find(MGMT_OP_DISCONNECT, hdev)) { 3099 err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_DISCONNECT, 3100 MGMT_STATUS_BUSY, &rp, sizeof(rp)); 3101 goto failed; 3102 } 3103 3104 if (cp->addr.type == BDADDR_BREDR) 3105 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, 3106 &cp->addr.bdaddr); 3107 else 3108 conn = hci_conn_hash_lookup_le(hdev, &cp->addr.bdaddr, 3109 le_addr_type(cp->addr.type)); 3110 3111 if (!conn || conn->state == BT_OPEN || conn->state == BT_CLOSED) { 3112 err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_DISCONNECT, 3113 MGMT_STATUS_NOT_CONNECTED, &rp, 3114 sizeof(rp)); 3115 goto failed; 3116 } 3117 3118 cmd = mgmt_pending_add(sk, MGMT_OP_DISCONNECT, hdev, data, len); 3119 if (!cmd) { 3120 err = -ENOMEM; 3121 goto failed; 3122 } 3123 3124 cmd->cmd_complete = generic_cmd_complete; 3125 3126 err = hci_disconnect(conn, HCI_ERROR_REMOTE_USER_TERM); 3127 if (err < 0) 3128 mgmt_pending_remove(cmd); 3129 3130 failed: 3131 hci_dev_unlock(hdev); 3132 return err; 3133 } 3134 3135 static u8 link_to_bdaddr(u8 link_type, u8 addr_type) 3136 { 3137 switch (link_type) { 3138 case ISO_LINK: 3139 case LE_LINK: 3140 switch (addr_type) { 3141 case ADDR_LE_DEV_PUBLIC: 3142 return BDADDR_LE_PUBLIC; 3143 3144 default: 3145 /* Fallback to LE Random address type */ 3146 return BDADDR_LE_RANDOM; 3147 } 3148 3149 default: 3150 /* Fallback to BR/EDR type */ 3151 return BDADDR_BREDR; 3152 } 3153 } 3154 3155 static int get_connections(struct sock *sk, struct hci_dev *hdev, void *data, 3156 u16 data_len) 3157 { 3158 struct mgmt_rp_get_connections *rp; 3159 struct hci_conn *c; 3160 int err; 3161 u16 i; 3162 3163 bt_dev_dbg(hdev, "sock %p", sk); 3164 3165 hci_dev_lock(hdev); 3166 3167 if (!hdev_is_powered(hdev)) { 3168 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_GET_CONNECTIONS, 3169 MGMT_STATUS_NOT_POWERED); 3170 goto unlock; 3171 } 3172 3173 i = 0; 3174 list_for_each_entry(c, &hdev->conn_hash.list, list) { 3175 if (test_bit(HCI_CONN_MGMT_CONNECTED, &c->flags)) 3176 i++; 3177 } 3178 3179 rp = kmalloc(struct_size(rp, addr, i), GFP_KERNEL); 3180 if (!rp) { 3181 err = -ENOMEM; 3182 goto unlock; 3183 } 3184 3185 i = 0; 3186 list_for_each_entry(c, &hdev->conn_hash.list, list) { 3187 if (!test_bit(HCI_CONN_MGMT_CONNECTED, &c->flags)) 3188 continue; 3189 bacpy(&rp->addr[i].bdaddr, &c->dst); 3190 rp->addr[i].type = link_to_bdaddr(c->type, c->dst_type); 3191 if (c->type == SCO_LINK || c->type == ESCO_LINK) 3192 continue; 3193 i++; 3194 } 3195 3196 rp->conn_count = cpu_to_le16(i); 3197 3198 /* Recalculate length in case of filtered SCO connections, etc */ 3199 err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_GET_CONNECTIONS, 0, rp, 3200 struct_size(rp, addr, i)); 3201 3202 kfree(rp); 3203 3204 unlock: 3205 hci_dev_unlock(hdev); 3206 return err; 3207 } 3208 3209 static int send_pin_code_neg_reply(struct sock *sk, struct hci_dev *hdev, 3210 struct mgmt_cp_pin_code_neg_reply *cp) 3211 { 3212 struct mgmt_pending_cmd *cmd; 3213 int err; 3214 3215 cmd = mgmt_pending_add(sk, MGMT_OP_PIN_CODE_NEG_REPLY, hdev, cp, 3216 sizeof(*cp)); 3217 if (!cmd) 3218 return -ENOMEM; 3219 3220 cmd->cmd_complete = addr_cmd_complete; 3221 3222 err = hci_send_cmd(hdev, HCI_OP_PIN_CODE_NEG_REPLY, 3223 sizeof(cp->addr.bdaddr), &cp->addr.bdaddr); 3224 if (err < 0) 3225 mgmt_pending_remove(cmd); 3226 3227 return err; 3228 } 3229 3230 static int pin_code_reply(struct sock *sk, struct hci_dev *hdev, void *data, 3231 u16 len) 3232 { 3233 struct hci_conn *conn; 3234 struct mgmt_cp_pin_code_reply *cp = data; 3235 struct hci_cp_pin_code_reply reply; 3236 struct mgmt_pending_cmd *cmd; 3237 int err; 3238 3239 bt_dev_dbg(hdev, "sock %p", sk); 3240 3241 hci_dev_lock(hdev); 3242 3243 if (!hdev_is_powered(hdev)) { 3244 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_PIN_CODE_REPLY, 3245 MGMT_STATUS_NOT_POWERED); 3246 goto failed; 3247 } 3248 3249 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->addr.bdaddr); 3250 if (!conn) { 3251 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_PIN_CODE_REPLY, 3252 MGMT_STATUS_NOT_CONNECTED); 3253 goto failed; 3254 } 3255 3256 if (conn->pending_sec_level == BT_SECURITY_HIGH && cp->pin_len != 16) { 3257 struct mgmt_cp_pin_code_neg_reply ncp; 3258 3259 memcpy(&ncp.addr, &cp->addr, sizeof(ncp.addr)); 3260 3261 bt_dev_err(hdev, "PIN code is not 16 bytes long"); 3262 3263 err = send_pin_code_neg_reply(sk, hdev, &ncp); 3264 if (err >= 0) 3265 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_PIN_CODE_REPLY, 3266 MGMT_STATUS_INVALID_PARAMS); 3267 3268 goto failed; 3269 } 3270 3271 cmd = mgmt_pending_add(sk, MGMT_OP_PIN_CODE_REPLY, hdev, data, len); 3272 if (!cmd) { 3273 err = -ENOMEM; 3274 goto failed; 3275 } 3276 3277 cmd->cmd_complete = addr_cmd_complete; 3278 3279 bacpy(&reply.bdaddr, &cp->addr.bdaddr); 3280 reply.pin_len = cp->pin_len; 3281 memcpy(reply.pin_code, cp->pin_code, sizeof(reply.pin_code)); 3282 3283 err = hci_send_cmd(hdev, HCI_OP_PIN_CODE_REPLY, sizeof(reply), &reply); 3284 if (err < 0) 3285 mgmt_pending_remove(cmd); 3286 3287 failed: 3288 hci_dev_unlock(hdev); 3289 return err; 3290 } 3291 3292 static int set_io_capability(struct sock *sk, struct hci_dev *hdev, void *data, 3293 u16 len) 3294 { 3295 struct mgmt_cp_set_io_capability *cp = data; 3296 3297 bt_dev_dbg(hdev, "sock %p", sk); 3298 3299 if (cp->io_capability > SMP_IO_KEYBOARD_DISPLAY) 3300 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_IO_CAPABILITY, 3301 MGMT_STATUS_INVALID_PARAMS); 3302 3303 hci_dev_lock(hdev); 3304 3305 hdev->io_capability = cp->io_capability; 3306 3307 bt_dev_dbg(hdev, "IO capability set to 0x%02x", hdev->io_capability); 3308 3309 hci_dev_unlock(hdev); 3310 3311 return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_SET_IO_CAPABILITY, 0, 3312 NULL, 0); 3313 } 3314 3315 static struct mgmt_pending_cmd *find_pairing(struct hci_conn *conn) 3316 { 3317 struct hci_dev *hdev = conn->hdev; 3318 struct mgmt_pending_cmd *cmd; 3319 3320 list_for_each_entry(cmd, &hdev->mgmt_pending, list) { 3321 if (cmd->opcode != MGMT_OP_PAIR_DEVICE) 3322 continue; 3323 3324 if (cmd->user_data != conn) 3325 continue; 3326 3327 return cmd; 3328 } 3329 3330 return NULL; 3331 } 3332 3333 static int pairing_complete(struct mgmt_pending_cmd *cmd, u8 status) 3334 { 3335 struct mgmt_rp_pair_device rp; 3336 struct hci_conn *conn = cmd->user_data; 3337 int err; 3338 3339 bacpy(&rp.addr.bdaddr, &conn->dst); 3340 rp.addr.type = link_to_bdaddr(conn->type, conn->dst_type); 3341 3342 err = mgmt_cmd_complete(cmd->sk, cmd->index, MGMT_OP_PAIR_DEVICE, 3343 status, &rp, sizeof(rp)); 3344 3345 /* So we don't get further callbacks for this connection */ 3346 conn->connect_cfm_cb = NULL; 3347 conn->security_cfm_cb = NULL; 3348 conn->disconn_cfm_cb = NULL; 3349 3350 hci_conn_drop(conn); 3351 3352 /* The device is paired so there is no need to remove 3353 * its connection parameters anymore. 3354 */ 3355 clear_bit(HCI_CONN_PARAM_REMOVAL_PEND, &conn->flags); 3356 3357 hci_conn_put(conn); 3358 3359 return err; 3360 } 3361 3362 void mgmt_smp_complete(struct hci_conn *conn, bool complete) 3363 { 3364 u8 status = complete ? MGMT_STATUS_SUCCESS : MGMT_STATUS_FAILED; 3365 struct mgmt_pending_cmd *cmd; 3366 3367 cmd = find_pairing(conn); 3368 if (cmd) { 3369 cmd->cmd_complete(cmd, status); 3370 mgmt_pending_remove(cmd); 3371 } 3372 } 3373 3374 static void pairing_complete_cb(struct hci_conn *conn, u8 status) 3375 { 3376 struct mgmt_pending_cmd *cmd; 3377 3378 BT_DBG("status %u", status); 3379 3380 cmd = find_pairing(conn); 3381 if (!cmd) { 3382 BT_DBG("Unable to find a pending command"); 3383 return; 3384 } 3385 3386 cmd->cmd_complete(cmd, mgmt_status(status)); 3387 mgmt_pending_remove(cmd); 3388 } 3389 3390 static void le_pairing_complete_cb(struct hci_conn *conn, u8 status) 3391 { 3392 struct mgmt_pending_cmd *cmd; 3393 3394 BT_DBG("status %u", status); 3395 3396 if (!status) 3397 return; 3398 3399 cmd = find_pairing(conn); 3400 if (!cmd) { 3401 BT_DBG("Unable to find a pending command"); 3402 return; 3403 } 3404 3405 cmd->cmd_complete(cmd, mgmt_status(status)); 3406 mgmt_pending_remove(cmd); 3407 } 3408 3409 static int pair_device(struct sock *sk, struct hci_dev *hdev, void *data, 3410 u16 len) 3411 { 3412 struct mgmt_cp_pair_device *cp = data; 3413 struct mgmt_rp_pair_device rp; 3414 struct mgmt_pending_cmd *cmd; 3415 u8 sec_level, auth_type; 3416 struct hci_conn *conn; 3417 int err; 3418 3419 bt_dev_dbg(hdev, "sock %p", sk); 3420 3421 memset(&rp, 0, sizeof(rp)); 3422 bacpy(&rp.addr.bdaddr, &cp->addr.bdaddr); 3423 rp.addr.type = cp->addr.type; 3424 3425 if (!bdaddr_type_is_valid(cp->addr.type)) 3426 return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_PAIR_DEVICE, 3427 MGMT_STATUS_INVALID_PARAMS, 3428 &rp, sizeof(rp)); 3429 3430 if (cp->io_cap > SMP_IO_KEYBOARD_DISPLAY) 3431 return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_PAIR_DEVICE, 3432 MGMT_STATUS_INVALID_PARAMS, 3433 &rp, sizeof(rp)); 3434 3435 hci_dev_lock(hdev); 3436 3437 if (!hdev_is_powered(hdev)) { 3438 err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_PAIR_DEVICE, 3439 MGMT_STATUS_NOT_POWERED, &rp, 3440 sizeof(rp)); 3441 goto unlock; 3442 } 3443 3444 if (hci_bdaddr_is_paired(hdev, &cp->addr.bdaddr, cp->addr.type)) { 3445 err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_PAIR_DEVICE, 3446 MGMT_STATUS_ALREADY_PAIRED, &rp, 3447 sizeof(rp)); 3448 goto unlock; 3449 } 3450 3451 sec_level = BT_SECURITY_MEDIUM; 3452 auth_type = HCI_AT_DEDICATED_BONDING; 3453 3454 if (cp->addr.type == BDADDR_BREDR) { 3455 conn = hci_connect_acl(hdev, &cp->addr.bdaddr, sec_level, 3456 auth_type, CONN_REASON_PAIR_DEVICE, 3457 HCI_ACL_CONN_TIMEOUT); 3458 } else { 3459 u8 addr_type = le_addr_type(cp->addr.type); 3460 struct hci_conn_params *p; 3461 3462 /* When pairing a new device, it is expected to remember 3463 * this device for future connections. Adding the connection 3464 * parameter information ahead of time allows tracking 3465 * of the peripheral preferred values and will speed up any 3466 * further connection establishment. 3467 * 3468 * If connection parameters already exist, then they 3469 * will be kept and this function does nothing. 3470 */ 3471 p = hci_conn_params_add(hdev, &cp->addr.bdaddr, addr_type); 3472 3473 if (p->auto_connect == HCI_AUTO_CONN_EXPLICIT) 3474 p->auto_connect = HCI_AUTO_CONN_DISABLED; 3475 3476 conn = hci_connect_le_scan(hdev, &cp->addr.bdaddr, addr_type, 3477 sec_level, HCI_LE_CONN_TIMEOUT, 3478 CONN_REASON_PAIR_DEVICE); 3479 } 3480 3481 if (IS_ERR(conn)) { 3482 int status; 3483 3484 if (PTR_ERR(conn) == -EBUSY) 3485 status = MGMT_STATUS_BUSY; 3486 else if (PTR_ERR(conn) == -EOPNOTSUPP) 3487 status = MGMT_STATUS_NOT_SUPPORTED; 3488 else if (PTR_ERR(conn) == -ECONNREFUSED) 3489 status = MGMT_STATUS_REJECTED; 3490 else 3491 status = MGMT_STATUS_CONNECT_FAILED; 3492 3493 err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_PAIR_DEVICE, 3494 status, &rp, sizeof(rp)); 3495 goto unlock; 3496 } 3497 3498 if (conn->connect_cfm_cb) { 3499 hci_conn_drop(conn); 3500 err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_PAIR_DEVICE, 3501 MGMT_STATUS_BUSY, &rp, sizeof(rp)); 3502 goto unlock; 3503 } 3504 3505 cmd = mgmt_pending_add(sk, MGMT_OP_PAIR_DEVICE, hdev, data, len); 3506 if (!cmd) { 3507 err = -ENOMEM; 3508 hci_conn_drop(conn); 3509 goto unlock; 3510 } 3511 3512 cmd->cmd_complete = pairing_complete; 3513 3514 /* For LE, just connecting isn't a proof that the pairing finished */ 3515 if (cp->addr.type == BDADDR_BREDR) { 3516 conn->connect_cfm_cb = pairing_complete_cb; 3517 conn->security_cfm_cb = pairing_complete_cb; 3518 conn->disconn_cfm_cb = pairing_complete_cb; 3519 } else { 3520 conn->connect_cfm_cb = le_pairing_complete_cb; 3521 conn->security_cfm_cb = le_pairing_complete_cb; 3522 conn->disconn_cfm_cb = le_pairing_complete_cb; 3523 } 3524 3525 conn->io_capability = cp->io_cap; 3526 cmd->user_data = hci_conn_get(conn); 3527 3528 if ((conn->state == BT_CONNECTED || conn->state == BT_CONFIG) && 3529 hci_conn_security(conn, sec_level, auth_type, true)) { 3530 cmd->cmd_complete(cmd, 0); 3531 mgmt_pending_remove(cmd); 3532 } 3533 3534 err = 0; 3535 3536 unlock: 3537 hci_dev_unlock(hdev); 3538 return err; 3539 } 3540 3541 static int cancel_pair_device(struct sock *sk, struct hci_dev *hdev, void *data, 3542 u16 len) 3543 { 3544 struct mgmt_addr_info *addr = data; 3545 struct mgmt_pending_cmd *cmd; 3546 struct hci_conn *conn; 3547 int err; 3548 3549 bt_dev_dbg(hdev, "sock %p", sk); 3550 3551 hci_dev_lock(hdev); 3552 3553 if (!hdev_is_powered(hdev)) { 3554 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_CANCEL_PAIR_DEVICE, 3555 MGMT_STATUS_NOT_POWERED); 3556 goto unlock; 3557 } 3558 3559 cmd = pending_find(MGMT_OP_PAIR_DEVICE, hdev); 3560 if (!cmd) { 3561 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_CANCEL_PAIR_DEVICE, 3562 MGMT_STATUS_INVALID_PARAMS); 3563 goto unlock; 3564 } 3565 3566 conn = cmd->user_data; 3567 3568 if (bacmp(&addr->bdaddr, &conn->dst) != 0) { 3569 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_CANCEL_PAIR_DEVICE, 3570 MGMT_STATUS_INVALID_PARAMS); 3571 goto unlock; 3572 } 3573 3574 cmd->cmd_complete(cmd, MGMT_STATUS_CANCELLED); 3575 mgmt_pending_remove(cmd); 3576 3577 err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_CANCEL_PAIR_DEVICE, 0, 3578 addr, sizeof(*addr)); 3579 3580 /* Since user doesn't want to proceed with the connection, abort any 3581 * ongoing pairing and then terminate the link if it was created 3582 * because of the pair device action. 3583 */ 3584 if (addr->type == BDADDR_BREDR) 3585 hci_remove_link_key(hdev, &addr->bdaddr); 3586 else 3587 smp_cancel_and_remove_pairing(hdev, &addr->bdaddr, 3588 le_addr_type(addr->type)); 3589 3590 if (conn->conn_reason == CONN_REASON_PAIR_DEVICE) 3591 hci_abort_conn(conn, HCI_ERROR_REMOTE_USER_TERM); 3592 3593 unlock: 3594 hci_dev_unlock(hdev); 3595 return err; 3596 } 3597 3598 static int user_pairing_resp(struct sock *sk, struct hci_dev *hdev, 3599 struct mgmt_addr_info *addr, u16 mgmt_op, 3600 u16 hci_op, __le32 passkey) 3601 { 3602 struct mgmt_pending_cmd *cmd; 3603 struct hci_conn *conn; 3604 int err; 3605 3606 hci_dev_lock(hdev); 3607 3608 if (!hdev_is_powered(hdev)) { 3609 err = mgmt_cmd_complete(sk, hdev->id, mgmt_op, 3610 MGMT_STATUS_NOT_POWERED, addr, 3611 sizeof(*addr)); 3612 goto done; 3613 } 3614 3615 if (addr->type == BDADDR_BREDR) 3616 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &addr->bdaddr); 3617 else 3618 conn = hci_conn_hash_lookup_le(hdev, &addr->bdaddr, 3619 le_addr_type(addr->type)); 3620 3621 if (!conn) { 3622 err = mgmt_cmd_complete(sk, hdev->id, mgmt_op, 3623 MGMT_STATUS_NOT_CONNECTED, addr, 3624 sizeof(*addr)); 3625 goto done; 3626 } 3627 3628 if (addr->type == BDADDR_LE_PUBLIC || addr->type == BDADDR_LE_RANDOM) { 3629 err = smp_user_confirm_reply(conn, mgmt_op, passkey); 3630 if (!err) 3631 err = mgmt_cmd_complete(sk, hdev->id, mgmt_op, 3632 MGMT_STATUS_SUCCESS, addr, 3633 sizeof(*addr)); 3634 else 3635 err = mgmt_cmd_complete(sk, hdev->id, mgmt_op, 3636 MGMT_STATUS_FAILED, addr, 3637 sizeof(*addr)); 3638 3639 goto done; 3640 } 3641 3642 cmd = mgmt_pending_add(sk, mgmt_op, hdev, addr, sizeof(*addr)); 3643 if (!cmd) { 3644 err = -ENOMEM; 3645 goto done; 3646 } 3647 3648 cmd->cmd_complete = addr_cmd_complete; 3649 3650 /* Continue with pairing via HCI */ 3651 if (hci_op == HCI_OP_USER_PASSKEY_REPLY) { 3652 struct hci_cp_user_passkey_reply cp; 3653 3654 bacpy(&cp.bdaddr, &addr->bdaddr); 3655 cp.passkey = passkey; 3656 err = hci_send_cmd(hdev, hci_op, sizeof(cp), &cp); 3657 } else 3658 err = hci_send_cmd(hdev, hci_op, sizeof(addr->bdaddr), 3659 &addr->bdaddr); 3660 3661 if (err < 0) 3662 mgmt_pending_remove(cmd); 3663 3664 done: 3665 hci_dev_unlock(hdev); 3666 return err; 3667 } 3668 3669 static int pin_code_neg_reply(struct sock *sk, struct hci_dev *hdev, 3670 void *data, u16 len) 3671 { 3672 struct mgmt_cp_pin_code_neg_reply *cp = data; 3673 3674 bt_dev_dbg(hdev, "sock %p", sk); 3675 3676 return user_pairing_resp(sk, hdev, &cp->addr, 3677 MGMT_OP_PIN_CODE_NEG_REPLY, 3678 HCI_OP_PIN_CODE_NEG_REPLY, 0); 3679 } 3680 3681 static int user_confirm_reply(struct sock *sk, struct hci_dev *hdev, void *data, 3682 u16 len) 3683 { 3684 struct mgmt_cp_user_confirm_reply *cp = data; 3685 3686 bt_dev_dbg(hdev, "sock %p", sk); 3687 3688 if (len != sizeof(*cp)) 3689 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_USER_CONFIRM_REPLY, 3690 MGMT_STATUS_INVALID_PARAMS); 3691 3692 return user_pairing_resp(sk, hdev, &cp->addr, 3693 MGMT_OP_USER_CONFIRM_REPLY, 3694 HCI_OP_USER_CONFIRM_REPLY, 0); 3695 } 3696 3697 static int user_confirm_neg_reply(struct sock *sk, struct hci_dev *hdev, 3698 void *data, u16 len) 3699 { 3700 struct mgmt_cp_user_confirm_neg_reply *cp = data; 3701 3702 bt_dev_dbg(hdev, "sock %p", sk); 3703 3704 return user_pairing_resp(sk, hdev, &cp->addr, 3705 MGMT_OP_USER_CONFIRM_NEG_REPLY, 3706 HCI_OP_USER_CONFIRM_NEG_REPLY, 0); 3707 } 3708 3709 static int user_passkey_reply(struct sock *sk, struct hci_dev *hdev, void *data, 3710 u16 len) 3711 { 3712 struct mgmt_cp_user_passkey_reply *cp = data; 3713 3714 bt_dev_dbg(hdev, "sock %p", sk); 3715 3716 return user_pairing_resp(sk, hdev, &cp->addr, 3717 MGMT_OP_USER_PASSKEY_REPLY, 3718 HCI_OP_USER_PASSKEY_REPLY, cp->passkey); 3719 } 3720 3721 static int user_passkey_neg_reply(struct sock *sk, struct hci_dev *hdev, 3722 void *data, u16 len) 3723 { 3724 struct mgmt_cp_user_passkey_neg_reply *cp = data; 3725 3726 bt_dev_dbg(hdev, "sock %p", sk); 3727 3728 return user_pairing_resp(sk, hdev, &cp->addr, 3729 MGMT_OP_USER_PASSKEY_NEG_REPLY, 3730 HCI_OP_USER_PASSKEY_NEG_REPLY, 0); 3731 } 3732 3733 static int adv_expire_sync(struct hci_dev *hdev, u32 flags) 3734 { 3735 struct adv_info *adv_instance; 3736 3737 adv_instance = hci_find_adv_instance(hdev, hdev->cur_adv_instance); 3738 if (!adv_instance) 3739 return 0; 3740 3741 /* stop if current instance doesn't need to be changed */ 3742 if (!(adv_instance->flags & flags)) 3743 return 0; 3744 3745 cancel_adv_timeout(hdev); 3746 3747 adv_instance = hci_get_next_instance(hdev, adv_instance->instance); 3748 if (!adv_instance) 3749 return 0; 3750 3751 hci_schedule_adv_instance_sync(hdev, adv_instance->instance, true); 3752 3753 return 0; 3754 } 3755 3756 static int name_changed_sync(struct hci_dev *hdev, void *data) 3757 { 3758 return adv_expire_sync(hdev, MGMT_ADV_FLAG_LOCAL_NAME); 3759 } 3760 3761 static void set_name_complete(struct hci_dev *hdev, void *data, int err) 3762 { 3763 struct mgmt_pending_cmd *cmd = data; 3764 struct mgmt_cp_set_local_name *cp = cmd->param; 3765 u8 status = mgmt_status(err); 3766 3767 bt_dev_dbg(hdev, "err %d", err); 3768 3769 if (cmd != pending_find(MGMT_OP_SET_LOCAL_NAME, hdev)) 3770 return; 3771 3772 if (status) { 3773 mgmt_cmd_status(cmd->sk, hdev->id, MGMT_OP_SET_LOCAL_NAME, 3774 status); 3775 } else { 3776 mgmt_cmd_complete(cmd->sk, hdev->id, MGMT_OP_SET_LOCAL_NAME, 0, 3777 cp, sizeof(*cp)); 3778 3779 if (hci_dev_test_flag(hdev, HCI_LE_ADV)) 3780 hci_cmd_sync_queue(hdev, name_changed_sync, NULL, NULL); 3781 } 3782 3783 mgmt_pending_remove(cmd); 3784 } 3785 3786 static int set_name_sync(struct hci_dev *hdev, void *data) 3787 { 3788 if (lmp_bredr_capable(hdev)) { 3789 hci_update_name_sync(hdev); 3790 hci_update_eir_sync(hdev); 3791 } 3792 3793 /* The name is stored in the scan response data and so 3794 * no need to update the advertising data here. 3795 */ 3796 if (lmp_le_capable(hdev) && hci_dev_test_flag(hdev, HCI_ADVERTISING)) 3797 hci_update_scan_rsp_data_sync(hdev, hdev->cur_adv_instance); 3798 3799 return 0; 3800 } 3801 3802 static int set_local_name(struct sock *sk, struct hci_dev *hdev, void *data, 3803 u16 len) 3804 { 3805 struct mgmt_cp_set_local_name *cp = data; 3806 struct mgmt_pending_cmd *cmd; 3807 int err; 3808 3809 bt_dev_dbg(hdev, "sock %p", sk); 3810 3811 hci_dev_lock(hdev); 3812 3813 /* If the old values are the same as the new ones just return a 3814 * direct command complete event. 3815 */ 3816 if (!memcmp(hdev->dev_name, cp->name, sizeof(hdev->dev_name)) && 3817 !memcmp(hdev->short_name, cp->short_name, 3818 sizeof(hdev->short_name))) { 3819 err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_SET_LOCAL_NAME, 0, 3820 data, len); 3821 goto failed; 3822 } 3823 3824 memcpy(hdev->short_name, cp->short_name, sizeof(hdev->short_name)); 3825 3826 if (!hdev_is_powered(hdev)) { 3827 memcpy(hdev->dev_name, cp->name, sizeof(hdev->dev_name)); 3828 3829 err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_SET_LOCAL_NAME, 0, 3830 data, len); 3831 if (err < 0) 3832 goto failed; 3833 3834 err = mgmt_limited_event(MGMT_EV_LOCAL_NAME_CHANGED, hdev, data, 3835 len, HCI_MGMT_LOCAL_NAME_EVENTS, sk); 3836 ext_info_changed(hdev, sk); 3837 3838 goto failed; 3839 } 3840 3841 cmd = mgmt_pending_add(sk, MGMT_OP_SET_LOCAL_NAME, hdev, data, len); 3842 if (!cmd) 3843 err = -ENOMEM; 3844 else 3845 err = hci_cmd_sync_queue(hdev, set_name_sync, cmd, 3846 set_name_complete); 3847 3848 if (err < 0) { 3849 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_LOCAL_NAME, 3850 MGMT_STATUS_FAILED); 3851 3852 if (cmd) 3853 mgmt_pending_remove(cmd); 3854 3855 goto failed; 3856 } 3857 3858 memcpy(hdev->dev_name, cp->name, sizeof(hdev->dev_name)); 3859 3860 failed: 3861 hci_dev_unlock(hdev); 3862 return err; 3863 } 3864 3865 static int appearance_changed_sync(struct hci_dev *hdev, void *data) 3866 { 3867 return adv_expire_sync(hdev, MGMT_ADV_FLAG_APPEARANCE); 3868 } 3869 3870 static int set_appearance(struct sock *sk, struct hci_dev *hdev, void *data, 3871 u16 len) 3872 { 3873 struct mgmt_cp_set_appearance *cp = data; 3874 u16 appearance; 3875 int err; 3876 3877 bt_dev_dbg(hdev, "sock %p", sk); 3878 3879 if (!lmp_le_capable(hdev)) 3880 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_APPEARANCE, 3881 MGMT_STATUS_NOT_SUPPORTED); 3882 3883 appearance = le16_to_cpu(cp->appearance); 3884 3885 hci_dev_lock(hdev); 3886 3887 if (hdev->appearance != appearance) { 3888 hdev->appearance = appearance; 3889 3890 if (hci_dev_test_flag(hdev, HCI_LE_ADV)) 3891 hci_cmd_sync_queue(hdev, appearance_changed_sync, NULL, 3892 NULL); 3893 3894 ext_info_changed(hdev, sk); 3895 } 3896 3897 err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_SET_APPEARANCE, 0, NULL, 3898 0); 3899 3900 hci_dev_unlock(hdev); 3901 3902 return err; 3903 } 3904 3905 static int get_phy_configuration(struct sock *sk, struct hci_dev *hdev, 3906 void *data, u16 len) 3907 { 3908 struct mgmt_rp_get_phy_configuration rp; 3909 3910 bt_dev_dbg(hdev, "sock %p", sk); 3911 3912 hci_dev_lock(hdev); 3913 3914 memset(&rp, 0, sizeof(rp)); 3915 3916 rp.supported_phys = cpu_to_le32(get_supported_phys(hdev)); 3917 rp.selected_phys = cpu_to_le32(get_selected_phys(hdev)); 3918 rp.configurable_phys = cpu_to_le32(get_configurable_phys(hdev)); 3919 3920 hci_dev_unlock(hdev); 3921 3922 return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_GET_PHY_CONFIGURATION, 0, 3923 &rp, sizeof(rp)); 3924 } 3925 3926 int mgmt_phy_configuration_changed(struct hci_dev *hdev, struct sock *skip) 3927 { 3928 struct mgmt_ev_phy_configuration_changed ev; 3929 3930 memset(&ev, 0, sizeof(ev)); 3931 3932 ev.selected_phys = cpu_to_le32(get_selected_phys(hdev)); 3933 3934 return mgmt_event(MGMT_EV_PHY_CONFIGURATION_CHANGED, hdev, &ev, 3935 sizeof(ev), skip); 3936 } 3937 3938 static void set_default_phy_complete(struct hci_dev *hdev, void *data, int err) 3939 { 3940 struct mgmt_pending_cmd *cmd = data; 3941 struct sk_buff *skb = cmd->skb; 3942 u8 status = mgmt_status(err); 3943 3944 if (cmd != pending_find(MGMT_OP_SET_PHY_CONFIGURATION, hdev)) 3945 return; 3946 3947 if (!status) { 3948 if (!skb) 3949 status = MGMT_STATUS_FAILED; 3950 else if (IS_ERR(skb)) 3951 status = mgmt_status(PTR_ERR(skb)); 3952 else 3953 status = mgmt_status(skb->data[0]); 3954 } 3955 3956 bt_dev_dbg(hdev, "status %d", status); 3957 3958 if (status) { 3959 mgmt_cmd_status(cmd->sk, hdev->id, 3960 MGMT_OP_SET_PHY_CONFIGURATION, status); 3961 } else { 3962 mgmt_cmd_complete(cmd->sk, hdev->id, 3963 MGMT_OP_SET_PHY_CONFIGURATION, 0, 3964 NULL, 0); 3965 3966 mgmt_phy_configuration_changed(hdev, cmd->sk); 3967 } 3968 3969 if (skb && !IS_ERR(skb)) 3970 kfree_skb(skb); 3971 3972 mgmt_pending_remove(cmd); 3973 } 3974 3975 static int set_default_phy_sync(struct hci_dev *hdev, void *data) 3976 { 3977 struct mgmt_pending_cmd *cmd = data; 3978 struct mgmt_cp_set_phy_configuration *cp = cmd->param; 3979 struct hci_cp_le_set_default_phy cp_phy; 3980 u32 selected_phys = __le32_to_cpu(cp->selected_phys); 3981 3982 memset(&cp_phy, 0, sizeof(cp_phy)); 3983 3984 if (!(selected_phys & MGMT_PHY_LE_TX_MASK)) 3985 cp_phy.all_phys |= 0x01; 3986 3987 if (!(selected_phys & MGMT_PHY_LE_RX_MASK)) 3988 cp_phy.all_phys |= 0x02; 3989 3990 if (selected_phys & MGMT_PHY_LE_1M_TX) 3991 cp_phy.tx_phys |= HCI_LE_SET_PHY_1M; 3992 3993 if (selected_phys & MGMT_PHY_LE_2M_TX) 3994 cp_phy.tx_phys |= HCI_LE_SET_PHY_2M; 3995 3996 if (selected_phys & MGMT_PHY_LE_CODED_TX) 3997 cp_phy.tx_phys |= HCI_LE_SET_PHY_CODED; 3998 3999 if (selected_phys & MGMT_PHY_LE_1M_RX) 4000 cp_phy.rx_phys |= HCI_LE_SET_PHY_1M; 4001 4002 if (selected_phys & MGMT_PHY_LE_2M_RX) 4003 cp_phy.rx_phys |= HCI_LE_SET_PHY_2M; 4004 4005 if (selected_phys & MGMT_PHY_LE_CODED_RX) 4006 cp_phy.rx_phys |= HCI_LE_SET_PHY_CODED; 4007 4008 cmd->skb = __hci_cmd_sync(hdev, HCI_OP_LE_SET_DEFAULT_PHY, 4009 sizeof(cp_phy), &cp_phy, HCI_CMD_TIMEOUT); 4010 4011 return 0; 4012 } 4013 4014 static int set_phy_configuration(struct sock *sk, struct hci_dev *hdev, 4015 void *data, u16 len) 4016 { 4017 struct mgmt_cp_set_phy_configuration *cp = data; 4018 struct mgmt_pending_cmd *cmd; 4019 u32 selected_phys, configurable_phys, supported_phys, unconfigure_phys; 4020 u16 pkt_type = (HCI_DH1 | HCI_DM1); 4021 bool changed = false; 4022 int err; 4023 4024 bt_dev_dbg(hdev, "sock %p", sk); 4025 4026 configurable_phys = get_configurable_phys(hdev); 4027 supported_phys = get_supported_phys(hdev); 4028 selected_phys = __le32_to_cpu(cp->selected_phys); 4029 4030 if (selected_phys & ~supported_phys) 4031 return mgmt_cmd_status(sk, hdev->id, 4032 MGMT_OP_SET_PHY_CONFIGURATION, 4033 MGMT_STATUS_INVALID_PARAMS); 4034 4035 unconfigure_phys = supported_phys & ~configurable_phys; 4036 4037 if ((selected_phys & unconfigure_phys) != unconfigure_phys) 4038 return mgmt_cmd_status(sk, hdev->id, 4039 MGMT_OP_SET_PHY_CONFIGURATION, 4040 MGMT_STATUS_INVALID_PARAMS); 4041 4042 if (selected_phys == get_selected_phys(hdev)) 4043 return mgmt_cmd_complete(sk, hdev->id, 4044 MGMT_OP_SET_PHY_CONFIGURATION, 4045 0, NULL, 0); 4046 4047 hci_dev_lock(hdev); 4048 4049 if (!hdev_is_powered(hdev)) { 4050 err = mgmt_cmd_status(sk, hdev->id, 4051 MGMT_OP_SET_PHY_CONFIGURATION, 4052 MGMT_STATUS_REJECTED); 4053 goto unlock; 4054 } 4055 4056 if (pending_find(MGMT_OP_SET_PHY_CONFIGURATION, hdev)) { 4057 err = mgmt_cmd_status(sk, hdev->id, 4058 MGMT_OP_SET_PHY_CONFIGURATION, 4059 MGMT_STATUS_BUSY); 4060 goto unlock; 4061 } 4062 4063 if (selected_phys & MGMT_PHY_BR_1M_3SLOT) 4064 pkt_type |= (HCI_DH3 | HCI_DM3); 4065 else 4066 pkt_type &= ~(HCI_DH3 | HCI_DM3); 4067 4068 if (selected_phys & MGMT_PHY_BR_1M_5SLOT) 4069 pkt_type |= (HCI_DH5 | HCI_DM5); 4070 else 4071 pkt_type &= ~(HCI_DH5 | HCI_DM5); 4072 4073 if (selected_phys & MGMT_PHY_EDR_2M_1SLOT) 4074 pkt_type &= ~HCI_2DH1; 4075 else 4076 pkt_type |= HCI_2DH1; 4077 4078 if (selected_phys & MGMT_PHY_EDR_2M_3SLOT) 4079 pkt_type &= ~HCI_2DH3; 4080 else 4081 pkt_type |= HCI_2DH3; 4082 4083 if (selected_phys & MGMT_PHY_EDR_2M_5SLOT) 4084 pkt_type &= ~HCI_2DH5; 4085 else 4086 pkt_type |= HCI_2DH5; 4087 4088 if (selected_phys & MGMT_PHY_EDR_3M_1SLOT) 4089 pkt_type &= ~HCI_3DH1; 4090 else 4091 pkt_type |= HCI_3DH1; 4092 4093 if (selected_phys & MGMT_PHY_EDR_3M_3SLOT) 4094 pkt_type &= ~HCI_3DH3; 4095 else 4096 pkt_type |= HCI_3DH3; 4097 4098 if (selected_phys & MGMT_PHY_EDR_3M_5SLOT) 4099 pkt_type &= ~HCI_3DH5; 4100 else 4101 pkt_type |= HCI_3DH5; 4102 4103 if (pkt_type != hdev->pkt_type) { 4104 hdev->pkt_type = pkt_type; 4105 changed = true; 4106 } 4107 4108 if ((selected_phys & MGMT_PHY_LE_MASK) == 4109 (get_selected_phys(hdev) & MGMT_PHY_LE_MASK)) { 4110 if (changed) 4111 mgmt_phy_configuration_changed(hdev, sk); 4112 4113 err = mgmt_cmd_complete(sk, hdev->id, 4114 MGMT_OP_SET_PHY_CONFIGURATION, 4115 0, NULL, 0); 4116 4117 goto unlock; 4118 } 4119 4120 cmd = mgmt_pending_add(sk, MGMT_OP_SET_PHY_CONFIGURATION, hdev, data, 4121 len); 4122 if (!cmd) 4123 err = -ENOMEM; 4124 else 4125 err = hci_cmd_sync_queue(hdev, set_default_phy_sync, cmd, 4126 set_default_phy_complete); 4127 4128 if (err < 0) { 4129 err = mgmt_cmd_status(sk, hdev->id, 4130 MGMT_OP_SET_PHY_CONFIGURATION, 4131 MGMT_STATUS_FAILED); 4132 4133 if (cmd) 4134 mgmt_pending_remove(cmd); 4135 } 4136 4137 unlock: 4138 hci_dev_unlock(hdev); 4139 4140 return err; 4141 } 4142 4143 static int set_blocked_keys(struct sock *sk, struct hci_dev *hdev, void *data, 4144 u16 len) 4145 { 4146 int err = MGMT_STATUS_SUCCESS; 4147 struct mgmt_cp_set_blocked_keys *keys = data; 4148 const u16 max_key_count = ((U16_MAX - sizeof(*keys)) / 4149 sizeof(struct mgmt_blocked_key_info)); 4150 u16 key_count, expected_len; 4151 int i; 4152 4153 bt_dev_dbg(hdev, "sock %p", sk); 4154 4155 key_count = __le16_to_cpu(keys->key_count); 4156 if (key_count > max_key_count) { 4157 bt_dev_err(hdev, "too big key_count value %u", key_count); 4158 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_BLOCKED_KEYS, 4159 MGMT_STATUS_INVALID_PARAMS); 4160 } 4161 4162 expected_len = struct_size(keys, keys, key_count); 4163 if (expected_len != len) { 4164 bt_dev_err(hdev, "expected %u bytes, got %u bytes", 4165 expected_len, len); 4166 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_BLOCKED_KEYS, 4167 MGMT_STATUS_INVALID_PARAMS); 4168 } 4169 4170 hci_dev_lock(hdev); 4171 4172 hci_blocked_keys_clear(hdev); 4173 4174 for (i = 0; i < key_count; ++i) { 4175 struct blocked_key *b = kzalloc(sizeof(*b), GFP_KERNEL); 4176 4177 if (!b) { 4178 err = MGMT_STATUS_NO_RESOURCES; 4179 break; 4180 } 4181 4182 b->type = keys->keys[i].type; 4183 memcpy(b->val, keys->keys[i].val, sizeof(b->val)); 4184 list_add_rcu(&b->list, &hdev->blocked_keys); 4185 } 4186 hci_dev_unlock(hdev); 4187 4188 return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_SET_BLOCKED_KEYS, 4189 err, NULL, 0); 4190 } 4191 4192 static int set_wideband_speech(struct sock *sk, struct hci_dev *hdev, 4193 void *data, u16 len) 4194 { 4195 struct mgmt_mode *cp = data; 4196 int err; 4197 bool changed = false; 4198 4199 bt_dev_dbg(hdev, "sock %p", sk); 4200 4201 if (!test_bit(HCI_QUIRK_WIDEBAND_SPEECH_SUPPORTED, &hdev->quirks)) 4202 return mgmt_cmd_status(sk, hdev->id, 4203 MGMT_OP_SET_WIDEBAND_SPEECH, 4204 MGMT_STATUS_NOT_SUPPORTED); 4205 4206 if (cp->val != 0x00 && cp->val != 0x01) 4207 return mgmt_cmd_status(sk, hdev->id, 4208 MGMT_OP_SET_WIDEBAND_SPEECH, 4209 MGMT_STATUS_INVALID_PARAMS); 4210 4211 hci_dev_lock(hdev); 4212 4213 if (hdev_is_powered(hdev) && 4214 !!cp->val != hci_dev_test_flag(hdev, 4215 HCI_WIDEBAND_SPEECH_ENABLED)) { 4216 err = mgmt_cmd_status(sk, hdev->id, 4217 MGMT_OP_SET_WIDEBAND_SPEECH, 4218 MGMT_STATUS_REJECTED); 4219 goto unlock; 4220 } 4221 4222 if (cp->val) 4223 changed = !hci_dev_test_and_set_flag(hdev, 4224 HCI_WIDEBAND_SPEECH_ENABLED); 4225 else 4226 changed = hci_dev_test_and_clear_flag(hdev, 4227 HCI_WIDEBAND_SPEECH_ENABLED); 4228 4229 err = send_settings_rsp(sk, MGMT_OP_SET_WIDEBAND_SPEECH, hdev); 4230 if (err < 0) 4231 goto unlock; 4232 4233 if (changed) 4234 err = new_settings(hdev, sk); 4235 4236 unlock: 4237 hci_dev_unlock(hdev); 4238 return err; 4239 } 4240 4241 static int read_controller_cap(struct sock *sk, struct hci_dev *hdev, 4242 void *data, u16 data_len) 4243 { 4244 char buf[20]; 4245 struct mgmt_rp_read_controller_cap *rp = (void *)buf; 4246 u16 cap_len = 0; 4247 u8 flags = 0; 4248 u8 tx_power_range[2]; 4249 4250 bt_dev_dbg(hdev, "sock %p", sk); 4251 4252 memset(&buf, 0, sizeof(buf)); 4253 4254 hci_dev_lock(hdev); 4255 4256 /* When the Read Simple Pairing Options command is supported, then 4257 * the remote public key validation is supported. 4258 * 4259 * Alternatively, when Microsoft extensions are available, they can 4260 * indicate support for public key validation as well. 4261 */ 4262 if ((hdev->commands[41] & 0x08) || msft_curve_validity(hdev)) 4263 flags |= 0x01; /* Remote public key validation (BR/EDR) */ 4264 4265 flags |= 0x02; /* Remote public key validation (LE) */ 4266 4267 /* When the Read Encryption Key Size command is supported, then the 4268 * encryption key size is enforced. 4269 */ 4270 if (hdev->commands[20] & 0x10) 4271 flags |= 0x04; /* Encryption key size enforcement (BR/EDR) */ 4272 4273 flags |= 0x08; /* Encryption key size enforcement (LE) */ 4274 4275 cap_len = eir_append_data(rp->cap, cap_len, MGMT_CAP_SEC_FLAGS, 4276 &flags, 1); 4277 4278 /* When the Read Simple Pairing Options command is supported, then 4279 * also max encryption key size information is provided. 4280 */ 4281 if (hdev->commands[41] & 0x08) 4282 cap_len = eir_append_le16(rp->cap, cap_len, 4283 MGMT_CAP_MAX_ENC_KEY_SIZE, 4284 hdev->max_enc_key_size); 4285 4286 cap_len = eir_append_le16(rp->cap, cap_len, 4287 MGMT_CAP_SMP_MAX_ENC_KEY_SIZE, 4288 SMP_MAX_ENC_KEY_SIZE); 4289 4290 /* Append the min/max LE tx power parameters if we were able to fetch 4291 * it from the controller 4292 */ 4293 if (hdev->commands[38] & 0x80) { 4294 memcpy(&tx_power_range[0], &hdev->min_le_tx_power, 1); 4295 memcpy(&tx_power_range[1], &hdev->max_le_tx_power, 1); 4296 cap_len = eir_append_data(rp->cap, cap_len, MGMT_CAP_LE_TX_PWR, 4297 tx_power_range, 2); 4298 } 4299 4300 rp->cap_len = cpu_to_le16(cap_len); 4301 4302 hci_dev_unlock(hdev); 4303 4304 return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_READ_CONTROLLER_CAP, 0, 4305 rp, sizeof(*rp) + cap_len); 4306 } 4307 4308 #ifdef CONFIG_BT_FEATURE_DEBUG 4309 /* d4992530-b9ec-469f-ab01-6c481c47da1c */ 4310 static const u8 debug_uuid[16] = { 4311 0x1c, 0xda, 0x47, 0x1c, 0x48, 0x6c, 0x01, 0xab, 4312 0x9f, 0x46, 0xec, 0xb9, 0x30, 0x25, 0x99, 0xd4, 4313 }; 4314 #endif 4315 4316 /* 330859bc-7506-492d-9370-9a6f0614037f */ 4317 static const u8 quality_report_uuid[16] = { 4318 0x7f, 0x03, 0x14, 0x06, 0x6f, 0x9a, 0x70, 0x93, 4319 0x2d, 0x49, 0x06, 0x75, 0xbc, 0x59, 0x08, 0x33, 4320 }; 4321 4322 /* a6695ace-ee7f-4fb9-881a-5fac66c629af */ 4323 static const u8 offload_codecs_uuid[16] = { 4324 0xaf, 0x29, 0xc6, 0x66, 0xac, 0x5f, 0x1a, 0x88, 4325 0xb9, 0x4f, 0x7f, 0xee, 0xce, 0x5a, 0x69, 0xa6, 4326 }; 4327 4328 /* 671b10b5-42c0-4696-9227-eb28d1b049d6 */ 4329 static const u8 le_simultaneous_roles_uuid[16] = { 4330 0xd6, 0x49, 0xb0, 0xd1, 0x28, 0xeb, 0x27, 0x92, 4331 0x96, 0x46, 0xc0, 0x42, 0xb5, 0x10, 0x1b, 0x67, 4332 }; 4333 4334 /* 15c0a148-c273-11ea-b3de-0242ac130004 */ 4335 static const u8 rpa_resolution_uuid[16] = { 4336 0x04, 0x00, 0x13, 0xac, 0x42, 0x02, 0xde, 0xb3, 4337 0xea, 0x11, 0x73, 0xc2, 0x48, 0xa1, 0xc0, 0x15, 4338 }; 4339 4340 /* 6fbaf188-05e0-496a-9885-d6ddfdb4e03e */ 4341 static const u8 iso_socket_uuid[16] = { 4342 0x3e, 0xe0, 0xb4, 0xfd, 0xdd, 0xd6, 0x85, 0x98, 4343 0x6a, 0x49, 0xe0, 0x05, 0x88, 0xf1, 0xba, 0x6f, 4344 }; 4345 4346 /* 2ce463d7-7a03-4d8d-bf05-5f24e8f36e76 */ 4347 static const u8 mgmt_mesh_uuid[16] = { 4348 0x76, 0x6e, 0xf3, 0xe8, 0x24, 0x5f, 0x05, 0xbf, 4349 0x8d, 0x4d, 0x03, 0x7a, 0xd7, 0x63, 0xe4, 0x2c, 4350 }; 4351 4352 static int read_exp_features_info(struct sock *sk, struct hci_dev *hdev, 4353 void *data, u16 data_len) 4354 { 4355 struct mgmt_rp_read_exp_features_info *rp; 4356 size_t len; 4357 u16 idx = 0; 4358 u32 flags; 4359 int status; 4360 4361 bt_dev_dbg(hdev, "sock %p", sk); 4362 4363 /* Enough space for 7 features */ 4364 len = sizeof(*rp) + (sizeof(rp->features[0]) * 7); 4365 rp = kzalloc(len, GFP_KERNEL); 4366 if (!rp) 4367 return -ENOMEM; 4368 4369 #ifdef CONFIG_BT_FEATURE_DEBUG 4370 if (!hdev) { 4371 flags = bt_dbg_get() ? BIT(0) : 0; 4372 4373 memcpy(rp->features[idx].uuid, debug_uuid, 16); 4374 rp->features[idx].flags = cpu_to_le32(flags); 4375 idx++; 4376 } 4377 #endif 4378 4379 if (hdev && hci_dev_le_state_simultaneous(hdev)) { 4380 if (hci_dev_test_flag(hdev, HCI_LE_SIMULTANEOUS_ROLES)) 4381 flags = BIT(0); 4382 else 4383 flags = 0; 4384 4385 memcpy(rp->features[idx].uuid, le_simultaneous_roles_uuid, 16); 4386 rp->features[idx].flags = cpu_to_le32(flags); 4387 idx++; 4388 } 4389 4390 if (hdev && ll_privacy_capable(hdev)) { 4391 if (hci_dev_test_flag(hdev, HCI_ENABLE_LL_PRIVACY)) 4392 flags = BIT(0) | BIT(1); 4393 else 4394 flags = BIT(1); 4395 4396 memcpy(rp->features[idx].uuid, rpa_resolution_uuid, 16); 4397 rp->features[idx].flags = cpu_to_le32(flags); 4398 idx++; 4399 } 4400 4401 if (hdev && (aosp_has_quality_report(hdev) || 4402 hdev->set_quality_report)) { 4403 if (hci_dev_test_flag(hdev, HCI_QUALITY_REPORT)) 4404 flags = BIT(0); 4405 else 4406 flags = 0; 4407 4408 memcpy(rp->features[idx].uuid, quality_report_uuid, 16); 4409 rp->features[idx].flags = cpu_to_le32(flags); 4410 idx++; 4411 } 4412 4413 if (hdev && hdev->get_data_path_id) { 4414 if (hci_dev_test_flag(hdev, HCI_OFFLOAD_CODECS_ENABLED)) 4415 flags = BIT(0); 4416 else 4417 flags = 0; 4418 4419 memcpy(rp->features[idx].uuid, offload_codecs_uuid, 16); 4420 rp->features[idx].flags = cpu_to_le32(flags); 4421 idx++; 4422 } 4423 4424 if (IS_ENABLED(CONFIG_BT_LE)) { 4425 flags = iso_enabled() ? BIT(0) : 0; 4426 memcpy(rp->features[idx].uuid, iso_socket_uuid, 16); 4427 rp->features[idx].flags = cpu_to_le32(flags); 4428 idx++; 4429 } 4430 4431 if (hdev && lmp_le_capable(hdev)) { 4432 if (hci_dev_test_flag(hdev, HCI_MESH_EXPERIMENTAL)) 4433 flags = BIT(0); 4434 else 4435 flags = 0; 4436 4437 memcpy(rp->features[idx].uuid, mgmt_mesh_uuid, 16); 4438 rp->features[idx].flags = cpu_to_le32(flags); 4439 idx++; 4440 } 4441 4442 rp->feature_count = cpu_to_le16(idx); 4443 4444 /* After reading the experimental features information, enable 4445 * the events to update client on any future change. 4446 */ 4447 hci_sock_set_flag(sk, HCI_MGMT_EXP_FEATURE_EVENTS); 4448 4449 status = mgmt_cmd_complete(sk, hdev ? hdev->id : MGMT_INDEX_NONE, 4450 MGMT_OP_READ_EXP_FEATURES_INFO, 4451 0, rp, sizeof(*rp) + (20 * idx)); 4452 4453 kfree(rp); 4454 return status; 4455 } 4456 4457 static int exp_ll_privacy_feature_changed(bool enabled, struct hci_dev *hdev, 4458 struct sock *skip) 4459 { 4460 struct mgmt_ev_exp_feature_changed ev; 4461 4462 memset(&ev, 0, sizeof(ev)); 4463 memcpy(ev.uuid, rpa_resolution_uuid, 16); 4464 ev.flags = cpu_to_le32((enabled ? BIT(0) : 0) | BIT(1)); 4465 4466 // Do we need to be atomic with the conn_flags? 4467 if (enabled && privacy_mode_capable(hdev)) 4468 hdev->conn_flags |= HCI_CONN_FLAG_DEVICE_PRIVACY; 4469 else 4470 hdev->conn_flags &= ~HCI_CONN_FLAG_DEVICE_PRIVACY; 4471 4472 return mgmt_limited_event(MGMT_EV_EXP_FEATURE_CHANGED, hdev, 4473 &ev, sizeof(ev), 4474 HCI_MGMT_EXP_FEATURE_EVENTS, skip); 4475 4476 } 4477 4478 static int exp_feature_changed(struct hci_dev *hdev, const u8 *uuid, 4479 bool enabled, struct sock *skip) 4480 { 4481 struct mgmt_ev_exp_feature_changed ev; 4482 4483 memset(&ev, 0, sizeof(ev)); 4484 memcpy(ev.uuid, uuid, 16); 4485 ev.flags = cpu_to_le32(enabled ? BIT(0) : 0); 4486 4487 return mgmt_limited_event(MGMT_EV_EXP_FEATURE_CHANGED, hdev, 4488 &ev, sizeof(ev), 4489 HCI_MGMT_EXP_FEATURE_EVENTS, skip); 4490 } 4491 4492 #define EXP_FEAT(_uuid, _set_func) \ 4493 { \ 4494 .uuid = _uuid, \ 4495 .set_func = _set_func, \ 4496 } 4497 4498 /* The zero key uuid is special. Multiple exp features are set through it. */ 4499 static int set_zero_key_func(struct sock *sk, struct hci_dev *hdev, 4500 struct mgmt_cp_set_exp_feature *cp, u16 data_len) 4501 { 4502 struct mgmt_rp_set_exp_feature rp; 4503 4504 memset(rp.uuid, 0, 16); 4505 rp.flags = cpu_to_le32(0); 4506 4507 #ifdef CONFIG_BT_FEATURE_DEBUG 4508 if (!hdev) { 4509 bool changed = bt_dbg_get(); 4510 4511 bt_dbg_set(false); 4512 4513 if (changed) 4514 exp_feature_changed(NULL, ZERO_KEY, false, sk); 4515 } 4516 #endif 4517 4518 if (hdev && use_ll_privacy(hdev) && !hdev_is_powered(hdev)) { 4519 bool changed; 4520 4521 changed = hci_dev_test_and_clear_flag(hdev, 4522 HCI_ENABLE_LL_PRIVACY); 4523 if (changed) 4524 exp_feature_changed(hdev, rpa_resolution_uuid, false, 4525 sk); 4526 } 4527 4528 hci_sock_set_flag(sk, HCI_MGMT_EXP_FEATURE_EVENTS); 4529 4530 return mgmt_cmd_complete(sk, hdev ? hdev->id : MGMT_INDEX_NONE, 4531 MGMT_OP_SET_EXP_FEATURE, 0, 4532 &rp, sizeof(rp)); 4533 } 4534 4535 #ifdef CONFIG_BT_FEATURE_DEBUG 4536 static int set_debug_func(struct sock *sk, struct hci_dev *hdev, 4537 struct mgmt_cp_set_exp_feature *cp, u16 data_len) 4538 { 4539 struct mgmt_rp_set_exp_feature rp; 4540 4541 bool val, changed; 4542 int err; 4543 4544 /* Command requires to use the non-controller index */ 4545 if (hdev) 4546 return mgmt_cmd_status(sk, hdev->id, 4547 MGMT_OP_SET_EXP_FEATURE, 4548 MGMT_STATUS_INVALID_INDEX); 4549 4550 /* Parameters are limited to a single octet */ 4551 if (data_len != MGMT_SET_EXP_FEATURE_SIZE + 1) 4552 return mgmt_cmd_status(sk, MGMT_INDEX_NONE, 4553 MGMT_OP_SET_EXP_FEATURE, 4554 MGMT_STATUS_INVALID_PARAMS); 4555 4556 /* Only boolean on/off is supported */ 4557 if (cp->param[0] != 0x00 && cp->param[0] != 0x01) 4558 return mgmt_cmd_status(sk, MGMT_INDEX_NONE, 4559 MGMT_OP_SET_EXP_FEATURE, 4560 MGMT_STATUS_INVALID_PARAMS); 4561 4562 val = !!cp->param[0]; 4563 changed = val ? !bt_dbg_get() : bt_dbg_get(); 4564 bt_dbg_set(val); 4565 4566 memcpy(rp.uuid, debug_uuid, 16); 4567 rp.flags = cpu_to_le32(val ? BIT(0) : 0); 4568 4569 hci_sock_set_flag(sk, HCI_MGMT_EXP_FEATURE_EVENTS); 4570 4571 err = mgmt_cmd_complete(sk, MGMT_INDEX_NONE, 4572 MGMT_OP_SET_EXP_FEATURE, 0, 4573 &rp, sizeof(rp)); 4574 4575 if (changed) 4576 exp_feature_changed(hdev, debug_uuid, val, sk); 4577 4578 return err; 4579 } 4580 #endif 4581 4582 static int set_mgmt_mesh_func(struct sock *sk, struct hci_dev *hdev, 4583 struct mgmt_cp_set_exp_feature *cp, u16 data_len) 4584 { 4585 struct mgmt_rp_set_exp_feature rp; 4586 bool val, changed; 4587 int err; 4588 4589 /* Command requires to use the controller index */ 4590 if (!hdev) 4591 return mgmt_cmd_status(sk, MGMT_INDEX_NONE, 4592 MGMT_OP_SET_EXP_FEATURE, 4593 MGMT_STATUS_INVALID_INDEX); 4594 4595 /* Parameters are limited to a single octet */ 4596 if (data_len != MGMT_SET_EXP_FEATURE_SIZE + 1) 4597 return mgmt_cmd_status(sk, hdev->id, 4598 MGMT_OP_SET_EXP_FEATURE, 4599 MGMT_STATUS_INVALID_PARAMS); 4600 4601 /* Only boolean on/off is supported */ 4602 if (cp->param[0] != 0x00 && cp->param[0] != 0x01) 4603 return mgmt_cmd_status(sk, hdev->id, 4604 MGMT_OP_SET_EXP_FEATURE, 4605 MGMT_STATUS_INVALID_PARAMS); 4606 4607 val = !!cp->param[0]; 4608 4609 if (val) { 4610 changed = !hci_dev_test_and_set_flag(hdev, 4611 HCI_MESH_EXPERIMENTAL); 4612 } else { 4613 hci_dev_clear_flag(hdev, HCI_MESH); 4614 changed = hci_dev_test_and_clear_flag(hdev, 4615 HCI_MESH_EXPERIMENTAL); 4616 } 4617 4618 memcpy(rp.uuid, mgmt_mesh_uuid, 16); 4619 rp.flags = cpu_to_le32(val ? BIT(0) : 0); 4620 4621 hci_sock_set_flag(sk, HCI_MGMT_EXP_FEATURE_EVENTS); 4622 4623 err = mgmt_cmd_complete(sk, hdev->id, 4624 MGMT_OP_SET_EXP_FEATURE, 0, 4625 &rp, sizeof(rp)); 4626 4627 if (changed) 4628 exp_feature_changed(hdev, mgmt_mesh_uuid, val, sk); 4629 4630 return err; 4631 } 4632 4633 static int set_rpa_resolution_func(struct sock *sk, struct hci_dev *hdev, 4634 struct mgmt_cp_set_exp_feature *cp, 4635 u16 data_len) 4636 { 4637 struct mgmt_rp_set_exp_feature rp; 4638 bool val, changed; 4639 int err; 4640 u32 flags; 4641 4642 /* Command requires to use the controller index */ 4643 if (!hdev) 4644 return mgmt_cmd_status(sk, MGMT_INDEX_NONE, 4645 MGMT_OP_SET_EXP_FEATURE, 4646 MGMT_STATUS_INVALID_INDEX); 4647 4648 /* Changes can only be made when controller is powered down */ 4649 if (hdev_is_powered(hdev)) 4650 return mgmt_cmd_status(sk, hdev->id, 4651 MGMT_OP_SET_EXP_FEATURE, 4652 MGMT_STATUS_REJECTED); 4653 4654 /* Parameters are limited to a single octet */ 4655 if (data_len != MGMT_SET_EXP_FEATURE_SIZE + 1) 4656 return mgmt_cmd_status(sk, hdev->id, 4657 MGMT_OP_SET_EXP_FEATURE, 4658 MGMT_STATUS_INVALID_PARAMS); 4659 4660 /* Only boolean on/off is supported */ 4661 if (cp->param[0] != 0x00 && cp->param[0] != 0x01) 4662 return mgmt_cmd_status(sk, hdev->id, 4663 MGMT_OP_SET_EXP_FEATURE, 4664 MGMT_STATUS_INVALID_PARAMS); 4665 4666 val = !!cp->param[0]; 4667 4668 if (val) { 4669 changed = !hci_dev_test_and_set_flag(hdev, 4670 HCI_ENABLE_LL_PRIVACY); 4671 hci_dev_clear_flag(hdev, HCI_ADVERTISING); 4672 4673 /* Enable LL privacy + supported settings changed */ 4674 flags = BIT(0) | BIT(1); 4675 } else { 4676 changed = hci_dev_test_and_clear_flag(hdev, 4677 HCI_ENABLE_LL_PRIVACY); 4678 4679 /* Disable LL privacy + supported settings changed */ 4680 flags = BIT(1); 4681 } 4682 4683 memcpy(rp.uuid, rpa_resolution_uuid, 16); 4684 rp.flags = cpu_to_le32(flags); 4685 4686 hci_sock_set_flag(sk, HCI_MGMT_EXP_FEATURE_EVENTS); 4687 4688 err = mgmt_cmd_complete(sk, hdev->id, 4689 MGMT_OP_SET_EXP_FEATURE, 0, 4690 &rp, sizeof(rp)); 4691 4692 if (changed) 4693 exp_ll_privacy_feature_changed(val, hdev, sk); 4694 4695 return err; 4696 } 4697 4698 static int set_quality_report_func(struct sock *sk, struct hci_dev *hdev, 4699 struct mgmt_cp_set_exp_feature *cp, 4700 u16 data_len) 4701 { 4702 struct mgmt_rp_set_exp_feature rp; 4703 bool val, changed; 4704 int err; 4705 4706 /* Command requires to use a valid controller index */ 4707 if (!hdev) 4708 return mgmt_cmd_status(sk, MGMT_INDEX_NONE, 4709 MGMT_OP_SET_EXP_FEATURE, 4710 MGMT_STATUS_INVALID_INDEX); 4711 4712 /* Parameters are limited to a single octet */ 4713 if (data_len != MGMT_SET_EXP_FEATURE_SIZE + 1) 4714 return mgmt_cmd_status(sk, hdev->id, 4715 MGMT_OP_SET_EXP_FEATURE, 4716 MGMT_STATUS_INVALID_PARAMS); 4717 4718 /* Only boolean on/off is supported */ 4719 if (cp->param[0] != 0x00 && cp->param[0] != 0x01) 4720 return mgmt_cmd_status(sk, hdev->id, 4721 MGMT_OP_SET_EXP_FEATURE, 4722 MGMT_STATUS_INVALID_PARAMS); 4723 4724 hci_req_sync_lock(hdev); 4725 4726 val = !!cp->param[0]; 4727 changed = (val != hci_dev_test_flag(hdev, HCI_QUALITY_REPORT)); 4728 4729 if (!aosp_has_quality_report(hdev) && !hdev->set_quality_report) { 4730 err = mgmt_cmd_status(sk, hdev->id, 4731 MGMT_OP_SET_EXP_FEATURE, 4732 MGMT_STATUS_NOT_SUPPORTED); 4733 goto unlock_quality_report; 4734 } 4735 4736 if (changed) { 4737 if (hdev->set_quality_report) 4738 err = hdev->set_quality_report(hdev, val); 4739 else 4740 err = aosp_set_quality_report(hdev, val); 4741 4742 if (err) { 4743 err = mgmt_cmd_status(sk, hdev->id, 4744 MGMT_OP_SET_EXP_FEATURE, 4745 MGMT_STATUS_FAILED); 4746 goto unlock_quality_report; 4747 } 4748 4749 if (val) 4750 hci_dev_set_flag(hdev, HCI_QUALITY_REPORT); 4751 else 4752 hci_dev_clear_flag(hdev, HCI_QUALITY_REPORT); 4753 } 4754 4755 bt_dev_dbg(hdev, "quality report enable %d changed %d", val, changed); 4756 4757 memcpy(rp.uuid, quality_report_uuid, 16); 4758 rp.flags = cpu_to_le32(val ? BIT(0) : 0); 4759 hci_sock_set_flag(sk, HCI_MGMT_EXP_FEATURE_EVENTS); 4760 4761 err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_SET_EXP_FEATURE, 0, 4762 &rp, sizeof(rp)); 4763 4764 if (changed) 4765 exp_feature_changed(hdev, quality_report_uuid, val, sk); 4766 4767 unlock_quality_report: 4768 hci_req_sync_unlock(hdev); 4769 return err; 4770 } 4771 4772 static int set_offload_codec_func(struct sock *sk, struct hci_dev *hdev, 4773 struct mgmt_cp_set_exp_feature *cp, 4774 u16 data_len) 4775 { 4776 bool val, changed; 4777 int err; 4778 struct mgmt_rp_set_exp_feature rp; 4779 4780 /* Command requires to use a valid controller index */ 4781 if (!hdev) 4782 return mgmt_cmd_status(sk, MGMT_INDEX_NONE, 4783 MGMT_OP_SET_EXP_FEATURE, 4784 MGMT_STATUS_INVALID_INDEX); 4785 4786 /* Parameters are limited to a single octet */ 4787 if (data_len != MGMT_SET_EXP_FEATURE_SIZE + 1) 4788 return mgmt_cmd_status(sk, hdev->id, 4789 MGMT_OP_SET_EXP_FEATURE, 4790 MGMT_STATUS_INVALID_PARAMS); 4791 4792 /* Only boolean on/off is supported */ 4793 if (cp->param[0] != 0x00 && cp->param[0] != 0x01) 4794 return mgmt_cmd_status(sk, hdev->id, 4795 MGMT_OP_SET_EXP_FEATURE, 4796 MGMT_STATUS_INVALID_PARAMS); 4797 4798 val = !!cp->param[0]; 4799 changed = (val != hci_dev_test_flag(hdev, HCI_OFFLOAD_CODECS_ENABLED)); 4800 4801 if (!hdev->get_data_path_id) { 4802 return mgmt_cmd_status(sk, hdev->id, 4803 MGMT_OP_SET_EXP_FEATURE, 4804 MGMT_STATUS_NOT_SUPPORTED); 4805 } 4806 4807 if (changed) { 4808 if (val) 4809 hci_dev_set_flag(hdev, HCI_OFFLOAD_CODECS_ENABLED); 4810 else 4811 hci_dev_clear_flag(hdev, HCI_OFFLOAD_CODECS_ENABLED); 4812 } 4813 4814 bt_dev_info(hdev, "offload codecs enable %d changed %d", 4815 val, changed); 4816 4817 memcpy(rp.uuid, offload_codecs_uuid, 16); 4818 rp.flags = cpu_to_le32(val ? BIT(0) : 0); 4819 hci_sock_set_flag(sk, HCI_MGMT_EXP_FEATURE_EVENTS); 4820 err = mgmt_cmd_complete(sk, hdev->id, 4821 MGMT_OP_SET_EXP_FEATURE, 0, 4822 &rp, sizeof(rp)); 4823 4824 if (changed) 4825 exp_feature_changed(hdev, offload_codecs_uuid, val, sk); 4826 4827 return err; 4828 } 4829 4830 static int set_le_simultaneous_roles_func(struct sock *sk, struct hci_dev *hdev, 4831 struct mgmt_cp_set_exp_feature *cp, 4832 u16 data_len) 4833 { 4834 bool val, changed; 4835 int err; 4836 struct mgmt_rp_set_exp_feature rp; 4837 4838 /* Command requires to use a valid controller index */ 4839 if (!hdev) 4840 return mgmt_cmd_status(sk, MGMT_INDEX_NONE, 4841 MGMT_OP_SET_EXP_FEATURE, 4842 MGMT_STATUS_INVALID_INDEX); 4843 4844 /* Parameters are limited to a single octet */ 4845 if (data_len != MGMT_SET_EXP_FEATURE_SIZE + 1) 4846 return mgmt_cmd_status(sk, hdev->id, 4847 MGMT_OP_SET_EXP_FEATURE, 4848 MGMT_STATUS_INVALID_PARAMS); 4849 4850 /* Only boolean on/off is supported */ 4851 if (cp->param[0] != 0x00 && cp->param[0] != 0x01) 4852 return mgmt_cmd_status(sk, hdev->id, 4853 MGMT_OP_SET_EXP_FEATURE, 4854 MGMT_STATUS_INVALID_PARAMS); 4855 4856 val = !!cp->param[0]; 4857 changed = (val != hci_dev_test_flag(hdev, HCI_LE_SIMULTANEOUS_ROLES)); 4858 4859 if (!hci_dev_le_state_simultaneous(hdev)) { 4860 return mgmt_cmd_status(sk, hdev->id, 4861 MGMT_OP_SET_EXP_FEATURE, 4862 MGMT_STATUS_NOT_SUPPORTED); 4863 } 4864 4865 if (changed) { 4866 if (val) 4867 hci_dev_set_flag(hdev, HCI_LE_SIMULTANEOUS_ROLES); 4868 else 4869 hci_dev_clear_flag(hdev, HCI_LE_SIMULTANEOUS_ROLES); 4870 } 4871 4872 bt_dev_info(hdev, "LE simultaneous roles enable %d changed %d", 4873 val, changed); 4874 4875 memcpy(rp.uuid, le_simultaneous_roles_uuid, 16); 4876 rp.flags = cpu_to_le32(val ? BIT(0) : 0); 4877 hci_sock_set_flag(sk, HCI_MGMT_EXP_FEATURE_EVENTS); 4878 err = mgmt_cmd_complete(sk, hdev->id, 4879 MGMT_OP_SET_EXP_FEATURE, 0, 4880 &rp, sizeof(rp)); 4881 4882 if (changed) 4883 exp_feature_changed(hdev, le_simultaneous_roles_uuid, val, sk); 4884 4885 return err; 4886 } 4887 4888 #ifdef CONFIG_BT_LE 4889 static int set_iso_socket_func(struct sock *sk, struct hci_dev *hdev, 4890 struct mgmt_cp_set_exp_feature *cp, u16 data_len) 4891 { 4892 struct mgmt_rp_set_exp_feature rp; 4893 bool val, changed = false; 4894 int err; 4895 4896 /* Command requires to use the non-controller index */ 4897 if (hdev) 4898 return mgmt_cmd_status(sk, hdev->id, 4899 MGMT_OP_SET_EXP_FEATURE, 4900 MGMT_STATUS_INVALID_INDEX); 4901 4902 /* Parameters are limited to a single octet */ 4903 if (data_len != MGMT_SET_EXP_FEATURE_SIZE + 1) 4904 return mgmt_cmd_status(sk, MGMT_INDEX_NONE, 4905 MGMT_OP_SET_EXP_FEATURE, 4906 MGMT_STATUS_INVALID_PARAMS); 4907 4908 /* Only boolean on/off is supported */ 4909 if (cp->param[0] != 0x00 && cp->param[0] != 0x01) 4910 return mgmt_cmd_status(sk, MGMT_INDEX_NONE, 4911 MGMT_OP_SET_EXP_FEATURE, 4912 MGMT_STATUS_INVALID_PARAMS); 4913 4914 val = cp->param[0] ? true : false; 4915 if (val) 4916 err = iso_init(); 4917 else 4918 err = iso_exit(); 4919 4920 if (!err) 4921 changed = true; 4922 4923 memcpy(rp.uuid, iso_socket_uuid, 16); 4924 rp.flags = cpu_to_le32(val ? BIT(0) : 0); 4925 4926 hci_sock_set_flag(sk, HCI_MGMT_EXP_FEATURE_EVENTS); 4927 4928 err = mgmt_cmd_complete(sk, MGMT_INDEX_NONE, 4929 MGMT_OP_SET_EXP_FEATURE, 0, 4930 &rp, sizeof(rp)); 4931 4932 if (changed) 4933 exp_feature_changed(hdev, iso_socket_uuid, val, sk); 4934 4935 return err; 4936 } 4937 #endif 4938 4939 static const struct mgmt_exp_feature { 4940 const u8 *uuid; 4941 int (*set_func)(struct sock *sk, struct hci_dev *hdev, 4942 struct mgmt_cp_set_exp_feature *cp, u16 data_len); 4943 } exp_features[] = { 4944 EXP_FEAT(ZERO_KEY, set_zero_key_func), 4945 #ifdef CONFIG_BT_FEATURE_DEBUG 4946 EXP_FEAT(debug_uuid, set_debug_func), 4947 #endif 4948 EXP_FEAT(mgmt_mesh_uuid, set_mgmt_mesh_func), 4949 EXP_FEAT(rpa_resolution_uuid, set_rpa_resolution_func), 4950 EXP_FEAT(quality_report_uuid, set_quality_report_func), 4951 EXP_FEAT(offload_codecs_uuid, set_offload_codec_func), 4952 EXP_FEAT(le_simultaneous_roles_uuid, set_le_simultaneous_roles_func), 4953 #ifdef CONFIG_BT_LE 4954 EXP_FEAT(iso_socket_uuid, set_iso_socket_func), 4955 #endif 4956 4957 /* end with a null feature */ 4958 EXP_FEAT(NULL, NULL) 4959 }; 4960 4961 static int set_exp_feature(struct sock *sk, struct hci_dev *hdev, 4962 void *data, u16 data_len) 4963 { 4964 struct mgmt_cp_set_exp_feature *cp = data; 4965 size_t i = 0; 4966 4967 bt_dev_dbg(hdev, "sock %p", sk); 4968 4969 for (i = 0; exp_features[i].uuid; i++) { 4970 if (!memcmp(cp->uuid, exp_features[i].uuid, 16)) 4971 return exp_features[i].set_func(sk, hdev, cp, data_len); 4972 } 4973 4974 return mgmt_cmd_status(sk, hdev ? hdev->id : MGMT_INDEX_NONE, 4975 MGMT_OP_SET_EXP_FEATURE, 4976 MGMT_STATUS_NOT_SUPPORTED); 4977 } 4978 4979 static u32 get_params_flags(struct hci_dev *hdev, 4980 struct hci_conn_params *params) 4981 { 4982 u32 flags = hdev->conn_flags; 4983 4984 /* Devices using RPAs can only be programmed in the acceptlist if 4985 * LL Privacy has been enable otherwise they cannot mark 4986 * HCI_CONN_FLAG_REMOTE_WAKEUP. 4987 */ 4988 if ((flags & HCI_CONN_FLAG_REMOTE_WAKEUP) && !use_ll_privacy(hdev) && 4989 hci_find_irk_by_addr(hdev, ¶ms->addr, params->addr_type)) 4990 flags &= ~HCI_CONN_FLAG_REMOTE_WAKEUP; 4991 4992 return flags; 4993 } 4994 4995 static int get_device_flags(struct sock *sk, struct hci_dev *hdev, void *data, 4996 u16 data_len) 4997 { 4998 struct mgmt_cp_get_device_flags *cp = data; 4999 struct mgmt_rp_get_device_flags rp; 5000 struct bdaddr_list_with_flags *br_params; 5001 struct hci_conn_params *params; 5002 u32 supported_flags; 5003 u32 current_flags = 0; 5004 u8 status = MGMT_STATUS_INVALID_PARAMS; 5005 5006 bt_dev_dbg(hdev, "Get device flags %pMR (type 0x%x)\n", 5007 &cp->addr.bdaddr, cp->addr.type); 5008 5009 hci_dev_lock(hdev); 5010 5011 supported_flags = hdev->conn_flags; 5012 5013 memset(&rp, 0, sizeof(rp)); 5014 5015 if (cp->addr.type == BDADDR_BREDR) { 5016 br_params = hci_bdaddr_list_lookup_with_flags(&hdev->accept_list, 5017 &cp->addr.bdaddr, 5018 cp->addr.type); 5019 if (!br_params) 5020 goto done; 5021 5022 current_flags = br_params->flags; 5023 } else { 5024 params = hci_conn_params_lookup(hdev, &cp->addr.bdaddr, 5025 le_addr_type(cp->addr.type)); 5026 if (!params) 5027 goto done; 5028 5029 supported_flags = get_params_flags(hdev, params); 5030 current_flags = params->flags; 5031 } 5032 5033 bacpy(&rp.addr.bdaddr, &cp->addr.bdaddr); 5034 rp.addr.type = cp->addr.type; 5035 rp.supported_flags = cpu_to_le32(supported_flags); 5036 rp.current_flags = cpu_to_le32(current_flags); 5037 5038 status = MGMT_STATUS_SUCCESS; 5039 5040 done: 5041 hci_dev_unlock(hdev); 5042 5043 return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_GET_DEVICE_FLAGS, status, 5044 &rp, sizeof(rp)); 5045 } 5046 5047 static void device_flags_changed(struct sock *sk, struct hci_dev *hdev, 5048 bdaddr_t *bdaddr, u8 bdaddr_type, 5049 u32 supported_flags, u32 current_flags) 5050 { 5051 struct mgmt_ev_device_flags_changed ev; 5052 5053 bacpy(&ev.addr.bdaddr, bdaddr); 5054 ev.addr.type = bdaddr_type; 5055 ev.supported_flags = cpu_to_le32(supported_flags); 5056 ev.current_flags = cpu_to_le32(current_flags); 5057 5058 mgmt_event(MGMT_EV_DEVICE_FLAGS_CHANGED, hdev, &ev, sizeof(ev), sk); 5059 } 5060 5061 static int set_device_flags(struct sock *sk, struct hci_dev *hdev, void *data, 5062 u16 len) 5063 { 5064 struct mgmt_cp_set_device_flags *cp = data; 5065 struct bdaddr_list_with_flags *br_params; 5066 struct hci_conn_params *params; 5067 u8 status = MGMT_STATUS_INVALID_PARAMS; 5068 u32 supported_flags; 5069 u32 current_flags = __le32_to_cpu(cp->current_flags); 5070 5071 bt_dev_dbg(hdev, "Set device flags %pMR (type 0x%x) = 0x%x", 5072 &cp->addr.bdaddr, cp->addr.type, current_flags); 5073 5074 // We should take hci_dev_lock() early, I think.. conn_flags can change 5075 supported_flags = hdev->conn_flags; 5076 5077 if ((supported_flags | current_flags) != supported_flags) { 5078 bt_dev_warn(hdev, "Bad flag given (0x%x) vs supported (0x%0x)", 5079 current_flags, supported_flags); 5080 goto done; 5081 } 5082 5083 hci_dev_lock(hdev); 5084 5085 if (cp->addr.type == BDADDR_BREDR) { 5086 br_params = hci_bdaddr_list_lookup_with_flags(&hdev->accept_list, 5087 &cp->addr.bdaddr, 5088 cp->addr.type); 5089 5090 if (br_params) { 5091 br_params->flags = current_flags; 5092 status = MGMT_STATUS_SUCCESS; 5093 } else { 5094 bt_dev_warn(hdev, "No such BR/EDR device %pMR (0x%x)", 5095 &cp->addr.bdaddr, cp->addr.type); 5096 } 5097 5098 goto unlock; 5099 } 5100 5101 params = hci_conn_params_lookup(hdev, &cp->addr.bdaddr, 5102 le_addr_type(cp->addr.type)); 5103 if (!params) { 5104 bt_dev_warn(hdev, "No such LE device %pMR (0x%x)", 5105 &cp->addr.bdaddr, le_addr_type(cp->addr.type)); 5106 goto unlock; 5107 } 5108 5109 supported_flags = get_params_flags(hdev, params); 5110 5111 if ((supported_flags | current_flags) != supported_flags) { 5112 bt_dev_warn(hdev, "Bad flag given (0x%x) vs supported (0x%0x)", 5113 current_flags, supported_flags); 5114 goto unlock; 5115 } 5116 5117 WRITE_ONCE(params->flags, current_flags); 5118 status = MGMT_STATUS_SUCCESS; 5119 5120 /* Update passive scan if HCI_CONN_FLAG_DEVICE_PRIVACY 5121 * has been set. 5122 */ 5123 if (params->flags & HCI_CONN_FLAG_DEVICE_PRIVACY) 5124 hci_update_passive_scan(hdev); 5125 5126 unlock: 5127 hci_dev_unlock(hdev); 5128 5129 done: 5130 if (status == MGMT_STATUS_SUCCESS) 5131 device_flags_changed(sk, hdev, &cp->addr.bdaddr, cp->addr.type, 5132 supported_flags, current_flags); 5133 5134 return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_SET_DEVICE_FLAGS, status, 5135 &cp->addr, sizeof(cp->addr)); 5136 } 5137 5138 static void mgmt_adv_monitor_added(struct sock *sk, struct hci_dev *hdev, 5139 u16 handle) 5140 { 5141 struct mgmt_ev_adv_monitor_added ev; 5142 5143 ev.monitor_handle = cpu_to_le16(handle); 5144 5145 mgmt_event(MGMT_EV_ADV_MONITOR_ADDED, hdev, &ev, sizeof(ev), sk); 5146 } 5147 5148 void mgmt_adv_monitor_removed(struct hci_dev *hdev, u16 handle) 5149 { 5150 struct mgmt_ev_adv_monitor_removed ev; 5151 struct mgmt_pending_cmd *cmd; 5152 struct sock *sk_skip = NULL; 5153 struct mgmt_cp_remove_adv_monitor *cp; 5154 5155 cmd = pending_find(MGMT_OP_REMOVE_ADV_MONITOR, hdev); 5156 if (cmd) { 5157 cp = cmd->param; 5158 5159 if (cp->monitor_handle) 5160 sk_skip = cmd->sk; 5161 } 5162 5163 ev.monitor_handle = cpu_to_le16(handle); 5164 5165 mgmt_event(MGMT_EV_ADV_MONITOR_REMOVED, hdev, &ev, sizeof(ev), sk_skip); 5166 } 5167 5168 static int read_adv_mon_features(struct sock *sk, struct hci_dev *hdev, 5169 void *data, u16 len) 5170 { 5171 struct adv_monitor *monitor = NULL; 5172 struct mgmt_rp_read_adv_monitor_features *rp = NULL; 5173 int handle, err; 5174 size_t rp_size = 0; 5175 __u32 supported = 0; 5176 __u32 enabled = 0; 5177 __u16 num_handles = 0; 5178 __u16 handles[HCI_MAX_ADV_MONITOR_NUM_HANDLES]; 5179 5180 BT_DBG("request for %s", hdev->name); 5181 5182 hci_dev_lock(hdev); 5183 5184 if (msft_monitor_supported(hdev)) 5185 supported |= MGMT_ADV_MONITOR_FEATURE_MASK_OR_PATTERNS; 5186 5187 idr_for_each_entry(&hdev->adv_monitors_idr, monitor, handle) 5188 handles[num_handles++] = monitor->handle; 5189 5190 hci_dev_unlock(hdev); 5191 5192 rp_size = sizeof(*rp) + (num_handles * sizeof(u16)); 5193 rp = kmalloc(rp_size, GFP_KERNEL); 5194 if (!rp) 5195 return -ENOMEM; 5196 5197 /* All supported features are currently enabled */ 5198 enabled = supported; 5199 5200 rp->supported_features = cpu_to_le32(supported); 5201 rp->enabled_features = cpu_to_le32(enabled); 5202 rp->max_num_handles = cpu_to_le16(HCI_MAX_ADV_MONITOR_NUM_HANDLES); 5203 rp->max_num_patterns = HCI_MAX_ADV_MONITOR_NUM_PATTERNS; 5204 rp->num_handles = cpu_to_le16(num_handles); 5205 if (num_handles) 5206 memcpy(&rp->handles, &handles, (num_handles * sizeof(u16))); 5207 5208 err = mgmt_cmd_complete(sk, hdev->id, 5209 MGMT_OP_READ_ADV_MONITOR_FEATURES, 5210 MGMT_STATUS_SUCCESS, rp, rp_size); 5211 5212 kfree(rp); 5213 5214 return err; 5215 } 5216 5217 static void mgmt_add_adv_patterns_monitor_complete(struct hci_dev *hdev, 5218 void *data, int status) 5219 { 5220 struct mgmt_rp_add_adv_patterns_monitor rp; 5221 struct mgmt_pending_cmd *cmd = data; 5222 struct adv_monitor *monitor = cmd->user_data; 5223 5224 hci_dev_lock(hdev); 5225 5226 rp.monitor_handle = cpu_to_le16(monitor->handle); 5227 5228 if (!status) { 5229 mgmt_adv_monitor_added(cmd->sk, hdev, monitor->handle); 5230 hdev->adv_monitors_cnt++; 5231 if (monitor->state == ADV_MONITOR_STATE_NOT_REGISTERED) 5232 monitor->state = ADV_MONITOR_STATE_REGISTERED; 5233 hci_update_passive_scan(hdev); 5234 } 5235 5236 mgmt_cmd_complete(cmd->sk, cmd->index, cmd->opcode, 5237 mgmt_status(status), &rp, sizeof(rp)); 5238 mgmt_pending_remove(cmd); 5239 5240 hci_dev_unlock(hdev); 5241 bt_dev_dbg(hdev, "add monitor %d complete, status %d", 5242 rp.monitor_handle, status); 5243 } 5244 5245 static int mgmt_add_adv_patterns_monitor_sync(struct hci_dev *hdev, void *data) 5246 { 5247 struct mgmt_pending_cmd *cmd = data; 5248 struct adv_monitor *monitor = cmd->user_data; 5249 5250 return hci_add_adv_monitor(hdev, monitor); 5251 } 5252 5253 static int __add_adv_patterns_monitor(struct sock *sk, struct hci_dev *hdev, 5254 struct adv_monitor *m, u8 status, 5255 void *data, u16 len, u16 op) 5256 { 5257 struct mgmt_pending_cmd *cmd; 5258 int err; 5259 5260 hci_dev_lock(hdev); 5261 5262 if (status) 5263 goto unlock; 5264 5265 if (pending_find(MGMT_OP_SET_LE, hdev) || 5266 pending_find(MGMT_OP_ADD_ADV_PATTERNS_MONITOR, hdev) || 5267 pending_find(MGMT_OP_ADD_ADV_PATTERNS_MONITOR_RSSI, hdev) || 5268 pending_find(MGMT_OP_REMOVE_ADV_MONITOR, hdev)) { 5269 status = MGMT_STATUS_BUSY; 5270 goto unlock; 5271 } 5272 5273 cmd = mgmt_pending_add(sk, op, hdev, data, len); 5274 if (!cmd) { 5275 status = MGMT_STATUS_NO_RESOURCES; 5276 goto unlock; 5277 } 5278 5279 cmd->user_data = m; 5280 err = hci_cmd_sync_queue(hdev, mgmt_add_adv_patterns_monitor_sync, cmd, 5281 mgmt_add_adv_patterns_monitor_complete); 5282 if (err) { 5283 if (err == -ENOMEM) 5284 status = MGMT_STATUS_NO_RESOURCES; 5285 else 5286 status = MGMT_STATUS_FAILED; 5287 5288 goto unlock; 5289 } 5290 5291 hci_dev_unlock(hdev); 5292 5293 return 0; 5294 5295 unlock: 5296 hci_free_adv_monitor(hdev, m); 5297 hci_dev_unlock(hdev); 5298 return mgmt_cmd_status(sk, hdev->id, op, status); 5299 } 5300 5301 static void parse_adv_monitor_rssi(struct adv_monitor *m, 5302 struct mgmt_adv_rssi_thresholds *rssi) 5303 { 5304 if (rssi) { 5305 m->rssi.low_threshold = rssi->low_threshold; 5306 m->rssi.low_threshold_timeout = 5307 __le16_to_cpu(rssi->low_threshold_timeout); 5308 m->rssi.high_threshold = rssi->high_threshold; 5309 m->rssi.high_threshold_timeout = 5310 __le16_to_cpu(rssi->high_threshold_timeout); 5311 m->rssi.sampling_period = rssi->sampling_period; 5312 } else { 5313 /* Default values. These numbers are the least constricting 5314 * parameters for MSFT API to work, so it behaves as if there 5315 * are no rssi parameter to consider. May need to be changed 5316 * if other API are to be supported. 5317 */ 5318 m->rssi.low_threshold = -127; 5319 m->rssi.low_threshold_timeout = 60; 5320 m->rssi.high_threshold = -127; 5321 m->rssi.high_threshold_timeout = 0; 5322 m->rssi.sampling_period = 0; 5323 } 5324 } 5325 5326 static u8 parse_adv_monitor_pattern(struct adv_monitor *m, u8 pattern_count, 5327 struct mgmt_adv_pattern *patterns) 5328 { 5329 u8 offset = 0, length = 0; 5330 struct adv_pattern *p = NULL; 5331 int i; 5332 5333 for (i = 0; i < pattern_count; i++) { 5334 offset = patterns[i].offset; 5335 length = patterns[i].length; 5336 if (offset >= HCI_MAX_EXT_AD_LENGTH || 5337 length > HCI_MAX_EXT_AD_LENGTH || 5338 (offset + length) > HCI_MAX_EXT_AD_LENGTH) 5339 return MGMT_STATUS_INVALID_PARAMS; 5340 5341 p = kmalloc(sizeof(*p), GFP_KERNEL); 5342 if (!p) 5343 return MGMT_STATUS_NO_RESOURCES; 5344 5345 p->ad_type = patterns[i].ad_type; 5346 p->offset = patterns[i].offset; 5347 p->length = patterns[i].length; 5348 memcpy(p->value, patterns[i].value, p->length); 5349 5350 INIT_LIST_HEAD(&p->list); 5351 list_add(&p->list, &m->patterns); 5352 } 5353 5354 return MGMT_STATUS_SUCCESS; 5355 } 5356 5357 static int add_adv_patterns_monitor(struct sock *sk, struct hci_dev *hdev, 5358 void *data, u16 len) 5359 { 5360 struct mgmt_cp_add_adv_patterns_monitor *cp = data; 5361 struct adv_monitor *m = NULL; 5362 u8 status = MGMT_STATUS_SUCCESS; 5363 size_t expected_size = sizeof(*cp); 5364 5365 BT_DBG("request for %s", hdev->name); 5366 5367 if (len <= sizeof(*cp)) { 5368 status = MGMT_STATUS_INVALID_PARAMS; 5369 goto done; 5370 } 5371 5372 expected_size += cp->pattern_count * sizeof(struct mgmt_adv_pattern); 5373 if (len != expected_size) { 5374 status = MGMT_STATUS_INVALID_PARAMS; 5375 goto done; 5376 } 5377 5378 m = kzalloc(sizeof(*m), GFP_KERNEL); 5379 if (!m) { 5380 status = MGMT_STATUS_NO_RESOURCES; 5381 goto done; 5382 } 5383 5384 INIT_LIST_HEAD(&m->patterns); 5385 5386 parse_adv_monitor_rssi(m, NULL); 5387 status = parse_adv_monitor_pattern(m, cp->pattern_count, cp->patterns); 5388 5389 done: 5390 return __add_adv_patterns_monitor(sk, hdev, m, status, data, len, 5391 MGMT_OP_ADD_ADV_PATTERNS_MONITOR); 5392 } 5393 5394 static int add_adv_patterns_monitor_rssi(struct sock *sk, struct hci_dev *hdev, 5395 void *data, u16 len) 5396 { 5397 struct mgmt_cp_add_adv_patterns_monitor_rssi *cp = data; 5398 struct adv_monitor *m = NULL; 5399 u8 status = MGMT_STATUS_SUCCESS; 5400 size_t expected_size = sizeof(*cp); 5401 5402 BT_DBG("request for %s", hdev->name); 5403 5404 if (len <= sizeof(*cp)) { 5405 status = MGMT_STATUS_INVALID_PARAMS; 5406 goto done; 5407 } 5408 5409 expected_size += cp->pattern_count * sizeof(struct mgmt_adv_pattern); 5410 if (len != expected_size) { 5411 status = MGMT_STATUS_INVALID_PARAMS; 5412 goto done; 5413 } 5414 5415 m = kzalloc(sizeof(*m), GFP_KERNEL); 5416 if (!m) { 5417 status = MGMT_STATUS_NO_RESOURCES; 5418 goto done; 5419 } 5420 5421 INIT_LIST_HEAD(&m->patterns); 5422 5423 parse_adv_monitor_rssi(m, &cp->rssi); 5424 status = parse_adv_monitor_pattern(m, cp->pattern_count, cp->patterns); 5425 5426 done: 5427 return __add_adv_patterns_monitor(sk, hdev, m, status, data, len, 5428 MGMT_OP_ADD_ADV_PATTERNS_MONITOR_RSSI); 5429 } 5430 5431 static void mgmt_remove_adv_monitor_complete(struct hci_dev *hdev, 5432 void *data, int status) 5433 { 5434 struct mgmt_rp_remove_adv_monitor rp; 5435 struct mgmt_pending_cmd *cmd = data; 5436 struct mgmt_cp_remove_adv_monitor *cp = cmd->param; 5437 5438 hci_dev_lock(hdev); 5439 5440 rp.monitor_handle = cp->monitor_handle; 5441 5442 if (!status) 5443 hci_update_passive_scan(hdev); 5444 5445 mgmt_cmd_complete(cmd->sk, cmd->index, cmd->opcode, 5446 mgmt_status(status), &rp, sizeof(rp)); 5447 mgmt_pending_remove(cmd); 5448 5449 hci_dev_unlock(hdev); 5450 bt_dev_dbg(hdev, "remove monitor %d complete, status %d", 5451 rp.monitor_handle, status); 5452 } 5453 5454 static int mgmt_remove_adv_monitor_sync(struct hci_dev *hdev, void *data) 5455 { 5456 struct mgmt_pending_cmd *cmd = data; 5457 struct mgmt_cp_remove_adv_monitor *cp = cmd->param; 5458 u16 handle = __le16_to_cpu(cp->monitor_handle); 5459 5460 if (!handle) 5461 return hci_remove_all_adv_monitor(hdev); 5462 5463 return hci_remove_single_adv_monitor(hdev, handle); 5464 } 5465 5466 static int remove_adv_monitor(struct sock *sk, struct hci_dev *hdev, 5467 void *data, u16 len) 5468 { 5469 struct mgmt_pending_cmd *cmd; 5470 int err, status; 5471 5472 hci_dev_lock(hdev); 5473 5474 if (pending_find(MGMT_OP_SET_LE, hdev) || 5475 pending_find(MGMT_OP_REMOVE_ADV_MONITOR, hdev) || 5476 pending_find(MGMT_OP_ADD_ADV_PATTERNS_MONITOR, hdev) || 5477 pending_find(MGMT_OP_ADD_ADV_PATTERNS_MONITOR_RSSI, hdev)) { 5478 status = MGMT_STATUS_BUSY; 5479 goto unlock; 5480 } 5481 5482 cmd = mgmt_pending_add(sk, MGMT_OP_REMOVE_ADV_MONITOR, hdev, data, len); 5483 if (!cmd) { 5484 status = MGMT_STATUS_NO_RESOURCES; 5485 goto unlock; 5486 } 5487 5488 err = hci_cmd_sync_submit(hdev, mgmt_remove_adv_monitor_sync, cmd, 5489 mgmt_remove_adv_monitor_complete); 5490 5491 if (err) { 5492 mgmt_pending_remove(cmd); 5493 5494 if (err == -ENOMEM) 5495 status = MGMT_STATUS_NO_RESOURCES; 5496 else 5497 status = MGMT_STATUS_FAILED; 5498 5499 goto unlock; 5500 } 5501 5502 hci_dev_unlock(hdev); 5503 5504 return 0; 5505 5506 unlock: 5507 hci_dev_unlock(hdev); 5508 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_REMOVE_ADV_MONITOR, 5509 status); 5510 } 5511 5512 static void read_local_oob_data_complete(struct hci_dev *hdev, void *data, int err) 5513 { 5514 struct mgmt_rp_read_local_oob_data mgmt_rp; 5515 size_t rp_size = sizeof(mgmt_rp); 5516 struct mgmt_pending_cmd *cmd = data; 5517 struct sk_buff *skb = cmd->skb; 5518 u8 status = mgmt_status(err); 5519 5520 if (!status) { 5521 if (!skb) 5522 status = MGMT_STATUS_FAILED; 5523 else if (IS_ERR(skb)) 5524 status = mgmt_status(PTR_ERR(skb)); 5525 else 5526 status = mgmt_status(skb->data[0]); 5527 } 5528 5529 bt_dev_dbg(hdev, "status %d", status); 5530 5531 if (status) { 5532 mgmt_cmd_status(cmd->sk, hdev->id, MGMT_OP_READ_LOCAL_OOB_DATA, status); 5533 goto remove; 5534 } 5535 5536 memset(&mgmt_rp, 0, sizeof(mgmt_rp)); 5537 5538 if (!bredr_sc_enabled(hdev)) { 5539 struct hci_rp_read_local_oob_data *rp = (void *) skb->data; 5540 5541 if (skb->len < sizeof(*rp)) { 5542 mgmt_cmd_status(cmd->sk, hdev->id, 5543 MGMT_OP_READ_LOCAL_OOB_DATA, 5544 MGMT_STATUS_FAILED); 5545 goto remove; 5546 } 5547 5548 memcpy(mgmt_rp.hash192, rp->hash, sizeof(rp->hash)); 5549 memcpy(mgmt_rp.rand192, rp->rand, sizeof(rp->rand)); 5550 5551 rp_size -= sizeof(mgmt_rp.hash256) + sizeof(mgmt_rp.rand256); 5552 } else { 5553 struct hci_rp_read_local_oob_ext_data *rp = (void *) skb->data; 5554 5555 if (skb->len < sizeof(*rp)) { 5556 mgmt_cmd_status(cmd->sk, hdev->id, 5557 MGMT_OP_READ_LOCAL_OOB_DATA, 5558 MGMT_STATUS_FAILED); 5559 goto remove; 5560 } 5561 5562 memcpy(mgmt_rp.hash192, rp->hash192, sizeof(rp->hash192)); 5563 memcpy(mgmt_rp.rand192, rp->rand192, sizeof(rp->rand192)); 5564 5565 memcpy(mgmt_rp.hash256, rp->hash256, sizeof(rp->hash256)); 5566 memcpy(mgmt_rp.rand256, rp->rand256, sizeof(rp->rand256)); 5567 } 5568 5569 mgmt_cmd_complete(cmd->sk, hdev->id, MGMT_OP_READ_LOCAL_OOB_DATA, 5570 MGMT_STATUS_SUCCESS, &mgmt_rp, rp_size); 5571 5572 remove: 5573 if (skb && !IS_ERR(skb)) 5574 kfree_skb(skb); 5575 5576 mgmt_pending_free(cmd); 5577 } 5578 5579 static int read_local_oob_data_sync(struct hci_dev *hdev, void *data) 5580 { 5581 struct mgmt_pending_cmd *cmd = data; 5582 5583 if (bredr_sc_enabled(hdev)) 5584 cmd->skb = hci_read_local_oob_data_sync(hdev, true, cmd->sk); 5585 else 5586 cmd->skb = hci_read_local_oob_data_sync(hdev, false, cmd->sk); 5587 5588 if (IS_ERR(cmd->skb)) 5589 return PTR_ERR(cmd->skb); 5590 else 5591 return 0; 5592 } 5593 5594 static int read_local_oob_data(struct sock *sk, struct hci_dev *hdev, 5595 void *data, u16 data_len) 5596 { 5597 struct mgmt_pending_cmd *cmd; 5598 int err; 5599 5600 bt_dev_dbg(hdev, "sock %p", sk); 5601 5602 hci_dev_lock(hdev); 5603 5604 if (!hdev_is_powered(hdev)) { 5605 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_READ_LOCAL_OOB_DATA, 5606 MGMT_STATUS_NOT_POWERED); 5607 goto unlock; 5608 } 5609 5610 if (!lmp_ssp_capable(hdev)) { 5611 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_READ_LOCAL_OOB_DATA, 5612 MGMT_STATUS_NOT_SUPPORTED); 5613 goto unlock; 5614 } 5615 5616 cmd = mgmt_pending_new(sk, MGMT_OP_READ_LOCAL_OOB_DATA, hdev, NULL, 0); 5617 if (!cmd) 5618 err = -ENOMEM; 5619 else 5620 err = hci_cmd_sync_queue(hdev, read_local_oob_data_sync, cmd, 5621 read_local_oob_data_complete); 5622 5623 if (err < 0) { 5624 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_READ_LOCAL_OOB_DATA, 5625 MGMT_STATUS_FAILED); 5626 5627 if (cmd) 5628 mgmt_pending_free(cmd); 5629 } 5630 5631 unlock: 5632 hci_dev_unlock(hdev); 5633 return err; 5634 } 5635 5636 static int add_remote_oob_data(struct sock *sk, struct hci_dev *hdev, 5637 void *data, u16 len) 5638 { 5639 struct mgmt_addr_info *addr = data; 5640 int err; 5641 5642 bt_dev_dbg(hdev, "sock %p", sk); 5643 5644 if (!bdaddr_type_is_valid(addr->type)) 5645 return mgmt_cmd_complete(sk, hdev->id, 5646 MGMT_OP_ADD_REMOTE_OOB_DATA, 5647 MGMT_STATUS_INVALID_PARAMS, 5648 addr, sizeof(*addr)); 5649 5650 hci_dev_lock(hdev); 5651 5652 if (len == MGMT_ADD_REMOTE_OOB_DATA_SIZE) { 5653 struct mgmt_cp_add_remote_oob_data *cp = data; 5654 u8 status; 5655 5656 if (cp->addr.type != BDADDR_BREDR) { 5657 err = mgmt_cmd_complete(sk, hdev->id, 5658 MGMT_OP_ADD_REMOTE_OOB_DATA, 5659 MGMT_STATUS_INVALID_PARAMS, 5660 &cp->addr, sizeof(cp->addr)); 5661 goto unlock; 5662 } 5663 5664 err = hci_add_remote_oob_data(hdev, &cp->addr.bdaddr, 5665 cp->addr.type, cp->hash, 5666 cp->rand, NULL, NULL); 5667 if (err < 0) 5668 status = MGMT_STATUS_FAILED; 5669 else 5670 status = MGMT_STATUS_SUCCESS; 5671 5672 err = mgmt_cmd_complete(sk, hdev->id, 5673 MGMT_OP_ADD_REMOTE_OOB_DATA, status, 5674 &cp->addr, sizeof(cp->addr)); 5675 } else if (len == MGMT_ADD_REMOTE_OOB_EXT_DATA_SIZE) { 5676 struct mgmt_cp_add_remote_oob_ext_data *cp = data; 5677 u8 *rand192, *hash192, *rand256, *hash256; 5678 u8 status; 5679 5680 if (bdaddr_type_is_le(cp->addr.type)) { 5681 /* Enforce zero-valued 192-bit parameters as 5682 * long as legacy SMP OOB isn't implemented. 5683 */ 5684 if (memcmp(cp->rand192, ZERO_KEY, 16) || 5685 memcmp(cp->hash192, ZERO_KEY, 16)) { 5686 err = mgmt_cmd_complete(sk, hdev->id, 5687 MGMT_OP_ADD_REMOTE_OOB_DATA, 5688 MGMT_STATUS_INVALID_PARAMS, 5689 addr, sizeof(*addr)); 5690 goto unlock; 5691 } 5692 5693 rand192 = NULL; 5694 hash192 = NULL; 5695 } else { 5696 /* In case one of the P-192 values is set to zero, 5697 * then just disable OOB data for P-192. 5698 */ 5699 if (!memcmp(cp->rand192, ZERO_KEY, 16) || 5700 !memcmp(cp->hash192, ZERO_KEY, 16)) { 5701 rand192 = NULL; 5702 hash192 = NULL; 5703 } else { 5704 rand192 = cp->rand192; 5705 hash192 = cp->hash192; 5706 } 5707 } 5708 5709 /* In case one of the P-256 values is set to zero, then just 5710 * disable OOB data for P-256. 5711 */ 5712 if (!memcmp(cp->rand256, ZERO_KEY, 16) || 5713 !memcmp(cp->hash256, ZERO_KEY, 16)) { 5714 rand256 = NULL; 5715 hash256 = NULL; 5716 } else { 5717 rand256 = cp->rand256; 5718 hash256 = cp->hash256; 5719 } 5720 5721 err = hci_add_remote_oob_data(hdev, &cp->addr.bdaddr, 5722 cp->addr.type, hash192, rand192, 5723 hash256, rand256); 5724 if (err < 0) 5725 status = MGMT_STATUS_FAILED; 5726 else 5727 status = MGMT_STATUS_SUCCESS; 5728 5729 err = mgmt_cmd_complete(sk, hdev->id, 5730 MGMT_OP_ADD_REMOTE_OOB_DATA, 5731 status, &cp->addr, sizeof(cp->addr)); 5732 } else { 5733 bt_dev_err(hdev, "add_remote_oob_data: invalid len of %u bytes", 5734 len); 5735 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_ADD_REMOTE_OOB_DATA, 5736 MGMT_STATUS_INVALID_PARAMS); 5737 } 5738 5739 unlock: 5740 hci_dev_unlock(hdev); 5741 return err; 5742 } 5743 5744 static int remove_remote_oob_data(struct sock *sk, struct hci_dev *hdev, 5745 void *data, u16 len) 5746 { 5747 struct mgmt_cp_remove_remote_oob_data *cp = data; 5748 u8 status; 5749 int err; 5750 5751 bt_dev_dbg(hdev, "sock %p", sk); 5752 5753 if (cp->addr.type != BDADDR_BREDR) 5754 return mgmt_cmd_complete(sk, hdev->id, 5755 MGMT_OP_REMOVE_REMOTE_OOB_DATA, 5756 MGMT_STATUS_INVALID_PARAMS, 5757 &cp->addr, sizeof(cp->addr)); 5758 5759 hci_dev_lock(hdev); 5760 5761 if (!bacmp(&cp->addr.bdaddr, BDADDR_ANY)) { 5762 hci_remote_oob_data_clear(hdev); 5763 status = MGMT_STATUS_SUCCESS; 5764 goto done; 5765 } 5766 5767 err = hci_remove_remote_oob_data(hdev, &cp->addr.bdaddr, cp->addr.type); 5768 if (err < 0) 5769 status = MGMT_STATUS_INVALID_PARAMS; 5770 else 5771 status = MGMT_STATUS_SUCCESS; 5772 5773 done: 5774 err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_REMOVE_REMOTE_OOB_DATA, 5775 status, &cp->addr, sizeof(cp->addr)); 5776 5777 hci_dev_unlock(hdev); 5778 return err; 5779 } 5780 5781 void mgmt_start_discovery_complete(struct hci_dev *hdev, u8 status) 5782 { 5783 struct mgmt_pending_cmd *cmd; 5784 5785 bt_dev_dbg(hdev, "status %u", status); 5786 5787 hci_dev_lock(hdev); 5788 5789 cmd = pending_find(MGMT_OP_START_DISCOVERY, hdev); 5790 if (!cmd) 5791 cmd = pending_find(MGMT_OP_START_SERVICE_DISCOVERY, hdev); 5792 5793 if (!cmd) 5794 cmd = pending_find(MGMT_OP_START_LIMITED_DISCOVERY, hdev); 5795 5796 if (cmd) { 5797 cmd->cmd_complete(cmd, mgmt_status(status)); 5798 mgmt_pending_remove(cmd); 5799 } 5800 5801 hci_dev_unlock(hdev); 5802 } 5803 5804 static bool discovery_type_is_valid(struct hci_dev *hdev, uint8_t type, 5805 uint8_t *mgmt_status) 5806 { 5807 switch (type) { 5808 case DISCOV_TYPE_LE: 5809 *mgmt_status = mgmt_le_support(hdev); 5810 if (*mgmt_status) 5811 return false; 5812 break; 5813 case DISCOV_TYPE_INTERLEAVED: 5814 *mgmt_status = mgmt_le_support(hdev); 5815 if (*mgmt_status) 5816 return false; 5817 fallthrough; 5818 case DISCOV_TYPE_BREDR: 5819 *mgmt_status = mgmt_bredr_support(hdev); 5820 if (*mgmt_status) 5821 return false; 5822 break; 5823 default: 5824 *mgmt_status = MGMT_STATUS_INVALID_PARAMS; 5825 return false; 5826 } 5827 5828 return true; 5829 } 5830 5831 static void start_discovery_complete(struct hci_dev *hdev, void *data, int err) 5832 { 5833 struct mgmt_pending_cmd *cmd = data; 5834 5835 if (cmd != pending_find(MGMT_OP_START_DISCOVERY, hdev) && 5836 cmd != pending_find(MGMT_OP_START_LIMITED_DISCOVERY, hdev) && 5837 cmd != pending_find(MGMT_OP_START_SERVICE_DISCOVERY, hdev)) 5838 return; 5839 5840 bt_dev_dbg(hdev, "err %d", err); 5841 5842 mgmt_cmd_complete(cmd->sk, cmd->index, cmd->opcode, mgmt_status(err), 5843 cmd->param, 1); 5844 mgmt_pending_remove(cmd); 5845 5846 hci_discovery_set_state(hdev, err ? DISCOVERY_STOPPED: 5847 DISCOVERY_FINDING); 5848 } 5849 5850 static int start_discovery_sync(struct hci_dev *hdev, void *data) 5851 { 5852 return hci_start_discovery_sync(hdev); 5853 } 5854 5855 static int start_discovery_internal(struct sock *sk, struct hci_dev *hdev, 5856 u16 op, void *data, u16 len) 5857 { 5858 struct mgmt_cp_start_discovery *cp = data; 5859 struct mgmt_pending_cmd *cmd; 5860 u8 status; 5861 int err; 5862 5863 bt_dev_dbg(hdev, "sock %p", sk); 5864 5865 hci_dev_lock(hdev); 5866 5867 if (!hdev_is_powered(hdev)) { 5868 err = mgmt_cmd_complete(sk, hdev->id, op, 5869 MGMT_STATUS_NOT_POWERED, 5870 &cp->type, sizeof(cp->type)); 5871 goto failed; 5872 } 5873 5874 if (hdev->discovery.state != DISCOVERY_STOPPED || 5875 hci_dev_test_flag(hdev, HCI_PERIODIC_INQ)) { 5876 err = mgmt_cmd_complete(sk, hdev->id, op, MGMT_STATUS_BUSY, 5877 &cp->type, sizeof(cp->type)); 5878 goto failed; 5879 } 5880 5881 if (!discovery_type_is_valid(hdev, cp->type, &status)) { 5882 err = mgmt_cmd_complete(sk, hdev->id, op, status, 5883 &cp->type, sizeof(cp->type)); 5884 goto failed; 5885 } 5886 5887 /* Can't start discovery when it is paused */ 5888 if (hdev->discovery_paused) { 5889 err = mgmt_cmd_complete(sk, hdev->id, op, MGMT_STATUS_BUSY, 5890 &cp->type, sizeof(cp->type)); 5891 goto failed; 5892 } 5893 5894 /* Clear the discovery filter first to free any previously 5895 * allocated memory for the UUID list. 5896 */ 5897 hci_discovery_filter_clear(hdev); 5898 5899 hdev->discovery.type = cp->type; 5900 hdev->discovery.report_invalid_rssi = false; 5901 if (op == MGMT_OP_START_LIMITED_DISCOVERY) 5902 hdev->discovery.limited = true; 5903 else 5904 hdev->discovery.limited = false; 5905 5906 cmd = mgmt_pending_add(sk, op, hdev, data, len); 5907 if (!cmd) { 5908 err = -ENOMEM; 5909 goto failed; 5910 } 5911 5912 err = hci_cmd_sync_queue(hdev, start_discovery_sync, cmd, 5913 start_discovery_complete); 5914 if (err < 0) { 5915 mgmt_pending_remove(cmd); 5916 goto failed; 5917 } 5918 5919 hci_discovery_set_state(hdev, DISCOVERY_STARTING); 5920 5921 failed: 5922 hci_dev_unlock(hdev); 5923 return err; 5924 } 5925 5926 static int start_discovery(struct sock *sk, struct hci_dev *hdev, 5927 void *data, u16 len) 5928 { 5929 return start_discovery_internal(sk, hdev, MGMT_OP_START_DISCOVERY, 5930 data, len); 5931 } 5932 5933 static int start_limited_discovery(struct sock *sk, struct hci_dev *hdev, 5934 void *data, u16 len) 5935 { 5936 return start_discovery_internal(sk, hdev, 5937 MGMT_OP_START_LIMITED_DISCOVERY, 5938 data, len); 5939 } 5940 5941 static int start_service_discovery(struct sock *sk, struct hci_dev *hdev, 5942 void *data, u16 len) 5943 { 5944 struct mgmt_cp_start_service_discovery *cp = data; 5945 struct mgmt_pending_cmd *cmd; 5946 const u16 max_uuid_count = ((U16_MAX - sizeof(*cp)) / 16); 5947 u16 uuid_count, expected_len; 5948 u8 status; 5949 int err; 5950 5951 bt_dev_dbg(hdev, "sock %p", sk); 5952 5953 hci_dev_lock(hdev); 5954 5955 if (!hdev_is_powered(hdev)) { 5956 err = mgmt_cmd_complete(sk, hdev->id, 5957 MGMT_OP_START_SERVICE_DISCOVERY, 5958 MGMT_STATUS_NOT_POWERED, 5959 &cp->type, sizeof(cp->type)); 5960 goto failed; 5961 } 5962 5963 if (hdev->discovery.state != DISCOVERY_STOPPED || 5964 hci_dev_test_flag(hdev, HCI_PERIODIC_INQ)) { 5965 err = mgmt_cmd_complete(sk, hdev->id, 5966 MGMT_OP_START_SERVICE_DISCOVERY, 5967 MGMT_STATUS_BUSY, &cp->type, 5968 sizeof(cp->type)); 5969 goto failed; 5970 } 5971 5972 if (hdev->discovery_paused) { 5973 err = mgmt_cmd_complete(sk, hdev->id, 5974 MGMT_OP_START_SERVICE_DISCOVERY, 5975 MGMT_STATUS_BUSY, &cp->type, 5976 sizeof(cp->type)); 5977 goto failed; 5978 } 5979 5980 uuid_count = __le16_to_cpu(cp->uuid_count); 5981 if (uuid_count > max_uuid_count) { 5982 bt_dev_err(hdev, "service_discovery: too big uuid_count value %u", 5983 uuid_count); 5984 err = mgmt_cmd_complete(sk, hdev->id, 5985 MGMT_OP_START_SERVICE_DISCOVERY, 5986 MGMT_STATUS_INVALID_PARAMS, &cp->type, 5987 sizeof(cp->type)); 5988 goto failed; 5989 } 5990 5991 expected_len = sizeof(*cp) + uuid_count * 16; 5992 if (expected_len != len) { 5993 bt_dev_err(hdev, "service_discovery: expected %u bytes, got %u bytes", 5994 expected_len, len); 5995 err = mgmt_cmd_complete(sk, hdev->id, 5996 MGMT_OP_START_SERVICE_DISCOVERY, 5997 MGMT_STATUS_INVALID_PARAMS, &cp->type, 5998 sizeof(cp->type)); 5999 goto failed; 6000 } 6001 6002 if (!discovery_type_is_valid(hdev, cp->type, &status)) { 6003 err = mgmt_cmd_complete(sk, hdev->id, 6004 MGMT_OP_START_SERVICE_DISCOVERY, 6005 status, &cp->type, sizeof(cp->type)); 6006 goto failed; 6007 } 6008 6009 cmd = mgmt_pending_add(sk, MGMT_OP_START_SERVICE_DISCOVERY, 6010 hdev, data, len); 6011 if (!cmd) { 6012 err = -ENOMEM; 6013 goto failed; 6014 } 6015 6016 /* Clear the discovery filter first to free any previously 6017 * allocated memory for the UUID list. 6018 */ 6019 hci_discovery_filter_clear(hdev); 6020 6021 hdev->discovery.result_filtering = true; 6022 hdev->discovery.type = cp->type; 6023 hdev->discovery.rssi = cp->rssi; 6024 hdev->discovery.uuid_count = uuid_count; 6025 6026 if (uuid_count > 0) { 6027 hdev->discovery.uuids = kmemdup(cp->uuids, uuid_count * 16, 6028 GFP_KERNEL); 6029 if (!hdev->discovery.uuids) { 6030 err = mgmt_cmd_complete(sk, hdev->id, 6031 MGMT_OP_START_SERVICE_DISCOVERY, 6032 MGMT_STATUS_FAILED, 6033 &cp->type, sizeof(cp->type)); 6034 mgmt_pending_remove(cmd); 6035 goto failed; 6036 } 6037 } 6038 6039 err = hci_cmd_sync_queue(hdev, start_discovery_sync, cmd, 6040 start_discovery_complete); 6041 if (err < 0) { 6042 mgmt_pending_remove(cmd); 6043 goto failed; 6044 } 6045 6046 hci_discovery_set_state(hdev, DISCOVERY_STARTING); 6047 6048 failed: 6049 hci_dev_unlock(hdev); 6050 return err; 6051 } 6052 6053 void mgmt_stop_discovery_complete(struct hci_dev *hdev, u8 status) 6054 { 6055 struct mgmt_pending_cmd *cmd; 6056 6057 bt_dev_dbg(hdev, "status %u", status); 6058 6059 hci_dev_lock(hdev); 6060 6061 cmd = pending_find(MGMT_OP_STOP_DISCOVERY, hdev); 6062 if (cmd) { 6063 cmd->cmd_complete(cmd, mgmt_status(status)); 6064 mgmt_pending_remove(cmd); 6065 } 6066 6067 hci_dev_unlock(hdev); 6068 } 6069 6070 static void stop_discovery_complete(struct hci_dev *hdev, void *data, int err) 6071 { 6072 struct mgmt_pending_cmd *cmd = data; 6073 6074 if (cmd != pending_find(MGMT_OP_STOP_DISCOVERY, hdev)) 6075 return; 6076 6077 bt_dev_dbg(hdev, "err %d", err); 6078 6079 mgmt_cmd_complete(cmd->sk, cmd->index, cmd->opcode, mgmt_status(err), 6080 cmd->param, 1); 6081 mgmt_pending_remove(cmd); 6082 6083 if (!err) 6084 hci_discovery_set_state(hdev, DISCOVERY_STOPPED); 6085 } 6086 6087 static int stop_discovery_sync(struct hci_dev *hdev, void *data) 6088 { 6089 return hci_stop_discovery_sync(hdev); 6090 } 6091 6092 static int stop_discovery(struct sock *sk, struct hci_dev *hdev, void *data, 6093 u16 len) 6094 { 6095 struct mgmt_cp_stop_discovery *mgmt_cp = data; 6096 struct mgmt_pending_cmd *cmd; 6097 int err; 6098 6099 bt_dev_dbg(hdev, "sock %p", sk); 6100 6101 hci_dev_lock(hdev); 6102 6103 if (!hci_discovery_active(hdev)) { 6104 err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_STOP_DISCOVERY, 6105 MGMT_STATUS_REJECTED, &mgmt_cp->type, 6106 sizeof(mgmt_cp->type)); 6107 goto unlock; 6108 } 6109 6110 if (hdev->discovery.type != mgmt_cp->type) { 6111 err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_STOP_DISCOVERY, 6112 MGMT_STATUS_INVALID_PARAMS, 6113 &mgmt_cp->type, sizeof(mgmt_cp->type)); 6114 goto unlock; 6115 } 6116 6117 cmd = mgmt_pending_add(sk, MGMT_OP_STOP_DISCOVERY, hdev, data, len); 6118 if (!cmd) { 6119 err = -ENOMEM; 6120 goto unlock; 6121 } 6122 6123 err = hci_cmd_sync_queue(hdev, stop_discovery_sync, cmd, 6124 stop_discovery_complete); 6125 if (err < 0) { 6126 mgmt_pending_remove(cmd); 6127 goto unlock; 6128 } 6129 6130 hci_discovery_set_state(hdev, DISCOVERY_STOPPING); 6131 6132 unlock: 6133 hci_dev_unlock(hdev); 6134 return err; 6135 } 6136 6137 static int confirm_name(struct sock *sk, struct hci_dev *hdev, void *data, 6138 u16 len) 6139 { 6140 struct mgmt_cp_confirm_name *cp = data; 6141 struct inquiry_entry *e; 6142 int err; 6143 6144 bt_dev_dbg(hdev, "sock %p", sk); 6145 6146 hci_dev_lock(hdev); 6147 6148 if (!hci_discovery_active(hdev)) { 6149 err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_CONFIRM_NAME, 6150 MGMT_STATUS_FAILED, &cp->addr, 6151 sizeof(cp->addr)); 6152 goto failed; 6153 } 6154 6155 e = hci_inquiry_cache_lookup_unknown(hdev, &cp->addr.bdaddr); 6156 if (!e) { 6157 err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_CONFIRM_NAME, 6158 MGMT_STATUS_INVALID_PARAMS, &cp->addr, 6159 sizeof(cp->addr)); 6160 goto failed; 6161 } 6162 6163 if (cp->name_known) { 6164 e->name_state = NAME_KNOWN; 6165 list_del(&e->list); 6166 } else { 6167 e->name_state = NAME_NEEDED; 6168 hci_inquiry_cache_update_resolve(hdev, e); 6169 } 6170 6171 err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_CONFIRM_NAME, 0, 6172 &cp->addr, sizeof(cp->addr)); 6173 6174 failed: 6175 hci_dev_unlock(hdev); 6176 return err; 6177 } 6178 6179 static int block_device(struct sock *sk, struct hci_dev *hdev, void *data, 6180 u16 len) 6181 { 6182 struct mgmt_cp_block_device *cp = data; 6183 u8 status; 6184 int err; 6185 6186 bt_dev_dbg(hdev, "sock %p", sk); 6187 6188 if (!bdaddr_type_is_valid(cp->addr.type)) 6189 return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_BLOCK_DEVICE, 6190 MGMT_STATUS_INVALID_PARAMS, 6191 &cp->addr, sizeof(cp->addr)); 6192 6193 hci_dev_lock(hdev); 6194 6195 err = hci_bdaddr_list_add(&hdev->reject_list, &cp->addr.bdaddr, 6196 cp->addr.type); 6197 if (err < 0) { 6198 status = MGMT_STATUS_FAILED; 6199 goto done; 6200 } 6201 6202 mgmt_event(MGMT_EV_DEVICE_BLOCKED, hdev, &cp->addr, sizeof(cp->addr), 6203 sk); 6204 status = MGMT_STATUS_SUCCESS; 6205 6206 done: 6207 err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_BLOCK_DEVICE, status, 6208 &cp->addr, sizeof(cp->addr)); 6209 6210 hci_dev_unlock(hdev); 6211 6212 return err; 6213 } 6214 6215 static int unblock_device(struct sock *sk, struct hci_dev *hdev, void *data, 6216 u16 len) 6217 { 6218 struct mgmt_cp_unblock_device *cp = data; 6219 u8 status; 6220 int err; 6221 6222 bt_dev_dbg(hdev, "sock %p", sk); 6223 6224 if (!bdaddr_type_is_valid(cp->addr.type)) 6225 return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_UNBLOCK_DEVICE, 6226 MGMT_STATUS_INVALID_PARAMS, 6227 &cp->addr, sizeof(cp->addr)); 6228 6229 hci_dev_lock(hdev); 6230 6231 err = hci_bdaddr_list_del(&hdev->reject_list, &cp->addr.bdaddr, 6232 cp->addr.type); 6233 if (err < 0) { 6234 status = MGMT_STATUS_INVALID_PARAMS; 6235 goto done; 6236 } 6237 6238 mgmt_event(MGMT_EV_DEVICE_UNBLOCKED, hdev, &cp->addr, sizeof(cp->addr), 6239 sk); 6240 status = MGMT_STATUS_SUCCESS; 6241 6242 done: 6243 err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_UNBLOCK_DEVICE, status, 6244 &cp->addr, sizeof(cp->addr)); 6245 6246 hci_dev_unlock(hdev); 6247 6248 return err; 6249 } 6250 6251 static int set_device_id_sync(struct hci_dev *hdev, void *data) 6252 { 6253 return hci_update_eir_sync(hdev); 6254 } 6255 6256 static int set_device_id(struct sock *sk, struct hci_dev *hdev, void *data, 6257 u16 len) 6258 { 6259 struct mgmt_cp_set_device_id *cp = data; 6260 int err; 6261 __u16 source; 6262 6263 bt_dev_dbg(hdev, "sock %p", sk); 6264 6265 source = __le16_to_cpu(cp->source); 6266 6267 if (source > 0x0002) 6268 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_DEVICE_ID, 6269 MGMT_STATUS_INVALID_PARAMS); 6270 6271 hci_dev_lock(hdev); 6272 6273 hdev->devid_source = source; 6274 hdev->devid_vendor = __le16_to_cpu(cp->vendor); 6275 hdev->devid_product = __le16_to_cpu(cp->product); 6276 hdev->devid_version = __le16_to_cpu(cp->version); 6277 6278 err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_SET_DEVICE_ID, 0, 6279 NULL, 0); 6280 6281 hci_cmd_sync_queue(hdev, set_device_id_sync, NULL, NULL); 6282 6283 hci_dev_unlock(hdev); 6284 6285 return err; 6286 } 6287 6288 static void enable_advertising_instance(struct hci_dev *hdev, int err) 6289 { 6290 if (err) 6291 bt_dev_err(hdev, "failed to re-configure advertising %d", err); 6292 else 6293 bt_dev_dbg(hdev, "status %d", err); 6294 } 6295 6296 static void set_advertising_complete(struct hci_dev *hdev, void *data, int err) 6297 { 6298 struct cmd_lookup match = { NULL, hdev }; 6299 u8 instance; 6300 struct adv_info *adv_instance; 6301 u8 status = mgmt_status(err); 6302 6303 if (status) { 6304 mgmt_pending_foreach(MGMT_OP_SET_ADVERTISING, hdev, 6305 cmd_status_rsp, &status); 6306 return; 6307 } 6308 6309 if (hci_dev_test_flag(hdev, HCI_LE_ADV)) 6310 hci_dev_set_flag(hdev, HCI_ADVERTISING); 6311 else 6312 hci_dev_clear_flag(hdev, HCI_ADVERTISING); 6313 6314 mgmt_pending_foreach(MGMT_OP_SET_ADVERTISING, hdev, settings_rsp, 6315 &match); 6316 6317 new_settings(hdev, match.sk); 6318 6319 if (match.sk) 6320 sock_put(match.sk); 6321 6322 /* If "Set Advertising" was just disabled and instance advertising was 6323 * set up earlier, then re-enable multi-instance advertising. 6324 */ 6325 if (hci_dev_test_flag(hdev, HCI_ADVERTISING) || 6326 list_empty(&hdev->adv_instances)) 6327 return; 6328 6329 instance = hdev->cur_adv_instance; 6330 if (!instance) { 6331 adv_instance = list_first_entry_or_null(&hdev->adv_instances, 6332 struct adv_info, list); 6333 if (!adv_instance) 6334 return; 6335 6336 instance = adv_instance->instance; 6337 } 6338 6339 err = hci_schedule_adv_instance_sync(hdev, instance, true); 6340 6341 enable_advertising_instance(hdev, err); 6342 } 6343 6344 static int set_adv_sync(struct hci_dev *hdev, void *data) 6345 { 6346 struct mgmt_pending_cmd *cmd = data; 6347 struct mgmt_mode *cp = cmd->param; 6348 u8 val = !!cp->val; 6349 6350 if (cp->val == 0x02) 6351 hci_dev_set_flag(hdev, HCI_ADVERTISING_CONNECTABLE); 6352 else 6353 hci_dev_clear_flag(hdev, HCI_ADVERTISING_CONNECTABLE); 6354 6355 cancel_adv_timeout(hdev); 6356 6357 if (val) { 6358 /* Switch to instance "0" for the Set Advertising setting. 6359 * We cannot use update_[adv|scan_rsp]_data() here as the 6360 * HCI_ADVERTISING flag is not yet set. 6361 */ 6362 hdev->cur_adv_instance = 0x00; 6363 6364 if (ext_adv_capable(hdev)) { 6365 hci_start_ext_adv_sync(hdev, 0x00); 6366 } else { 6367 hci_update_adv_data_sync(hdev, 0x00); 6368 hci_update_scan_rsp_data_sync(hdev, 0x00); 6369 hci_enable_advertising_sync(hdev); 6370 } 6371 } else { 6372 hci_disable_advertising_sync(hdev); 6373 } 6374 6375 return 0; 6376 } 6377 6378 static int set_advertising(struct sock *sk, struct hci_dev *hdev, void *data, 6379 u16 len) 6380 { 6381 struct mgmt_mode *cp = data; 6382 struct mgmt_pending_cmd *cmd; 6383 u8 val, status; 6384 int err; 6385 6386 bt_dev_dbg(hdev, "sock %p", sk); 6387 6388 status = mgmt_le_support(hdev); 6389 if (status) 6390 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_ADVERTISING, 6391 status); 6392 6393 if (cp->val != 0x00 && cp->val != 0x01 && cp->val != 0x02) 6394 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_ADVERTISING, 6395 MGMT_STATUS_INVALID_PARAMS); 6396 6397 if (hdev->advertising_paused) 6398 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_ADVERTISING, 6399 MGMT_STATUS_BUSY); 6400 6401 hci_dev_lock(hdev); 6402 6403 val = !!cp->val; 6404 6405 /* The following conditions are ones which mean that we should 6406 * not do any HCI communication but directly send a mgmt 6407 * response to user space (after toggling the flag if 6408 * necessary). 6409 */ 6410 if (!hdev_is_powered(hdev) || 6411 (val == hci_dev_test_flag(hdev, HCI_ADVERTISING) && 6412 (cp->val == 0x02) == hci_dev_test_flag(hdev, HCI_ADVERTISING_CONNECTABLE)) || 6413 hci_dev_test_flag(hdev, HCI_MESH) || 6414 hci_conn_num(hdev, LE_LINK) > 0 || 6415 (hci_dev_test_flag(hdev, HCI_LE_SCAN) && 6416 hdev->le_scan_type == LE_SCAN_ACTIVE)) { 6417 bool changed; 6418 6419 if (cp->val) { 6420 hdev->cur_adv_instance = 0x00; 6421 changed = !hci_dev_test_and_set_flag(hdev, HCI_ADVERTISING); 6422 if (cp->val == 0x02) 6423 hci_dev_set_flag(hdev, HCI_ADVERTISING_CONNECTABLE); 6424 else 6425 hci_dev_clear_flag(hdev, HCI_ADVERTISING_CONNECTABLE); 6426 } else { 6427 changed = hci_dev_test_and_clear_flag(hdev, HCI_ADVERTISING); 6428 hci_dev_clear_flag(hdev, HCI_ADVERTISING_CONNECTABLE); 6429 } 6430 6431 err = send_settings_rsp(sk, MGMT_OP_SET_ADVERTISING, hdev); 6432 if (err < 0) 6433 goto unlock; 6434 6435 if (changed) 6436 err = new_settings(hdev, sk); 6437 6438 goto unlock; 6439 } 6440 6441 if (pending_find(MGMT_OP_SET_ADVERTISING, hdev) || 6442 pending_find(MGMT_OP_SET_LE, hdev)) { 6443 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_ADVERTISING, 6444 MGMT_STATUS_BUSY); 6445 goto unlock; 6446 } 6447 6448 cmd = mgmt_pending_add(sk, MGMT_OP_SET_ADVERTISING, hdev, data, len); 6449 if (!cmd) 6450 err = -ENOMEM; 6451 else 6452 err = hci_cmd_sync_queue(hdev, set_adv_sync, cmd, 6453 set_advertising_complete); 6454 6455 if (err < 0 && cmd) 6456 mgmt_pending_remove(cmd); 6457 6458 unlock: 6459 hci_dev_unlock(hdev); 6460 return err; 6461 } 6462 6463 static int set_static_address(struct sock *sk, struct hci_dev *hdev, 6464 void *data, u16 len) 6465 { 6466 struct mgmt_cp_set_static_address *cp = data; 6467 int err; 6468 6469 bt_dev_dbg(hdev, "sock %p", sk); 6470 6471 if (!lmp_le_capable(hdev)) 6472 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_STATIC_ADDRESS, 6473 MGMT_STATUS_NOT_SUPPORTED); 6474 6475 if (hdev_is_powered(hdev)) 6476 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_STATIC_ADDRESS, 6477 MGMT_STATUS_REJECTED); 6478 6479 if (bacmp(&cp->bdaddr, BDADDR_ANY)) { 6480 if (!bacmp(&cp->bdaddr, BDADDR_NONE)) 6481 return mgmt_cmd_status(sk, hdev->id, 6482 MGMT_OP_SET_STATIC_ADDRESS, 6483 MGMT_STATUS_INVALID_PARAMS); 6484 6485 /* Two most significant bits shall be set */ 6486 if ((cp->bdaddr.b[5] & 0xc0) != 0xc0) 6487 return mgmt_cmd_status(sk, hdev->id, 6488 MGMT_OP_SET_STATIC_ADDRESS, 6489 MGMT_STATUS_INVALID_PARAMS); 6490 } 6491 6492 hci_dev_lock(hdev); 6493 6494 bacpy(&hdev->static_addr, &cp->bdaddr); 6495 6496 err = send_settings_rsp(sk, MGMT_OP_SET_STATIC_ADDRESS, hdev); 6497 if (err < 0) 6498 goto unlock; 6499 6500 err = new_settings(hdev, sk); 6501 6502 unlock: 6503 hci_dev_unlock(hdev); 6504 return err; 6505 } 6506 6507 static int set_scan_params(struct sock *sk, struct hci_dev *hdev, 6508 void *data, u16 len) 6509 { 6510 struct mgmt_cp_set_scan_params *cp = data; 6511 __u16 interval, window; 6512 int err; 6513 6514 bt_dev_dbg(hdev, "sock %p", sk); 6515 6516 if (!lmp_le_capable(hdev)) 6517 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_SCAN_PARAMS, 6518 MGMT_STATUS_NOT_SUPPORTED); 6519 6520 interval = __le16_to_cpu(cp->interval); 6521 6522 if (interval < 0x0004 || interval > 0x4000) 6523 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_SCAN_PARAMS, 6524 MGMT_STATUS_INVALID_PARAMS); 6525 6526 window = __le16_to_cpu(cp->window); 6527 6528 if (window < 0x0004 || window > 0x4000) 6529 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_SCAN_PARAMS, 6530 MGMT_STATUS_INVALID_PARAMS); 6531 6532 if (window > interval) 6533 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_SCAN_PARAMS, 6534 MGMT_STATUS_INVALID_PARAMS); 6535 6536 hci_dev_lock(hdev); 6537 6538 hdev->le_scan_interval = interval; 6539 hdev->le_scan_window = window; 6540 6541 err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_SET_SCAN_PARAMS, 0, 6542 NULL, 0); 6543 6544 /* If background scan is running, restart it so new parameters are 6545 * loaded. 6546 */ 6547 if (hci_dev_test_flag(hdev, HCI_LE_SCAN) && 6548 hdev->discovery.state == DISCOVERY_STOPPED) 6549 hci_update_passive_scan(hdev); 6550 6551 hci_dev_unlock(hdev); 6552 6553 return err; 6554 } 6555 6556 static void fast_connectable_complete(struct hci_dev *hdev, void *data, int err) 6557 { 6558 struct mgmt_pending_cmd *cmd = data; 6559 6560 bt_dev_dbg(hdev, "err %d", err); 6561 6562 if (err) { 6563 mgmt_cmd_status(cmd->sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE, 6564 mgmt_status(err)); 6565 } else { 6566 struct mgmt_mode *cp = cmd->param; 6567 6568 if (cp->val) 6569 hci_dev_set_flag(hdev, HCI_FAST_CONNECTABLE); 6570 else 6571 hci_dev_clear_flag(hdev, HCI_FAST_CONNECTABLE); 6572 6573 send_settings_rsp(cmd->sk, MGMT_OP_SET_FAST_CONNECTABLE, hdev); 6574 new_settings(hdev, cmd->sk); 6575 } 6576 6577 mgmt_pending_free(cmd); 6578 } 6579 6580 static int write_fast_connectable_sync(struct hci_dev *hdev, void *data) 6581 { 6582 struct mgmt_pending_cmd *cmd = data; 6583 struct mgmt_mode *cp = cmd->param; 6584 6585 return hci_write_fast_connectable_sync(hdev, cp->val); 6586 } 6587 6588 static int set_fast_connectable(struct sock *sk, struct hci_dev *hdev, 6589 void *data, u16 len) 6590 { 6591 struct mgmt_mode *cp = data; 6592 struct mgmt_pending_cmd *cmd; 6593 int err; 6594 6595 bt_dev_dbg(hdev, "sock %p", sk); 6596 6597 if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED) || 6598 hdev->hci_ver < BLUETOOTH_VER_1_2) 6599 return mgmt_cmd_status(sk, hdev->id, 6600 MGMT_OP_SET_FAST_CONNECTABLE, 6601 MGMT_STATUS_NOT_SUPPORTED); 6602 6603 if (cp->val != 0x00 && cp->val != 0x01) 6604 return mgmt_cmd_status(sk, hdev->id, 6605 MGMT_OP_SET_FAST_CONNECTABLE, 6606 MGMT_STATUS_INVALID_PARAMS); 6607 6608 hci_dev_lock(hdev); 6609 6610 if (!!cp->val == hci_dev_test_flag(hdev, HCI_FAST_CONNECTABLE)) { 6611 err = send_settings_rsp(sk, MGMT_OP_SET_FAST_CONNECTABLE, hdev); 6612 goto unlock; 6613 } 6614 6615 if (!hdev_is_powered(hdev)) { 6616 hci_dev_change_flag(hdev, HCI_FAST_CONNECTABLE); 6617 err = send_settings_rsp(sk, MGMT_OP_SET_FAST_CONNECTABLE, hdev); 6618 new_settings(hdev, sk); 6619 goto unlock; 6620 } 6621 6622 cmd = mgmt_pending_new(sk, MGMT_OP_SET_FAST_CONNECTABLE, hdev, data, 6623 len); 6624 if (!cmd) 6625 err = -ENOMEM; 6626 else 6627 err = hci_cmd_sync_queue(hdev, write_fast_connectable_sync, cmd, 6628 fast_connectable_complete); 6629 6630 if (err < 0) { 6631 mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE, 6632 MGMT_STATUS_FAILED); 6633 6634 if (cmd) 6635 mgmt_pending_free(cmd); 6636 } 6637 6638 unlock: 6639 hci_dev_unlock(hdev); 6640 6641 return err; 6642 } 6643 6644 static void set_bredr_complete(struct hci_dev *hdev, void *data, int err) 6645 { 6646 struct mgmt_pending_cmd *cmd = data; 6647 6648 bt_dev_dbg(hdev, "err %d", err); 6649 6650 if (err) { 6651 u8 mgmt_err = mgmt_status(err); 6652 6653 /* We need to restore the flag if related HCI commands 6654 * failed. 6655 */ 6656 hci_dev_clear_flag(hdev, HCI_BREDR_ENABLED); 6657 6658 mgmt_cmd_status(cmd->sk, cmd->index, cmd->opcode, mgmt_err); 6659 } else { 6660 send_settings_rsp(cmd->sk, MGMT_OP_SET_BREDR, hdev); 6661 new_settings(hdev, cmd->sk); 6662 } 6663 6664 mgmt_pending_free(cmd); 6665 } 6666 6667 static int set_bredr_sync(struct hci_dev *hdev, void *data) 6668 { 6669 int status; 6670 6671 status = hci_write_fast_connectable_sync(hdev, false); 6672 6673 if (!status) 6674 status = hci_update_scan_sync(hdev); 6675 6676 /* Since only the advertising data flags will change, there 6677 * is no need to update the scan response data. 6678 */ 6679 if (!status) 6680 status = hci_update_adv_data_sync(hdev, hdev->cur_adv_instance); 6681 6682 return status; 6683 } 6684 6685 static int set_bredr(struct sock *sk, struct hci_dev *hdev, void *data, u16 len) 6686 { 6687 struct mgmt_mode *cp = data; 6688 struct mgmt_pending_cmd *cmd; 6689 int err; 6690 6691 bt_dev_dbg(hdev, "sock %p", sk); 6692 6693 if (!lmp_bredr_capable(hdev) || !lmp_le_capable(hdev)) 6694 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_BREDR, 6695 MGMT_STATUS_NOT_SUPPORTED); 6696 6697 if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED)) 6698 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_BREDR, 6699 MGMT_STATUS_REJECTED); 6700 6701 if (cp->val != 0x00 && cp->val != 0x01) 6702 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_BREDR, 6703 MGMT_STATUS_INVALID_PARAMS); 6704 6705 hci_dev_lock(hdev); 6706 6707 if (cp->val == hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) { 6708 err = send_settings_rsp(sk, MGMT_OP_SET_BREDR, hdev); 6709 goto unlock; 6710 } 6711 6712 if (!hdev_is_powered(hdev)) { 6713 if (!cp->val) { 6714 hci_dev_clear_flag(hdev, HCI_DISCOVERABLE); 6715 hci_dev_clear_flag(hdev, HCI_SSP_ENABLED); 6716 hci_dev_clear_flag(hdev, HCI_LINK_SECURITY); 6717 hci_dev_clear_flag(hdev, HCI_FAST_CONNECTABLE); 6718 } 6719 6720 hci_dev_change_flag(hdev, HCI_BREDR_ENABLED); 6721 6722 err = send_settings_rsp(sk, MGMT_OP_SET_BREDR, hdev); 6723 if (err < 0) 6724 goto unlock; 6725 6726 err = new_settings(hdev, sk); 6727 goto unlock; 6728 } 6729 6730 /* Reject disabling when powered on */ 6731 if (!cp->val) { 6732 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_BREDR, 6733 MGMT_STATUS_REJECTED); 6734 goto unlock; 6735 } else { 6736 /* When configuring a dual-mode controller to operate 6737 * with LE only and using a static address, then switching 6738 * BR/EDR back on is not allowed. 6739 * 6740 * Dual-mode controllers shall operate with the public 6741 * address as its identity address for BR/EDR and LE. So 6742 * reject the attempt to create an invalid configuration. 6743 * 6744 * The same restrictions applies when secure connections 6745 * has been enabled. For BR/EDR this is a controller feature 6746 * while for LE it is a host stack feature. This means that 6747 * switching BR/EDR back on when secure connections has been 6748 * enabled is not a supported transaction. 6749 */ 6750 if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED) && 6751 (bacmp(&hdev->static_addr, BDADDR_ANY) || 6752 hci_dev_test_flag(hdev, HCI_SC_ENABLED))) { 6753 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_BREDR, 6754 MGMT_STATUS_REJECTED); 6755 goto unlock; 6756 } 6757 } 6758 6759 cmd = mgmt_pending_new(sk, MGMT_OP_SET_BREDR, hdev, data, len); 6760 if (!cmd) 6761 err = -ENOMEM; 6762 else 6763 err = hci_cmd_sync_queue(hdev, set_bredr_sync, cmd, 6764 set_bredr_complete); 6765 6766 if (err < 0) { 6767 mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_BREDR, 6768 MGMT_STATUS_FAILED); 6769 if (cmd) 6770 mgmt_pending_free(cmd); 6771 6772 goto unlock; 6773 } 6774 6775 /* We need to flip the bit already here so that 6776 * hci_req_update_adv_data generates the correct flags. 6777 */ 6778 hci_dev_set_flag(hdev, HCI_BREDR_ENABLED); 6779 6780 unlock: 6781 hci_dev_unlock(hdev); 6782 return err; 6783 } 6784 6785 static void set_secure_conn_complete(struct hci_dev *hdev, void *data, int err) 6786 { 6787 struct mgmt_pending_cmd *cmd = data; 6788 struct mgmt_mode *cp; 6789 6790 bt_dev_dbg(hdev, "err %d", err); 6791 6792 if (err) { 6793 u8 mgmt_err = mgmt_status(err); 6794 6795 mgmt_cmd_status(cmd->sk, cmd->index, cmd->opcode, mgmt_err); 6796 goto done; 6797 } 6798 6799 cp = cmd->param; 6800 6801 switch (cp->val) { 6802 case 0x00: 6803 hci_dev_clear_flag(hdev, HCI_SC_ENABLED); 6804 hci_dev_clear_flag(hdev, HCI_SC_ONLY); 6805 break; 6806 case 0x01: 6807 hci_dev_set_flag(hdev, HCI_SC_ENABLED); 6808 hci_dev_clear_flag(hdev, HCI_SC_ONLY); 6809 break; 6810 case 0x02: 6811 hci_dev_set_flag(hdev, HCI_SC_ENABLED); 6812 hci_dev_set_flag(hdev, HCI_SC_ONLY); 6813 break; 6814 } 6815 6816 send_settings_rsp(cmd->sk, cmd->opcode, hdev); 6817 new_settings(hdev, cmd->sk); 6818 6819 done: 6820 mgmt_pending_free(cmd); 6821 } 6822 6823 static int set_secure_conn_sync(struct hci_dev *hdev, void *data) 6824 { 6825 struct mgmt_pending_cmd *cmd = data; 6826 struct mgmt_mode *cp = cmd->param; 6827 u8 val = !!cp->val; 6828 6829 /* Force write of val */ 6830 hci_dev_set_flag(hdev, HCI_SC_ENABLED); 6831 6832 return hci_write_sc_support_sync(hdev, val); 6833 } 6834 6835 static int set_secure_conn(struct sock *sk, struct hci_dev *hdev, 6836 void *data, u16 len) 6837 { 6838 struct mgmt_mode *cp = data; 6839 struct mgmt_pending_cmd *cmd; 6840 u8 val; 6841 int err; 6842 6843 bt_dev_dbg(hdev, "sock %p", sk); 6844 6845 if (!lmp_sc_capable(hdev) && 6846 !hci_dev_test_flag(hdev, HCI_LE_ENABLED)) 6847 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_SECURE_CONN, 6848 MGMT_STATUS_NOT_SUPPORTED); 6849 6850 if (hci_dev_test_flag(hdev, HCI_BREDR_ENABLED) && 6851 lmp_sc_capable(hdev) && 6852 !hci_dev_test_flag(hdev, HCI_SSP_ENABLED)) 6853 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_SECURE_CONN, 6854 MGMT_STATUS_REJECTED); 6855 6856 if (cp->val != 0x00 && cp->val != 0x01 && cp->val != 0x02) 6857 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_SECURE_CONN, 6858 MGMT_STATUS_INVALID_PARAMS); 6859 6860 hci_dev_lock(hdev); 6861 6862 if (!hdev_is_powered(hdev) || !lmp_sc_capable(hdev) || 6863 !hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) { 6864 bool changed; 6865 6866 if (cp->val) { 6867 changed = !hci_dev_test_and_set_flag(hdev, 6868 HCI_SC_ENABLED); 6869 if (cp->val == 0x02) 6870 hci_dev_set_flag(hdev, HCI_SC_ONLY); 6871 else 6872 hci_dev_clear_flag(hdev, HCI_SC_ONLY); 6873 } else { 6874 changed = hci_dev_test_and_clear_flag(hdev, 6875 HCI_SC_ENABLED); 6876 hci_dev_clear_flag(hdev, HCI_SC_ONLY); 6877 } 6878 6879 err = send_settings_rsp(sk, MGMT_OP_SET_SECURE_CONN, hdev); 6880 if (err < 0) 6881 goto failed; 6882 6883 if (changed) 6884 err = new_settings(hdev, sk); 6885 6886 goto failed; 6887 } 6888 6889 val = !!cp->val; 6890 6891 if (val == hci_dev_test_flag(hdev, HCI_SC_ENABLED) && 6892 (cp->val == 0x02) == hci_dev_test_flag(hdev, HCI_SC_ONLY)) { 6893 err = send_settings_rsp(sk, MGMT_OP_SET_SECURE_CONN, hdev); 6894 goto failed; 6895 } 6896 6897 cmd = mgmt_pending_new(sk, MGMT_OP_SET_SECURE_CONN, hdev, data, len); 6898 if (!cmd) 6899 err = -ENOMEM; 6900 else 6901 err = hci_cmd_sync_queue(hdev, set_secure_conn_sync, cmd, 6902 set_secure_conn_complete); 6903 6904 if (err < 0) { 6905 mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_SECURE_CONN, 6906 MGMT_STATUS_FAILED); 6907 if (cmd) 6908 mgmt_pending_free(cmd); 6909 } 6910 6911 failed: 6912 hci_dev_unlock(hdev); 6913 return err; 6914 } 6915 6916 static int set_debug_keys(struct sock *sk, struct hci_dev *hdev, 6917 void *data, u16 len) 6918 { 6919 struct mgmt_mode *cp = data; 6920 bool changed, use_changed; 6921 int err; 6922 6923 bt_dev_dbg(hdev, "sock %p", sk); 6924 6925 if (cp->val != 0x00 && cp->val != 0x01 && cp->val != 0x02) 6926 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_DEBUG_KEYS, 6927 MGMT_STATUS_INVALID_PARAMS); 6928 6929 hci_dev_lock(hdev); 6930 6931 if (cp->val) 6932 changed = !hci_dev_test_and_set_flag(hdev, HCI_KEEP_DEBUG_KEYS); 6933 else 6934 changed = hci_dev_test_and_clear_flag(hdev, 6935 HCI_KEEP_DEBUG_KEYS); 6936 6937 if (cp->val == 0x02) 6938 use_changed = !hci_dev_test_and_set_flag(hdev, 6939 HCI_USE_DEBUG_KEYS); 6940 else 6941 use_changed = hci_dev_test_and_clear_flag(hdev, 6942 HCI_USE_DEBUG_KEYS); 6943 6944 if (hdev_is_powered(hdev) && use_changed && 6945 hci_dev_test_flag(hdev, HCI_SSP_ENABLED)) { 6946 u8 mode = (cp->val == 0x02) ? 0x01 : 0x00; 6947 hci_send_cmd(hdev, HCI_OP_WRITE_SSP_DEBUG_MODE, 6948 sizeof(mode), &mode); 6949 } 6950 6951 err = send_settings_rsp(sk, MGMT_OP_SET_DEBUG_KEYS, hdev); 6952 if (err < 0) 6953 goto unlock; 6954 6955 if (changed) 6956 err = new_settings(hdev, sk); 6957 6958 unlock: 6959 hci_dev_unlock(hdev); 6960 return err; 6961 } 6962 6963 static int set_privacy(struct sock *sk, struct hci_dev *hdev, void *cp_data, 6964 u16 len) 6965 { 6966 struct mgmt_cp_set_privacy *cp = cp_data; 6967 bool changed; 6968 int err; 6969 6970 bt_dev_dbg(hdev, "sock %p", sk); 6971 6972 if (!lmp_le_capable(hdev)) 6973 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_PRIVACY, 6974 MGMT_STATUS_NOT_SUPPORTED); 6975 6976 if (cp->privacy != 0x00 && cp->privacy != 0x01 && cp->privacy != 0x02) 6977 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_PRIVACY, 6978 MGMT_STATUS_INVALID_PARAMS); 6979 6980 if (hdev_is_powered(hdev)) 6981 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_PRIVACY, 6982 MGMT_STATUS_REJECTED); 6983 6984 hci_dev_lock(hdev); 6985 6986 /* If user space supports this command it is also expected to 6987 * handle IRKs. Therefore, set the HCI_RPA_RESOLVING flag. 6988 */ 6989 hci_dev_set_flag(hdev, HCI_RPA_RESOLVING); 6990 6991 if (cp->privacy) { 6992 changed = !hci_dev_test_and_set_flag(hdev, HCI_PRIVACY); 6993 memcpy(hdev->irk, cp->irk, sizeof(hdev->irk)); 6994 hci_dev_set_flag(hdev, HCI_RPA_EXPIRED); 6995 hci_adv_instances_set_rpa_expired(hdev, true); 6996 if (cp->privacy == 0x02) 6997 hci_dev_set_flag(hdev, HCI_LIMITED_PRIVACY); 6998 else 6999 hci_dev_clear_flag(hdev, HCI_LIMITED_PRIVACY); 7000 } else { 7001 changed = hci_dev_test_and_clear_flag(hdev, HCI_PRIVACY); 7002 memset(hdev->irk, 0, sizeof(hdev->irk)); 7003 hci_dev_clear_flag(hdev, HCI_RPA_EXPIRED); 7004 hci_adv_instances_set_rpa_expired(hdev, false); 7005 hci_dev_clear_flag(hdev, HCI_LIMITED_PRIVACY); 7006 } 7007 7008 err = send_settings_rsp(sk, MGMT_OP_SET_PRIVACY, hdev); 7009 if (err < 0) 7010 goto unlock; 7011 7012 if (changed) 7013 err = new_settings(hdev, sk); 7014 7015 unlock: 7016 hci_dev_unlock(hdev); 7017 return err; 7018 } 7019 7020 static bool irk_is_valid(struct mgmt_irk_info *irk) 7021 { 7022 switch (irk->addr.type) { 7023 case BDADDR_LE_PUBLIC: 7024 return true; 7025 7026 case BDADDR_LE_RANDOM: 7027 /* Two most significant bits shall be set */ 7028 if ((irk->addr.bdaddr.b[5] & 0xc0) != 0xc0) 7029 return false; 7030 return true; 7031 } 7032 7033 return false; 7034 } 7035 7036 static int load_irks(struct sock *sk, struct hci_dev *hdev, void *cp_data, 7037 u16 len) 7038 { 7039 struct mgmt_cp_load_irks *cp = cp_data; 7040 const u16 max_irk_count = ((U16_MAX - sizeof(*cp)) / 7041 sizeof(struct mgmt_irk_info)); 7042 u16 irk_count, expected_len; 7043 int i, err; 7044 7045 bt_dev_dbg(hdev, "sock %p", sk); 7046 7047 if (!lmp_le_capable(hdev)) 7048 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_LOAD_IRKS, 7049 MGMT_STATUS_NOT_SUPPORTED); 7050 7051 irk_count = __le16_to_cpu(cp->irk_count); 7052 if (irk_count > max_irk_count) { 7053 bt_dev_err(hdev, "load_irks: too big irk_count value %u", 7054 irk_count); 7055 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_LOAD_IRKS, 7056 MGMT_STATUS_INVALID_PARAMS); 7057 } 7058 7059 expected_len = struct_size(cp, irks, irk_count); 7060 if (expected_len != len) { 7061 bt_dev_err(hdev, "load_irks: expected %u bytes, got %u bytes", 7062 expected_len, len); 7063 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_LOAD_IRKS, 7064 MGMT_STATUS_INVALID_PARAMS); 7065 } 7066 7067 bt_dev_dbg(hdev, "irk_count %u", irk_count); 7068 7069 for (i = 0; i < irk_count; i++) { 7070 struct mgmt_irk_info *key = &cp->irks[i]; 7071 7072 if (!irk_is_valid(key)) 7073 return mgmt_cmd_status(sk, hdev->id, 7074 MGMT_OP_LOAD_IRKS, 7075 MGMT_STATUS_INVALID_PARAMS); 7076 } 7077 7078 hci_dev_lock(hdev); 7079 7080 hci_smp_irks_clear(hdev); 7081 7082 for (i = 0; i < irk_count; i++) { 7083 struct mgmt_irk_info *irk = &cp->irks[i]; 7084 u8 addr_type = le_addr_type(irk->addr.type); 7085 7086 if (hci_is_blocked_key(hdev, 7087 HCI_BLOCKED_KEY_TYPE_IRK, 7088 irk->val)) { 7089 bt_dev_warn(hdev, "Skipping blocked IRK for %pMR", 7090 &irk->addr.bdaddr); 7091 continue; 7092 } 7093 7094 /* When using SMP over BR/EDR, the addr type should be set to BREDR */ 7095 if (irk->addr.type == BDADDR_BREDR) 7096 addr_type = BDADDR_BREDR; 7097 7098 hci_add_irk(hdev, &irk->addr.bdaddr, 7099 addr_type, irk->val, 7100 BDADDR_ANY); 7101 } 7102 7103 hci_dev_set_flag(hdev, HCI_RPA_RESOLVING); 7104 7105 err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_LOAD_IRKS, 0, NULL, 0); 7106 7107 hci_dev_unlock(hdev); 7108 7109 return err; 7110 } 7111 7112 static bool ltk_is_valid(struct mgmt_ltk_info *key) 7113 { 7114 if (key->initiator != 0x00 && key->initiator != 0x01) 7115 return false; 7116 7117 switch (key->addr.type) { 7118 case BDADDR_LE_PUBLIC: 7119 return true; 7120 7121 case BDADDR_LE_RANDOM: 7122 /* Two most significant bits shall be set */ 7123 if ((key->addr.bdaddr.b[5] & 0xc0) != 0xc0) 7124 return false; 7125 return true; 7126 } 7127 7128 return false; 7129 } 7130 7131 static int load_long_term_keys(struct sock *sk, struct hci_dev *hdev, 7132 void *cp_data, u16 len) 7133 { 7134 struct mgmt_cp_load_long_term_keys *cp = cp_data; 7135 const u16 max_key_count = ((U16_MAX - sizeof(*cp)) / 7136 sizeof(struct mgmt_ltk_info)); 7137 u16 key_count, expected_len; 7138 int i, err; 7139 7140 bt_dev_dbg(hdev, "sock %p", sk); 7141 7142 if (!lmp_le_capable(hdev)) 7143 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_LOAD_LONG_TERM_KEYS, 7144 MGMT_STATUS_NOT_SUPPORTED); 7145 7146 key_count = __le16_to_cpu(cp->key_count); 7147 if (key_count > max_key_count) { 7148 bt_dev_err(hdev, "load_ltks: too big key_count value %u", 7149 key_count); 7150 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_LOAD_LONG_TERM_KEYS, 7151 MGMT_STATUS_INVALID_PARAMS); 7152 } 7153 7154 expected_len = struct_size(cp, keys, key_count); 7155 if (expected_len != len) { 7156 bt_dev_err(hdev, "load_keys: expected %u bytes, got %u bytes", 7157 expected_len, len); 7158 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_LOAD_LONG_TERM_KEYS, 7159 MGMT_STATUS_INVALID_PARAMS); 7160 } 7161 7162 bt_dev_dbg(hdev, "key_count %u", key_count); 7163 7164 for (i = 0; i < key_count; i++) { 7165 struct mgmt_ltk_info *key = &cp->keys[i]; 7166 7167 if (!ltk_is_valid(key)) 7168 return mgmt_cmd_status(sk, hdev->id, 7169 MGMT_OP_LOAD_LONG_TERM_KEYS, 7170 MGMT_STATUS_INVALID_PARAMS); 7171 } 7172 7173 hci_dev_lock(hdev); 7174 7175 hci_smp_ltks_clear(hdev); 7176 7177 for (i = 0; i < key_count; i++) { 7178 struct mgmt_ltk_info *key = &cp->keys[i]; 7179 u8 type, authenticated; 7180 u8 addr_type = le_addr_type(key->addr.type); 7181 7182 if (hci_is_blocked_key(hdev, 7183 HCI_BLOCKED_KEY_TYPE_LTK, 7184 key->val)) { 7185 bt_dev_warn(hdev, "Skipping blocked LTK for %pMR", 7186 &key->addr.bdaddr); 7187 continue; 7188 } 7189 7190 switch (key->type) { 7191 case MGMT_LTK_UNAUTHENTICATED: 7192 authenticated = 0x00; 7193 type = key->initiator ? SMP_LTK : SMP_LTK_RESPONDER; 7194 break; 7195 case MGMT_LTK_AUTHENTICATED: 7196 authenticated = 0x01; 7197 type = key->initiator ? SMP_LTK : SMP_LTK_RESPONDER; 7198 break; 7199 case MGMT_LTK_P256_UNAUTH: 7200 authenticated = 0x00; 7201 type = SMP_LTK_P256; 7202 break; 7203 case MGMT_LTK_P256_AUTH: 7204 authenticated = 0x01; 7205 type = SMP_LTK_P256; 7206 break; 7207 case MGMT_LTK_P256_DEBUG: 7208 authenticated = 0x00; 7209 type = SMP_LTK_P256_DEBUG; 7210 fallthrough; 7211 default: 7212 continue; 7213 } 7214 7215 /* When using SMP over BR/EDR, the addr type should be set to BREDR */ 7216 if (key->addr.type == BDADDR_BREDR) 7217 addr_type = BDADDR_BREDR; 7218 7219 hci_add_ltk(hdev, &key->addr.bdaddr, 7220 addr_type, type, authenticated, 7221 key->val, key->enc_size, key->ediv, key->rand); 7222 } 7223 7224 err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_LOAD_LONG_TERM_KEYS, 0, 7225 NULL, 0); 7226 7227 hci_dev_unlock(hdev); 7228 7229 return err; 7230 } 7231 7232 static void get_conn_info_complete(struct hci_dev *hdev, void *data, int err) 7233 { 7234 struct mgmt_pending_cmd *cmd = data; 7235 struct hci_conn *conn = cmd->user_data; 7236 struct mgmt_cp_get_conn_info *cp = cmd->param; 7237 struct mgmt_rp_get_conn_info rp; 7238 u8 status; 7239 7240 bt_dev_dbg(hdev, "err %d", err); 7241 7242 memcpy(&rp.addr, &cp->addr, sizeof(rp.addr)); 7243 7244 status = mgmt_status(err); 7245 if (status == MGMT_STATUS_SUCCESS) { 7246 rp.rssi = conn->rssi; 7247 rp.tx_power = conn->tx_power; 7248 rp.max_tx_power = conn->max_tx_power; 7249 } else { 7250 rp.rssi = HCI_RSSI_INVALID; 7251 rp.tx_power = HCI_TX_POWER_INVALID; 7252 rp.max_tx_power = HCI_TX_POWER_INVALID; 7253 } 7254 7255 mgmt_cmd_complete(cmd->sk, cmd->index, MGMT_OP_GET_CONN_INFO, status, 7256 &rp, sizeof(rp)); 7257 7258 mgmt_pending_free(cmd); 7259 } 7260 7261 static int get_conn_info_sync(struct hci_dev *hdev, void *data) 7262 { 7263 struct mgmt_pending_cmd *cmd = data; 7264 struct mgmt_cp_get_conn_info *cp = cmd->param; 7265 struct hci_conn *conn; 7266 int err; 7267 __le16 handle; 7268 7269 /* Make sure we are still connected */ 7270 if (cp->addr.type == BDADDR_BREDR) 7271 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, 7272 &cp->addr.bdaddr); 7273 else 7274 conn = hci_conn_hash_lookup_ba(hdev, LE_LINK, &cp->addr.bdaddr); 7275 7276 if (!conn || conn->state != BT_CONNECTED) 7277 return MGMT_STATUS_NOT_CONNECTED; 7278 7279 cmd->user_data = conn; 7280 handle = cpu_to_le16(conn->handle); 7281 7282 /* Refresh RSSI each time */ 7283 err = hci_read_rssi_sync(hdev, handle); 7284 7285 /* For LE links TX power does not change thus we don't need to 7286 * query for it once value is known. 7287 */ 7288 if (!err && (!bdaddr_type_is_le(cp->addr.type) || 7289 conn->tx_power == HCI_TX_POWER_INVALID)) 7290 err = hci_read_tx_power_sync(hdev, handle, 0x00); 7291 7292 /* Max TX power needs to be read only once per connection */ 7293 if (!err && conn->max_tx_power == HCI_TX_POWER_INVALID) 7294 err = hci_read_tx_power_sync(hdev, handle, 0x01); 7295 7296 return err; 7297 } 7298 7299 static int get_conn_info(struct sock *sk, struct hci_dev *hdev, void *data, 7300 u16 len) 7301 { 7302 struct mgmt_cp_get_conn_info *cp = data; 7303 struct mgmt_rp_get_conn_info rp; 7304 struct hci_conn *conn; 7305 unsigned long conn_info_age; 7306 int err = 0; 7307 7308 bt_dev_dbg(hdev, "sock %p", sk); 7309 7310 memset(&rp, 0, sizeof(rp)); 7311 bacpy(&rp.addr.bdaddr, &cp->addr.bdaddr); 7312 rp.addr.type = cp->addr.type; 7313 7314 if (!bdaddr_type_is_valid(cp->addr.type)) 7315 return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_GET_CONN_INFO, 7316 MGMT_STATUS_INVALID_PARAMS, 7317 &rp, sizeof(rp)); 7318 7319 hci_dev_lock(hdev); 7320 7321 if (!hdev_is_powered(hdev)) { 7322 err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_GET_CONN_INFO, 7323 MGMT_STATUS_NOT_POWERED, &rp, 7324 sizeof(rp)); 7325 goto unlock; 7326 } 7327 7328 if (cp->addr.type == BDADDR_BREDR) 7329 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, 7330 &cp->addr.bdaddr); 7331 else 7332 conn = hci_conn_hash_lookup_ba(hdev, LE_LINK, &cp->addr.bdaddr); 7333 7334 if (!conn || conn->state != BT_CONNECTED) { 7335 err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_GET_CONN_INFO, 7336 MGMT_STATUS_NOT_CONNECTED, &rp, 7337 sizeof(rp)); 7338 goto unlock; 7339 } 7340 7341 /* To avoid client trying to guess when to poll again for information we 7342 * calculate conn info age as random value between min/max set in hdev. 7343 */ 7344 conn_info_age = get_random_u32_inclusive(hdev->conn_info_min_age, 7345 hdev->conn_info_max_age - 1); 7346 7347 /* Query controller to refresh cached values if they are too old or were 7348 * never read. 7349 */ 7350 if (time_after(jiffies, conn->conn_info_timestamp + 7351 msecs_to_jiffies(conn_info_age)) || 7352 !conn->conn_info_timestamp) { 7353 struct mgmt_pending_cmd *cmd; 7354 7355 cmd = mgmt_pending_new(sk, MGMT_OP_GET_CONN_INFO, hdev, data, 7356 len); 7357 if (!cmd) { 7358 err = -ENOMEM; 7359 } else { 7360 err = hci_cmd_sync_queue(hdev, get_conn_info_sync, 7361 cmd, get_conn_info_complete); 7362 } 7363 7364 if (err < 0) { 7365 mgmt_cmd_complete(sk, hdev->id, MGMT_OP_GET_CONN_INFO, 7366 MGMT_STATUS_FAILED, &rp, sizeof(rp)); 7367 7368 if (cmd) 7369 mgmt_pending_free(cmd); 7370 7371 goto unlock; 7372 } 7373 7374 conn->conn_info_timestamp = jiffies; 7375 } else { 7376 /* Cache is valid, just reply with values cached in hci_conn */ 7377 rp.rssi = conn->rssi; 7378 rp.tx_power = conn->tx_power; 7379 rp.max_tx_power = conn->max_tx_power; 7380 7381 err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_GET_CONN_INFO, 7382 MGMT_STATUS_SUCCESS, &rp, sizeof(rp)); 7383 } 7384 7385 unlock: 7386 hci_dev_unlock(hdev); 7387 return err; 7388 } 7389 7390 static void get_clock_info_complete(struct hci_dev *hdev, void *data, int err) 7391 { 7392 struct mgmt_pending_cmd *cmd = data; 7393 struct mgmt_cp_get_clock_info *cp = cmd->param; 7394 struct mgmt_rp_get_clock_info rp; 7395 struct hci_conn *conn = cmd->user_data; 7396 u8 status = mgmt_status(err); 7397 7398 bt_dev_dbg(hdev, "err %d", err); 7399 7400 memset(&rp, 0, sizeof(rp)); 7401 bacpy(&rp.addr.bdaddr, &cp->addr.bdaddr); 7402 rp.addr.type = cp->addr.type; 7403 7404 if (err) 7405 goto complete; 7406 7407 rp.local_clock = cpu_to_le32(hdev->clock); 7408 7409 if (conn) { 7410 rp.piconet_clock = cpu_to_le32(conn->clock); 7411 rp.accuracy = cpu_to_le16(conn->clock_accuracy); 7412 } 7413 7414 complete: 7415 mgmt_cmd_complete(cmd->sk, cmd->index, cmd->opcode, status, &rp, 7416 sizeof(rp)); 7417 7418 mgmt_pending_free(cmd); 7419 } 7420 7421 static int get_clock_info_sync(struct hci_dev *hdev, void *data) 7422 { 7423 struct mgmt_pending_cmd *cmd = data; 7424 struct mgmt_cp_get_clock_info *cp = cmd->param; 7425 struct hci_cp_read_clock hci_cp; 7426 struct hci_conn *conn; 7427 7428 memset(&hci_cp, 0, sizeof(hci_cp)); 7429 hci_read_clock_sync(hdev, &hci_cp); 7430 7431 /* Make sure connection still exists */ 7432 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->addr.bdaddr); 7433 if (!conn || conn->state != BT_CONNECTED) 7434 return MGMT_STATUS_NOT_CONNECTED; 7435 7436 cmd->user_data = conn; 7437 hci_cp.handle = cpu_to_le16(conn->handle); 7438 hci_cp.which = 0x01; /* Piconet clock */ 7439 7440 return hci_read_clock_sync(hdev, &hci_cp); 7441 } 7442 7443 static int get_clock_info(struct sock *sk, struct hci_dev *hdev, void *data, 7444 u16 len) 7445 { 7446 struct mgmt_cp_get_clock_info *cp = data; 7447 struct mgmt_rp_get_clock_info rp; 7448 struct mgmt_pending_cmd *cmd; 7449 struct hci_conn *conn; 7450 int err; 7451 7452 bt_dev_dbg(hdev, "sock %p", sk); 7453 7454 memset(&rp, 0, sizeof(rp)); 7455 bacpy(&rp.addr.bdaddr, &cp->addr.bdaddr); 7456 rp.addr.type = cp->addr.type; 7457 7458 if (cp->addr.type != BDADDR_BREDR) 7459 return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_GET_CLOCK_INFO, 7460 MGMT_STATUS_INVALID_PARAMS, 7461 &rp, sizeof(rp)); 7462 7463 hci_dev_lock(hdev); 7464 7465 if (!hdev_is_powered(hdev)) { 7466 err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_GET_CLOCK_INFO, 7467 MGMT_STATUS_NOT_POWERED, &rp, 7468 sizeof(rp)); 7469 goto unlock; 7470 } 7471 7472 if (bacmp(&cp->addr.bdaddr, BDADDR_ANY)) { 7473 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, 7474 &cp->addr.bdaddr); 7475 if (!conn || conn->state != BT_CONNECTED) { 7476 err = mgmt_cmd_complete(sk, hdev->id, 7477 MGMT_OP_GET_CLOCK_INFO, 7478 MGMT_STATUS_NOT_CONNECTED, 7479 &rp, sizeof(rp)); 7480 goto unlock; 7481 } 7482 } else { 7483 conn = NULL; 7484 } 7485 7486 cmd = mgmt_pending_new(sk, MGMT_OP_GET_CLOCK_INFO, hdev, data, len); 7487 if (!cmd) 7488 err = -ENOMEM; 7489 else 7490 err = hci_cmd_sync_queue(hdev, get_clock_info_sync, cmd, 7491 get_clock_info_complete); 7492 7493 if (err < 0) { 7494 err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_GET_CLOCK_INFO, 7495 MGMT_STATUS_FAILED, &rp, sizeof(rp)); 7496 7497 if (cmd) 7498 mgmt_pending_free(cmd); 7499 } 7500 7501 7502 unlock: 7503 hci_dev_unlock(hdev); 7504 return err; 7505 } 7506 7507 static bool is_connected(struct hci_dev *hdev, bdaddr_t *addr, u8 type) 7508 { 7509 struct hci_conn *conn; 7510 7511 conn = hci_conn_hash_lookup_ba(hdev, LE_LINK, addr); 7512 if (!conn) 7513 return false; 7514 7515 if (conn->dst_type != type) 7516 return false; 7517 7518 if (conn->state != BT_CONNECTED) 7519 return false; 7520 7521 return true; 7522 } 7523 7524 /* This function requires the caller holds hdev->lock */ 7525 static int hci_conn_params_set(struct hci_dev *hdev, bdaddr_t *addr, 7526 u8 addr_type, u8 auto_connect) 7527 { 7528 struct hci_conn_params *params; 7529 7530 params = hci_conn_params_add(hdev, addr, addr_type); 7531 if (!params) 7532 return -EIO; 7533 7534 if (params->auto_connect == auto_connect) 7535 return 0; 7536 7537 hci_pend_le_list_del_init(params); 7538 7539 switch (auto_connect) { 7540 case HCI_AUTO_CONN_DISABLED: 7541 case HCI_AUTO_CONN_LINK_LOSS: 7542 /* If auto connect is being disabled when we're trying to 7543 * connect to device, keep connecting. 7544 */ 7545 if (params->explicit_connect) 7546 hci_pend_le_list_add(params, &hdev->pend_le_conns); 7547 break; 7548 case HCI_AUTO_CONN_REPORT: 7549 if (params->explicit_connect) 7550 hci_pend_le_list_add(params, &hdev->pend_le_conns); 7551 else 7552 hci_pend_le_list_add(params, &hdev->pend_le_reports); 7553 break; 7554 case HCI_AUTO_CONN_DIRECT: 7555 case HCI_AUTO_CONN_ALWAYS: 7556 if (!is_connected(hdev, addr, addr_type)) 7557 hci_pend_le_list_add(params, &hdev->pend_le_conns); 7558 break; 7559 } 7560 7561 params->auto_connect = auto_connect; 7562 7563 bt_dev_dbg(hdev, "addr %pMR (type %u) auto_connect %u", 7564 addr, addr_type, auto_connect); 7565 7566 return 0; 7567 } 7568 7569 static void device_added(struct sock *sk, struct hci_dev *hdev, 7570 bdaddr_t *bdaddr, u8 type, u8 action) 7571 { 7572 struct mgmt_ev_device_added ev; 7573 7574 bacpy(&ev.addr.bdaddr, bdaddr); 7575 ev.addr.type = type; 7576 ev.action = action; 7577 7578 mgmt_event(MGMT_EV_DEVICE_ADDED, hdev, &ev, sizeof(ev), sk); 7579 } 7580 7581 static int add_device_sync(struct hci_dev *hdev, void *data) 7582 { 7583 return hci_update_passive_scan_sync(hdev); 7584 } 7585 7586 static int add_device(struct sock *sk, struct hci_dev *hdev, 7587 void *data, u16 len) 7588 { 7589 struct mgmt_cp_add_device *cp = data; 7590 u8 auto_conn, addr_type; 7591 struct hci_conn_params *params; 7592 int err; 7593 u32 current_flags = 0; 7594 u32 supported_flags; 7595 7596 bt_dev_dbg(hdev, "sock %p", sk); 7597 7598 if (!bdaddr_type_is_valid(cp->addr.type) || 7599 !bacmp(&cp->addr.bdaddr, BDADDR_ANY)) 7600 return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_ADD_DEVICE, 7601 MGMT_STATUS_INVALID_PARAMS, 7602 &cp->addr, sizeof(cp->addr)); 7603 7604 if (cp->action != 0x00 && cp->action != 0x01 && cp->action != 0x02) 7605 return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_ADD_DEVICE, 7606 MGMT_STATUS_INVALID_PARAMS, 7607 &cp->addr, sizeof(cp->addr)); 7608 7609 hci_dev_lock(hdev); 7610 7611 if (cp->addr.type == BDADDR_BREDR) { 7612 /* Only incoming connections action is supported for now */ 7613 if (cp->action != 0x01) { 7614 err = mgmt_cmd_complete(sk, hdev->id, 7615 MGMT_OP_ADD_DEVICE, 7616 MGMT_STATUS_INVALID_PARAMS, 7617 &cp->addr, sizeof(cp->addr)); 7618 goto unlock; 7619 } 7620 7621 err = hci_bdaddr_list_add_with_flags(&hdev->accept_list, 7622 &cp->addr.bdaddr, 7623 cp->addr.type, 0); 7624 if (err) 7625 goto unlock; 7626 7627 hci_update_scan(hdev); 7628 7629 goto added; 7630 } 7631 7632 addr_type = le_addr_type(cp->addr.type); 7633 7634 if (cp->action == 0x02) 7635 auto_conn = HCI_AUTO_CONN_ALWAYS; 7636 else if (cp->action == 0x01) 7637 auto_conn = HCI_AUTO_CONN_DIRECT; 7638 else 7639 auto_conn = HCI_AUTO_CONN_REPORT; 7640 7641 /* Kernel internally uses conn_params with resolvable private 7642 * address, but Add Device allows only identity addresses. 7643 * Make sure it is enforced before calling 7644 * hci_conn_params_lookup. 7645 */ 7646 if (!hci_is_identity_address(&cp->addr.bdaddr, addr_type)) { 7647 err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_ADD_DEVICE, 7648 MGMT_STATUS_INVALID_PARAMS, 7649 &cp->addr, sizeof(cp->addr)); 7650 goto unlock; 7651 } 7652 7653 /* If the connection parameters don't exist for this device, 7654 * they will be created and configured with defaults. 7655 */ 7656 if (hci_conn_params_set(hdev, &cp->addr.bdaddr, addr_type, 7657 auto_conn) < 0) { 7658 err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_ADD_DEVICE, 7659 MGMT_STATUS_FAILED, &cp->addr, 7660 sizeof(cp->addr)); 7661 goto unlock; 7662 } else { 7663 params = hci_conn_params_lookup(hdev, &cp->addr.bdaddr, 7664 addr_type); 7665 if (params) 7666 current_flags = params->flags; 7667 } 7668 7669 err = hci_cmd_sync_queue(hdev, add_device_sync, NULL, NULL); 7670 if (err < 0) 7671 goto unlock; 7672 7673 added: 7674 device_added(sk, hdev, &cp->addr.bdaddr, cp->addr.type, cp->action); 7675 supported_flags = hdev->conn_flags; 7676 device_flags_changed(NULL, hdev, &cp->addr.bdaddr, cp->addr.type, 7677 supported_flags, current_flags); 7678 7679 err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_ADD_DEVICE, 7680 MGMT_STATUS_SUCCESS, &cp->addr, 7681 sizeof(cp->addr)); 7682 7683 unlock: 7684 hci_dev_unlock(hdev); 7685 return err; 7686 } 7687 7688 static void device_removed(struct sock *sk, struct hci_dev *hdev, 7689 bdaddr_t *bdaddr, u8 type) 7690 { 7691 struct mgmt_ev_device_removed ev; 7692 7693 bacpy(&ev.addr.bdaddr, bdaddr); 7694 ev.addr.type = type; 7695 7696 mgmt_event(MGMT_EV_DEVICE_REMOVED, hdev, &ev, sizeof(ev), sk); 7697 } 7698 7699 static int remove_device_sync(struct hci_dev *hdev, void *data) 7700 { 7701 return hci_update_passive_scan_sync(hdev); 7702 } 7703 7704 static int remove_device(struct sock *sk, struct hci_dev *hdev, 7705 void *data, u16 len) 7706 { 7707 struct mgmt_cp_remove_device *cp = data; 7708 int err; 7709 7710 bt_dev_dbg(hdev, "sock %p", sk); 7711 7712 hci_dev_lock(hdev); 7713 7714 if (bacmp(&cp->addr.bdaddr, BDADDR_ANY)) { 7715 struct hci_conn_params *params; 7716 u8 addr_type; 7717 7718 if (!bdaddr_type_is_valid(cp->addr.type)) { 7719 err = mgmt_cmd_complete(sk, hdev->id, 7720 MGMT_OP_REMOVE_DEVICE, 7721 MGMT_STATUS_INVALID_PARAMS, 7722 &cp->addr, sizeof(cp->addr)); 7723 goto unlock; 7724 } 7725 7726 if (cp->addr.type == BDADDR_BREDR) { 7727 err = hci_bdaddr_list_del(&hdev->accept_list, 7728 &cp->addr.bdaddr, 7729 cp->addr.type); 7730 if (err) { 7731 err = mgmt_cmd_complete(sk, hdev->id, 7732 MGMT_OP_REMOVE_DEVICE, 7733 MGMT_STATUS_INVALID_PARAMS, 7734 &cp->addr, 7735 sizeof(cp->addr)); 7736 goto unlock; 7737 } 7738 7739 hci_update_scan(hdev); 7740 7741 device_removed(sk, hdev, &cp->addr.bdaddr, 7742 cp->addr.type); 7743 goto complete; 7744 } 7745 7746 addr_type = le_addr_type(cp->addr.type); 7747 7748 /* Kernel internally uses conn_params with resolvable private 7749 * address, but Remove Device allows only identity addresses. 7750 * Make sure it is enforced before calling 7751 * hci_conn_params_lookup. 7752 */ 7753 if (!hci_is_identity_address(&cp->addr.bdaddr, addr_type)) { 7754 err = mgmt_cmd_complete(sk, hdev->id, 7755 MGMT_OP_REMOVE_DEVICE, 7756 MGMT_STATUS_INVALID_PARAMS, 7757 &cp->addr, sizeof(cp->addr)); 7758 goto unlock; 7759 } 7760 7761 params = hci_conn_params_lookup(hdev, &cp->addr.bdaddr, 7762 addr_type); 7763 if (!params) { 7764 err = mgmt_cmd_complete(sk, hdev->id, 7765 MGMT_OP_REMOVE_DEVICE, 7766 MGMT_STATUS_INVALID_PARAMS, 7767 &cp->addr, sizeof(cp->addr)); 7768 goto unlock; 7769 } 7770 7771 if (params->auto_connect == HCI_AUTO_CONN_DISABLED || 7772 params->auto_connect == HCI_AUTO_CONN_EXPLICIT) { 7773 err = mgmt_cmd_complete(sk, hdev->id, 7774 MGMT_OP_REMOVE_DEVICE, 7775 MGMT_STATUS_INVALID_PARAMS, 7776 &cp->addr, sizeof(cp->addr)); 7777 goto unlock; 7778 } 7779 7780 hci_conn_params_free(params); 7781 7782 device_removed(sk, hdev, &cp->addr.bdaddr, cp->addr.type); 7783 } else { 7784 struct hci_conn_params *p, *tmp; 7785 struct bdaddr_list *b, *btmp; 7786 7787 if (cp->addr.type) { 7788 err = mgmt_cmd_complete(sk, hdev->id, 7789 MGMT_OP_REMOVE_DEVICE, 7790 MGMT_STATUS_INVALID_PARAMS, 7791 &cp->addr, sizeof(cp->addr)); 7792 goto unlock; 7793 } 7794 7795 list_for_each_entry_safe(b, btmp, &hdev->accept_list, list) { 7796 device_removed(sk, hdev, &b->bdaddr, b->bdaddr_type); 7797 list_del(&b->list); 7798 kfree(b); 7799 } 7800 7801 hci_update_scan(hdev); 7802 7803 list_for_each_entry_safe(p, tmp, &hdev->le_conn_params, list) { 7804 if (p->auto_connect == HCI_AUTO_CONN_DISABLED) 7805 continue; 7806 device_removed(sk, hdev, &p->addr, p->addr_type); 7807 if (p->explicit_connect) { 7808 p->auto_connect = HCI_AUTO_CONN_EXPLICIT; 7809 continue; 7810 } 7811 hci_conn_params_free(p); 7812 } 7813 7814 bt_dev_dbg(hdev, "All LE connection parameters were removed"); 7815 } 7816 7817 hci_cmd_sync_queue(hdev, remove_device_sync, NULL, NULL); 7818 7819 complete: 7820 err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_REMOVE_DEVICE, 7821 MGMT_STATUS_SUCCESS, &cp->addr, 7822 sizeof(cp->addr)); 7823 unlock: 7824 hci_dev_unlock(hdev); 7825 return err; 7826 } 7827 7828 static int load_conn_param(struct sock *sk, struct hci_dev *hdev, void *data, 7829 u16 len) 7830 { 7831 struct mgmt_cp_load_conn_param *cp = data; 7832 const u16 max_param_count = ((U16_MAX - sizeof(*cp)) / 7833 sizeof(struct mgmt_conn_param)); 7834 u16 param_count, expected_len; 7835 int i; 7836 7837 if (!lmp_le_capable(hdev)) 7838 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_LOAD_CONN_PARAM, 7839 MGMT_STATUS_NOT_SUPPORTED); 7840 7841 param_count = __le16_to_cpu(cp->param_count); 7842 if (param_count > max_param_count) { 7843 bt_dev_err(hdev, "load_conn_param: too big param_count value %u", 7844 param_count); 7845 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_LOAD_CONN_PARAM, 7846 MGMT_STATUS_INVALID_PARAMS); 7847 } 7848 7849 expected_len = struct_size(cp, params, param_count); 7850 if (expected_len != len) { 7851 bt_dev_err(hdev, "load_conn_param: expected %u bytes, got %u bytes", 7852 expected_len, len); 7853 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_LOAD_CONN_PARAM, 7854 MGMT_STATUS_INVALID_PARAMS); 7855 } 7856 7857 bt_dev_dbg(hdev, "param_count %u", param_count); 7858 7859 hci_dev_lock(hdev); 7860 7861 hci_conn_params_clear_disabled(hdev); 7862 7863 for (i = 0; i < param_count; i++) { 7864 struct mgmt_conn_param *param = &cp->params[i]; 7865 struct hci_conn_params *hci_param; 7866 u16 min, max, latency, timeout; 7867 u8 addr_type; 7868 7869 bt_dev_dbg(hdev, "Adding %pMR (type %u)", ¶m->addr.bdaddr, 7870 param->addr.type); 7871 7872 if (param->addr.type == BDADDR_LE_PUBLIC) { 7873 addr_type = ADDR_LE_DEV_PUBLIC; 7874 } else if (param->addr.type == BDADDR_LE_RANDOM) { 7875 addr_type = ADDR_LE_DEV_RANDOM; 7876 } else { 7877 bt_dev_err(hdev, "ignoring invalid connection parameters"); 7878 continue; 7879 } 7880 7881 min = le16_to_cpu(param->min_interval); 7882 max = le16_to_cpu(param->max_interval); 7883 latency = le16_to_cpu(param->latency); 7884 timeout = le16_to_cpu(param->timeout); 7885 7886 bt_dev_dbg(hdev, "min 0x%04x max 0x%04x latency 0x%04x timeout 0x%04x", 7887 min, max, latency, timeout); 7888 7889 if (hci_check_conn_params(min, max, latency, timeout) < 0) { 7890 bt_dev_err(hdev, "ignoring invalid connection parameters"); 7891 continue; 7892 } 7893 7894 hci_param = hci_conn_params_add(hdev, ¶m->addr.bdaddr, 7895 addr_type); 7896 if (!hci_param) { 7897 bt_dev_err(hdev, "failed to add connection parameters"); 7898 continue; 7899 } 7900 7901 hci_param->conn_min_interval = min; 7902 hci_param->conn_max_interval = max; 7903 hci_param->conn_latency = latency; 7904 hci_param->supervision_timeout = timeout; 7905 } 7906 7907 hci_dev_unlock(hdev); 7908 7909 return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_LOAD_CONN_PARAM, 0, 7910 NULL, 0); 7911 } 7912 7913 static int set_external_config(struct sock *sk, struct hci_dev *hdev, 7914 void *data, u16 len) 7915 { 7916 struct mgmt_cp_set_external_config *cp = data; 7917 bool changed; 7918 int err; 7919 7920 bt_dev_dbg(hdev, "sock %p", sk); 7921 7922 if (hdev_is_powered(hdev)) 7923 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_EXTERNAL_CONFIG, 7924 MGMT_STATUS_REJECTED); 7925 7926 if (cp->config != 0x00 && cp->config != 0x01) 7927 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_EXTERNAL_CONFIG, 7928 MGMT_STATUS_INVALID_PARAMS); 7929 7930 if (!test_bit(HCI_QUIRK_EXTERNAL_CONFIG, &hdev->quirks)) 7931 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_EXTERNAL_CONFIG, 7932 MGMT_STATUS_NOT_SUPPORTED); 7933 7934 hci_dev_lock(hdev); 7935 7936 if (cp->config) 7937 changed = !hci_dev_test_and_set_flag(hdev, HCI_EXT_CONFIGURED); 7938 else 7939 changed = hci_dev_test_and_clear_flag(hdev, HCI_EXT_CONFIGURED); 7940 7941 err = send_options_rsp(sk, MGMT_OP_SET_EXTERNAL_CONFIG, hdev); 7942 if (err < 0) 7943 goto unlock; 7944 7945 if (!changed) 7946 goto unlock; 7947 7948 err = new_options(hdev, sk); 7949 7950 if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED) == is_configured(hdev)) { 7951 mgmt_index_removed(hdev); 7952 7953 if (hci_dev_test_and_change_flag(hdev, HCI_UNCONFIGURED)) { 7954 hci_dev_set_flag(hdev, HCI_CONFIG); 7955 hci_dev_set_flag(hdev, HCI_AUTO_OFF); 7956 7957 queue_work(hdev->req_workqueue, &hdev->power_on); 7958 } else { 7959 set_bit(HCI_RAW, &hdev->flags); 7960 mgmt_index_added(hdev); 7961 } 7962 } 7963 7964 unlock: 7965 hci_dev_unlock(hdev); 7966 return err; 7967 } 7968 7969 static int set_public_address(struct sock *sk, struct hci_dev *hdev, 7970 void *data, u16 len) 7971 { 7972 struct mgmt_cp_set_public_address *cp = data; 7973 bool changed; 7974 int err; 7975 7976 bt_dev_dbg(hdev, "sock %p", sk); 7977 7978 if (hdev_is_powered(hdev)) 7979 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_PUBLIC_ADDRESS, 7980 MGMT_STATUS_REJECTED); 7981 7982 if (!bacmp(&cp->bdaddr, BDADDR_ANY)) 7983 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_PUBLIC_ADDRESS, 7984 MGMT_STATUS_INVALID_PARAMS); 7985 7986 if (!hdev->set_bdaddr) 7987 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_PUBLIC_ADDRESS, 7988 MGMT_STATUS_NOT_SUPPORTED); 7989 7990 hci_dev_lock(hdev); 7991 7992 changed = !!bacmp(&hdev->public_addr, &cp->bdaddr); 7993 bacpy(&hdev->public_addr, &cp->bdaddr); 7994 7995 err = send_options_rsp(sk, MGMT_OP_SET_PUBLIC_ADDRESS, hdev); 7996 if (err < 0) 7997 goto unlock; 7998 7999 if (!changed) 8000 goto unlock; 8001 8002 if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED)) 8003 err = new_options(hdev, sk); 8004 8005 if (is_configured(hdev)) { 8006 mgmt_index_removed(hdev); 8007 8008 hci_dev_clear_flag(hdev, HCI_UNCONFIGURED); 8009 8010 hci_dev_set_flag(hdev, HCI_CONFIG); 8011 hci_dev_set_flag(hdev, HCI_AUTO_OFF); 8012 8013 queue_work(hdev->req_workqueue, &hdev->power_on); 8014 } 8015 8016 unlock: 8017 hci_dev_unlock(hdev); 8018 return err; 8019 } 8020 8021 static void read_local_oob_ext_data_complete(struct hci_dev *hdev, void *data, 8022 int err) 8023 { 8024 const struct mgmt_cp_read_local_oob_ext_data *mgmt_cp; 8025 struct mgmt_rp_read_local_oob_ext_data *mgmt_rp; 8026 u8 *h192, *r192, *h256, *r256; 8027 struct mgmt_pending_cmd *cmd = data; 8028 struct sk_buff *skb = cmd->skb; 8029 u8 status = mgmt_status(err); 8030 u16 eir_len; 8031 8032 if (cmd != pending_find(MGMT_OP_READ_LOCAL_OOB_EXT_DATA, hdev)) 8033 return; 8034 8035 if (!status) { 8036 if (!skb) 8037 status = MGMT_STATUS_FAILED; 8038 else if (IS_ERR(skb)) 8039 status = mgmt_status(PTR_ERR(skb)); 8040 else 8041 status = mgmt_status(skb->data[0]); 8042 } 8043 8044 bt_dev_dbg(hdev, "status %u", status); 8045 8046 mgmt_cp = cmd->param; 8047 8048 if (status) { 8049 status = mgmt_status(status); 8050 eir_len = 0; 8051 8052 h192 = NULL; 8053 r192 = NULL; 8054 h256 = NULL; 8055 r256 = NULL; 8056 } else if (!bredr_sc_enabled(hdev)) { 8057 struct hci_rp_read_local_oob_data *rp; 8058 8059 if (skb->len != sizeof(*rp)) { 8060 status = MGMT_STATUS_FAILED; 8061 eir_len = 0; 8062 } else { 8063 status = MGMT_STATUS_SUCCESS; 8064 rp = (void *)skb->data; 8065 8066 eir_len = 5 + 18 + 18; 8067 h192 = rp->hash; 8068 r192 = rp->rand; 8069 h256 = NULL; 8070 r256 = NULL; 8071 } 8072 } else { 8073 struct hci_rp_read_local_oob_ext_data *rp; 8074 8075 if (skb->len != sizeof(*rp)) { 8076 status = MGMT_STATUS_FAILED; 8077 eir_len = 0; 8078 } else { 8079 status = MGMT_STATUS_SUCCESS; 8080 rp = (void *)skb->data; 8081 8082 if (hci_dev_test_flag(hdev, HCI_SC_ONLY)) { 8083 eir_len = 5 + 18 + 18; 8084 h192 = NULL; 8085 r192 = NULL; 8086 } else { 8087 eir_len = 5 + 18 + 18 + 18 + 18; 8088 h192 = rp->hash192; 8089 r192 = rp->rand192; 8090 } 8091 8092 h256 = rp->hash256; 8093 r256 = rp->rand256; 8094 } 8095 } 8096 8097 mgmt_rp = kmalloc(sizeof(*mgmt_rp) + eir_len, GFP_KERNEL); 8098 if (!mgmt_rp) 8099 goto done; 8100 8101 if (eir_len == 0) 8102 goto send_rsp; 8103 8104 eir_len = eir_append_data(mgmt_rp->eir, 0, EIR_CLASS_OF_DEV, 8105 hdev->dev_class, 3); 8106 8107 if (h192 && r192) { 8108 eir_len = eir_append_data(mgmt_rp->eir, eir_len, 8109 EIR_SSP_HASH_C192, h192, 16); 8110 eir_len = eir_append_data(mgmt_rp->eir, eir_len, 8111 EIR_SSP_RAND_R192, r192, 16); 8112 } 8113 8114 if (h256 && r256) { 8115 eir_len = eir_append_data(mgmt_rp->eir, eir_len, 8116 EIR_SSP_HASH_C256, h256, 16); 8117 eir_len = eir_append_data(mgmt_rp->eir, eir_len, 8118 EIR_SSP_RAND_R256, r256, 16); 8119 } 8120 8121 send_rsp: 8122 mgmt_rp->type = mgmt_cp->type; 8123 mgmt_rp->eir_len = cpu_to_le16(eir_len); 8124 8125 err = mgmt_cmd_complete(cmd->sk, hdev->id, 8126 MGMT_OP_READ_LOCAL_OOB_EXT_DATA, status, 8127 mgmt_rp, sizeof(*mgmt_rp) + eir_len); 8128 if (err < 0 || status) 8129 goto done; 8130 8131 hci_sock_set_flag(cmd->sk, HCI_MGMT_OOB_DATA_EVENTS); 8132 8133 err = mgmt_limited_event(MGMT_EV_LOCAL_OOB_DATA_UPDATED, hdev, 8134 mgmt_rp, sizeof(*mgmt_rp) + eir_len, 8135 HCI_MGMT_OOB_DATA_EVENTS, cmd->sk); 8136 done: 8137 if (skb && !IS_ERR(skb)) 8138 kfree_skb(skb); 8139 8140 kfree(mgmt_rp); 8141 mgmt_pending_remove(cmd); 8142 } 8143 8144 static int read_local_ssp_oob_req(struct hci_dev *hdev, struct sock *sk, 8145 struct mgmt_cp_read_local_oob_ext_data *cp) 8146 { 8147 struct mgmt_pending_cmd *cmd; 8148 int err; 8149 8150 cmd = mgmt_pending_add(sk, MGMT_OP_READ_LOCAL_OOB_EXT_DATA, hdev, 8151 cp, sizeof(*cp)); 8152 if (!cmd) 8153 return -ENOMEM; 8154 8155 err = hci_cmd_sync_queue(hdev, read_local_oob_data_sync, cmd, 8156 read_local_oob_ext_data_complete); 8157 8158 if (err < 0) { 8159 mgmt_pending_remove(cmd); 8160 return err; 8161 } 8162 8163 return 0; 8164 } 8165 8166 static int read_local_oob_ext_data(struct sock *sk, struct hci_dev *hdev, 8167 void *data, u16 data_len) 8168 { 8169 struct mgmt_cp_read_local_oob_ext_data *cp = data; 8170 struct mgmt_rp_read_local_oob_ext_data *rp; 8171 size_t rp_len; 8172 u16 eir_len; 8173 u8 status, flags, role, addr[7], hash[16], rand[16]; 8174 int err; 8175 8176 bt_dev_dbg(hdev, "sock %p", sk); 8177 8178 if (hdev_is_powered(hdev)) { 8179 switch (cp->type) { 8180 case BIT(BDADDR_BREDR): 8181 status = mgmt_bredr_support(hdev); 8182 if (status) 8183 eir_len = 0; 8184 else 8185 eir_len = 5; 8186 break; 8187 case (BIT(BDADDR_LE_PUBLIC) | BIT(BDADDR_LE_RANDOM)): 8188 status = mgmt_le_support(hdev); 8189 if (status) 8190 eir_len = 0; 8191 else 8192 eir_len = 9 + 3 + 18 + 18 + 3; 8193 break; 8194 default: 8195 status = MGMT_STATUS_INVALID_PARAMS; 8196 eir_len = 0; 8197 break; 8198 } 8199 } else { 8200 status = MGMT_STATUS_NOT_POWERED; 8201 eir_len = 0; 8202 } 8203 8204 rp_len = sizeof(*rp) + eir_len; 8205 rp = kmalloc(rp_len, GFP_ATOMIC); 8206 if (!rp) 8207 return -ENOMEM; 8208 8209 if (!status && !lmp_ssp_capable(hdev)) { 8210 status = MGMT_STATUS_NOT_SUPPORTED; 8211 eir_len = 0; 8212 } 8213 8214 if (status) 8215 goto complete; 8216 8217 hci_dev_lock(hdev); 8218 8219 eir_len = 0; 8220 switch (cp->type) { 8221 case BIT(BDADDR_BREDR): 8222 if (hci_dev_test_flag(hdev, HCI_SSP_ENABLED)) { 8223 err = read_local_ssp_oob_req(hdev, sk, cp); 8224 hci_dev_unlock(hdev); 8225 if (!err) 8226 goto done; 8227 8228 status = MGMT_STATUS_FAILED; 8229 goto complete; 8230 } else { 8231 eir_len = eir_append_data(rp->eir, eir_len, 8232 EIR_CLASS_OF_DEV, 8233 hdev->dev_class, 3); 8234 } 8235 break; 8236 case (BIT(BDADDR_LE_PUBLIC) | BIT(BDADDR_LE_RANDOM)): 8237 if (hci_dev_test_flag(hdev, HCI_SC_ENABLED) && 8238 smp_generate_oob(hdev, hash, rand) < 0) { 8239 hci_dev_unlock(hdev); 8240 status = MGMT_STATUS_FAILED; 8241 goto complete; 8242 } 8243 8244 /* This should return the active RPA, but since the RPA 8245 * is only programmed on demand, it is really hard to fill 8246 * this in at the moment. For now disallow retrieving 8247 * local out-of-band data when privacy is in use. 8248 * 8249 * Returning the identity address will not help here since 8250 * pairing happens before the identity resolving key is 8251 * known and thus the connection establishment happens 8252 * based on the RPA and not the identity address. 8253 */ 8254 if (hci_dev_test_flag(hdev, HCI_PRIVACY)) { 8255 hci_dev_unlock(hdev); 8256 status = MGMT_STATUS_REJECTED; 8257 goto complete; 8258 } 8259 8260 if (hci_dev_test_flag(hdev, HCI_FORCE_STATIC_ADDR) || 8261 !bacmp(&hdev->bdaddr, BDADDR_ANY) || 8262 (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED) && 8263 bacmp(&hdev->static_addr, BDADDR_ANY))) { 8264 memcpy(addr, &hdev->static_addr, 6); 8265 addr[6] = 0x01; 8266 } else { 8267 memcpy(addr, &hdev->bdaddr, 6); 8268 addr[6] = 0x00; 8269 } 8270 8271 eir_len = eir_append_data(rp->eir, eir_len, EIR_LE_BDADDR, 8272 addr, sizeof(addr)); 8273 8274 if (hci_dev_test_flag(hdev, HCI_ADVERTISING)) 8275 role = 0x02; 8276 else 8277 role = 0x01; 8278 8279 eir_len = eir_append_data(rp->eir, eir_len, EIR_LE_ROLE, 8280 &role, sizeof(role)); 8281 8282 if (hci_dev_test_flag(hdev, HCI_SC_ENABLED)) { 8283 eir_len = eir_append_data(rp->eir, eir_len, 8284 EIR_LE_SC_CONFIRM, 8285 hash, sizeof(hash)); 8286 8287 eir_len = eir_append_data(rp->eir, eir_len, 8288 EIR_LE_SC_RANDOM, 8289 rand, sizeof(rand)); 8290 } 8291 8292 flags = mgmt_get_adv_discov_flags(hdev); 8293 8294 if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) 8295 flags |= LE_AD_NO_BREDR; 8296 8297 eir_len = eir_append_data(rp->eir, eir_len, EIR_FLAGS, 8298 &flags, sizeof(flags)); 8299 break; 8300 } 8301 8302 hci_dev_unlock(hdev); 8303 8304 hci_sock_set_flag(sk, HCI_MGMT_OOB_DATA_EVENTS); 8305 8306 status = MGMT_STATUS_SUCCESS; 8307 8308 complete: 8309 rp->type = cp->type; 8310 rp->eir_len = cpu_to_le16(eir_len); 8311 8312 err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_READ_LOCAL_OOB_EXT_DATA, 8313 status, rp, sizeof(*rp) + eir_len); 8314 if (err < 0 || status) 8315 goto done; 8316 8317 err = mgmt_limited_event(MGMT_EV_LOCAL_OOB_DATA_UPDATED, hdev, 8318 rp, sizeof(*rp) + eir_len, 8319 HCI_MGMT_OOB_DATA_EVENTS, sk); 8320 8321 done: 8322 kfree(rp); 8323 8324 return err; 8325 } 8326 8327 static u32 get_supported_adv_flags(struct hci_dev *hdev) 8328 { 8329 u32 flags = 0; 8330 8331 flags |= MGMT_ADV_FLAG_CONNECTABLE; 8332 flags |= MGMT_ADV_FLAG_DISCOV; 8333 flags |= MGMT_ADV_FLAG_LIMITED_DISCOV; 8334 flags |= MGMT_ADV_FLAG_MANAGED_FLAGS; 8335 flags |= MGMT_ADV_FLAG_APPEARANCE; 8336 flags |= MGMT_ADV_FLAG_LOCAL_NAME; 8337 flags |= MGMT_ADV_PARAM_DURATION; 8338 flags |= MGMT_ADV_PARAM_TIMEOUT; 8339 flags |= MGMT_ADV_PARAM_INTERVALS; 8340 flags |= MGMT_ADV_PARAM_TX_POWER; 8341 flags |= MGMT_ADV_PARAM_SCAN_RSP; 8342 8343 /* In extended adv TX_POWER returned from Set Adv Param 8344 * will be always valid. 8345 */ 8346 if (hdev->adv_tx_power != HCI_TX_POWER_INVALID || ext_adv_capable(hdev)) 8347 flags |= MGMT_ADV_FLAG_TX_POWER; 8348 8349 if (ext_adv_capable(hdev)) { 8350 flags |= MGMT_ADV_FLAG_SEC_1M; 8351 flags |= MGMT_ADV_FLAG_HW_OFFLOAD; 8352 flags |= MGMT_ADV_FLAG_CAN_SET_TX_POWER; 8353 8354 if (le_2m_capable(hdev)) 8355 flags |= MGMT_ADV_FLAG_SEC_2M; 8356 8357 if (le_coded_capable(hdev)) 8358 flags |= MGMT_ADV_FLAG_SEC_CODED; 8359 } 8360 8361 return flags; 8362 } 8363 8364 static int read_adv_features(struct sock *sk, struct hci_dev *hdev, 8365 void *data, u16 data_len) 8366 { 8367 struct mgmt_rp_read_adv_features *rp; 8368 size_t rp_len; 8369 int err; 8370 struct adv_info *adv_instance; 8371 u32 supported_flags; 8372 u8 *instance; 8373 8374 bt_dev_dbg(hdev, "sock %p", sk); 8375 8376 if (!lmp_le_capable(hdev)) 8377 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_READ_ADV_FEATURES, 8378 MGMT_STATUS_REJECTED); 8379 8380 hci_dev_lock(hdev); 8381 8382 rp_len = sizeof(*rp) + hdev->adv_instance_cnt; 8383 rp = kmalloc(rp_len, GFP_ATOMIC); 8384 if (!rp) { 8385 hci_dev_unlock(hdev); 8386 return -ENOMEM; 8387 } 8388 8389 supported_flags = get_supported_adv_flags(hdev); 8390 8391 rp->supported_flags = cpu_to_le32(supported_flags); 8392 rp->max_adv_data_len = max_adv_len(hdev); 8393 rp->max_scan_rsp_len = max_adv_len(hdev); 8394 rp->max_instances = hdev->le_num_of_adv_sets; 8395 rp->num_instances = hdev->adv_instance_cnt; 8396 8397 instance = rp->instance; 8398 list_for_each_entry(adv_instance, &hdev->adv_instances, list) { 8399 /* Only instances 1-le_num_of_adv_sets are externally visible */ 8400 if (adv_instance->instance <= hdev->adv_instance_cnt) { 8401 *instance = adv_instance->instance; 8402 instance++; 8403 } else { 8404 rp->num_instances--; 8405 rp_len--; 8406 } 8407 } 8408 8409 hci_dev_unlock(hdev); 8410 8411 err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_READ_ADV_FEATURES, 8412 MGMT_STATUS_SUCCESS, rp, rp_len); 8413 8414 kfree(rp); 8415 8416 return err; 8417 } 8418 8419 static u8 calculate_name_len(struct hci_dev *hdev) 8420 { 8421 u8 buf[HCI_MAX_SHORT_NAME_LENGTH + 2]; /* len + type + name */ 8422 8423 return eir_append_local_name(hdev, buf, 0); 8424 } 8425 8426 static u8 tlv_data_max_len(struct hci_dev *hdev, u32 adv_flags, 8427 bool is_adv_data) 8428 { 8429 u8 max_len = max_adv_len(hdev); 8430 8431 if (is_adv_data) { 8432 if (adv_flags & (MGMT_ADV_FLAG_DISCOV | 8433 MGMT_ADV_FLAG_LIMITED_DISCOV | 8434 MGMT_ADV_FLAG_MANAGED_FLAGS)) 8435 max_len -= 3; 8436 8437 if (adv_flags & MGMT_ADV_FLAG_TX_POWER) 8438 max_len -= 3; 8439 } else { 8440 if (adv_flags & MGMT_ADV_FLAG_LOCAL_NAME) 8441 max_len -= calculate_name_len(hdev); 8442 8443 if (adv_flags & (MGMT_ADV_FLAG_APPEARANCE)) 8444 max_len -= 4; 8445 } 8446 8447 return max_len; 8448 } 8449 8450 static bool flags_managed(u32 adv_flags) 8451 { 8452 return adv_flags & (MGMT_ADV_FLAG_DISCOV | 8453 MGMT_ADV_FLAG_LIMITED_DISCOV | 8454 MGMT_ADV_FLAG_MANAGED_FLAGS); 8455 } 8456 8457 static bool tx_power_managed(u32 adv_flags) 8458 { 8459 return adv_flags & MGMT_ADV_FLAG_TX_POWER; 8460 } 8461 8462 static bool name_managed(u32 adv_flags) 8463 { 8464 return adv_flags & MGMT_ADV_FLAG_LOCAL_NAME; 8465 } 8466 8467 static bool appearance_managed(u32 adv_flags) 8468 { 8469 return adv_flags & MGMT_ADV_FLAG_APPEARANCE; 8470 } 8471 8472 static bool tlv_data_is_valid(struct hci_dev *hdev, u32 adv_flags, u8 *data, 8473 u8 len, bool is_adv_data) 8474 { 8475 int i, cur_len; 8476 u8 max_len; 8477 8478 max_len = tlv_data_max_len(hdev, adv_flags, is_adv_data); 8479 8480 if (len > max_len) 8481 return false; 8482 8483 /* Make sure that the data is correctly formatted. */ 8484 for (i = 0; i < len; i += (cur_len + 1)) { 8485 cur_len = data[i]; 8486 8487 if (!cur_len) 8488 continue; 8489 8490 if (data[i + 1] == EIR_FLAGS && 8491 (!is_adv_data || flags_managed(adv_flags))) 8492 return false; 8493 8494 if (data[i + 1] == EIR_TX_POWER && tx_power_managed(adv_flags)) 8495 return false; 8496 8497 if (data[i + 1] == EIR_NAME_COMPLETE && name_managed(adv_flags)) 8498 return false; 8499 8500 if (data[i + 1] == EIR_NAME_SHORT && name_managed(adv_flags)) 8501 return false; 8502 8503 if (data[i + 1] == EIR_APPEARANCE && 8504 appearance_managed(adv_flags)) 8505 return false; 8506 8507 /* If the current field length would exceed the total data 8508 * length, then it's invalid. 8509 */ 8510 if (i + cur_len >= len) 8511 return false; 8512 } 8513 8514 return true; 8515 } 8516 8517 static bool requested_adv_flags_are_valid(struct hci_dev *hdev, u32 adv_flags) 8518 { 8519 u32 supported_flags, phy_flags; 8520 8521 /* The current implementation only supports a subset of the specified 8522 * flags. Also need to check mutual exclusiveness of sec flags. 8523 */ 8524 supported_flags = get_supported_adv_flags(hdev); 8525 phy_flags = adv_flags & MGMT_ADV_FLAG_SEC_MASK; 8526 if (adv_flags & ~supported_flags || 8527 ((phy_flags && (phy_flags ^ (phy_flags & -phy_flags))))) 8528 return false; 8529 8530 return true; 8531 } 8532 8533 static bool adv_busy(struct hci_dev *hdev) 8534 { 8535 return pending_find(MGMT_OP_SET_LE, hdev); 8536 } 8537 8538 static void add_adv_complete(struct hci_dev *hdev, struct sock *sk, u8 instance, 8539 int err) 8540 { 8541 struct adv_info *adv, *n; 8542 8543 bt_dev_dbg(hdev, "err %d", err); 8544 8545 hci_dev_lock(hdev); 8546 8547 list_for_each_entry_safe(adv, n, &hdev->adv_instances, list) { 8548 u8 instance; 8549 8550 if (!adv->pending) 8551 continue; 8552 8553 if (!err) { 8554 adv->pending = false; 8555 continue; 8556 } 8557 8558 instance = adv->instance; 8559 8560 if (hdev->cur_adv_instance == instance) 8561 cancel_adv_timeout(hdev); 8562 8563 hci_remove_adv_instance(hdev, instance); 8564 mgmt_advertising_removed(sk, hdev, instance); 8565 } 8566 8567 hci_dev_unlock(hdev); 8568 } 8569 8570 static void add_advertising_complete(struct hci_dev *hdev, void *data, int err) 8571 { 8572 struct mgmt_pending_cmd *cmd = data; 8573 struct mgmt_cp_add_advertising *cp = cmd->param; 8574 struct mgmt_rp_add_advertising rp; 8575 8576 memset(&rp, 0, sizeof(rp)); 8577 8578 rp.instance = cp->instance; 8579 8580 if (err) 8581 mgmt_cmd_status(cmd->sk, cmd->index, cmd->opcode, 8582 mgmt_status(err)); 8583 else 8584 mgmt_cmd_complete(cmd->sk, cmd->index, cmd->opcode, 8585 mgmt_status(err), &rp, sizeof(rp)); 8586 8587 add_adv_complete(hdev, cmd->sk, cp->instance, err); 8588 8589 mgmt_pending_free(cmd); 8590 } 8591 8592 static int add_advertising_sync(struct hci_dev *hdev, void *data) 8593 { 8594 struct mgmt_pending_cmd *cmd = data; 8595 struct mgmt_cp_add_advertising *cp = cmd->param; 8596 8597 return hci_schedule_adv_instance_sync(hdev, cp->instance, true); 8598 } 8599 8600 static int add_advertising(struct sock *sk, struct hci_dev *hdev, 8601 void *data, u16 data_len) 8602 { 8603 struct mgmt_cp_add_advertising *cp = data; 8604 struct mgmt_rp_add_advertising rp; 8605 u32 flags; 8606 u8 status; 8607 u16 timeout, duration; 8608 unsigned int prev_instance_cnt; 8609 u8 schedule_instance = 0; 8610 struct adv_info *adv, *next_instance; 8611 int err; 8612 struct mgmt_pending_cmd *cmd; 8613 8614 bt_dev_dbg(hdev, "sock %p", sk); 8615 8616 status = mgmt_le_support(hdev); 8617 if (status) 8618 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_ADD_ADVERTISING, 8619 status); 8620 8621 if (cp->instance < 1 || cp->instance > hdev->le_num_of_adv_sets) 8622 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_ADD_ADVERTISING, 8623 MGMT_STATUS_INVALID_PARAMS); 8624 8625 if (data_len != sizeof(*cp) + cp->adv_data_len + cp->scan_rsp_len) 8626 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_ADD_ADVERTISING, 8627 MGMT_STATUS_INVALID_PARAMS); 8628 8629 flags = __le32_to_cpu(cp->flags); 8630 timeout = __le16_to_cpu(cp->timeout); 8631 duration = __le16_to_cpu(cp->duration); 8632 8633 if (!requested_adv_flags_are_valid(hdev, flags)) 8634 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_ADD_ADVERTISING, 8635 MGMT_STATUS_INVALID_PARAMS); 8636 8637 hci_dev_lock(hdev); 8638 8639 if (timeout && !hdev_is_powered(hdev)) { 8640 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_ADD_ADVERTISING, 8641 MGMT_STATUS_REJECTED); 8642 goto unlock; 8643 } 8644 8645 if (adv_busy(hdev)) { 8646 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_ADD_ADVERTISING, 8647 MGMT_STATUS_BUSY); 8648 goto unlock; 8649 } 8650 8651 if (!tlv_data_is_valid(hdev, flags, cp->data, cp->adv_data_len, true) || 8652 !tlv_data_is_valid(hdev, flags, cp->data + cp->adv_data_len, 8653 cp->scan_rsp_len, false)) { 8654 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_ADD_ADVERTISING, 8655 MGMT_STATUS_INVALID_PARAMS); 8656 goto unlock; 8657 } 8658 8659 prev_instance_cnt = hdev->adv_instance_cnt; 8660 8661 adv = hci_add_adv_instance(hdev, cp->instance, flags, 8662 cp->adv_data_len, cp->data, 8663 cp->scan_rsp_len, 8664 cp->data + cp->adv_data_len, 8665 timeout, duration, 8666 HCI_ADV_TX_POWER_NO_PREFERENCE, 8667 hdev->le_adv_min_interval, 8668 hdev->le_adv_max_interval, 0); 8669 if (IS_ERR(adv)) { 8670 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_ADD_ADVERTISING, 8671 MGMT_STATUS_FAILED); 8672 goto unlock; 8673 } 8674 8675 /* Only trigger an advertising added event if a new instance was 8676 * actually added. 8677 */ 8678 if (hdev->adv_instance_cnt > prev_instance_cnt) 8679 mgmt_advertising_added(sk, hdev, cp->instance); 8680 8681 if (hdev->cur_adv_instance == cp->instance) { 8682 /* If the currently advertised instance is being changed then 8683 * cancel the current advertising and schedule the next 8684 * instance. If there is only one instance then the overridden 8685 * advertising data will be visible right away. 8686 */ 8687 cancel_adv_timeout(hdev); 8688 8689 next_instance = hci_get_next_instance(hdev, cp->instance); 8690 if (next_instance) 8691 schedule_instance = next_instance->instance; 8692 } else if (!hdev->adv_instance_timeout) { 8693 /* Immediately advertise the new instance if no other 8694 * instance is currently being advertised. 8695 */ 8696 schedule_instance = cp->instance; 8697 } 8698 8699 /* If the HCI_ADVERTISING flag is set or the device isn't powered or 8700 * there is no instance to be advertised then we have no HCI 8701 * communication to make. Simply return. 8702 */ 8703 if (!hdev_is_powered(hdev) || 8704 hci_dev_test_flag(hdev, HCI_ADVERTISING) || 8705 !schedule_instance) { 8706 rp.instance = cp->instance; 8707 err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_ADD_ADVERTISING, 8708 MGMT_STATUS_SUCCESS, &rp, sizeof(rp)); 8709 goto unlock; 8710 } 8711 8712 /* We're good to go, update advertising data, parameters, and start 8713 * advertising. 8714 */ 8715 cmd = mgmt_pending_new(sk, MGMT_OP_ADD_ADVERTISING, hdev, data, 8716 data_len); 8717 if (!cmd) { 8718 err = -ENOMEM; 8719 goto unlock; 8720 } 8721 8722 cp->instance = schedule_instance; 8723 8724 err = hci_cmd_sync_queue(hdev, add_advertising_sync, cmd, 8725 add_advertising_complete); 8726 if (err < 0) 8727 mgmt_pending_free(cmd); 8728 8729 unlock: 8730 hci_dev_unlock(hdev); 8731 8732 return err; 8733 } 8734 8735 static void add_ext_adv_params_complete(struct hci_dev *hdev, void *data, 8736 int err) 8737 { 8738 struct mgmt_pending_cmd *cmd = data; 8739 struct mgmt_cp_add_ext_adv_params *cp = cmd->param; 8740 struct mgmt_rp_add_ext_adv_params rp; 8741 struct adv_info *adv; 8742 u32 flags; 8743 8744 BT_DBG("%s", hdev->name); 8745 8746 hci_dev_lock(hdev); 8747 8748 adv = hci_find_adv_instance(hdev, cp->instance); 8749 if (!adv) 8750 goto unlock; 8751 8752 rp.instance = cp->instance; 8753 rp.tx_power = adv->tx_power; 8754 8755 /* While we're at it, inform userspace of the available space for this 8756 * advertisement, given the flags that will be used. 8757 */ 8758 flags = __le32_to_cpu(cp->flags); 8759 rp.max_adv_data_len = tlv_data_max_len(hdev, flags, true); 8760 rp.max_scan_rsp_len = tlv_data_max_len(hdev, flags, false); 8761 8762 if (err) { 8763 /* If this advertisement was previously advertising and we 8764 * failed to update it, we signal that it has been removed and 8765 * delete its structure 8766 */ 8767 if (!adv->pending) 8768 mgmt_advertising_removed(cmd->sk, hdev, cp->instance); 8769 8770 hci_remove_adv_instance(hdev, cp->instance); 8771 8772 mgmt_cmd_status(cmd->sk, cmd->index, cmd->opcode, 8773 mgmt_status(err)); 8774 } else { 8775 mgmt_cmd_complete(cmd->sk, cmd->index, cmd->opcode, 8776 mgmt_status(err), &rp, sizeof(rp)); 8777 } 8778 8779 unlock: 8780 mgmt_pending_free(cmd); 8781 8782 hci_dev_unlock(hdev); 8783 } 8784 8785 static int add_ext_adv_params_sync(struct hci_dev *hdev, void *data) 8786 { 8787 struct mgmt_pending_cmd *cmd = data; 8788 struct mgmt_cp_add_ext_adv_params *cp = cmd->param; 8789 8790 return hci_setup_ext_adv_instance_sync(hdev, cp->instance); 8791 } 8792 8793 static int add_ext_adv_params(struct sock *sk, struct hci_dev *hdev, 8794 void *data, u16 data_len) 8795 { 8796 struct mgmt_cp_add_ext_adv_params *cp = data; 8797 struct mgmt_rp_add_ext_adv_params rp; 8798 struct mgmt_pending_cmd *cmd = NULL; 8799 struct adv_info *adv; 8800 u32 flags, min_interval, max_interval; 8801 u16 timeout, duration; 8802 u8 status; 8803 s8 tx_power; 8804 int err; 8805 8806 BT_DBG("%s", hdev->name); 8807 8808 status = mgmt_le_support(hdev); 8809 if (status) 8810 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_ADD_EXT_ADV_PARAMS, 8811 status); 8812 8813 if (cp->instance < 1 || cp->instance > hdev->le_num_of_adv_sets) 8814 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_ADD_EXT_ADV_PARAMS, 8815 MGMT_STATUS_INVALID_PARAMS); 8816 8817 /* The purpose of breaking add_advertising into two separate MGMT calls 8818 * for params and data is to allow more parameters to be added to this 8819 * structure in the future. For this reason, we verify that we have the 8820 * bare minimum structure we know of when the interface was defined. Any 8821 * extra parameters we don't know about will be ignored in this request. 8822 */ 8823 if (data_len < MGMT_ADD_EXT_ADV_PARAMS_MIN_SIZE) 8824 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_ADD_EXT_ADV_PARAMS, 8825 MGMT_STATUS_INVALID_PARAMS); 8826 8827 flags = __le32_to_cpu(cp->flags); 8828 8829 if (!requested_adv_flags_are_valid(hdev, flags)) 8830 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_ADD_EXT_ADV_PARAMS, 8831 MGMT_STATUS_INVALID_PARAMS); 8832 8833 hci_dev_lock(hdev); 8834 8835 /* In new interface, we require that we are powered to register */ 8836 if (!hdev_is_powered(hdev)) { 8837 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_ADD_EXT_ADV_PARAMS, 8838 MGMT_STATUS_REJECTED); 8839 goto unlock; 8840 } 8841 8842 if (adv_busy(hdev)) { 8843 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_ADD_EXT_ADV_PARAMS, 8844 MGMT_STATUS_BUSY); 8845 goto unlock; 8846 } 8847 8848 /* Parse defined parameters from request, use defaults otherwise */ 8849 timeout = (flags & MGMT_ADV_PARAM_TIMEOUT) ? 8850 __le16_to_cpu(cp->timeout) : 0; 8851 8852 duration = (flags & MGMT_ADV_PARAM_DURATION) ? 8853 __le16_to_cpu(cp->duration) : 8854 hdev->def_multi_adv_rotation_duration; 8855 8856 min_interval = (flags & MGMT_ADV_PARAM_INTERVALS) ? 8857 __le32_to_cpu(cp->min_interval) : 8858 hdev->le_adv_min_interval; 8859 8860 max_interval = (flags & MGMT_ADV_PARAM_INTERVALS) ? 8861 __le32_to_cpu(cp->max_interval) : 8862 hdev->le_adv_max_interval; 8863 8864 tx_power = (flags & MGMT_ADV_PARAM_TX_POWER) ? 8865 cp->tx_power : 8866 HCI_ADV_TX_POWER_NO_PREFERENCE; 8867 8868 /* Create advertising instance with no advertising or response data */ 8869 adv = hci_add_adv_instance(hdev, cp->instance, flags, 0, NULL, 0, NULL, 8870 timeout, duration, tx_power, min_interval, 8871 max_interval, 0); 8872 8873 if (IS_ERR(adv)) { 8874 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_ADD_EXT_ADV_PARAMS, 8875 MGMT_STATUS_FAILED); 8876 goto unlock; 8877 } 8878 8879 /* Submit request for advertising params if ext adv available */ 8880 if (ext_adv_capable(hdev)) { 8881 cmd = mgmt_pending_new(sk, MGMT_OP_ADD_EXT_ADV_PARAMS, hdev, 8882 data, data_len); 8883 if (!cmd) { 8884 err = -ENOMEM; 8885 hci_remove_adv_instance(hdev, cp->instance); 8886 goto unlock; 8887 } 8888 8889 err = hci_cmd_sync_queue(hdev, add_ext_adv_params_sync, cmd, 8890 add_ext_adv_params_complete); 8891 if (err < 0) 8892 mgmt_pending_free(cmd); 8893 } else { 8894 rp.instance = cp->instance; 8895 rp.tx_power = HCI_ADV_TX_POWER_NO_PREFERENCE; 8896 rp.max_adv_data_len = tlv_data_max_len(hdev, flags, true); 8897 rp.max_scan_rsp_len = tlv_data_max_len(hdev, flags, false); 8898 err = mgmt_cmd_complete(sk, hdev->id, 8899 MGMT_OP_ADD_EXT_ADV_PARAMS, 8900 MGMT_STATUS_SUCCESS, &rp, sizeof(rp)); 8901 } 8902 8903 unlock: 8904 hci_dev_unlock(hdev); 8905 8906 return err; 8907 } 8908 8909 static void add_ext_adv_data_complete(struct hci_dev *hdev, void *data, int err) 8910 { 8911 struct mgmt_pending_cmd *cmd = data; 8912 struct mgmt_cp_add_ext_adv_data *cp = cmd->param; 8913 struct mgmt_rp_add_advertising rp; 8914 8915 add_adv_complete(hdev, cmd->sk, cp->instance, err); 8916 8917 memset(&rp, 0, sizeof(rp)); 8918 8919 rp.instance = cp->instance; 8920 8921 if (err) 8922 mgmt_cmd_status(cmd->sk, cmd->index, cmd->opcode, 8923 mgmt_status(err)); 8924 else 8925 mgmt_cmd_complete(cmd->sk, cmd->index, cmd->opcode, 8926 mgmt_status(err), &rp, sizeof(rp)); 8927 8928 mgmt_pending_free(cmd); 8929 } 8930 8931 static int add_ext_adv_data_sync(struct hci_dev *hdev, void *data) 8932 { 8933 struct mgmt_pending_cmd *cmd = data; 8934 struct mgmt_cp_add_ext_adv_data *cp = cmd->param; 8935 int err; 8936 8937 if (ext_adv_capable(hdev)) { 8938 err = hci_update_adv_data_sync(hdev, cp->instance); 8939 if (err) 8940 return err; 8941 8942 err = hci_update_scan_rsp_data_sync(hdev, cp->instance); 8943 if (err) 8944 return err; 8945 8946 return hci_enable_ext_advertising_sync(hdev, cp->instance); 8947 } 8948 8949 return hci_schedule_adv_instance_sync(hdev, cp->instance, true); 8950 } 8951 8952 static int add_ext_adv_data(struct sock *sk, struct hci_dev *hdev, void *data, 8953 u16 data_len) 8954 { 8955 struct mgmt_cp_add_ext_adv_data *cp = data; 8956 struct mgmt_rp_add_ext_adv_data rp; 8957 u8 schedule_instance = 0; 8958 struct adv_info *next_instance; 8959 struct adv_info *adv_instance; 8960 int err = 0; 8961 struct mgmt_pending_cmd *cmd; 8962 8963 BT_DBG("%s", hdev->name); 8964 8965 hci_dev_lock(hdev); 8966 8967 adv_instance = hci_find_adv_instance(hdev, cp->instance); 8968 8969 if (!adv_instance) { 8970 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_ADD_EXT_ADV_DATA, 8971 MGMT_STATUS_INVALID_PARAMS); 8972 goto unlock; 8973 } 8974 8975 /* In new interface, we require that we are powered to register */ 8976 if (!hdev_is_powered(hdev)) { 8977 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_ADD_EXT_ADV_DATA, 8978 MGMT_STATUS_REJECTED); 8979 goto clear_new_instance; 8980 } 8981 8982 if (adv_busy(hdev)) { 8983 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_ADD_EXT_ADV_DATA, 8984 MGMT_STATUS_BUSY); 8985 goto clear_new_instance; 8986 } 8987 8988 /* Validate new data */ 8989 if (!tlv_data_is_valid(hdev, adv_instance->flags, cp->data, 8990 cp->adv_data_len, true) || 8991 !tlv_data_is_valid(hdev, adv_instance->flags, cp->data + 8992 cp->adv_data_len, cp->scan_rsp_len, false)) { 8993 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_ADD_EXT_ADV_DATA, 8994 MGMT_STATUS_INVALID_PARAMS); 8995 goto clear_new_instance; 8996 } 8997 8998 /* Set the data in the advertising instance */ 8999 hci_set_adv_instance_data(hdev, cp->instance, cp->adv_data_len, 9000 cp->data, cp->scan_rsp_len, 9001 cp->data + cp->adv_data_len); 9002 9003 /* If using software rotation, determine next instance to use */ 9004 if (hdev->cur_adv_instance == cp->instance) { 9005 /* If the currently advertised instance is being changed 9006 * then cancel the current advertising and schedule the 9007 * next instance. If there is only one instance then the 9008 * overridden advertising data will be visible right 9009 * away 9010 */ 9011 cancel_adv_timeout(hdev); 9012 9013 next_instance = hci_get_next_instance(hdev, cp->instance); 9014 if (next_instance) 9015 schedule_instance = next_instance->instance; 9016 } else if (!hdev->adv_instance_timeout) { 9017 /* Immediately advertise the new instance if no other 9018 * instance is currently being advertised. 9019 */ 9020 schedule_instance = cp->instance; 9021 } 9022 9023 /* If the HCI_ADVERTISING flag is set or there is no instance to 9024 * be advertised then we have no HCI communication to make. 9025 * Simply return. 9026 */ 9027 if (hci_dev_test_flag(hdev, HCI_ADVERTISING) || !schedule_instance) { 9028 if (adv_instance->pending) { 9029 mgmt_advertising_added(sk, hdev, cp->instance); 9030 adv_instance->pending = false; 9031 } 9032 rp.instance = cp->instance; 9033 err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_ADD_EXT_ADV_DATA, 9034 MGMT_STATUS_SUCCESS, &rp, sizeof(rp)); 9035 goto unlock; 9036 } 9037 9038 cmd = mgmt_pending_new(sk, MGMT_OP_ADD_EXT_ADV_DATA, hdev, data, 9039 data_len); 9040 if (!cmd) { 9041 err = -ENOMEM; 9042 goto clear_new_instance; 9043 } 9044 9045 err = hci_cmd_sync_queue(hdev, add_ext_adv_data_sync, cmd, 9046 add_ext_adv_data_complete); 9047 if (err < 0) { 9048 mgmt_pending_free(cmd); 9049 goto clear_new_instance; 9050 } 9051 9052 /* We were successful in updating data, so trigger advertising_added 9053 * event if this is an instance that wasn't previously advertising. If 9054 * a failure occurs in the requests we initiated, we will remove the 9055 * instance again in add_advertising_complete 9056 */ 9057 if (adv_instance->pending) 9058 mgmt_advertising_added(sk, hdev, cp->instance); 9059 9060 goto unlock; 9061 9062 clear_new_instance: 9063 hci_remove_adv_instance(hdev, cp->instance); 9064 9065 unlock: 9066 hci_dev_unlock(hdev); 9067 9068 return err; 9069 } 9070 9071 static void remove_advertising_complete(struct hci_dev *hdev, void *data, 9072 int err) 9073 { 9074 struct mgmt_pending_cmd *cmd = data; 9075 struct mgmt_cp_remove_advertising *cp = cmd->param; 9076 struct mgmt_rp_remove_advertising rp; 9077 9078 bt_dev_dbg(hdev, "err %d", err); 9079 9080 memset(&rp, 0, sizeof(rp)); 9081 rp.instance = cp->instance; 9082 9083 if (err) 9084 mgmt_cmd_status(cmd->sk, cmd->index, cmd->opcode, 9085 mgmt_status(err)); 9086 else 9087 mgmt_cmd_complete(cmd->sk, cmd->index, cmd->opcode, 9088 MGMT_STATUS_SUCCESS, &rp, sizeof(rp)); 9089 9090 mgmt_pending_free(cmd); 9091 } 9092 9093 static int remove_advertising_sync(struct hci_dev *hdev, void *data) 9094 { 9095 struct mgmt_pending_cmd *cmd = data; 9096 struct mgmt_cp_remove_advertising *cp = cmd->param; 9097 int err; 9098 9099 err = hci_remove_advertising_sync(hdev, cmd->sk, cp->instance, true); 9100 if (err) 9101 return err; 9102 9103 if (list_empty(&hdev->adv_instances)) 9104 err = hci_disable_advertising_sync(hdev); 9105 9106 return err; 9107 } 9108 9109 static int remove_advertising(struct sock *sk, struct hci_dev *hdev, 9110 void *data, u16 data_len) 9111 { 9112 struct mgmt_cp_remove_advertising *cp = data; 9113 struct mgmt_pending_cmd *cmd; 9114 int err; 9115 9116 bt_dev_dbg(hdev, "sock %p", sk); 9117 9118 hci_dev_lock(hdev); 9119 9120 if (cp->instance && !hci_find_adv_instance(hdev, cp->instance)) { 9121 err = mgmt_cmd_status(sk, hdev->id, 9122 MGMT_OP_REMOVE_ADVERTISING, 9123 MGMT_STATUS_INVALID_PARAMS); 9124 goto unlock; 9125 } 9126 9127 if (pending_find(MGMT_OP_SET_LE, hdev)) { 9128 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_REMOVE_ADVERTISING, 9129 MGMT_STATUS_BUSY); 9130 goto unlock; 9131 } 9132 9133 if (list_empty(&hdev->adv_instances)) { 9134 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_REMOVE_ADVERTISING, 9135 MGMT_STATUS_INVALID_PARAMS); 9136 goto unlock; 9137 } 9138 9139 cmd = mgmt_pending_new(sk, MGMT_OP_REMOVE_ADVERTISING, hdev, data, 9140 data_len); 9141 if (!cmd) { 9142 err = -ENOMEM; 9143 goto unlock; 9144 } 9145 9146 err = hci_cmd_sync_queue(hdev, remove_advertising_sync, cmd, 9147 remove_advertising_complete); 9148 if (err < 0) 9149 mgmt_pending_free(cmd); 9150 9151 unlock: 9152 hci_dev_unlock(hdev); 9153 9154 return err; 9155 } 9156 9157 static int get_adv_size_info(struct sock *sk, struct hci_dev *hdev, 9158 void *data, u16 data_len) 9159 { 9160 struct mgmt_cp_get_adv_size_info *cp = data; 9161 struct mgmt_rp_get_adv_size_info rp; 9162 u32 flags, supported_flags; 9163 9164 bt_dev_dbg(hdev, "sock %p", sk); 9165 9166 if (!lmp_le_capable(hdev)) 9167 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_GET_ADV_SIZE_INFO, 9168 MGMT_STATUS_REJECTED); 9169 9170 if (cp->instance < 1 || cp->instance > hdev->le_num_of_adv_sets) 9171 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_GET_ADV_SIZE_INFO, 9172 MGMT_STATUS_INVALID_PARAMS); 9173 9174 flags = __le32_to_cpu(cp->flags); 9175 9176 /* The current implementation only supports a subset of the specified 9177 * flags. 9178 */ 9179 supported_flags = get_supported_adv_flags(hdev); 9180 if (flags & ~supported_flags) 9181 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_GET_ADV_SIZE_INFO, 9182 MGMT_STATUS_INVALID_PARAMS); 9183 9184 rp.instance = cp->instance; 9185 rp.flags = cp->flags; 9186 rp.max_adv_data_len = tlv_data_max_len(hdev, flags, true); 9187 rp.max_scan_rsp_len = tlv_data_max_len(hdev, flags, false); 9188 9189 return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_GET_ADV_SIZE_INFO, 9190 MGMT_STATUS_SUCCESS, &rp, sizeof(rp)); 9191 } 9192 9193 static const struct hci_mgmt_handler mgmt_handlers[] = { 9194 { NULL }, /* 0x0000 (no command) */ 9195 { read_version, MGMT_READ_VERSION_SIZE, 9196 HCI_MGMT_NO_HDEV | 9197 HCI_MGMT_UNTRUSTED }, 9198 { read_commands, MGMT_READ_COMMANDS_SIZE, 9199 HCI_MGMT_NO_HDEV | 9200 HCI_MGMT_UNTRUSTED }, 9201 { read_index_list, MGMT_READ_INDEX_LIST_SIZE, 9202 HCI_MGMT_NO_HDEV | 9203 HCI_MGMT_UNTRUSTED }, 9204 { read_controller_info, MGMT_READ_INFO_SIZE, 9205 HCI_MGMT_UNTRUSTED }, 9206 { set_powered, MGMT_SETTING_SIZE }, 9207 { set_discoverable, MGMT_SET_DISCOVERABLE_SIZE }, 9208 { set_connectable, MGMT_SETTING_SIZE }, 9209 { set_fast_connectable, MGMT_SETTING_SIZE }, 9210 { set_bondable, MGMT_SETTING_SIZE }, 9211 { set_link_security, MGMT_SETTING_SIZE }, 9212 { set_ssp, MGMT_SETTING_SIZE }, 9213 { set_hs, MGMT_SETTING_SIZE }, 9214 { set_le, MGMT_SETTING_SIZE }, 9215 { set_dev_class, MGMT_SET_DEV_CLASS_SIZE }, 9216 { set_local_name, MGMT_SET_LOCAL_NAME_SIZE }, 9217 { add_uuid, MGMT_ADD_UUID_SIZE }, 9218 { remove_uuid, MGMT_REMOVE_UUID_SIZE }, 9219 { load_link_keys, MGMT_LOAD_LINK_KEYS_SIZE, 9220 HCI_MGMT_VAR_LEN }, 9221 { load_long_term_keys, MGMT_LOAD_LONG_TERM_KEYS_SIZE, 9222 HCI_MGMT_VAR_LEN }, 9223 { disconnect, MGMT_DISCONNECT_SIZE }, 9224 { get_connections, MGMT_GET_CONNECTIONS_SIZE }, 9225 { pin_code_reply, MGMT_PIN_CODE_REPLY_SIZE }, 9226 { pin_code_neg_reply, MGMT_PIN_CODE_NEG_REPLY_SIZE }, 9227 { set_io_capability, MGMT_SET_IO_CAPABILITY_SIZE }, 9228 { pair_device, MGMT_PAIR_DEVICE_SIZE }, 9229 { cancel_pair_device, MGMT_CANCEL_PAIR_DEVICE_SIZE }, 9230 { unpair_device, MGMT_UNPAIR_DEVICE_SIZE }, 9231 { user_confirm_reply, MGMT_USER_CONFIRM_REPLY_SIZE }, 9232 { user_confirm_neg_reply, MGMT_USER_CONFIRM_NEG_REPLY_SIZE }, 9233 { user_passkey_reply, MGMT_USER_PASSKEY_REPLY_SIZE }, 9234 { user_passkey_neg_reply, MGMT_USER_PASSKEY_NEG_REPLY_SIZE }, 9235 { read_local_oob_data, MGMT_READ_LOCAL_OOB_DATA_SIZE }, 9236 { add_remote_oob_data, MGMT_ADD_REMOTE_OOB_DATA_SIZE, 9237 HCI_MGMT_VAR_LEN }, 9238 { remove_remote_oob_data, MGMT_REMOVE_REMOTE_OOB_DATA_SIZE }, 9239 { start_discovery, MGMT_START_DISCOVERY_SIZE }, 9240 { stop_discovery, MGMT_STOP_DISCOVERY_SIZE }, 9241 { confirm_name, MGMT_CONFIRM_NAME_SIZE }, 9242 { block_device, MGMT_BLOCK_DEVICE_SIZE }, 9243 { unblock_device, MGMT_UNBLOCK_DEVICE_SIZE }, 9244 { set_device_id, MGMT_SET_DEVICE_ID_SIZE }, 9245 { set_advertising, MGMT_SETTING_SIZE }, 9246 { set_bredr, MGMT_SETTING_SIZE }, 9247 { set_static_address, MGMT_SET_STATIC_ADDRESS_SIZE }, 9248 { set_scan_params, MGMT_SET_SCAN_PARAMS_SIZE }, 9249 { set_secure_conn, MGMT_SETTING_SIZE }, 9250 { set_debug_keys, MGMT_SETTING_SIZE }, 9251 { set_privacy, MGMT_SET_PRIVACY_SIZE }, 9252 { load_irks, MGMT_LOAD_IRKS_SIZE, 9253 HCI_MGMT_VAR_LEN }, 9254 { get_conn_info, MGMT_GET_CONN_INFO_SIZE }, 9255 { get_clock_info, MGMT_GET_CLOCK_INFO_SIZE }, 9256 { add_device, MGMT_ADD_DEVICE_SIZE }, 9257 { remove_device, MGMT_REMOVE_DEVICE_SIZE }, 9258 { load_conn_param, MGMT_LOAD_CONN_PARAM_SIZE, 9259 HCI_MGMT_VAR_LEN }, 9260 { read_unconf_index_list, MGMT_READ_UNCONF_INDEX_LIST_SIZE, 9261 HCI_MGMT_NO_HDEV | 9262 HCI_MGMT_UNTRUSTED }, 9263 { read_config_info, MGMT_READ_CONFIG_INFO_SIZE, 9264 HCI_MGMT_UNCONFIGURED | 9265 HCI_MGMT_UNTRUSTED }, 9266 { set_external_config, MGMT_SET_EXTERNAL_CONFIG_SIZE, 9267 HCI_MGMT_UNCONFIGURED }, 9268 { set_public_address, MGMT_SET_PUBLIC_ADDRESS_SIZE, 9269 HCI_MGMT_UNCONFIGURED }, 9270 { start_service_discovery, MGMT_START_SERVICE_DISCOVERY_SIZE, 9271 HCI_MGMT_VAR_LEN }, 9272 { read_local_oob_ext_data, MGMT_READ_LOCAL_OOB_EXT_DATA_SIZE }, 9273 { read_ext_index_list, MGMT_READ_EXT_INDEX_LIST_SIZE, 9274 HCI_MGMT_NO_HDEV | 9275 HCI_MGMT_UNTRUSTED }, 9276 { read_adv_features, MGMT_READ_ADV_FEATURES_SIZE }, 9277 { add_advertising, MGMT_ADD_ADVERTISING_SIZE, 9278 HCI_MGMT_VAR_LEN }, 9279 { remove_advertising, MGMT_REMOVE_ADVERTISING_SIZE }, 9280 { get_adv_size_info, MGMT_GET_ADV_SIZE_INFO_SIZE }, 9281 { start_limited_discovery, MGMT_START_DISCOVERY_SIZE }, 9282 { read_ext_controller_info,MGMT_READ_EXT_INFO_SIZE, 9283 HCI_MGMT_UNTRUSTED }, 9284 { set_appearance, MGMT_SET_APPEARANCE_SIZE }, 9285 { get_phy_configuration, MGMT_GET_PHY_CONFIGURATION_SIZE }, 9286 { set_phy_configuration, MGMT_SET_PHY_CONFIGURATION_SIZE }, 9287 { set_blocked_keys, MGMT_OP_SET_BLOCKED_KEYS_SIZE, 9288 HCI_MGMT_VAR_LEN }, 9289 { set_wideband_speech, MGMT_SETTING_SIZE }, 9290 { read_controller_cap, MGMT_READ_CONTROLLER_CAP_SIZE, 9291 HCI_MGMT_UNTRUSTED }, 9292 { read_exp_features_info, MGMT_READ_EXP_FEATURES_INFO_SIZE, 9293 HCI_MGMT_UNTRUSTED | 9294 HCI_MGMT_HDEV_OPTIONAL }, 9295 { set_exp_feature, MGMT_SET_EXP_FEATURE_SIZE, 9296 HCI_MGMT_VAR_LEN | 9297 HCI_MGMT_HDEV_OPTIONAL }, 9298 { read_def_system_config, MGMT_READ_DEF_SYSTEM_CONFIG_SIZE, 9299 HCI_MGMT_UNTRUSTED }, 9300 { set_def_system_config, MGMT_SET_DEF_SYSTEM_CONFIG_SIZE, 9301 HCI_MGMT_VAR_LEN }, 9302 { read_def_runtime_config, MGMT_READ_DEF_RUNTIME_CONFIG_SIZE, 9303 HCI_MGMT_UNTRUSTED }, 9304 { set_def_runtime_config, MGMT_SET_DEF_RUNTIME_CONFIG_SIZE, 9305 HCI_MGMT_VAR_LEN }, 9306 { get_device_flags, MGMT_GET_DEVICE_FLAGS_SIZE }, 9307 { set_device_flags, MGMT_SET_DEVICE_FLAGS_SIZE }, 9308 { read_adv_mon_features, MGMT_READ_ADV_MONITOR_FEATURES_SIZE }, 9309 { add_adv_patterns_monitor,MGMT_ADD_ADV_PATTERNS_MONITOR_SIZE, 9310 HCI_MGMT_VAR_LEN }, 9311 { remove_adv_monitor, MGMT_REMOVE_ADV_MONITOR_SIZE }, 9312 { add_ext_adv_params, MGMT_ADD_EXT_ADV_PARAMS_MIN_SIZE, 9313 HCI_MGMT_VAR_LEN }, 9314 { add_ext_adv_data, MGMT_ADD_EXT_ADV_DATA_SIZE, 9315 HCI_MGMT_VAR_LEN }, 9316 { add_adv_patterns_monitor_rssi, 9317 MGMT_ADD_ADV_PATTERNS_MONITOR_RSSI_SIZE, 9318 HCI_MGMT_VAR_LEN }, 9319 { set_mesh, MGMT_SET_MESH_RECEIVER_SIZE, 9320 HCI_MGMT_VAR_LEN }, 9321 { mesh_features, MGMT_MESH_READ_FEATURES_SIZE }, 9322 { mesh_send, MGMT_MESH_SEND_SIZE, 9323 HCI_MGMT_VAR_LEN }, 9324 { mesh_send_cancel, MGMT_MESH_SEND_CANCEL_SIZE }, 9325 }; 9326 9327 void mgmt_index_added(struct hci_dev *hdev) 9328 { 9329 struct mgmt_ev_ext_index ev; 9330 9331 if (test_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks)) 9332 return; 9333 9334 switch (hdev->dev_type) { 9335 case HCI_PRIMARY: 9336 if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED)) { 9337 mgmt_index_event(MGMT_EV_UNCONF_INDEX_ADDED, hdev, 9338 NULL, 0, HCI_MGMT_UNCONF_INDEX_EVENTS); 9339 ev.type = 0x01; 9340 } else { 9341 mgmt_index_event(MGMT_EV_INDEX_ADDED, hdev, NULL, 0, 9342 HCI_MGMT_INDEX_EVENTS); 9343 ev.type = 0x00; 9344 } 9345 break; 9346 case HCI_AMP: 9347 ev.type = 0x02; 9348 break; 9349 default: 9350 return; 9351 } 9352 9353 ev.bus = hdev->bus; 9354 9355 mgmt_index_event(MGMT_EV_EXT_INDEX_ADDED, hdev, &ev, sizeof(ev), 9356 HCI_MGMT_EXT_INDEX_EVENTS); 9357 } 9358 9359 void mgmt_index_removed(struct hci_dev *hdev) 9360 { 9361 struct mgmt_ev_ext_index ev; 9362 u8 status = MGMT_STATUS_INVALID_INDEX; 9363 9364 if (test_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks)) 9365 return; 9366 9367 switch (hdev->dev_type) { 9368 case HCI_PRIMARY: 9369 mgmt_pending_foreach(0, hdev, cmd_complete_rsp, &status); 9370 9371 if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED)) { 9372 mgmt_index_event(MGMT_EV_UNCONF_INDEX_REMOVED, hdev, 9373 NULL, 0, HCI_MGMT_UNCONF_INDEX_EVENTS); 9374 ev.type = 0x01; 9375 } else { 9376 mgmt_index_event(MGMT_EV_INDEX_REMOVED, hdev, NULL, 0, 9377 HCI_MGMT_INDEX_EVENTS); 9378 ev.type = 0x00; 9379 } 9380 break; 9381 case HCI_AMP: 9382 ev.type = 0x02; 9383 break; 9384 default: 9385 return; 9386 } 9387 9388 ev.bus = hdev->bus; 9389 9390 mgmt_index_event(MGMT_EV_EXT_INDEX_REMOVED, hdev, &ev, sizeof(ev), 9391 HCI_MGMT_EXT_INDEX_EVENTS); 9392 9393 /* Cancel any remaining timed work */ 9394 if (!hci_dev_test_flag(hdev, HCI_MGMT)) 9395 return; 9396 cancel_delayed_work_sync(&hdev->discov_off); 9397 cancel_delayed_work_sync(&hdev->service_cache); 9398 cancel_delayed_work_sync(&hdev->rpa_expired); 9399 } 9400 9401 void mgmt_power_on(struct hci_dev *hdev, int err) 9402 { 9403 struct cmd_lookup match = { NULL, hdev }; 9404 9405 bt_dev_dbg(hdev, "err %d", err); 9406 9407 hci_dev_lock(hdev); 9408 9409 if (!err) { 9410 restart_le_actions(hdev); 9411 hci_update_passive_scan(hdev); 9412 } 9413 9414 mgmt_pending_foreach(MGMT_OP_SET_POWERED, hdev, settings_rsp, &match); 9415 9416 new_settings(hdev, match.sk); 9417 9418 if (match.sk) 9419 sock_put(match.sk); 9420 9421 hci_dev_unlock(hdev); 9422 } 9423 9424 void __mgmt_power_off(struct hci_dev *hdev) 9425 { 9426 struct cmd_lookup match = { NULL, hdev }; 9427 u8 status, zero_cod[] = { 0, 0, 0 }; 9428 9429 mgmt_pending_foreach(MGMT_OP_SET_POWERED, hdev, settings_rsp, &match); 9430 9431 /* If the power off is because of hdev unregistration let 9432 * use the appropriate INVALID_INDEX status. Otherwise use 9433 * NOT_POWERED. We cover both scenarios here since later in 9434 * mgmt_index_removed() any hci_conn callbacks will have already 9435 * been triggered, potentially causing misleading DISCONNECTED 9436 * status responses. 9437 */ 9438 if (hci_dev_test_flag(hdev, HCI_UNREGISTER)) 9439 status = MGMT_STATUS_INVALID_INDEX; 9440 else 9441 status = MGMT_STATUS_NOT_POWERED; 9442 9443 mgmt_pending_foreach(0, hdev, cmd_complete_rsp, &status); 9444 9445 if (memcmp(hdev->dev_class, zero_cod, sizeof(zero_cod)) != 0) { 9446 mgmt_limited_event(MGMT_EV_CLASS_OF_DEV_CHANGED, hdev, 9447 zero_cod, sizeof(zero_cod), 9448 HCI_MGMT_DEV_CLASS_EVENTS, NULL); 9449 ext_info_changed(hdev, NULL); 9450 } 9451 9452 new_settings(hdev, match.sk); 9453 9454 if (match.sk) 9455 sock_put(match.sk); 9456 } 9457 9458 void mgmt_set_powered_failed(struct hci_dev *hdev, int err) 9459 { 9460 struct mgmt_pending_cmd *cmd; 9461 u8 status; 9462 9463 cmd = pending_find(MGMT_OP_SET_POWERED, hdev); 9464 if (!cmd) 9465 return; 9466 9467 if (err == -ERFKILL) 9468 status = MGMT_STATUS_RFKILLED; 9469 else 9470 status = MGMT_STATUS_FAILED; 9471 9472 mgmt_cmd_status(cmd->sk, hdev->id, MGMT_OP_SET_POWERED, status); 9473 9474 mgmt_pending_remove(cmd); 9475 } 9476 9477 void mgmt_new_link_key(struct hci_dev *hdev, struct link_key *key, 9478 bool persistent) 9479 { 9480 struct mgmt_ev_new_link_key ev; 9481 9482 memset(&ev, 0, sizeof(ev)); 9483 9484 ev.store_hint = persistent; 9485 bacpy(&ev.key.addr.bdaddr, &key->bdaddr); 9486 ev.key.addr.type = link_to_bdaddr(key->link_type, key->bdaddr_type); 9487 ev.key.type = key->type; 9488 memcpy(ev.key.val, key->val, HCI_LINK_KEY_SIZE); 9489 ev.key.pin_len = key->pin_len; 9490 9491 mgmt_event(MGMT_EV_NEW_LINK_KEY, hdev, &ev, sizeof(ev), NULL); 9492 } 9493 9494 static u8 mgmt_ltk_type(struct smp_ltk *ltk) 9495 { 9496 switch (ltk->type) { 9497 case SMP_LTK: 9498 case SMP_LTK_RESPONDER: 9499 if (ltk->authenticated) 9500 return MGMT_LTK_AUTHENTICATED; 9501 return MGMT_LTK_UNAUTHENTICATED; 9502 case SMP_LTK_P256: 9503 if (ltk->authenticated) 9504 return MGMT_LTK_P256_AUTH; 9505 return MGMT_LTK_P256_UNAUTH; 9506 case SMP_LTK_P256_DEBUG: 9507 return MGMT_LTK_P256_DEBUG; 9508 } 9509 9510 return MGMT_LTK_UNAUTHENTICATED; 9511 } 9512 9513 void mgmt_new_ltk(struct hci_dev *hdev, struct smp_ltk *key, bool persistent) 9514 { 9515 struct mgmt_ev_new_long_term_key ev; 9516 9517 memset(&ev, 0, sizeof(ev)); 9518 9519 /* Devices using resolvable or non-resolvable random addresses 9520 * without providing an identity resolving key don't require 9521 * to store long term keys. Their addresses will change the 9522 * next time around. 9523 * 9524 * Only when a remote device provides an identity address 9525 * make sure the long term key is stored. If the remote 9526 * identity is known, the long term keys are internally 9527 * mapped to the identity address. So allow static random 9528 * and public addresses here. 9529 */ 9530 if (key->bdaddr_type == ADDR_LE_DEV_RANDOM && 9531 (key->bdaddr.b[5] & 0xc0) != 0xc0) 9532 ev.store_hint = 0x00; 9533 else 9534 ev.store_hint = persistent; 9535 9536 bacpy(&ev.key.addr.bdaddr, &key->bdaddr); 9537 ev.key.addr.type = link_to_bdaddr(key->link_type, key->bdaddr_type); 9538 ev.key.type = mgmt_ltk_type(key); 9539 ev.key.enc_size = key->enc_size; 9540 ev.key.ediv = key->ediv; 9541 ev.key.rand = key->rand; 9542 9543 if (key->type == SMP_LTK) 9544 ev.key.initiator = 1; 9545 9546 /* Make sure we copy only the significant bytes based on the 9547 * encryption key size, and set the rest of the value to zeroes. 9548 */ 9549 memcpy(ev.key.val, key->val, key->enc_size); 9550 memset(ev.key.val + key->enc_size, 0, 9551 sizeof(ev.key.val) - key->enc_size); 9552 9553 mgmt_event(MGMT_EV_NEW_LONG_TERM_KEY, hdev, &ev, sizeof(ev), NULL); 9554 } 9555 9556 void mgmt_new_irk(struct hci_dev *hdev, struct smp_irk *irk, bool persistent) 9557 { 9558 struct mgmt_ev_new_irk ev; 9559 9560 memset(&ev, 0, sizeof(ev)); 9561 9562 ev.store_hint = persistent; 9563 9564 bacpy(&ev.rpa, &irk->rpa); 9565 bacpy(&ev.irk.addr.bdaddr, &irk->bdaddr); 9566 ev.irk.addr.type = link_to_bdaddr(irk->link_type, irk->addr_type); 9567 memcpy(ev.irk.val, irk->val, sizeof(irk->val)); 9568 9569 mgmt_event(MGMT_EV_NEW_IRK, hdev, &ev, sizeof(ev), NULL); 9570 } 9571 9572 void mgmt_new_csrk(struct hci_dev *hdev, struct smp_csrk *csrk, 9573 bool persistent) 9574 { 9575 struct mgmt_ev_new_csrk ev; 9576 9577 memset(&ev, 0, sizeof(ev)); 9578 9579 /* Devices using resolvable or non-resolvable random addresses 9580 * without providing an identity resolving key don't require 9581 * to store signature resolving keys. Their addresses will change 9582 * the next time around. 9583 * 9584 * Only when a remote device provides an identity address 9585 * make sure the signature resolving key is stored. So allow 9586 * static random and public addresses here. 9587 */ 9588 if (csrk->bdaddr_type == ADDR_LE_DEV_RANDOM && 9589 (csrk->bdaddr.b[5] & 0xc0) != 0xc0) 9590 ev.store_hint = 0x00; 9591 else 9592 ev.store_hint = persistent; 9593 9594 bacpy(&ev.key.addr.bdaddr, &csrk->bdaddr); 9595 ev.key.addr.type = link_to_bdaddr(csrk->link_type, csrk->bdaddr_type); 9596 ev.key.type = csrk->type; 9597 memcpy(ev.key.val, csrk->val, sizeof(csrk->val)); 9598 9599 mgmt_event(MGMT_EV_NEW_CSRK, hdev, &ev, sizeof(ev), NULL); 9600 } 9601 9602 void mgmt_new_conn_param(struct hci_dev *hdev, bdaddr_t *bdaddr, 9603 u8 bdaddr_type, u8 store_hint, u16 min_interval, 9604 u16 max_interval, u16 latency, u16 timeout) 9605 { 9606 struct mgmt_ev_new_conn_param ev; 9607 9608 if (!hci_is_identity_address(bdaddr, bdaddr_type)) 9609 return; 9610 9611 memset(&ev, 0, sizeof(ev)); 9612 bacpy(&ev.addr.bdaddr, bdaddr); 9613 ev.addr.type = link_to_bdaddr(LE_LINK, bdaddr_type); 9614 ev.store_hint = store_hint; 9615 ev.min_interval = cpu_to_le16(min_interval); 9616 ev.max_interval = cpu_to_le16(max_interval); 9617 ev.latency = cpu_to_le16(latency); 9618 ev.timeout = cpu_to_le16(timeout); 9619 9620 mgmt_event(MGMT_EV_NEW_CONN_PARAM, hdev, &ev, sizeof(ev), NULL); 9621 } 9622 9623 void mgmt_device_connected(struct hci_dev *hdev, struct hci_conn *conn, 9624 u8 *name, u8 name_len) 9625 { 9626 struct sk_buff *skb; 9627 struct mgmt_ev_device_connected *ev; 9628 u16 eir_len = 0; 9629 u32 flags = 0; 9630 9631 if (test_and_set_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags)) 9632 return; 9633 9634 /* allocate buff for LE or BR/EDR adv */ 9635 if (conn->le_adv_data_len > 0) 9636 skb = mgmt_alloc_skb(hdev, MGMT_EV_DEVICE_CONNECTED, 9637 sizeof(*ev) + conn->le_adv_data_len); 9638 else 9639 skb = mgmt_alloc_skb(hdev, MGMT_EV_DEVICE_CONNECTED, 9640 sizeof(*ev) + (name ? eir_precalc_len(name_len) : 0) + 9641 eir_precalc_len(sizeof(conn->dev_class))); 9642 9643 ev = skb_put(skb, sizeof(*ev)); 9644 bacpy(&ev->addr.bdaddr, &conn->dst); 9645 ev->addr.type = link_to_bdaddr(conn->type, conn->dst_type); 9646 9647 if (conn->out) 9648 flags |= MGMT_DEV_FOUND_INITIATED_CONN; 9649 9650 ev->flags = __cpu_to_le32(flags); 9651 9652 /* We must ensure that the EIR Data fields are ordered and 9653 * unique. Keep it simple for now and avoid the problem by not 9654 * adding any BR/EDR data to the LE adv. 9655 */ 9656 if (conn->le_adv_data_len > 0) { 9657 skb_put_data(skb, conn->le_adv_data, conn->le_adv_data_len); 9658 eir_len = conn->le_adv_data_len; 9659 } else { 9660 if (name) 9661 eir_len += eir_skb_put_data(skb, EIR_NAME_COMPLETE, name, name_len); 9662 9663 if (memcmp(conn->dev_class, "\0\0\0", sizeof(conn->dev_class))) 9664 eir_len += eir_skb_put_data(skb, EIR_CLASS_OF_DEV, 9665 conn->dev_class, sizeof(conn->dev_class)); 9666 } 9667 9668 ev->eir_len = cpu_to_le16(eir_len); 9669 9670 mgmt_event_skb(skb, NULL); 9671 } 9672 9673 static void disconnect_rsp(struct mgmt_pending_cmd *cmd, void *data) 9674 { 9675 struct sock **sk = data; 9676 9677 cmd->cmd_complete(cmd, 0); 9678 9679 *sk = cmd->sk; 9680 sock_hold(*sk); 9681 9682 mgmt_pending_remove(cmd); 9683 } 9684 9685 static void unpair_device_rsp(struct mgmt_pending_cmd *cmd, void *data) 9686 { 9687 struct hci_dev *hdev = data; 9688 struct mgmt_cp_unpair_device *cp = cmd->param; 9689 9690 device_unpaired(hdev, &cp->addr.bdaddr, cp->addr.type, cmd->sk); 9691 9692 cmd->cmd_complete(cmd, 0); 9693 mgmt_pending_remove(cmd); 9694 } 9695 9696 bool mgmt_powering_down(struct hci_dev *hdev) 9697 { 9698 struct mgmt_pending_cmd *cmd; 9699 struct mgmt_mode *cp; 9700 9701 if (hci_dev_test_flag(hdev, HCI_POWERING_DOWN)) 9702 return true; 9703 9704 cmd = pending_find(MGMT_OP_SET_POWERED, hdev); 9705 if (!cmd) 9706 return false; 9707 9708 cp = cmd->param; 9709 if (!cp->val) 9710 return true; 9711 9712 return false; 9713 } 9714 9715 void mgmt_device_disconnected(struct hci_dev *hdev, bdaddr_t *bdaddr, 9716 u8 link_type, u8 addr_type, u8 reason, 9717 bool mgmt_connected) 9718 { 9719 struct mgmt_ev_device_disconnected ev; 9720 struct sock *sk = NULL; 9721 9722 if (!mgmt_connected) 9723 return; 9724 9725 if (link_type != ACL_LINK && link_type != LE_LINK) 9726 return; 9727 9728 mgmt_pending_foreach(MGMT_OP_DISCONNECT, hdev, disconnect_rsp, &sk); 9729 9730 bacpy(&ev.addr.bdaddr, bdaddr); 9731 ev.addr.type = link_to_bdaddr(link_type, addr_type); 9732 ev.reason = reason; 9733 9734 /* Report disconnects due to suspend */ 9735 if (hdev->suspended) 9736 ev.reason = MGMT_DEV_DISCONN_LOCAL_HOST_SUSPEND; 9737 9738 mgmt_event(MGMT_EV_DEVICE_DISCONNECTED, hdev, &ev, sizeof(ev), sk); 9739 9740 if (sk) 9741 sock_put(sk); 9742 9743 mgmt_pending_foreach(MGMT_OP_UNPAIR_DEVICE, hdev, unpair_device_rsp, 9744 hdev); 9745 } 9746 9747 void mgmt_disconnect_failed(struct hci_dev *hdev, bdaddr_t *bdaddr, 9748 u8 link_type, u8 addr_type, u8 status) 9749 { 9750 u8 bdaddr_type = link_to_bdaddr(link_type, addr_type); 9751 struct mgmt_cp_disconnect *cp; 9752 struct mgmt_pending_cmd *cmd; 9753 9754 mgmt_pending_foreach(MGMT_OP_UNPAIR_DEVICE, hdev, unpair_device_rsp, 9755 hdev); 9756 9757 cmd = pending_find(MGMT_OP_DISCONNECT, hdev); 9758 if (!cmd) 9759 return; 9760 9761 cp = cmd->param; 9762 9763 if (bacmp(bdaddr, &cp->addr.bdaddr)) 9764 return; 9765 9766 if (cp->addr.type != bdaddr_type) 9767 return; 9768 9769 cmd->cmd_complete(cmd, mgmt_status(status)); 9770 mgmt_pending_remove(cmd); 9771 } 9772 9773 void mgmt_connect_failed(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type, 9774 u8 addr_type, u8 status) 9775 { 9776 struct mgmt_ev_connect_failed ev; 9777 9778 bacpy(&ev.addr.bdaddr, bdaddr); 9779 ev.addr.type = link_to_bdaddr(link_type, addr_type); 9780 ev.status = mgmt_status(status); 9781 9782 mgmt_event(MGMT_EV_CONNECT_FAILED, hdev, &ev, sizeof(ev), NULL); 9783 } 9784 9785 void mgmt_pin_code_request(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 secure) 9786 { 9787 struct mgmt_ev_pin_code_request ev; 9788 9789 bacpy(&ev.addr.bdaddr, bdaddr); 9790 ev.addr.type = BDADDR_BREDR; 9791 ev.secure = secure; 9792 9793 mgmt_event(MGMT_EV_PIN_CODE_REQUEST, hdev, &ev, sizeof(ev), NULL); 9794 } 9795 9796 void mgmt_pin_code_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr, 9797 u8 status) 9798 { 9799 struct mgmt_pending_cmd *cmd; 9800 9801 cmd = pending_find(MGMT_OP_PIN_CODE_REPLY, hdev); 9802 if (!cmd) 9803 return; 9804 9805 cmd->cmd_complete(cmd, mgmt_status(status)); 9806 mgmt_pending_remove(cmd); 9807 } 9808 9809 void mgmt_pin_code_neg_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr, 9810 u8 status) 9811 { 9812 struct mgmt_pending_cmd *cmd; 9813 9814 cmd = pending_find(MGMT_OP_PIN_CODE_NEG_REPLY, hdev); 9815 if (!cmd) 9816 return; 9817 9818 cmd->cmd_complete(cmd, mgmt_status(status)); 9819 mgmt_pending_remove(cmd); 9820 } 9821 9822 int mgmt_user_confirm_request(struct hci_dev *hdev, bdaddr_t *bdaddr, 9823 u8 link_type, u8 addr_type, u32 value, 9824 u8 confirm_hint) 9825 { 9826 struct mgmt_ev_user_confirm_request ev; 9827 9828 bt_dev_dbg(hdev, "bdaddr %pMR", bdaddr); 9829 9830 bacpy(&ev.addr.bdaddr, bdaddr); 9831 ev.addr.type = link_to_bdaddr(link_type, addr_type); 9832 ev.confirm_hint = confirm_hint; 9833 ev.value = cpu_to_le32(value); 9834 9835 return mgmt_event(MGMT_EV_USER_CONFIRM_REQUEST, hdev, &ev, sizeof(ev), 9836 NULL); 9837 } 9838 9839 int mgmt_user_passkey_request(struct hci_dev *hdev, bdaddr_t *bdaddr, 9840 u8 link_type, u8 addr_type) 9841 { 9842 struct mgmt_ev_user_passkey_request ev; 9843 9844 bt_dev_dbg(hdev, "bdaddr %pMR", bdaddr); 9845 9846 bacpy(&ev.addr.bdaddr, bdaddr); 9847 ev.addr.type = link_to_bdaddr(link_type, addr_type); 9848 9849 return mgmt_event(MGMT_EV_USER_PASSKEY_REQUEST, hdev, &ev, sizeof(ev), 9850 NULL); 9851 } 9852 9853 static int user_pairing_resp_complete(struct hci_dev *hdev, bdaddr_t *bdaddr, 9854 u8 link_type, u8 addr_type, u8 status, 9855 u8 opcode) 9856 { 9857 struct mgmt_pending_cmd *cmd; 9858 9859 cmd = pending_find(opcode, hdev); 9860 if (!cmd) 9861 return -ENOENT; 9862 9863 cmd->cmd_complete(cmd, mgmt_status(status)); 9864 mgmt_pending_remove(cmd); 9865 9866 return 0; 9867 } 9868 9869 int mgmt_user_confirm_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr, 9870 u8 link_type, u8 addr_type, u8 status) 9871 { 9872 return user_pairing_resp_complete(hdev, bdaddr, link_type, addr_type, 9873 status, MGMT_OP_USER_CONFIRM_REPLY); 9874 } 9875 9876 int mgmt_user_confirm_neg_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr, 9877 u8 link_type, u8 addr_type, u8 status) 9878 { 9879 return user_pairing_resp_complete(hdev, bdaddr, link_type, addr_type, 9880 status, 9881 MGMT_OP_USER_CONFIRM_NEG_REPLY); 9882 } 9883 9884 int mgmt_user_passkey_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr, 9885 u8 link_type, u8 addr_type, u8 status) 9886 { 9887 return user_pairing_resp_complete(hdev, bdaddr, link_type, addr_type, 9888 status, MGMT_OP_USER_PASSKEY_REPLY); 9889 } 9890 9891 int mgmt_user_passkey_neg_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr, 9892 u8 link_type, u8 addr_type, u8 status) 9893 { 9894 return user_pairing_resp_complete(hdev, bdaddr, link_type, addr_type, 9895 status, 9896 MGMT_OP_USER_PASSKEY_NEG_REPLY); 9897 } 9898 9899 int mgmt_user_passkey_notify(struct hci_dev *hdev, bdaddr_t *bdaddr, 9900 u8 link_type, u8 addr_type, u32 passkey, 9901 u8 entered) 9902 { 9903 struct mgmt_ev_passkey_notify ev; 9904 9905 bt_dev_dbg(hdev, "bdaddr %pMR", bdaddr); 9906 9907 bacpy(&ev.addr.bdaddr, bdaddr); 9908 ev.addr.type = link_to_bdaddr(link_type, addr_type); 9909 ev.passkey = __cpu_to_le32(passkey); 9910 ev.entered = entered; 9911 9912 return mgmt_event(MGMT_EV_PASSKEY_NOTIFY, hdev, &ev, sizeof(ev), NULL); 9913 } 9914 9915 void mgmt_auth_failed(struct hci_conn *conn, u8 hci_status) 9916 { 9917 struct mgmt_ev_auth_failed ev; 9918 struct mgmt_pending_cmd *cmd; 9919 u8 status = mgmt_status(hci_status); 9920 9921 bacpy(&ev.addr.bdaddr, &conn->dst); 9922 ev.addr.type = link_to_bdaddr(conn->type, conn->dst_type); 9923 ev.status = status; 9924 9925 cmd = find_pairing(conn); 9926 9927 mgmt_event(MGMT_EV_AUTH_FAILED, conn->hdev, &ev, sizeof(ev), 9928 cmd ? cmd->sk : NULL); 9929 9930 if (cmd) { 9931 cmd->cmd_complete(cmd, status); 9932 mgmt_pending_remove(cmd); 9933 } 9934 } 9935 9936 void mgmt_auth_enable_complete(struct hci_dev *hdev, u8 status) 9937 { 9938 struct cmd_lookup match = { NULL, hdev }; 9939 bool changed; 9940 9941 if (status) { 9942 u8 mgmt_err = mgmt_status(status); 9943 mgmt_pending_foreach(MGMT_OP_SET_LINK_SECURITY, hdev, 9944 cmd_status_rsp, &mgmt_err); 9945 return; 9946 } 9947 9948 if (test_bit(HCI_AUTH, &hdev->flags)) 9949 changed = !hci_dev_test_and_set_flag(hdev, HCI_LINK_SECURITY); 9950 else 9951 changed = hci_dev_test_and_clear_flag(hdev, HCI_LINK_SECURITY); 9952 9953 mgmt_pending_foreach(MGMT_OP_SET_LINK_SECURITY, hdev, settings_rsp, 9954 &match); 9955 9956 if (changed) 9957 new_settings(hdev, match.sk); 9958 9959 if (match.sk) 9960 sock_put(match.sk); 9961 } 9962 9963 static void sk_lookup(struct mgmt_pending_cmd *cmd, void *data) 9964 { 9965 struct cmd_lookup *match = data; 9966 9967 if (match->sk == NULL) { 9968 match->sk = cmd->sk; 9969 sock_hold(match->sk); 9970 } 9971 } 9972 9973 void mgmt_set_class_of_dev_complete(struct hci_dev *hdev, u8 *dev_class, 9974 u8 status) 9975 { 9976 struct cmd_lookup match = { NULL, hdev, mgmt_status(status) }; 9977 9978 mgmt_pending_foreach(MGMT_OP_SET_DEV_CLASS, hdev, sk_lookup, &match); 9979 mgmt_pending_foreach(MGMT_OP_ADD_UUID, hdev, sk_lookup, &match); 9980 mgmt_pending_foreach(MGMT_OP_REMOVE_UUID, hdev, sk_lookup, &match); 9981 9982 if (!status) { 9983 mgmt_limited_event(MGMT_EV_CLASS_OF_DEV_CHANGED, hdev, dev_class, 9984 3, HCI_MGMT_DEV_CLASS_EVENTS, NULL); 9985 ext_info_changed(hdev, NULL); 9986 } 9987 9988 if (match.sk) 9989 sock_put(match.sk); 9990 } 9991 9992 void mgmt_set_local_name_complete(struct hci_dev *hdev, u8 *name, u8 status) 9993 { 9994 struct mgmt_cp_set_local_name ev; 9995 struct mgmt_pending_cmd *cmd; 9996 9997 if (status) 9998 return; 9999 10000 memset(&ev, 0, sizeof(ev)); 10001 memcpy(ev.name, name, HCI_MAX_NAME_LENGTH); 10002 memcpy(ev.short_name, hdev->short_name, HCI_MAX_SHORT_NAME_LENGTH); 10003 10004 cmd = pending_find(MGMT_OP_SET_LOCAL_NAME, hdev); 10005 if (!cmd) { 10006 memcpy(hdev->dev_name, name, sizeof(hdev->dev_name)); 10007 10008 /* If this is a HCI command related to powering on the 10009 * HCI dev don't send any mgmt signals. 10010 */ 10011 if (hci_dev_test_flag(hdev, HCI_POWERING_DOWN)) 10012 return; 10013 10014 if (pending_find(MGMT_OP_SET_POWERED, hdev)) 10015 return; 10016 } 10017 10018 mgmt_limited_event(MGMT_EV_LOCAL_NAME_CHANGED, hdev, &ev, sizeof(ev), 10019 HCI_MGMT_LOCAL_NAME_EVENTS, cmd ? cmd->sk : NULL); 10020 ext_info_changed(hdev, cmd ? cmd->sk : NULL); 10021 } 10022 10023 static inline bool has_uuid(u8 *uuid, u16 uuid_count, u8 (*uuids)[16]) 10024 { 10025 int i; 10026 10027 for (i = 0; i < uuid_count; i++) { 10028 if (!memcmp(uuid, uuids[i], 16)) 10029 return true; 10030 } 10031 10032 return false; 10033 } 10034 10035 static bool eir_has_uuids(u8 *eir, u16 eir_len, u16 uuid_count, u8 (*uuids)[16]) 10036 { 10037 u16 parsed = 0; 10038 10039 while (parsed < eir_len) { 10040 u8 field_len = eir[0]; 10041 u8 uuid[16]; 10042 int i; 10043 10044 if (field_len == 0) 10045 break; 10046 10047 if (eir_len - parsed < field_len + 1) 10048 break; 10049 10050 switch (eir[1]) { 10051 case EIR_UUID16_ALL: 10052 case EIR_UUID16_SOME: 10053 for (i = 0; i + 3 <= field_len; i += 2) { 10054 memcpy(uuid, bluetooth_base_uuid, 16); 10055 uuid[13] = eir[i + 3]; 10056 uuid[12] = eir[i + 2]; 10057 if (has_uuid(uuid, uuid_count, uuids)) 10058 return true; 10059 } 10060 break; 10061 case EIR_UUID32_ALL: 10062 case EIR_UUID32_SOME: 10063 for (i = 0; i + 5 <= field_len; i += 4) { 10064 memcpy(uuid, bluetooth_base_uuid, 16); 10065 uuid[15] = eir[i + 5]; 10066 uuid[14] = eir[i + 4]; 10067 uuid[13] = eir[i + 3]; 10068 uuid[12] = eir[i + 2]; 10069 if (has_uuid(uuid, uuid_count, uuids)) 10070 return true; 10071 } 10072 break; 10073 case EIR_UUID128_ALL: 10074 case EIR_UUID128_SOME: 10075 for (i = 0; i + 17 <= field_len; i += 16) { 10076 memcpy(uuid, eir + i + 2, 16); 10077 if (has_uuid(uuid, uuid_count, uuids)) 10078 return true; 10079 } 10080 break; 10081 } 10082 10083 parsed += field_len + 1; 10084 eir += field_len + 1; 10085 } 10086 10087 return false; 10088 } 10089 10090 static bool is_filter_match(struct hci_dev *hdev, s8 rssi, u8 *eir, 10091 u16 eir_len, u8 *scan_rsp, u8 scan_rsp_len) 10092 { 10093 /* If a RSSI threshold has been specified, and 10094 * HCI_QUIRK_STRICT_DUPLICATE_FILTER is not set, then all results with 10095 * a RSSI smaller than the RSSI threshold will be dropped. If the quirk 10096 * is set, let it through for further processing, as we might need to 10097 * restart the scan. 10098 * 10099 * For BR/EDR devices (pre 1.2) providing no RSSI during inquiry, 10100 * the results are also dropped. 10101 */ 10102 if (hdev->discovery.rssi != HCI_RSSI_INVALID && 10103 (rssi == HCI_RSSI_INVALID || 10104 (rssi < hdev->discovery.rssi && 10105 !test_bit(HCI_QUIRK_STRICT_DUPLICATE_FILTER, &hdev->quirks)))) 10106 return false; 10107 10108 if (hdev->discovery.uuid_count != 0) { 10109 /* If a list of UUIDs is provided in filter, results with no 10110 * matching UUID should be dropped. 10111 */ 10112 if (!eir_has_uuids(eir, eir_len, hdev->discovery.uuid_count, 10113 hdev->discovery.uuids) && 10114 !eir_has_uuids(scan_rsp, scan_rsp_len, 10115 hdev->discovery.uuid_count, 10116 hdev->discovery.uuids)) 10117 return false; 10118 } 10119 10120 /* If duplicate filtering does not report RSSI changes, then restart 10121 * scanning to ensure updated result with updated RSSI values. 10122 */ 10123 if (test_bit(HCI_QUIRK_STRICT_DUPLICATE_FILTER, &hdev->quirks)) { 10124 /* Validate RSSI value against the RSSI threshold once more. */ 10125 if (hdev->discovery.rssi != HCI_RSSI_INVALID && 10126 rssi < hdev->discovery.rssi) 10127 return false; 10128 } 10129 10130 return true; 10131 } 10132 10133 void mgmt_adv_monitor_device_lost(struct hci_dev *hdev, u16 handle, 10134 bdaddr_t *bdaddr, u8 addr_type) 10135 { 10136 struct mgmt_ev_adv_monitor_device_lost ev; 10137 10138 ev.monitor_handle = cpu_to_le16(handle); 10139 bacpy(&ev.addr.bdaddr, bdaddr); 10140 ev.addr.type = addr_type; 10141 10142 mgmt_event(MGMT_EV_ADV_MONITOR_DEVICE_LOST, hdev, &ev, sizeof(ev), 10143 NULL); 10144 } 10145 10146 static void mgmt_send_adv_monitor_device_found(struct hci_dev *hdev, 10147 struct sk_buff *skb, 10148 struct sock *skip_sk, 10149 u16 handle) 10150 { 10151 struct sk_buff *advmon_skb; 10152 size_t advmon_skb_len; 10153 __le16 *monitor_handle; 10154 10155 if (!skb) 10156 return; 10157 10158 advmon_skb_len = (sizeof(struct mgmt_ev_adv_monitor_device_found) - 10159 sizeof(struct mgmt_ev_device_found)) + skb->len; 10160 advmon_skb = mgmt_alloc_skb(hdev, MGMT_EV_ADV_MONITOR_DEVICE_FOUND, 10161 advmon_skb_len); 10162 if (!advmon_skb) 10163 return; 10164 10165 /* ADV_MONITOR_DEVICE_FOUND is similar to DEVICE_FOUND event except 10166 * that it also has 'monitor_handle'. Make a copy of DEVICE_FOUND and 10167 * store monitor_handle of the matched monitor. 10168 */ 10169 monitor_handle = skb_put(advmon_skb, sizeof(*monitor_handle)); 10170 *monitor_handle = cpu_to_le16(handle); 10171 skb_put_data(advmon_skb, skb->data, skb->len); 10172 10173 mgmt_event_skb(advmon_skb, skip_sk); 10174 } 10175 10176 static void mgmt_adv_monitor_device_found(struct hci_dev *hdev, 10177 bdaddr_t *bdaddr, bool report_device, 10178 struct sk_buff *skb, 10179 struct sock *skip_sk) 10180 { 10181 struct monitored_device *dev, *tmp; 10182 bool matched = false; 10183 bool notified = false; 10184 10185 /* We have received the Advertisement Report because: 10186 * 1. the kernel has initiated active discovery 10187 * 2. if not, we have pend_le_reports > 0 in which case we are doing 10188 * passive scanning 10189 * 3. if none of the above is true, we have one or more active 10190 * Advertisement Monitor 10191 * 10192 * For case 1 and 2, report all advertisements via MGMT_EV_DEVICE_FOUND 10193 * and report ONLY one advertisement per device for the matched Monitor 10194 * via MGMT_EV_ADV_MONITOR_DEVICE_FOUND event. 10195 * 10196 * For case 3, since we are not active scanning and all advertisements 10197 * received are due to a matched Advertisement Monitor, report all 10198 * advertisements ONLY via MGMT_EV_ADV_MONITOR_DEVICE_FOUND event. 10199 */ 10200 if (report_device && !hdev->advmon_pend_notify) { 10201 mgmt_event_skb(skb, skip_sk); 10202 return; 10203 } 10204 10205 hdev->advmon_pend_notify = false; 10206 10207 list_for_each_entry_safe(dev, tmp, &hdev->monitored_devices, list) { 10208 if (!bacmp(&dev->bdaddr, bdaddr)) { 10209 matched = true; 10210 10211 if (!dev->notified) { 10212 mgmt_send_adv_monitor_device_found(hdev, skb, 10213 skip_sk, 10214 dev->handle); 10215 notified = true; 10216 dev->notified = true; 10217 } 10218 } 10219 10220 if (!dev->notified) 10221 hdev->advmon_pend_notify = true; 10222 } 10223 10224 if (!report_device && 10225 ((matched && !notified) || !msft_monitor_supported(hdev))) { 10226 /* Handle 0 indicates that we are not active scanning and this 10227 * is a subsequent advertisement report for an already matched 10228 * Advertisement Monitor or the controller offloading support 10229 * is not available. 10230 */ 10231 mgmt_send_adv_monitor_device_found(hdev, skb, skip_sk, 0); 10232 } 10233 10234 if (report_device) 10235 mgmt_event_skb(skb, skip_sk); 10236 else 10237 kfree_skb(skb); 10238 } 10239 10240 static void mesh_device_found(struct hci_dev *hdev, bdaddr_t *bdaddr, 10241 u8 addr_type, s8 rssi, u32 flags, u8 *eir, 10242 u16 eir_len, u8 *scan_rsp, u8 scan_rsp_len, 10243 u64 instant) 10244 { 10245 struct sk_buff *skb; 10246 struct mgmt_ev_mesh_device_found *ev; 10247 int i, j; 10248 10249 if (!hdev->mesh_ad_types[0]) 10250 goto accepted; 10251 10252 /* Scan for requested AD types */ 10253 if (eir_len > 0) { 10254 for (i = 0; i + 1 < eir_len; i += eir[i] + 1) { 10255 for (j = 0; j < sizeof(hdev->mesh_ad_types); j++) { 10256 if (!hdev->mesh_ad_types[j]) 10257 break; 10258 10259 if (hdev->mesh_ad_types[j] == eir[i + 1]) 10260 goto accepted; 10261 } 10262 } 10263 } 10264 10265 if (scan_rsp_len > 0) { 10266 for (i = 0; i + 1 < scan_rsp_len; i += scan_rsp[i] + 1) { 10267 for (j = 0; j < sizeof(hdev->mesh_ad_types); j++) { 10268 if (!hdev->mesh_ad_types[j]) 10269 break; 10270 10271 if (hdev->mesh_ad_types[j] == scan_rsp[i + 1]) 10272 goto accepted; 10273 } 10274 } 10275 } 10276 10277 return; 10278 10279 accepted: 10280 skb = mgmt_alloc_skb(hdev, MGMT_EV_MESH_DEVICE_FOUND, 10281 sizeof(*ev) + eir_len + scan_rsp_len); 10282 if (!skb) 10283 return; 10284 10285 ev = skb_put(skb, sizeof(*ev)); 10286 10287 bacpy(&ev->addr.bdaddr, bdaddr); 10288 ev->addr.type = link_to_bdaddr(LE_LINK, addr_type); 10289 ev->rssi = rssi; 10290 ev->flags = cpu_to_le32(flags); 10291 ev->instant = cpu_to_le64(instant); 10292 10293 if (eir_len > 0) 10294 /* Copy EIR or advertising data into event */ 10295 skb_put_data(skb, eir, eir_len); 10296 10297 if (scan_rsp_len > 0) 10298 /* Append scan response data to event */ 10299 skb_put_data(skb, scan_rsp, scan_rsp_len); 10300 10301 ev->eir_len = cpu_to_le16(eir_len + scan_rsp_len); 10302 10303 mgmt_event_skb(skb, NULL); 10304 } 10305 10306 void mgmt_device_found(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type, 10307 u8 addr_type, u8 *dev_class, s8 rssi, u32 flags, 10308 u8 *eir, u16 eir_len, u8 *scan_rsp, u8 scan_rsp_len, 10309 u64 instant) 10310 { 10311 struct sk_buff *skb; 10312 struct mgmt_ev_device_found *ev; 10313 bool report_device = hci_discovery_active(hdev); 10314 10315 if (hci_dev_test_flag(hdev, HCI_MESH) && link_type == LE_LINK) 10316 mesh_device_found(hdev, bdaddr, addr_type, rssi, flags, 10317 eir, eir_len, scan_rsp, scan_rsp_len, 10318 instant); 10319 10320 /* Don't send events for a non-kernel initiated discovery. With 10321 * LE one exception is if we have pend_le_reports > 0 in which 10322 * case we're doing passive scanning and want these events. 10323 */ 10324 if (!hci_discovery_active(hdev)) { 10325 if (link_type == ACL_LINK) 10326 return; 10327 if (link_type == LE_LINK && !list_empty(&hdev->pend_le_reports)) 10328 report_device = true; 10329 else if (!hci_is_adv_monitoring(hdev)) 10330 return; 10331 } 10332 10333 if (hdev->discovery.result_filtering) { 10334 /* We are using service discovery */ 10335 if (!is_filter_match(hdev, rssi, eir, eir_len, scan_rsp, 10336 scan_rsp_len)) 10337 return; 10338 } 10339 10340 if (hdev->discovery.limited) { 10341 /* Check for limited discoverable bit */ 10342 if (dev_class) { 10343 if (!(dev_class[1] & 0x20)) 10344 return; 10345 } else { 10346 u8 *flags = eir_get_data(eir, eir_len, EIR_FLAGS, NULL); 10347 if (!flags || !(flags[0] & LE_AD_LIMITED)) 10348 return; 10349 } 10350 } 10351 10352 /* Allocate skb. The 5 extra bytes are for the potential CoD field */ 10353 skb = mgmt_alloc_skb(hdev, MGMT_EV_DEVICE_FOUND, 10354 sizeof(*ev) + eir_len + scan_rsp_len + 5); 10355 if (!skb) 10356 return; 10357 10358 ev = skb_put(skb, sizeof(*ev)); 10359 10360 /* In case of device discovery with BR/EDR devices (pre 1.2), the 10361 * RSSI value was reported as 0 when not available. This behavior 10362 * is kept when using device discovery. This is required for full 10363 * backwards compatibility with the API. 10364 * 10365 * However when using service discovery, the value 127 will be 10366 * returned when the RSSI is not available. 10367 */ 10368 if (rssi == HCI_RSSI_INVALID && !hdev->discovery.report_invalid_rssi && 10369 link_type == ACL_LINK) 10370 rssi = 0; 10371 10372 bacpy(&ev->addr.bdaddr, bdaddr); 10373 ev->addr.type = link_to_bdaddr(link_type, addr_type); 10374 ev->rssi = rssi; 10375 ev->flags = cpu_to_le32(flags); 10376 10377 if (eir_len > 0) 10378 /* Copy EIR or advertising data into event */ 10379 skb_put_data(skb, eir, eir_len); 10380 10381 if (dev_class && !eir_get_data(eir, eir_len, EIR_CLASS_OF_DEV, NULL)) { 10382 u8 eir_cod[5]; 10383 10384 eir_len += eir_append_data(eir_cod, 0, EIR_CLASS_OF_DEV, 10385 dev_class, 3); 10386 skb_put_data(skb, eir_cod, sizeof(eir_cod)); 10387 } 10388 10389 if (scan_rsp_len > 0) 10390 /* Append scan response data to event */ 10391 skb_put_data(skb, scan_rsp, scan_rsp_len); 10392 10393 ev->eir_len = cpu_to_le16(eir_len + scan_rsp_len); 10394 10395 mgmt_adv_monitor_device_found(hdev, bdaddr, report_device, skb, NULL); 10396 } 10397 10398 void mgmt_remote_name(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type, 10399 u8 addr_type, s8 rssi, u8 *name, u8 name_len) 10400 { 10401 struct sk_buff *skb; 10402 struct mgmt_ev_device_found *ev; 10403 u16 eir_len = 0; 10404 u32 flags = 0; 10405 10406 skb = mgmt_alloc_skb(hdev, MGMT_EV_DEVICE_FOUND, 10407 sizeof(*ev) + (name ? eir_precalc_len(name_len) : 0)); 10408 10409 ev = skb_put(skb, sizeof(*ev)); 10410 bacpy(&ev->addr.bdaddr, bdaddr); 10411 ev->addr.type = link_to_bdaddr(link_type, addr_type); 10412 ev->rssi = rssi; 10413 10414 if (name) 10415 eir_len += eir_skb_put_data(skb, EIR_NAME_COMPLETE, name, name_len); 10416 else 10417 flags = MGMT_DEV_FOUND_NAME_REQUEST_FAILED; 10418 10419 ev->eir_len = cpu_to_le16(eir_len); 10420 ev->flags = cpu_to_le32(flags); 10421 10422 mgmt_event_skb(skb, NULL); 10423 } 10424 10425 void mgmt_discovering(struct hci_dev *hdev, u8 discovering) 10426 { 10427 struct mgmt_ev_discovering ev; 10428 10429 bt_dev_dbg(hdev, "discovering %u", discovering); 10430 10431 memset(&ev, 0, sizeof(ev)); 10432 ev.type = hdev->discovery.type; 10433 ev.discovering = discovering; 10434 10435 mgmt_event(MGMT_EV_DISCOVERING, hdev, &ev, sizeof(ev), NULL); 10436 } 10437 10438 void mgmt_suspending(struct hci_dev *hdev, u8 state) 10439 { 10440 struct mgmt_ev_controller_suspend ev; 10441 10442 ev.suspend_state = state; 10443 mgmt_event(MGMT_EV_CONTROLLER_SUSPEND, hdev, &ev, sizeof(ev), NULL); 10444 } 10445 10446 void mgmt_resuming(struct hci_dev *hdev, u8 reason, bdaddr_t *bdaddr, 10447 u8 addr_type) 10448 { 10449 struct mgmt_ev_controller_resume ev; 10450 10451 ev.wake_reason = reason; 10452 if (bdaddr) { 10453 bacpy(&ev.addr.bdaddr, bdaddr); 10454 ev.addr.type = addr_type; 10455 } else { 10456 memset(&ev.addr, 0, sizeof(ev.addr)); 10457 } 10458 10459 mgmt_event(MGMT_EV_CONTROLLER_RESUME, hdev, &ev, sizeof(ev), NULL); 10460 } 10461 10462 static struct hci_mgmt_chan chan = { 10463 .channel = HCI_CHANNEL_CONTROL, 10464 .handler_count = ARRAY_SIZE(mgmt_handlers), 10465 .handlers = mgmt_handlers, 10466 .hdev_init = mgmt_init_hdev, 10467 }; 10468 10469 int mgmt_init(void) 10470 { 10471 return hci_mgmt_chan_register(&chan); 10472 } 10473 10474 void mgmt_exit(void) 10475 { 10476 hci_mgmt_chan_unregister(&chan); 10477 } 10478 10479 void mgmt_cleanup(struct sock *sk) 10480 { 10481 struct mgmt_mesh_tx *mesh_tx; 10482 struct hci_dev *hdev; 10483 10484 read_lock(&hci_dev_list_lock); 10485 10486 list_for_each_entry(hdev, &hci_dev_list, list) { 10487 do { 10488 mesh_tx = mgmt_mesh_next(hdev, sk); 10489 10490 if (mesh_tx) 10491 mesh_send_complete(hdev, mesh_tx, true); 10492 } while (mesh_tx); 10493 } 10494 10495 read_unlock(&hci_dev_list_lock); 10496 } 10497