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