Bluetooth: Fix calling hci_conn_put too early
[deliverable/linux.git] / net / bluetooth / mgmt.c
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/l2cap.h>
33 #include <net/bluetooth/mgmt.h>
34
35 #include "smp.h"
36
37 #define MGMT_VERSION 1
38 #define MGMT_REVISION 8
39
40 static const u16 mgmt_commands[] = {
41 MGMT_OP_READ_INDEX_LIST,
42 MGMT_OP_READ_INFO,
43 MGMT_OP_SET_POWERED,
44 MGMT_OP_SET_DISCOVERABLE,
45 MGMT_OP_SET_CONNECTABLE,
46 MGMT_OP_SET_FAST_CONNECTABLE,
47 MGMT_OP_SET_BONDABLE,
48 MGMT_OP_SET_LINK_SECURITY,
49 MGMT_OP_SET_SSP,
50 MGMT_OP_SET_HS,
51 MGMT_OP_SET_LE,
52 MGMT_OP_SET_DEV_CLASS,
53 MGMT_OP_SET_LOCAL_NAME,
54 MGMT_OP_ADD_UUID,
55 MGMT_OP_REMOVE_UUID,
56 MGMT_OP_LOAD_LINK_KEYS,
57 MGMT_OP_LOAD_LONG_TERM_KEYS,
58 MGMT_OP_DISCONNECT,
59 MGMT_OP_GET_CONNECTIONS,
60 MGMT_OP_PIN_CODE_REPLY,
61 MGMT_OP_PIN_CODE_NEG_REPLY,
62 MGMT_OP_SET_IO_CAPABILITY,
63 MGMT_OP_PAIR_DEVICE,
64 MGMT_OP_CANCEL_PAIR_DEVICE,
65 MGMT_OP_UNPAIR_DEVICE,
66 MGMT_OP_USER_CONFIRM_REPLY,
67 MGMT_OP_USER_CONFIRM_NEG_REPLY,
68 MGMT_OP_USER_PASSKEY_REPLY,
69 MGMT_OP_USER_PASSKEY_NEG_REPLY,
70 MGMT_OP_READ_LOCAL_OOB_DATA,
71 MGMT_OP_ADD_REMOTE_OOB_DATA,
72 MGMT_OP_REMOVE_REMOTE_OOB_DATA,
73 MGMT_OP_START_DISCOVERY,
74 MGMT_OP_STOP_DISCOVERY,
75 MGMT_OP_CONFIRM_NAME,
76 MGMT_OP_BLOCK_DEVICE,
77 MGMT_OP_UNBLOCK_DEVICE,
78 MGMT_OP_SET_DEVICE_ID,
79 MGMT_OP_SET_ADVERTISING,
80 MGMT_OP_SET_BREDR,
81 MGMT_OP_SET_STATIC_ADDRESS,
82 MGMT_OP_SET_SCAN_PARAMS,
83 MGMT_OP_SET_SECURE_CONN,
84 MGMT_OP_SET_DEBUG_KEYS,
85 MGMT_OP_SET_PRIVACY,
86 MGMT_OP_LOAD_IRKS,
87 MGMT_OP_GET_CONN_INFO,
88 MGMT_OP_GET_CLOCK_INFO,
89 MGMT_OP_ADD_DEVICE,
90 MGMT_OP_REMOVE_DEVICE,
91 MGMT_OP_LOAD_CONN_PARAM,
92 MGMT_OP_READ_UNCONF_INDEX_LIST,
93 MGMT_OP_READ_CONFIG_INFO,
94 MGMT_OP_SET_EXTERNAL_CONFIG,
95 MGMT_OP_SET_PUBLIC_ADDRESS,
96 MGMT_OP_START_SERVICE_DISCOVERY,
97 };
98
99 static const u16 mgmt_events[] = {
100 MGMT_EV_CONTROLLER_ERROR,
101 MGMT_EV_INDEX_ADDED,
102 MGMT_EV_INDEX_REMOVED,
103 MGMT_EV_NEW_SETTINGS,
104 MGMT_EV_CLASS_OF_DEV_CHANGED,
105 MGMT_EV_LOCAL_NAME_CHANGED,
106 MGMT_EV_NEW_LINK_KEY,
107 MGMT_EV_NEW_LONG_TERM_KEY,
108 MGMT_EV_DEVICE_CONNECTED,
109 MGMT_EV_DEVICE_DISCONNECTED,
110 MGMT_EV_CONNECT_FAILED,
111 MGMT_EV_PIN_CODE_REQUEST,
112 MGMT_EV_USER_CONFIRM_REQUEST,
113 MGMT_EV_USER_PASSKEY_REQUEST,
114 MGMT_EV_AUTH_FAILED,
115 MGMT_EV_DEVICE_FOUND,
116 MGMT_EV_DISCOVERING,
117 MGMT_EV_DEVICE_BLOCKED,
118 MGMT_EV_DEVICE_UNBLOCKED,
119 MGMT_EV_DEVICE_UNPAIRED,
120 MGMT_EV_PASSKEY_NOTIFY,
121 MGMT_EV_NEW_IRK,
122 MGMT_EV_NEW_CSRK,
123 MGMT_EV_DEVICE_ADDED,
124 MGMT_EV_DEVICE_REMOVED,
125 MGMT_EV_NEW_CONN_PARAM,
126 MGMT_EV_UNCONF_INDEX_ADDED,
127 MGMT_EV_UNCONF_INDEX_REMOVED,
128 MGMT_EV_NEW_CONFIG_OPTIONS,
129 };
130
131 #define CACHE_TIMEOUT msecs_to_jiffies(2 * 1000)
132
133 struct pending_cmd {
134 struct list_head list;
135 u16 opcode;
136 int index;
137 void *param;
138 size_t param_len;
139 struct sock *sk;
140 void *user_data;
141 void (*cmd_complete)(struct pending_cmd *cmd, u8 status);
142 };
143
144 /* HCI to MGMT error code conversion table */
145 static u8 mgmt_status_table[] = {
146 MGMT_STATUS_SUCCESS,
147 MGMT_STATUS_UNKNOWN_COMMAND, /* Unknown Command */
148 MGMT_STATUS_NOT_CONNECTED, /* No Connection */
149 MGMT_STATUS_FAILED, /* Hardware Failure */
150 MGMT_STATUS_CONNECT_FAILED, /* Page Timeout */
151 MGMT_STATUS_AUTH_FAILED, /* Authentication Failed */
152 MGMT_STATUS_AUTH_FAILED, /* PIN or Key Missing */
153 MGMT_STATUS_NO_RESOURCES, /* Memory Full */
154 MGMT_STATUS_TIMEOUT, /* Connection Timeout */
155 MGMT_STATUS_NO_RESOURCES, /* Max Number of Connections */
156 MGMT_STATUS_NO_RESOURCES, /* Max Number of SCO Connections */
157 MGMT_STATUS_ALREADY_CONNECTED, /* ACL Connection Exists */
158 MGMT_STATUS_BUSY, /* Command Disallowed */
159 MGMT_STATUS_NO_RESOURCES, /* Rejected Limited Resources */
160 MGMT_STATUS_REJECTED, /* Rejected Security */
161 MGMT_STATUS_REJECTED, /* Rejected Personal */
162 MGMT_STATUS_TIMEOUT, /* Host Timeout */
163 MGMT_STATUS_NOT_SUPPORTED, /* Unsupported Feature */
164 MGMT_STATUS_INVALID_PARAMS, /* Invalid Parameters */
165 MGMT_STATUS_DISCONNECTED, /* OE User Ended Connection */
166 MGMT_STATUS_NO_RESOURCES, /* OE Low Resources */
167 MGMT_STATUS_DISCONNECTED, /* OE Power Off */
168 MGMT_STATUS_DISCONNECTED, /* Connection Terminated */
169 MGMT_STATUS_BUSY, /* Repeated Attempts */
170 MGMT_STATUS_REJECTED, /* Pairing Not Allowed */
171 MGMT_STATUS_FAILED, /* Unknown LMP PDU */
172 MGMT_STATUS_NOT_SUPPORTED, /* Unsupported Remote Feature */
173 MGMT_STATUS_REJECTED, /* SCO Offset Rejected */
174 MGMT_STATUS_REJECTED, /* SCO Interval Rejected */
175 MGMT_STATUS_REJECTED, /* Air Mode Rejected */
176 MGMT_STATUS_INVALID_PARAMS, /* Invalid LMP Parameters */
177 MGMT_STATUS_FAILED, /* Unspecified Error */
178 MGMT_STATUS_NOT_SUPPORTED, /* Unsupported LMP Parameter Value */
179 MGMT_STATUS_FAILED, /* Role Change Not Allowed */
180 MGMT_STATUS_TIMEOUT, /* LMP Response Timeout */
181 MGMT_STATUS_FAILED, /* LMP Error Transaction Collision */
182 MGMT_STATUS_FAILED, /* LMP PDU Not Allowed */
183 MGMT_STATUS_REJECTED, /* Encryption Mode Not Accepted */
184 MGMT_STATUS_FAILED, /* Unit Link Key Used */
185 MGMT_STATUS_NOT_SUPPORTED, /* QoS Not Supported */
186 MGMT_STATUS_TIMEOUT, /* Instant Passed */
187 MGMT_STATUS_NOT_SUPPORTED, /* Pairing Not Supported */
188 MGMT_STATUS_FAILED, /* Transaction Collision */
189 MGMT_STATUS_INVALID_PARAMS, /* Unacceptable Parameter */
190 MGMT_STATUS_REJECTED, /* QoS Rejected */
191 MGMT_STATUS_NOT_SUPPORTED, /* Classification Not Supported */
192 MGMT_STATUS_REJECTED, /* Insufficient Security */
193 MGMT_STATUS_INVALID_PARAMS, /* Parameter Out Of Range */
194 MGMT_STATUS_BUSY, /* Role Switch Pending */
195 MGMT_STATUS_FAILED, /* Slot Violation */
196 MGMT_STATUS_FAILED, /* Role Switch Failed */
197 MGMT_STATUS_INVALID_PARAMS, /* EIR Too Large */
198 MGMT_STATUS_NOT_SUPPORTED, /* Simple Pairing Not Supported */
199 MGMT_STATUS_BUSY, /* Host Busy Pairing */
200 MGMT_STATUS_REJECTED, /* Rejected, No Suitable Channel */
201 MGMT_STATUS_BUSY, /* Controller Busy */
202 MGMT_STATUS_INVALID_PARAMS, /* Unsuitable Connection Interval */
203 MGMT_STATUS_TIMEOUT, /* Directed Advertising Timeout */
204 MGMT_STATUS_AUTH_FAILED, /* Terminated Due to MIC Failure */
205 MGMT_STATUS_CONNECT_FAILED, /* Connection Establishment Failed */
206 MGMT_STATUS_CONNECT_FAILED, /* MAC Connection Failed */
207 };
208
209 static u8 mgmt_status(u8 hci_status)
210 {
211 if (hci_status < ARRAY_SIZE(mgmt_status_table))
212 return mgmt_status_table[hci_status];
213
214 return MGMT_STATUS_FAILED;
215 }
216
217 static int mgmt_event(u16 event, struct hci_dev *hdev, void *data, u16 data_len,
218 struct sock *skip_sk)
219 {
220 struct sk_buff *skb;
221 struct mgmt_hdr *hdr;
222
223 skb = alloc_skb(sizeof(*hdr) + data_len, GFP_KERNEL);
224 if (!skb)
225 return -ENOMEM;
226
227 hdr = (void *) skb_put(skb, sizeof(*hdr));
228 hdr->opcode = cpu_to_le16(event);
229 if (hdev)
230 hdr->index = cpu_to_le16(hdev->id);
231 else
232 hdr->index = cpu_to_le16(MGMT_INDEX_NONE);
233 hdr->len = cpu_to_le16(data_len);
234
235 if (data)
236 memcpy(skb_put(skb, data_len), data, data_len);
237
238 /* Time stamp */
239 __net_timestamp(skb);
240
241 hci_send_to_control(skb, skip_sk);
242 kfree_skb(skb);
243
244 return 0;
245 }
246
247 static int cmd_status(struct sock *sk, u16 index, u16 cmd, u8 status)
248 {
249 struct sk_buff *skb;
250 struct mgmt_hdr *hdr;
251 struct mgmt_ev_cmd_status *ev;
252 int err;
253
254 BT_DBG("sock %p, index %u, cmd %u, status %u", sk, index, cmd, status);
255
256 skb = alloc_skb(sizeof(*hdr) + sizeof(*ev), GFP_KERNEL);
257 if (!skb)
258 return -ENOMEM;
259
260 hdr = (void *) skb_put(skb, sizeof(*hdr));
261
262 hdr->opcode = cpu_to_le16(MGMT_EV_CMD_STATUS);
263 hdr->index = cpu_to_le16(index);
264 hdr->len = cpu_to_le16(sizeof(*ev));
265
266 ev = (void *) skb_put(skb, sizeof(*ev));
267 ev->status = status;
268 ev->opcode = cpu_to_le16(cmd);
269
270 err = sock_queue_rcv_skb(sk, skb);
271 if (err < 0)
272 kfree_skb(skb);
273
274 return err;
275 }
276
277 static int cmd_complete(struct sock *sk, u16 index, u16 cmd, u8 status,
278 void *rp, size_t rp_len)
279 {
280 struct sk_buff *skb;
281 struct mgmt_hdr *hdr;
282 struct mgmt_ev_cmd_complete *ev;
283 int err;
284
285 BT_DBG("sock %p", sk);
286
287 skb = alloc_skb(sizeof(*hdr) + sizeof(*ev) + rp_len, GFP_KERNEL);
288 if (!skb)
289 return -ENOMEM;
290
291 hdr = (void *) skb_put(skb, sizeof(*hdr));
292
293 hdr->opcode = cpu_to_le16(MGMT_EV_CMD_COMPLETE);
294 hdr->index = cpu_to_le16(index);
295 hdr->len = cpu_to_le16(sizeof(*ev) + rp_len);
296
297 ev = (void *) skb_put(skb, sizeof(*ev) + rp_len);
298 ev->opcode = cpu_to_le16(cmd);
299 ev->status = status;
300
301 if (rp)
302 memcpy(ev->data, rp, rp_len);
303
304 err = sock_queue_rcv_skb(sk, skb);
305 if (err < 0)
306 kfree_skb(skb);
307
308 return err;
309 }
310
311 static int read_version(struct sock *sk, struct hci_dev *hdev, void *data,
312 u16 data_len)
313 {
314 struct mgmt_rp_read_version rp;
315
316 BT_DBG("sock %p", sk);
317
318 rp.version = MGMT_VERSION;
319 rp.revision = cpu_to_le16(MGMT_REVISION);
320
321 return cmd_complete(sk, MGMT_INDEX_NONE, MGMT_OP_READ_VERSION, 0, &rp,
322 sizeof(rp));
323 }
324
325 static int read_commands(struct sock *sk, struct hci_dev *hdev, void *data,
326 u16 data_len)
327 {
328 struct mgmt_rp_read_commands *rp;
329 const u16 num_commands = ARRAY_SIZE(mgmt_commands);
330 const u16 num_events = ARRAY_SIZE(mgmt_events);
331 __le16 *opcode;
332 size_t rp_size;
333 int i, err;
334
335 BT_DBG("sock %p", sk);
336
337 rp_size = sizeof(*rp) + ((num_commands + num_events) * sizeof(u16));
338
339 rp = kmalloc(rp_size, GFP_KERNEL);
340 if (!rp)
341 return -ENOMEM;
342
343 rp->num_commands = cpu_to_le16(num_commands);
344 rp->num_events = cpu_to_le16(num_events);
345
346 for (i = 0, opcode = rp->opcodes; i < num_commands; i++, opcode++)
347 put_unaligned_le16(mgmt_commands[i], opcode);
348
349 for (i = 0; i < num_events; i++, opcode++)
350 put_unaligned_le16(mgmt_events[i], opcode);
351
352 err = cmd_complete(sk, MGMT_INDEX_NONE, MGMT_OP_READ_COMMANDS, 0, rp,
353 rp_size);
354 kfree(rp);
355
356 return err;
357 }
358
359 static int read_index_list(struct sock *sk, struct hci_dev *hdev, void *data,
360 u16 data_len)
361 {
362 struct mgmt_rp_read_index_list *rp;
363 struct hci_dev *d;
364 size_t rp_len;
365 u16 count;
366 int err;
367
368 BT_DBG("sock %p", sk);
369
370 read_lock(&hci_dev_list_lock);
371
372 count = 0;
373 list_for_each_entry(d, &hci_dev_list, list) {
374 if (d->dev_type == HCI_BREDR &&
375 !test_bit(HCI_UNCONFIGURED, &d->dev_flags))
376 count++;
377 }
378
379 rp_len = sizeof(*rp) + (2 * count);
380 rp = kmalloc(rp_len, GFP_ATOMIC);
381 if (!rp) {
382 read_unlock(&hci_dev_list_lock);
383 return -ENOMEM;
384 }
385
386 count = 0;
387 list_for_each_entry(d, &hci_dev_list, list) {
388 if (test_bit(HCI_SETUP, &d->dev_flags) ||
389 test_bit(HCI_CONFIG, &d->dev_flags) ||
390 test_bit(HCI_USER_CHANNEL, &d->dev_flags))
391 continue;
392
393 /* Devices marked as raw-only are neither configured
394 * nor unconfigured controllers.
395 */
396 if (test_bit(HCI_QUIRK_RAW_DEVICE, &d->quirks))
397 continue;
398
399 if (d->dev_type == HCI_BREDR &&
400 !test_bit(HCI_UNCONFIGURED, &d->dev_flags)) {
401 rp->index[count++] = cpu_to_le16(d->id);
402 BT_DBG("Added hci%u", d->id);
403 }
404 }
405
406 rp->num_controllers = cpu_to_le16(count);
407 rp_len = sizeof(*rp) + (2 * count);
408
409 read_unlock(&hci_dev_list_lock);
410
411 err = cmd_complete(sk, MGMT_INDEX_NONE, MGMT_OP_READ_INDEX_LIST, 0, rp,
412 rp_len);
413
414 kfree(rp);
415
416 return err;
417 }
418
419 static int read_unconf_index_list(struct sock *sk, struct hci_dev *hdev,
420 void *data, u16 data_len)
421 {
422 struct mgmt_rp_read_unconf_index_list *rp;
423 struct hci_dev *d;
424 size_t rp_len;
425 u16 count;
426 int err;
427
428 BT_DBG("sock %p", sk);
429
430 read_lock(&hci_dev_list_lock);
431
432 count = 0;
433 list_for_each_entry(d, &hci_dev_list, list) {
434 if (d->dev_type == HCI_BREDR &&
435 test_bit(HCI_UNCONFIGURED, &d->dev_flags))
436 count++;
437 }
438
439 rp_len = sizeof(*rp) + (2 * count);
440 rp = kmalloc(rp_len, GFP_ATOMIC);
441 if (!rp) {
442 read_unlock(&hci_dev_list_lock);
443 return -ENOMEM;
444 }
445
446 count = 0;
447 list_for_each_entry(d, &hci_dev_list, list) {
448 if (test_bit(HCI_SETUP, &d->dev_flags) ||
449 test_bit(HCI_CONFIG, &d->dev_flags) ||
450 test_bit(HCI_USER_CHANNEL, &d->dev_flags))
451 continue;
452
453 /* Devices marked as raw-only are neither configured
454 * nor unconfigured controllers.
455 */
456 if (test_bit(HCI_QUIRK_RAW_DEVICE, &d->quirks))
457 continue;
458
459 if (d->dev_type == HCI_BREDR &&
460 test_bit(HCI_UNCONFIGURED, &d->dev_flags)) {
461 rp->index[count++] = cpu_to_le16(d->id);
462 BT_DBG("Added hci%u", d->id);
463 }
464 }
465
466 rp->num_controllers = cpu_to_le16(count);
467 rp_len = sizeof(*rp) + (2 * count);
468
469 read_unlock(&hci_dev_list_lock);
470
471 err = cmd_complete(sk, MGMT_INDEX_NONE, MGMT_OP_READ_UNCONF_INDEX_LIST,
472 0, rp, rp_len);
473
474 kfree(rp);
475
476 return err;
477 }
478
479 static bool is_configured(struct hci_dev *hdev)
480 {
481 if (test_bit(HCI_QUIRK_EXTERNAL_CONFIG, &hdev->quirks) &&
482 !test_bit(HCI_EXT_CONFIGURED, &hdev->dev_flags))
483 return false;
484
485 if (test_bit(HCI_QUIRK_INVALID_BDADDR, &hdev->quirks) &&
486 !bacmp(&hdev->public_addr, BDADDR_ANY))
487 return false;
488
489 return true;
490 }
491
492 static __le32 get_missing_options(struct hci_dev *hdev)
493 {
494 u32 options = 0;
495
496 if (test_bit(HCI_QUIRK_EXTERNAL_CONFIG, &hdev->quirks) &&
497 !test_bit(HCI_EXT_CONFIGURED, &hdev->dev_flags))
498 options |= MGMT_OPTION_EXTERNAL_CONFIG;
499
500 if (test_bit(HCI_QUIRK_INVALID_BDADDR, &hdev->quirks) &&
501 !bacmp(&hdev->public_addr, BDADDR_ANY))
502 options |= MGMT_OPTION_PUBLIC_ADDRESS;
503
504 return cpu_to_le32(options);
505 }
506
507 static int new_options(struct hci_dev *hdev, struct sock *skip)
508 {
509 __le32 options = get_missing_options(hdev);
510
511 return mgmt_event(MGMT_EV_NEW_CONFIG_OPTIONS, hdev, &options,
512 sizeof(options), skip);
513 }
514
515 static int send_options_rsp(struct sock *sk, u16 opcode, struct hci_dev *hdev)
516 {
517 __le32 options = get_missing_options(hdev);
518
519 return cmd_complete(sk, hdev->id, opcode, 0, &options,
520 sizeof(options));
521 }
522
523 static int read_config_info(struct sock *sk, struct hci_dev *hdev,
524 void *data, u16 data_len)
525 {
526 struct mgmt_rp_read_config_info rp;
527 u32 options = 0;
528
529 BT_DBG("sock %p %s", sk, hdev->name);
530
531 hci_dev_lock(hdev);
532
533 memset(&rp, 0, sizeof(rp));
534 rp.manufacturer = cpu_to_le16(hdev->manufacturer);
535
536 if (test_bit(HCI_QUIRK_EXTERNAL_CONFIG, &hdev->quirks))
537 options |= MGMT_OPTION_EXTERNAL_CONFIG;
538
539 if (hdev->set_bdaddr)
540 options |= MGMT_OPTION_PUBLIC_ADDRESS;
541
542 rp.supported_options = cpu_to_le32(options);
543 rp.missing_options = get_missing_options(hdev);
544
545 hci_dev_unlock(hdev);
546
547 return cmd_complete(sk, hdev->id, MGMT_OP_READ_CONFIG_INFO, 0, &rp,
548 sizeof(rp));
549 }
550
551 static u32 get_supported_settings(struct hci_dev *hdev)
552 {
553 u32 settings = 0;
554
555 settings |= MGMT_SETTING_POWERED;
556 settings |= MGMT_SETTING_BONDABLE;
557 settings |= MGMT_SETTING_DEBUG_KEYS;
558 settings |= MGMT_SETTING_CONNECTABLE;
559 settings |= MGMT_SETTING_DISCOVERABLE;
560
561 if (lmp_bredr_capable(hdev)) {
562 if (hdev->hci_ver >= BLUETOOTH_VER_1_2)
563 settings |= MGMT_SETTING_FAST_CONNECTABLE;
564 settings |= MGMT_SETTING_BREDR;
565 settings |= MGMT_SETTING_LINK_SECURITY;
566
567 if (lmp_ssp_capable(hdev)) {
568 settings |= MGMT_SETTING_SSP;
569 settings |= MGMT_SETTING_HS;
570 }
571
572 if (lmp_sc_capable(hdev) ||
573 test_bit(HCI_FORCE_SC, &hdev->dbg_flags))
574 settings |= MGMT_SETTING_SECURE_CONN;
575 }
576
577 if (lmp_le_capable(hdev)) {
578 settings |= MGMT_SETTING_LE;
579 settings |= MGMT_SETTING_ADVERTISING;
580 settings |= MGMT_SETTING_SECURE_CONN;
581 settings |= MGMT_SETTING_PRIVACY;
582 }
583
584 if (test_bit(HCI_QUIRK_EXTERNAL_CONFIG, &hdev->quirks) ||
585 hdev->set_bdaddr)
586 settings |= MGMT_SETTING_CONFIGURATION;
587
588 return settings;
589 }
590
591 static u32 get_current_settings(struct hci_dev *hdev)
592 {
593 u32 settings = 0;
594
595 if (hdev_is_powered(hdev))
596 settings |= MGMT_SETTING_POWERED;
597
598 if (test_bit(HCI_CONNECTABLE, &hdev->dev_flags))
599 settings |= MGMT_SETTING_CONNECTABLE;
600
601 if (test_bit(HCI_FAST_CONNECTABLE, &hdev->dev_flags))
602 settings |= MGMT_SETTING_FAST_CONNECTABLE;
603
604 if (test_bit(HCI_DISCOVERABLE, &hdev->dev_flags))
605 settings |= MGMT_SETTING_DISCOVERABLE;
606
607 if (test_bit(HCI_BONDABLE, &hdev->dev_flags))
608 settings |= MGMT_SETTING_BONDABLE;
609
610 if (test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags))
611 settings |= MGMT_SETTING_BREDR;
612
613 if (test_bit(HCI_LE_ENABLED, &hdev->dev_flags))
614 settings |= MGMT_SETTING_LE;
615
616 if (test_bit(HCI_LINK_SECURITY, &hdev->dev_flags))
617 settings |= MGMT_SETTING_LINK_SECURITY;
618
619 if (test_bit(HCI_SSP_ENABLED, &hdev->dev_flags))
620 settings |= MGMT_SETTING_SSP;
621
622 if (test_bit(HCI_HS_ENABLED, &hdev->dev_flags))
623 settings |= MGMT_SETTING_HS;
624
625 if (test_bit(HCI_ADVERTISING, &hdev->dev_flags))
626 settings |= MGMT_SETTING_ADVERTISING;
627
628 if (test_bit(HCI_SC_ENABLED, &hdev->dev_flags))
629 settings |= MGMT_SETTING_SECURE_CONN;
630
631 if (test_bit(HCI_KEEP_DEBUG_KEYS, &hdev->dev_flags))
632 settings |= MGMT_SETTING_DEBUG_KEYS;
633
634 if (test_bit(HCI_PRIVACY, &hdev->dev_flags))
635 settings |= MGMT_SETTING_PRIVACY;
636
637 return settings;
638 }
639
640 #define PNP_INFO_SVCLASS_ID 0x1200
641
642 static u8 *create_uuid16_list(struct hci_dev *hdev, u8 *data, ptrdiff_t len)
643 {
644 u8 *ptr = data, *uuids_start = NULL;
645 struct bt_uuid *uuid;
646
647 if (len < 4)
648 return ptr;
649
650 list_for_each_entry(uuid, &hdev->uuids, list) {
651 u16 uuid16;
652
653 if (uuid->size != 16)
654 continue;
655
656 uuid16 = get_unaligned_le16(&uuid->uuid[12]);
657 if (uuid16 < 0x1100)
658 continue;
659
660 if (uuid16 == PNP_INFO_SVCLASS_ID)
661 continue;
662
663 if (!uuids_start) {
664 uuids_start = ptr;
665 uuids_start[0] = 1;
666 uuids_start[1] = EIR_UUID16_ALL;
667 ptr += 2;
668 }
669
670 /* Stop if not enough space to put next UUID */
671 if ((ptr - data) + sizeof(u16) > len) {
672 uuids_start[1] = EIR_UUID16_SOME;
673 break;
674 }
675
676 *ptr++ = (uuid16 & 0x00ff);
677 *ptr++ = (uuid16 & 0xff00) >> 8;
678 uuids_start[0] += sizeof(uuid16);
679 }
680
681 return ptr;
682 }
683
684 static u8 *create_uuid32_list(struct hci_dev *hdev, u8 *data, ptrdiff_t len)
685 {
686 u8 *ptr = data, *uuids_start = NULL;
687 struct bt_uuid *uuid;
688
689 if (len < 6)
690 return ptr;
691
692 list_for_each_entry(uuid, &hdev->uuids, list) {
693 if (uuid->size != 32)
694 continue;
695
696 if (!uuids_start) {
697 uuids_start = ptr;
698 uuids_start[0] = 1;
699 uuids_start[1] = EIR_UUID32_ALL;
700 ptr += 2;
701 }
702
703 /* Stop if not enough space to put next UUID */
704 if ((ptr - data) + sizeof(u32) > len) {
705 uuids_start[1] = EIR_UUID32_SOME;
706 break;
707 }
708
709 memcpy(ptr, &uuid->uuid[12], sizeof(u32));
710 ptr += sizeof(u32);
711 uuids_start[0] += sizeof(u32);
712 }
713
714 return ptr;
715 }
716
717 static u8 *create_uuid128_list(struct hci_dev *hdev, u8 *data, ptrdiff_t len)
718 {
719 u8 *ptr = data, *uuids_start = NULL;
720 struct bt_uuid *uuid;
721
722 if (len < 18)
723 return ptr;
724
725 list_for_each_entry(uuid, &hdev->uuids, list) {
726 if (uuid->size != 128)
727 continue;
728
729 if (!uuids_start) {
730 uuids_start = ptr;
731 uuids_start[0] = 1;
732 uuids_start[1] = EIR_UUID128_ALL;
733 ptr += 2;
734 }
735
736 /* Stop if not enough space to put next UUID */
737 if ((ptr - data) + 16 > len) {
738 uuids_start[1] = EIR_UUID128_SOME;
739 break;
740 }
741
742 memcpy(ptr, uuid->uuid, 16);
743 ptr += 16;
744 uuids_start[0] += 16;
745 }
746
747 return ptr;
748 }
749
750 static struct pending_cmd *mgmt_pending_find(u16 opcode, struct hci_dev *hdev)
751 {
752 struct pending_cmd *cmd;
753
754 list_for_each_entry(cmd, &hdev->mgmt_pending, list) {
755 if (cmd->opcode == opcode)
756 return cmd;
757 }
758
759 return NULL;
760 }
761
762 static struct pending_cmd *mgmt_pending_find_data(u16 opcode,
763 struct hci_dev *hdev,
764 const void *data)
765 {
766 struct pending_cmd *cmd;
767
768 list_for_each_entry(cmd, &hdev->mgmt_pending, list) {
769 if (cmd->user_data != data)
770 continue;
771 if (cmd->opcode == opcode)
772 return cmd;
773 }
774
775 return NULL;
776 }
777
778 static u8 create_scan_rsp_data(struct hci_dev *hdev, u8 *ptr)
779 {
780 u8 ad_len = 0;
781 size_t name_len;
782
783 name_len = strlen(hdev->dev_name);
784 if (name_len > 0) {
785 size_t max_len = HCI_MAX_AD_LENGTH - ad_len - 2;
786
787 if (name_len > max_len) {
788 name_len = max_len;
789 ptr[1] = EIR_NAME_SHORT;
790 } else
791 ptr[1] = EIR_NAME_COMPLETE;
792
793 ptr[0] = name_len + 1;
794
795 memcpy(ptr + 2, hdev->dev_name, name_len);
796
797 ad_len += (name_len + 2);
798 ptr += (name_len + 2);
799 }
800
801 return ad_len;
802 }
803
804 static void update_scan_rsp_data(struct hci_request *req)
805 {
806 struct hci_dev *hdev = req->hdev;
807 struct hci_cp_le_set_scan_rsp_data cp;
808 u8 len;
809
810 if (!test_bit(HCI_LE_ENABLED, &hdev->dev_flags))
811 return;
812
813 memset(&cp, 0, sizeof(cp));
814
815 len = create_scan_rsp_data(hdev, cp.data);
816
817 if (hdev->scan_rsp_data_len == len &&
818 memcmp(cp.data, hdev->scan_rsp_data, len) == 0)
819 return;
820
821 memcpy(hdev->scan_rsp_data, cp.data, sizeof(cp.data));
822 hdev->scan_rsp_data_len = len;
823
824 cp.length = len;
825
826 hci_req_add(req, HCI_OP_LE_SET_SCAN_RSP_DATA, sizeof(cp), &cp);
827 }
828
829 static u8 get_adv_discov_flags(struct hci_dev *hdev)
830 {
831 struct pending_cmd *cmd;
832
833 /* If there's a pending mgmt command the flags will not yet have
834 * their final values, so check for this first.
835 */
836 cmd = mgmt_pending_find(MGMT_OP_SET_DISCOVERABLE, hdev);
837 if (cmd) {
838 struct mgmt_mode *cp = cmd->param;
839 if (cp->val == 0x01)
840 return LE_AD_GENERAL;
841 else if (cp->val == 0x02)
842 return LE_AD_LIMITED;
843 } else {
844 if (test_bit(HCI_LIMITED_DISCOVERABLE, &hdev->dev_flags))
845 return LE_AD_LIMITED;
846 else if (test_bit(HCI_DISCOVERABLE, &hdev->dev_flags))
847 return LE_AD_GENERAL;
848 }
849
850 return 0;
851 }
852
853 static u8 create_adv_data(struct hci_dev *hdev, u8 *ptr)
854 {
855 u8 ad_len = 0, flags = 0;
856
857 flags |= get_adv_discov_flags(hdev);
858
859 if (!test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags))
860 flags |= LE_AD_NO_BREDR;
861
862 if (flags) {
863 BT_DBG("adv flags 0x%02x", flags);
864
865 ptr[0] = 2;
866 ptr[1] = EIR_FLAGS;
867 ptr[2] = flags;
868
869 ad_len += 3;
870 ptr += 3;
871 }
872
873 if (hdev->adv_tx_power != HCI_TX_POWER_INVALID) {
874 ptr[0] = 2;
875 ptr[1] = EIR_TX_POWER;
876 ptr[2] = (u8) hdev->adv_tx_power;
877
878 ad_len += 3;
879 ptr += 3;
880 }
881
882 return ad_len;
883 }
884
885 static void update_adv_data(struct hci_request *req)
886 {
887 struct hci_dev *hdev = req->hdev;
888 struct hci_cp_le_set_adv_data cp;
889 u8 len;
890
891 if (!test_bit(HCI_LE_ENABLED, &hdev->dev_flags))
892 return;
893
894 memset(&cp, 0, sizeof(cp));
895
896 len = create_adv_data(hdev, cp.data);
897
898 if (hdev->adv_data_len == len &&
899 memcmp(cp.data, hdev->adv_data, len) == 0)
900 return;
901
902 memcpy(hdev->adv_data, cp.data, sizeof(cp.data));
903 hdev->adv_data_len = len;
904
905 cp.length = len;
906
907 hci_req_add(req, HCI_OP_LE_SET_ADV_DATA, sizeof(cp), &cp);
908 }
909
910 int mgmt_update_adv_data(struct hci_dev *hdev)
911 {
912 struct hci_request req;
913
914 hci_req_init(&req, hdev);
915 update_adv_data(&req);
916
917 return hci_req_run(&req, NULL);
918 }
919
920 static void create_eir(struct hci_dev *hdev, u8 *data)
921 {
922 u8 *ptr = data;
923 size_t name_len;
924
925 name_len = strlen(hdev->dev_name);
926
927 if (name_len > 0) {
928 /* EIR Data type */
929 if (name_len > 48) {
930 name_len = 48;
931 ptr[1] = EIR_NAME_SHORT;
932 } else
933 ptr[1] = EIR_NAME_COMPLETE;
934
935 /* EIR Data length */
936 ptr[0] = name_len + 1;
937
938 memcpy(ptr + 2, hdev->dev_name, name_len);
939
940 ptr += (name_len + 2);
941 }
942
943 if (hdev->inq_tx_power != HCI_TX_POWER_INVALID) {
944 ptr[0] = 2;
945 ptr[1] = EIR_TX_POWER;
946 ptr[2] = (u8) hdev->inq_tx_power;
947
948 ptr += 3;
949 }
950
951 if (hdev->devid_source > 0) {
952 ptr[0] = 9;
953 ptr[1] = EIR_DEVICE_ID;
954
955 put_unaligned_le16(hdev->devid_source, ptr + 2);
956 put_unaligned_le16(hdev->devid_vendor, ptr + 4);
957 put_unaligned_le16(hdev->devid_product, ptr + 6);
958 put_unaligned_le16(hdev->devid_version, ptr + 8);
959
960 ptr += 10;
961 }
962
963 ptr = create_uuid16_list(hdev, ptr, HCI_MAX_EIR_LENGTH - (ptr - data));
964 ptr = create_uuid32_list(hdev, ptr, HCI_MAX_EIR_LENGTH - (ptr - data));
965 ptr = create_uuid128_list(hdev, ptr, HCI_MAX_EIR_LENGTH - (ptr - data));
966 }
967
968 static void update_eir(struct hci_request *req)
969 {
970 struct hci_dev *hdev = req->hdev;
971 struct hci_cp_write_eir cp;
972
973 if (!hdev_is_powered(hdev))
974 return;
975
976 if (!lmp_ext_inq_capable(hdev))
977 return;
978
979 if (!test_bit(HCI_SSP_ENABLED, &hdev->dev_flags))
980 return;
981
982 if (test_bit(HCI_SERVICE_CACHE, &hdev->dev_flags))
983 return;
984
985 memset(&cp, 0, sizeof(cp));
986
987 create_eir(hdev, cp.data);
988
989 if (memcmp(cp.data, hdev->eir, sizeof(cp.data)) == 0)
990 return;
991
992 memcpy(hdev->eir, cp.data, sizeof(cp.data));
993
994 hci_req_add(req, HCI_OP_WRITE_EIR, sizeof(cp), &cp);
995 }
996
997 static u8 get_service_classes(struct hci_dev *hdev)
998 {
999 struct bt_uuid *uuid;
1000 u8 val = 0;
1001
1002 list_for_each_entry(uuid, &hdev->uuids, list)
1003 val |= uuid->svc_hint;
1004
1005 return val;
1006 }
1007
1008 static void update_class(struct hci_request *req)
1009 {
1010 struct hci_dev *hdev = req->hdev;
1011 u8 cod[3];
1012
1013 BT_DBG("%s", hdev->name);
1014
1015 if (!hdev_is_powered(hdev))
1016 return;
1017
1018 if (!test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags))
1019 return;
1020
1021 if (test_bit(HCI_SERVICE_CACHE, &hdev->dev_flags))
1022 return;
1023
1024 cod[0] = hdev->minor_class;
1025 cod[1] = hdev->major_class;
1026 cod[2] = get_service_classes(hdev);
1027
1028 if (test_bit(HCI_LIMITED_DISCOVERABLE, &hdev->dev_flags))
1029 cod[1] |= 0x20;
1030
1031 if (memcmp(cod, hdev->dev_class, 3) == 0)
1032 return;
1033
1034 hci_req_add(req, HCI_OP_WRITE_CLASS_OF_DEV, sizeof(cod), cod);
1035 }
1036
1037 static bool get_connectable(struct hci_dev *hdev)
1038 {
1039 struct pending_cmd *cmd;
1040
1041 /* If there's a pending mgmt command the flag will not yet have
1042 * it's final value, so check for this first.
1043 */
1044 cmd = mgmt_pending_find(MGMT_OP_SET_CONNECTABLE, hdev);
1045 if (cmd) {
1046 struct mgmt_mode *cp = cmd->param;
1047 return cp->val;
1048 }
1049
1050 return test_bit(HCI_CONNECTABLE, &hdev->dev_flags);
1051 }
1052
1053 static void disable_advertising(struct hci_request *req)
1054 {
1055 u8 enable = 0x00;
1056
1057 hci_req_add(req, HCI_OP_LE_SET_ADV_ENABLE, sizeof(enable), &enable);
1058 }
1059
1060 static void enable_advertising(struct hci_request *req)
1061 {
1062 struct hci_dev *hdev = req->hdev;
1063 struct hci_cp_le_set_adv_param cp;
1064 u8 own_addr_type, enable = 0x01;
1065 bool connectable;
1066
1067 if (hci_conn_num(hdev, LE_LINK) > 0)
1068 return;
1069
1070 if (test_bit(HCI_LE_ADV, &hdev->dev_flags))
1071 disable_advertising(req);
1072
1073 /* Clear the HCI_LE_ADV bit temporarily so that the
1074 * hci_update_random_address knows that it's safe to go ahead
1075 * and write a new random address. The flag will be set back on
1076 * as soon as the SET_ADV_ENABLE HCI command completes.
1077 */
1078 clear_bit(HCI_LE_ADV, &hdev->dev_flags);
1079
1080 connectable = get_connectable(hdev);
1081
1082 /* Set require_privacy to true only when non-connectable
1083 * advertising is used. In that case it is fine to use a
1084 * non-resolvable private address.
1085 */
1086 if (hci_update_random_address(req, !connectable, &own_addr_type) < 0)
1087 return;
1088
1089 memset(&cp, 0, sizeof(cp));
1090 cp.min_interval = cpu_to_le16(hdev->le_adv_min_interval);
1091 cp.max_interval = cpu_to_le16(hdev->le_adv_max_interval);
1092 cp.type = connectable ? LE_ADV_IND : LE_ADV_NONCONN_IND;
1093 cp.own_address_type = own_addr_type;
1094 cp.channel_map = hdev->le_adv_channel_map;
1095
1096 hci_req_add(req, HCI_OP_LE_SET_ADV_PARAM, sizeof(cp), &cp);
1097
1098 hci_req_add(req, HCI_OP_LE_SET_ADV_ENABLE, sizeof(enable), &enable);
1099 }
1100
1101 static void service_cache_off(struct work_struct *work)
1102 {
1103 struct hci_dev *hdev = container_of(work, struct hci_dev,
1104 service_cache.work);
1105 struct hci_request req;
1106
1107 if (!test_and_clear_bit(HCI_SERVICE_CACHE, &hdev->dev_flags))
1108 return;
1109
1110 hci_req_init(&req, hdev);
1111
1112 hci_dev_lock(hdev);
1113
1114 update_eir(&req);
1115 update_class(&req);
1116
1117 hci_dev_unlock(hdev);
1118
1119 hci_req_run(&req, NULL);
1120 }
1121
1122 static void rpa_expired(struct work_struct *work)
1123 {
1124 struct hci_dev *hdev = container_of(work, struct hci_dev,
1125 rpa_expired.work);
1126 struct hci_request req;
1127
1128 BT_DBG("");
1129
1130 set_bit(HCI_RPA_EXPIRED, &hdev->dev_flags);
1131
1132 if (!test_bit(HCI_ADVERTISING, &hdev->dev_flags))
1133 return;
1134
1135 /* The generation of a new RPA and programming it into the
1136 * controller happens in the enable_advertising() function.
1137 */
1138 hci_req_init(&req, hdev);
1139 enable_advertising(&req);
1140 hci_req_run(&req, NULL);
1141 }
1142
1143 static void mgmt_init_hdev(struct sock *sk, struct hci_dev *hdev)
1144 {
1145 if (test_and_set_bit(HCI_MGMT, &hdev->dev_flags))
1146 return;
1147
1148 INIT_DELAYED_WORK(&hdev->service_cache, service_cache_off);
1149 INIT_DELAYED_WORK(&hdev->rpa_expired, rpa_expired);
1150
1151 /* Non-mgmt controlled devices get this bit set
1152 * implicitly so that pairing works for them, however
1153 * for mgmt we require user-space to explicitly enable
1154 * it
1155 */
1156 clear_bit(HCI_BONDABLE, &hdev->dev_flags);
1157 }
1158
1159 static int read_controller_info(struct sock *sk, struct hci_dev *hdev,
1160 void *data, u16 data_len)
1161 {
1162 struct mgmt_rp_read_info rp;
1163
1164 BT_DBG("sock %p %s", sk, hdev->name);
1165
1166 hci_dev_lock(hdev);
1167
1168 memset(&rp, 0, sizeof(rp));
1169
1170 bacpy(&rp.bdaddr, &hdev->bdaddr);
1171
1172 rp.version = hdev->hci_ver;
1173 rp.manufacturer = cpu_to_le16(hdev->manufacturer);
1174
1175 rp.supported_settings = cpu_to_le32(get_supported_settings(hdev));
1176 rp.current_settings = cpu_to_le32(get_current_settings(hdev));
1177
1178 memcpy(rp.dev_class, hdev->dev_class, 3);
1179
1180 memcpy(rp.name, hdev->dev_name, sizeof(hdev->dev_name));
1181 memcpy(rp.short_name, hdev->short_name, sizeof(hdev->short_name));
1182
1183 hci_dev_unlock(hdev);
1184
1185 return cmd_complete(sk, hdev->id, MGMT_OP_READ_INFO, 0, &rp,
1186 sizeof(rp));
1187 }
1188
1189 static void mgmt_pending_free(struct pending_cmd *cmd)
1190 {
1191 sock_put(cmd->sk);
1192 kfree(cmd->param);
1193 kfree(cmd);
1194 }
1195
1196 static struct pending_cmd *mgmt_pending_add(struct sock *sk, u16 opcode,
1197 struct hci_dev *hdev, void *data,
1198 u16 len)
1199 {
1200 struct pending_cmd *cmd;
1201
1202 cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
1203 if (!cmd)
1204 return NULL;
1205
1206 cmd->opcode = opcode;
1207 cmd->index = hdev->id;
1208
1209 cmd->param = kmemdup(data, len, GFP_KERNEL);
1210 if (!cmd->param) {
1211 kfree(cmd);
1212 return NULL;
1213 }
1214
1215 cmd->param_len = len;
1216
1217 cmd->sk = sk;
1218 sock_hold(sk);
1219
1220 list_add(&cmd->list, &hdev->mgmt_pending);
1221
1222 return cmd;
1223 }
1224
1225 static void mgmt_pending_foreach(u16 opcode, struct hci_dev *hdev,
1226 void (*cb)(struct pending_cmd *cmd,
1227 void *data),
1228 void *data)
1229 {
1230 struct pending_cmd *cmd, *tmp;
1231
1232 list_for_each_entry_safe(cmd, tmp, &hdev->mgmt_pending, list) {
1233 if (opcode > 0 && cmd->opcode != opcode)
1234 continue;
1235
1236 cb(cmd, data);
1237 }
1238 }
1239
1240 static void mgmt_pending_remove(struct pending_cmd *cmd)
1241 {
1242 list_del(&cmd->list);
1243 mgmt_pending_free(cmd);
1244 }
1245
1246 static int send_settings_rsp(struct sock *sk, u16 opcode, struct hci_dev *hdev)
1247 {
1248 __le32 settings = cpu_to_le32(get_current_settings(hdev));
1249
1250 return cmd_complete(sk, hdev->id, opcode, 0, &settings,
1251 sizeof(settings));
1252 }
1253
1254 static void clean_up_hci_complete(struct hci_dev *hdev, u8 status)
1255 {
1256 BT_DBG("%s status 0x%02x", hdev->name, status);
1257
1258 if (hci_conn_count(hdev) == 0) {
1259 cancel_delayed_work(&hdev->power_off);
1260 queue_work(hdev->req_workqueue, &hdev->power_off.work);
1261 }
1262 }
1263
1264 static bool hci_stop_discovery(struct hci_request *req)
1265 {
1266 struct hci_dev *hdev = req->hdev;
1267 struct hci_cp_remote_name_req_cancel cp;
1268 struct inquiry_entry *e;
1269
1270 switch (hdev->discovery.state) {
1271 case DISCOVERY_FINDING:
1272 if (test_bit(HCI_INQUIRY, &hdev->flags)) {
1273 hci_req_add(req, HCI_OP_INQUIRY_CANCEL, 0, NULL);
1274 } else {
1275 cancel_delayed_work(&hdev->le_scan_disable);
1276 hci_req_add_le_scan_disable(req);
1277 }
1278
1279 return true;
1280
1281 case DISCOVERY_RESOLVING:
1282 e = hci_inquiry_cache_lookup_resolve(hdev, BDADDR_ANY,
1283 NAME_PENDING);
1284 if (!e)
1285 break;
1286
1287 bacpy(&cp.bdaddr, &e->data.bdaddr);
1288 hci_req_add(req, HCI_OP_REMOTE_NAME_REQ_CANCEL, sizeof(cp),
1289 &cp);
1290
1291 return true;
1292
1293 default:
1294 /* Passive scanning */
1295 if (test_bit(HCI_LE_SCAN, &hdev->dev_flags)) {
1296 hci_req_add_le_scan_disable(req);
1297 return true;
1298 }
1299
1300 break;
1301 }
1302
1303 return false;
1304 }
1305
1306 static int clean_up_hci_state(struct hci_dev *hdev)
1307 {
1308 struct hci_request req;
1309 struct hci_conn *conn;
1310 bool discov_stopped;
1311 int err;
1312
1313 hci_req_init(&req, hdev);
1314
1315 if (test_bit(HCI_ISCAN, &hdev->flags) ||
1316 test_bit(HCI_PSCAN, &hdev->flags)) {
1317 u8 scan = 0x00;
1318 hci_req_add(&req, HCI_OP_WRITE_SCAN_ENABLE, 1, &scan);
1319 }
1320
1321 if (test_bit(HCI_LE_ADV, &hdev->dev_flags))
1322 disable_advertising(&req);
1323
1324 discov_stopped = hci_stop_discovery(&req);
1325
1326 list_for_each_entry(conn, &hdev->conn_hash.list, list) {
1327 struct hci_cp_disconnect dc;
1328 struct hci_cp_reject_conn_req rej;
1329
1330 switch (conn->state) {
1331 case BT_CONNECTED:
1332 case BT_CONFIG:
1333 dc.handle = cpu_to_le16(conn->handle);
1334 dc.reason = 0x15; /* Terminated due to Power Off */
1335 hci_req_add(&req, HCI_OP_DISCONNECT, sizeof(dc), &dc);
1336 break;
1337 case BT_CONNECT:
1338 if (conn->type == LE_LINK)
1339 hci_req_add(&req, HCI_OP_LE_CREATE_CONN_CANCEL,
1340 0, NULL);
1341 else if (conn->type == ACL_LINK)
1342 hci_req_add(&req, HCI_OP_CREATE_CONN_CANCEL,
1343 6, &conn->dst);
1344 break;
1345 case BT_CONNECT2:
1346 bacpy(&rej.bdaddr, &conn->dst);
1347 rej.reason = 0x15; /* Terminated due to Power Off */
1348 if (conn->type == ACL_LINK)
1349 hci_req_add(&req, HCI_OP_REJECT_CONN_REQ,
1350 sizeof(rej), &rej);
1351 else if (conn->type == SCO_LINK)
1352 hci_req_add(&req, HCI_OP_REJECT_SYNC_CONN_REQ,
1353 sizeof(rej), &rej);
1354 break;
1355 }
1356 }
1357
1358 err = hci_req_run(&req, clean_up_hci_complete);
1359 if (!err && discov_stopped)
1360 hci_discovery_set_state(hdev, DISCOVERY_STOPPING);
1361
1362 return err;
1363 }
1364
1365 static int set_powered(struct sock *sk, struct hci_dev *hdev, void *data,
1366 u16 len)
1367 {
1368 struct mgmt_mode *cp = data;
1369 struct pending_cmd *cmd;
1370 int err;
1371
1372 BT_DBG("request for %s", hdev->name);
1373
1374 if (cp->val != 0x00 && cp->val != 0x01)
1375 return cmd_status(sk, hdev->id, MGMT_OP_SET_POWERED,
1376 MGMT_STATUS_INVALID_PARAMS);
1377
1378 hci_dev_lock(hdev);
1379
1380 if (mgmt_pending_find(MGMT_OP_SET_POWERED, hdev)) {
1381 err = cmd_status(sk, hdev->id, MGMT_OP_SET_POWERED,
1382 MGMT_STATUS_BUSY);
1383 goto failed;
1384 }
1385
1386 if (test_and_clear_bit(HCI_AUTO_OFF, &hdev->dev_flags)) {
1387 cancel_delayed_work(&hdev->power_off);
1388
1389 if (cp->val) {
1390 mgmt_pending_add(sk, MGMT_OP_SET_POWERED, hdev,
1391 data, len);
1392 err = mgmt_powered(hdev, 1);
1393 goto failed;
1394 }
1395 }
1396
1397 if (!!cp->val == hdev_is_powered(hdev)) {
1398 err = send_settings_rsp(sk, MGMT_OP_SET_POWERED, hdev);
1399 goto failed;
1400 }
1401
1402 cmd = mgmt_pending_add(sk, MGMT_OP_SET_POWERED, hdev, data, len);
1403 if (!cmd) {
1404 err = -ENOMEM;
1405 goto failed;
1406 }
1407
1408 if (cp->val) {
1409 queue_work(hdev->req_workqueue, &hdev->power_on);
1410 err = 0;
1411 } else {
1412 /* Disconnect connections, stop scans, etc */
1413 err = clean_up_hci_state(hdev);
1414 if (!err)
1415 queue_delayed_work(hdev->req_workqueue, &hdev->power_off,
1416 HCI_POWER_OFF_TIMEOUT);
1417
1418 /* ENODATA means there were no HCI commands queued */
1419 if (err == -ENODATA) {
1420 cancel_delayed_work(&hdev->power_off);
1421 queue_work(hdev->req_workqueue, &hdev->power_off.work);
1422 err = 0;
1423 }
1424 }
1425
1426 failed:
1427 hci_dev_unlock(hdev);
1428 return err;
1429 }
1430
1431 static int new_settings(struct hci_dev *hdev, struct sock *skip)
1432 {
1433 __le32 ev;
1434
1435 ev = cpu_to_le32(get_current_settings(hdev));
1436
1437 return mgmt_event(MGMT_EV_NEW_SETTINGS, hdev, &ev, sizeof(ev), skip);
1438 }
1439
1440 int mgmt_new_settings(struct hci_dev *hdev)
1441 {
1442 return new_settings(hdev, NULL);
1443 }
1444
1445 struct cmd_lookup {
1446 struct sock *sk;
1447 struct hci_dev *hdev;
1448 u8 mgmt_status;
1449 };
1450
1451 static void settings_rsp(struct pending_cmd *cmd, void *data)
1452 {
1453 struct cmd_lookup *match = data;
1454
1455 send_settings_rsp(cmd->sk, cmd->opcode, match->hdev);
1456
1457 list_del(&cmd->list);
1458
1459 if (match->sk == NULL) {
1460 match->sk = cmd->sk;
1461 sock_hold(match->sk);
1462 }
1463
1464 mgmt_pending_free(cmd);
1465 }
1466
1467 static void cmd_status_rsp(struct pending_cmd *cmd, void *data)
1468 {
1469 u8 *status = data;
1470
1471 cmd_status(cmd->sk, cmd->index, cmd->opcode, *status);
1472 mgmt_pending_remove(cmd);
1473 }
1474
1475 static void cmd_complete_rsp(struct pending_cmd *cmd, void *data)
1476 {
1477 if (cmd->cmd_complete) {
1478 u8 *status = data;
1479
1480 cmd->cmd_complete(cmd, *status);
1481 mgmt_pending_remove(cmd);
1482
1483 return;
1484 }
1485
1486 cmd_status_rsp(cmd, data);
1487 }
1488
1489 static void generic_cmd_complete(struct pending_cmd *cmd, u8 status)
1490 {
1491 cmd_complete(cmd->sk, cmd->index, cmd->opcode, status, cmd->param,
1492 cmd->param_len);
1493 }
1494
1495 static void addr_cmd_complete(struct pending_cmd *cmd, u8 status)
1496 {
1497 cmd_complete(cmd->sk, cmd->index, cmd->opcode, status, cmd->param,
1498 sizeof(struct mgmt_addr_info));
1499 }
1500
1501 static u8 mgmt_bredr_support(struct hci_dev *hdev)
1502 {
1503 if (!lmp_bredr_capable(hdev))
1504 return MGMT_STATUS_NOT_SUPPORTED;
1505 else if (!test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags))
1506 return MGMT_STATUS_REJECTED;
1507 else
1508 return MGMT_STATUS_SUCCESS;
1509 }
1510
1511 static u8 mgmt_le_support(struct hci_dev *hdev)
1512 {
1513 if (!lmp_le_capable(hdev))
1514 return MGMT_STATUS_NOT_SUPPORTED;
1515 else if (!test_bit(HCI_LE_ENABLED, &hdev->dev_flags))
1516 return MGMT_STATUS_REJECTED;
1517 else
1518 return MGMT_STATUS_SUCCESS;
1519 }
1520
1521 static void set_discoverable_complete(struct hci_dev *hdev, u8 status)
1522 {
1523 struct pending_cmd *cmd;
1524 struct mgmt_mode *cp;
1525 struct hci_request req;
1526 bool changed;
1527
1528 BT_DBG("status 0x%02x", status);
1529
1530 hci_dev_lock(hdev);
1531
1532 cmd = mgmt_pending_find(MGMT_OP_SET_DISCOVERABLE, hdev);
1533 if (!cmd)
1534 goto unlock;
1535
1536 if (status) {
1537 u8 mgmt_err = mgmt_status(status);
1538 cmd_status(cmd->sk, cmd->index, cmd->opcode, mgmt_err);
1539 clear_bit(HCI_LIMITED_DISCOVERABLE, &hdev->dev_flags);
1540 goto remove_cmd;
1541 }
1542
1543 cp = cmd->param;
1544 if (cp->val) {
1545 changed = !test_and_set_bit(HCI_DISCOVERABLE,
1546 &hdev->dev_flags);
1547
1548 if (hdev->discov_timeout > 0) {
1549 int to = msecs_to_jiffies(hdev->discov_timeout * 1000);
1550 queue_delayed_work(hdev->workqueue, &hdev->discov_off,
1551 to);
1552 }
1553 } else {
1554 changed = test_and_clear_bit(HCI_DISCOVERABLE,
1555 &hdev->dev_flags);
1556 }
1557
1558 send_settings_rsp(cmd->sk, MGMT_OP_SET_DISCOVERABLE, hdev);
1559
1560 if (changed)
1561 new_settings(hdev, cmd->sk);
1562
1563 /* When the discoverable mode gets changed, make sure
1564 * that class of device has the limited discoverable
1565 * bit correctly set. Also update page scan based on whitelist
1566 * entries.
1567 */
1568 hci_req_init(&req, hdev);
1569 hci_update_page_scan(hdev, &req);
1570 update_class(&req);
1571 hci_req_run(&req, NULL);
1572
1573 remove_cmd:
1574 mgmt_pending_remove(cmd);
1575
1576 unlock:
1577 hci_dev_unlock(hdev);
1578 }
1579
1580 static int set_discoverable(struct sock *sk, struct hci_dev *hdev, void *data,
1581 u16 len)
1582 {
1583 struct mgmt_cp_set_discoverable *cp = data;
1584 struct pending_cmd *cmd;
1585 struct hci_request req;
1586 u16 timeout;
1587 u8 scan;
1588 int err;
1589
1590 BT_DBG("request for %s", hdev->name);
1591
1592 if (!test_bit(HCI_LE_ENABLED, &hdev->dev_flags) &&
1593 !test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags))
1594 return cmd_status(sk, hdev->id, MGMT_OP_SET_DISCOVERABLE,
1595 MGMT_STATUS_REJECTED);
1596
1597 if (cp->val != 0x00 && cp->val != 0x01 && cp->val != 0x02)
1598 return cmd_status(sk, hdev->id, MGMT_OP_SET_DISCOVERABLE,
1599 MGMT_STATUS_INVALID_PARAMS);
1600
1601 timeout = __le16_to_cpu(cp->timeout);
1602
1603 /* Disabling discoverable requires that no timeout is set,
1604 * and enabling limited discoverable requires a timeout.
1605 */
1606 if ((cp->val == 0x00 && timeout > 0) ||
1607 (cp->val == 0x02 && timeout == 0))
1608 return cmd_status(sk, hdev->id, MGMT_OP_SET_DISCOVERABLE,
1609 MGMT_STATUS_INVALID_PARAMS);
1610
1611 hci_dev_lock(hdev);
1612
1613 if (!hdev_is_powered(hdev) && timeout > 0) {
1614 err = cmd_status(sk, hdev->id, MGMT_OP_SET_DISCOVERABLE,
1615 MGMT_STATUS_NOT_POWERED);
1616 goto failed;
1617 }
1618
1619 if (mgmt_pending_find(MGMT_OP_SET_DISCOVERABLE, hdev) ||
1620 mgmt_pending_find(MGMT_OP_SET_CONNECTABLE, hdev)) {
1621 err = cmd_status(sk, hdev->id, MGMT_OP_SET_DISCOVERABLE,
1622 MGMT_STATUS_BUSY);
1623 goto failed;
1624 }
1625
1626 if (!test_bit(HCI_CONNECTABLE, &hdev->dev_flags)) {
1627 err = cmd_status(sk, hdev->id, MGMT_OP_SET_DISCOVERABLE,
1628 MGMT_STATUS_REJECTED);
1629 goto failed;
1630 }
1631
1632 if (!hdev_is_powered(hdev)) {
1633 bool changed = false;
1634
1635 /* Setting limited discoverable when powered off is
1636 * not a valid operation since it requires a timeout
1637 * and so no need to check HCI_LIMITED_DISCOVERABLE.
1638 */
1639 if (!!cp->val != test_bit(HCI_DISCOVERABLE, &hdev->dev_flags)) {
1640 change_bit(HCI_DISCOVERABLE, &hdev->dev_flags);
1641 changed = true;
1642 }
1643
1644 err = send_settings_rsp(sk, MGMT_OP_SET_DISCOVERABLE, hdev);
1645 if (err < 0)
1646 goto failed;
1647
1648 if (changed)
1649 err = new_settings(hdev, sk);
1650
1651 goto failed;
1652 }
1653
1654 /* If the current mode is the same, then just update the timeout
1655 * value with the new value. And if only the timeout gets updated,
1656 * then no need for any HCI transactions.
1657 */
1658 if (!!cp->val == test_bit(HCI_DISCOVERABLE, &hdev->dev_flags) &&
1659 (cp->val == 0x02) == test_bit(HCI_LIMITED_DISCOVERABLE,
1660 &hdev->dev_flags)) {
1661 cancel_delayed_work(&hdev->discov_off);
1662 hdev->discov_timeout = timeout;
1663
1664 if (cp->val && hdev->discov_timeout > 0) {
1665 int to = msecs_to_jiffies(hdev->discov_timeout * 1000);
1666 queue_delayed_work(hdev->workqueue, &hdev->discov_off,
1667 to);
1668 }
1669
1670 err = send_settings_rsp(sk, MGMT_OP_SET_DISCOVERABLE, hdev);
1671 goto failed;
1672 }
1673
1674 cmd = mgmt_pending_add(sk, MGMT_OP_SET_DISCOVERABLE, hdev, data, len);
1675 if (!cmd) {
1676 err = -ENOMEM;
1677 goto failed;
1678 }
1679
1680 /* Cancel any potential discoverable timeout that might be
1681 * still active and store new timeout value. The arming of
1682 * the timeout happens in the complete handler.
1683 */
1684 cancel_delayed_work(&hdev->discov_off);
1685 hdev->discov_timeout = timeout;
1686
1687 /* Limited discoverable mode */
1688 if (cp->val == 0x02)
1689 set_bit(HCI_LIMITED_DISCOVERABLE, &hdev->dev_flags);
1690 else
1691 clear_bit(HCI_LIMITED_DISCOVERABLE, &hdev->dev_flags);
1692
1693 hci_req_init(&req, hdev);
1694
1695 /* The procedure for LE-only controllers is much simpler - just
1696 * update the advertising data.
1697 */
1698 if (!test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags))
1699 goto update_ad;
1700
1701 scan = SCAN_PAGE;
1702
1703 if (cp->val) {
1704 struct hci_cp_write_current_iac_lap hci_cp;
1705
1706 if (cp->val == 0x02) {
1707 /* Limited discoverable mode */
1708 hci_cp.num_iac = min_t(u8, hdev->num_iac, 2);
1709 hci_cp.iac_lap[0] = 0x00; /* LIAC */
1710 hci_cp.iac_lap[1] = 0x8b;
1711 hci_cp.iac_lap[2] = 0x9e;
1712 hci_cp.iac_lap[3] = 0x33; /* GIAC */
1713 hci_cp.iac_lap[4] = 0x8b;
1714 hci_cp.iac_lap[5] = 0x9e;
1715 } else {
1716 /* General discoverable mode */
1717 hci_cp.num_iac = 1;
1718 hci_cp.iac_lap[0] = 0x33; /* GIAC */
1719 hci_cp.iac_lap[1] = 0x8b;
1720 hci_cp.iac_lap[2] = 0x9e;
1721 }
1722
1723 hci_req_add(&req, HCI_OP_WRITE_CURRENT_IAC_LAP,
1724 (hci_cp.num_iac * 3) + 1, &hci_cp);
1725
1726 scan |= SCAN_INQUIRY;
1727 } else {
1728 clear_bit(HCI_LIMITED_DISCOVERABLE, &hdev->dev_flags);
1729 }
1730
1731 hci_req_add(&req, HCI_OP_WRITE_SCAN_ENABLE, sizeof(scan), &scan);
1732
1733 update_ad:
1734 update_adv_data(&req);
1735
1736 err = hci_req_run(&req, set_discoverable_complete);
1737 if (err < 0)
1738 mgmt_pending_remove(cmd);
1739
1740 failed:
1741 hci_dev_unlock(hdev);
1742 return err;
1743 }
1744
1745 static void write_fast_connectable(struct hci_request *req, bool enable)
1746 {
1747 struct hci_dev *hdev = req->hdev;
1748 struct hci_cp_write_page_scan_activity acp;
1749 u8 type;
1750
1751 if (!test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags))
1752 return;
1753
1754 if (hdev->hci_ver < BLUETOOTH_VER_1_2)
1755 return;
1756
1757 if (enable) {
1758 type = PAGE_SCAN_TYPE_INTERLACED;
1759
1760 /* 160 msec page scan interval */
1761 acp.interval = cpu_to_le16(0x0100);
1762 } else {
1763 type = PAGE_SCAN_TYPE_STANDARD; /* default */
1764
1765 /* default 1.28 sec page scan */
1766 acp.interval = cpu_to_le16(0x0800);
1767 }
1768
1769 acp.window = cpu_to_le16(0x0012);
1770
1771 if (__cpu_to_le16(hdev->page_scan_interval) != acp.interval ||
1772 __cpu_to_le16(hdev->page_scan_window) != acp.window)
1773 hci_req_add(req, HCI_OP_WRITE_PAGE_SCAN_ACTIVITY,
1774 sizeof(acp), &acp);
1775
1776 if (hdev->page_scan_type != type)
1777 hci_req_add(req, HCI_OP_WRITE_PAGE_SCAN_TYPE, 1, &type);
1778 }
1779
1780 static void set_connectable_complete(struct hci_dev *hdev, u8 status)
1781 {
1782 struct pending_cmd *cmd;
1783 struct mgmt_mode *cp;
1784 bool conn_changed, discov_changed;
1785
1786 BT_DBG("status 0x%02x", status);
1787
1788 hci_dev_lock(hdev);
1789
1790 cmd = mgmt_pending_find(MGMT_OP_SET_CONNECTABLE, hdev);
1791 if (!cmd)
1792 goto unlock;
1793
1794 if (status) {
1795 u8 mgmt_err = mgmt_status(status);
1796 cmd_status(cmd->sk, cmd->index, cmd->opcode, mgmt_err);
1797 goto remove_cmd;
1798 }
1799
1800 cp = cmd->param;
1801 if (cp->val) {
1802 conn_changed = !test_and_set_bit(HCI_CONNECTABLE,
1803 &hdev->dev_flags);
1804 discov_changed = false;
1805 } else {
1806 conn_changed = test_and_clear_bit(HCI_CONNECTABLE,
1807 &hdev->dev_flags);
1808 discov_changed = test_and_clear_bit(HCI_DISCOVERABLE,
1809 &hdev->dev_flags);
1810 }
1811
1812 send_settings_rsp(cmd->sk, MGMT_OP_SET_CONNECTABLE, hdev);
1813
1814 if (conn_changed || discov_changed) {
1815 new_settings(hdev, cmd->sk);
1816 hci_update_page_scan(hdev, NULL);
1817 if (discov_changed)
1818 mgmt_update_adv_data(hdev);
1819 hci_update_background_scan(hdev);
1820 }
1821
1822 remove_cmd:
1823 mgmt_pending_remove(cmd);
1824
1825 unlock:
1826 hci_dev_unlock(hdev);
1827 }
1828
1829 static int set_connectable_update_settings(struct hci_dev *hdev,
1830 struct sock *sk, u8 val)
1831 {
1832 bool changed = false;
1833 int err;
1834
1835 if (!!val != test_bit(HCI_CONNECTABLE, &hdev->dev_flags))
1836 changed = true;
1837
1838 if (val) {
1839 set_bit(HCI_CONNECTABLE, &hdev->dev_flags);
1840 } else {
1841 clear_bit(HCI_CONNECTABLE, &hdev->dev_flags);
1842 clear_bit(HCI_DISCOVERABLE, &hdev->dev_flags);
1843 }
1844
1845 err = send_settings_rsp(sk, MGMT_OP_SET_CONNECTABLE, hdev);
1846 if (err < 0)
1847 return err;
1848
1849 if (changed) {
1850 hci_update_page_scan(hdev, NULL);
1851 hci_update_background_scan(hdev);
1852 return new_settings(hdev, sk);
1853 }
1854
1855 return 0;
1856 }
1857
1858 static int set_connectable(struct sock *sk, struct hci_dev *hdev, void *data,
1859 u16 len)
1860 {
1861 struct mgmt_mode *cp = data;
1862 struct pending_cmd *cmd;
1863 struct hci_request req;
1864 u8 scan;
1865 int err;
1866
1867 BT_DBG("request for %s", hdev->name);
1868
1869 if (!test_bit(HCI_LE_ENABLED, &hdev->dev_flags) &&
1870 !test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags))
1871 return cmd_status(sk, hdev->id, MGMT_OP_SET_CONNECTABLE,
1872 MGMT_STATUS_REJECTED);
1873
1874 if (cp->val != 0x00 && cp->val != 0x01)
1875 return cmd_status(sk, hdev->id, MGMT_OP_SET_CONNECTABLE,
1876 MGMT_STATUS_INVALID_PARAMS);
1877
1878 hci_dev_lock(hdev);
1879
1880 if (!hdev_is_powered(hdev)) {
1881 err = set_connectable_update_settings(hdev, sk, cp->val);
1882 goto failed;
1883 }
1884
1885 if (mgmt_pending_find(MGMT_OP_SET_DISCOVERABLE, hdev) ||
1886 mgmt_pending_find(MGMT_OP_SET_CONNECTABLE, hdev)) {
1887 err = cmd_status(sk, hdev->id, MGMT_OP_SET_CONNECTABLE,
1888 MGMT_STATUS_BUSY);
1889 goto failed;
1890 }
1891
1892 cmd = mgmt_pending_add(sk, MGMT_OP_SET_CONNECTABLE, hdev, data, len);
1893 if (!cmd) {
1894 err = -ENOMEM;
1895 goto failed;
1896 }
1897
1898 hci_req_init(&req, hdev);
1899
1900 /* If BR/EDR is not enabled and we disable advertising as a
1901 * by-product of disabling connectable, we need to update the
1902 * advertising flags.
1903 */
1904 if (!test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags)) {
1905 if (!cp->val) {
1906 clear_bit(HCI_LIMITED_DISCOVERABLE, &hdev->dev_flags);
1907 clear_bit(HCI_DISCOVERABLE, &hdev->dev_flags);
1908 }
1909 update_adv_data(&req);
1910 } else if (cp->val != test_bit(HCI_PSCAN, &hdev->flags)) {
1911 if (cp->val) {
1912 scan = SCAN_PAGE;
1913 } else {
1914 /* If we don't have any whitelist entries just
1915 * disable all scanning. If there are entries
1916 * and we had both page and inquiry scanning
1917 * enabled then fall back to only page scanning.
1918 * Otherwise no changes are needed.
1919 */
1920 if (list_empty(&hdev->whitelist))
1921 scan = SCAN_DISABLED;
1922 else if (test_bit(HCI_ISCAN, &hdev->flags))
1923 scan = SCAN_PAGE;
1924 else
1925 goto no_scan_update;
1926
1927 if (test_bit(HCI_ISCAN, &hdev->flags) &&
1928 hdev->discov_timeout > 0)
1929 cancel_delayed_work(&hdev->discov_off);
1930 }
1931
1932 hci_req_add(&req, HCI_OP_WRITE_SCAN_ENABLE, 1, &scan);
1933 }
1934
1935 no_scan_update:
1936 /* If we're going from non-connectable to connectable or
1937 * vice-versa when fast connectable is enabled ensure that fast
1938 * connectable gets disabled. write_fast_connectable won't do
1939 * anything if the page scan parameters are already what they
1940 * should be.
1941 */
1942 if (cp->val || test_bit(HCI_FAST_CONNECTABLE, &hdev->dev_flags))
1943 write_fast_connectable(&req, false);
1944
1945 /* Update the advertising parameters if necessary */
1946 if (test_bit(HCI_ADVERTISING, &hdev->dev_flags))
1947 enable_advertising(&req);
1948
1949 err = hci_req_run(&req, set_connectable_complete);
1950 if (err < 0) {
1951 mgmt_pending_remove(cmd);
1952 if (err == -ENODATA)
1953 err = set_connectable_update_settings(hdev, sk,
1954 cp->val);
1955 goto failed;
1956 }
1957
1958 failed:
1959 hci_dev_unlock(hdev);
1960 return err;
1961 }
1962
1963 static int set_bondable(struct sock *sk, struct hci_dev *hdev, void *data,
1964 u16 len)
1965 {
1966 struct mgmt_mode *cp = data;
1967 bool changed;
1968 int err;
1969
1970 BT_DBG("request for %s", hdev->name);
1971
1972 if (cp->val != 0x00 && cp->val != 0x01)
1973 return cmd_status(sk, hdev->id, MGMT_OP_SET_BONDABLE,
1974 MGMT_STATUS_INVALID_PARAMS);
1975
1976 hci_dev_lock(hdev);
1977
1978 if (cp->val)
1979 changed = !test_and_set_bit(HCI_BONDABLE, &hdev->dev_flags);
1980 else
1981 changed = test_and_clear_bit(HCI_BONDABLE, &hdev->dev_flags);
1982
1983 err = send_settings_rsp(sk, MGMT_OP_SET_BONDABLE, hdev);
1984 if (err < 0)
1985 goto unlock;
1986
1987 if (changed)
1988 err = new_settings(hdev, sk);
1989
1990 unlock:
1991 hci_dev_unlock(hdev);
1992 return err;
1993 }
1994
1995 static int set_link_security(struct sock *sk, struct hci_dev *hdev, void *data,
1996 u16 len)
1997 {
1998 struct mgmt_mode *cp = data;
1999 struct pending_cmd *cmd;
2000 u8 val, status;
2001 int err;
2002
2003 BT_DBG("request for %s", hdev->name);
2004
2005 status = mgmt_bredr_support(hdev);
2006 if (status)
2007 return cmd_status(sk, hdev->id, MGMT_OP_SET_LINK_SECURITY,
2008 status);
2009
2010 if (cp->val != 0x00 && cp->val != 0x01)
2011 return cmd_status(sk, hdev->id, MGMT_OP_SET_LINK_SECURITY,
2012 MGMT_STATUS_INVALID_PARAMS);
2013
2014 hci_dev_lock(hdev);
2015
2016 if (!hdev_is_powered(hdev)) {
2017 bool changed = false;
2018
2019 if (!!cp->val != test_bit(HCI_LINK_SECURITY,
2020 &hdev->dev_flags)) {
2021 change_bit(HCI_LINK_SECURITY, &hdev->dev_flags);
2022 changed = true;
2023 }
2024
2025 err = send_settings_rsp(sk, MGMT_OP_SET_LINK_SECURITY, hdev);
2026 if (err < 0)
2027 goto failed;
2028
2029 if (changed)
2030 err = new_settings(hdev, sk);
2031
2032 goto failed;
2033 }
2034
2035 if (mgmt_pending_find(MGMT_OP_SET_LINK_SECURITY, hdev)) {
2036 err = cmd_status(sk, hdev->id, MGMT_OP_SET_LINK_SECURITY,
2037 MGMT_STATUS_BUSY);
2038 goto failed;
2039 }
2040
2041 val = !!cp->val;
2042
2043 if (test_bit(HCI_AUTH, &hdev->flags) == val) {
2044 err = send_settings_rsp(sk, MGMT_OP_SET_LINK_SECURITY, hdev);
2045 goto failed;
2046 }
2047
2048 cmd = mgmt_pending_add(sk, MGMT_OP_SET_LINK_SECURITY, hdev, data, len);
2049 if (!cmd) {
2050 err = -ENOMEM;
2051 goto failed;
2052 }
2053
2054 err = hci_send_cmd(hdev, HCI_OP_WRITE_AUTH_ENABLE, sizeof(val), &val);
2055 if (err < 0) {
2056 mgmt_pending_remove(cmd);
2057 goto failed;
2058 }
2059
2060 failed:
2061 hci_dev_unlock(hdev);
2062 return err;
2063 }
2064
2065 static int set_ssp(struct sock *sk, struct hci_dev *hdev, void *data, u16 len)
2066 {
2067 struct mgmt_mode *cp = data;
2068 struct pending_cmd *cmd;
2069 u8 status;
2070 int err;
2071
2072 BT_DBG("request for %s", hdev->name);
2073
2074 status = mgmt_bredr_support(hdev);
2075 if (status)
2076 return cmd_status(sk, hdev->id, MGMT_OP_SET_SSP, status);
2077
2078 if (!lmp_ssp_capable(hdev))
2079 return cmd_status(sk, hdev->id, MGMT_OP_SET_SSP,
2080 MGMT_STATUS_NOT_SUPPORTED);
2081
2082 if (cp->val != 0x00 && cp->val != 0x01)
2083 return cmd_status(sk, hdev->id, MGMT_OP_SET_SSP,
2084 MGMT_STATUS_INVALID_PARAMS);
2085
2086 hci_dev_lock(hdev);
2087
2088 if (!hdev_is_powered(hdev)) {
2089 bool changed;
2090
2091 if (cp->val) {
2092 changed = !test_and_set_bit(HCI_SSP_ENABLED,
2093 &hdev->dev_flags);
2094 } else {
2095 changed = test_and_clear_bit(HCI_SSP_ENABLED,
2096 &hdev->dev_flags);
2097 if (!changed)
2098 changed = test_and_clear_bit(HCI_HS_ENABLED,
2099 &hdev->dev_flags);
2100 else
2101 clear_bit(HCI_HS_ENABLED, &hdev->dev_flags);
2102 }
2103
2104 err = send_settings_rsp(sk, MGMT_OP_SET_SSP, hdev);
2105 if (err < 0)
2106 goto failed;
2107
2108 if (changed)
2109 err = new_settings(hdev, sk);
2110
2111 goto failed;
2112 }
2113
2114 if (mgmt_pending_find(MGMT_OP_SET_SSP, hdev) ||
2115 mgmt_pending_find(MGMT_OP_SET_HS, hdev)) {
2116 err = cmd_status(sk, hdev->id, MGMT_OP_SET_SSP,
2117 MGMT_STATUS_BUSY);
2118 goto failed;
2119 }
2120
2121 if (!!cp->val == test_bit(HCI_SSP_ENABLED, &hdev->dev_flags)) {
2122 err = send_settings_rsp(sk, MGMT_OP_SET_SSP, hdev);
2123 goto failed;
2124 }
2125
2126 cmd = mgmt_pending_add(sk, MGMT_OP_SET_SSP, hdev, data, len);
2127 if (!cmd) {
2128 err = -ENOMEM;
2129 goto failed;
2130 }
2131
2132 if (!cp->val && test_bit(HCI_USE_DEBUG_KEYS, &hdev->dev_flags))
2133 hci_send_cmd(hdev, HCI_OP_WRITE_SSP_DEBUG_MODE,
2134 sizeof(cp->val), &cp->val);
2135
2136 err = hci_send_cmd(hdev, HCI_OP_WRITE_SSP_MODE, 1, &cp->val);
2137 if (err < 0) {
2138 mgmt_pending_remove(cmd);
2139 goto failed;
2140 }
2141
2142 failed:
2143 hci_dev_unlock(hdev);
2144 return err;
2145 }
2146
2147 static int set_hs(struct sock *sk, struct hci_dev *hdev, void *data, u16 len)
2148 {
2149 struct mgmt_mode *cp = data;
2150 bool changed;
2151 u8 status;
2152 int err;
2153
2154 BT_DBG("request for %s", hdev->name);
2155
2156 status = mgmt_bredr_support(hdev);
2157 if (status)
2158 return cmd_status(sk, hdev->id, MGMT_OP_SET_HS, status);
2159
2160 if (!lmp_ssp_capable(hdev))
2161 return cmd_status(sk, hdev->id, MGMT_OP_SET_HS,
2162 MGMT_STATUS_NOT_SUPPORTED);
2163
2164 if (!test_bit(HCI_SSP_ENABLED, &hdev->dev_flags))
2165 return cmd_status(sk, hdev->id, MGMT_OP_SET_HS,
2166 MGMT_STATUS_REJECTED);
2167
2168 if (cp->val != 0x00 && cp->val != 0x01)
2169 return cmd_status(sk, hdev->id, MGMT_OP_SET_HS,
2170 MGMT_STATUS_INVALID_PARAMS);
2171
2172 hci_dev_lock(hdev);
2173
2174 if (cp->val) {
2175 changed = !test_and_set_bit(HCI_HS_ENABLED, &hdev->dev_flags);
2176 } else {
2177 if (hdev_is_powered(hdev)) {
2178 err = cmd_status(sk, hdev->id, MGMT_OP_SET_HS,
2179 MGMT_STATUS_REJECTED);
2180 goto unlock;
2181 }
2182
2183 changed = test_and_clear_bit(HCI_HS_ENABLED, &hdev->dev_flags);
2184 }
2185
2186 err = send_settings_rsp(sk, MGMT_OP_SET_HS, hdev);
2187 if (err < 0)
2188 goto unlock;
2189
2190 if (changed)
2191 err = new_settings(hdev, sk);
2192
2193 unlock:
2194 hci_dev_unlock(hdev);
2195 return err;
2196 }
2197
2198 static void le_enable_complete(struct hci_dev *hdev, u8 status)
2199 {
2200 struct cmd_lookup match = { NULL, hdev };
2201
2202 hci_dev_lock(hdev);
2203
2204 if (status) {
2205 u8 mgmt_err = mgmt_status(status);
2206
2207 mgmt_pending_foreach(MGMT_OP_SET_LE, hdev, cmd_status_rsp,
2208 &mgmt_err);
2209 goto unlock;
2210 }
2211
2212 mgmt_pending_foreach(MGMT_OP_SET_LE, hdev, settings_rsp, &match);
2213
2214 new_settings(hdev, match.sk);
2215
2216 if (match.sk)
2217 sock_put(match.sk);
2218
2219 /* Make sure the controller has a good default for
2220 * advertising data. Restrict the update to when LE
2221 * has actually been enabled. During power on, the
2222 * update in powered_update_hci will take care of it.
2223 */
2224 if (test_bit(HCI_LE_ENABLED, &hdev->dev_flags)) {
2225 struct hci_request req;
2226
2227 hci_req_init(&req, hdev);
2228 update_adv_data(&req);
2229 update_scan_rsp_data(&req);
2230 hci_req_run(&req, NULL);
2231
2232 hci_update_background_scan(hdev);
2233 }
2234
2235 unlock:
2236 hci_dev_unlock(hdev);
2237 }
2238
2239 static int set_le(struct sock *sk, struct hci_dev *hdev, void *data, u16 len)
2240 {
2241 struct mgmt_mode *cp = data;
2242 struct hci_cp_write_le_host_supported hci_cp;
2243 struct pending_cmd *cmd;
2244 struct hci_request req;
2245 int err;
2246 u8 val, enabled;
2247
2248 BT_DBG("request for %s", hdev->name);
2249
2250 if (!lmp_le_capable(hdev))
2251 return cmd_status(sk, hdev->id, MGMT_OP_SET_LE,
2252 MGMT_STATUS_NOT_SUPPORTED);
2253
2254 if (cp->val != 0x00 && cp->val != 0x01)
2255 return cmd_status(sk, hdev->id, MGMT_OP_SET_LE,
2256 MGMT_STATUS_INVALID_PARAMS);
2257
2258 /* LE-only devices do not allow toggling LE on/off */
2259 if (!test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags))
2260 return cmd_status(sk, hdev->id, MGMT_OP_SET_LE,
2261 MGMT_STATUS_REJECTED);
2262
2263 hci_dev_lock(hdev);
2264
2265 val = !!cp->val;
2266 enabled = lmp_host_le_capable(hdev);
2267
2268 if (!hdev_is_powered(hdev) || val == enabled) {
2269 bool changed = false;
2270
2271 if (val != test_bit(HCI_LE_ENABLED, &hdev->dev_flags)) {
2272 change_bit(HCI_LE_ENABLED, &hdev->dev_flags);
2273 changed = true;
2274 }
2275
2276 if (!val && test_bit(HCI_ADVERTISING, &hdev->dev_flags)) {
2277 clear_bit(HCI_ADVERTISING, &hdev->dev_flags);
2278 changed = true;
2279 }
2280
2281 err = send_settings_rsp(sk, MGMT_OP_SET_LE, hdev);
2282 if (err < 0)
2283 goto unlock;
2284
2285 if (changed)
2286 err = new_settings(hdev, sk);
2287
2288 goto unlock;
2289 }
2290
2291 if (mgmt_pending_find(MGMT_OP_SET_LE, hdev) ||
2292 mgmt_pending_find(MGMT_OP_SET_ADVERTISING, hdev)) {
2293 err = cmd_status(sk, hdev->id, MGMT_OP_SET_LE,
2294 MGMT_STATUS_BUSY);
2295 goto unlock;
2296 }
2297
2298 cmd = mgmt_pending_add(sk, MGMT_OP_SET_LE, hdev, data, len);
2299 if (!cmd) {
2300 err = -ENOMEM;
2301 goto unlock;
2302 }
2303
2304 hci_req_init(&req, hdev);
2305
2306 memset(&hci_cp, 0, sizeof(hci_cp));
2307
2308 if (val) {
2309 hci_cp.le = val;
2310 hci_cp.simul = 0x00;
2311 } else {
2312 if (test_bit(HCI_LE_ADV, &hdev->dev_flags))
2313 disable_advertising(&req);
2314 }
2315
2316 hci_req_add(&req, HCI_OP_WRITE_LE_HOST_SUPPORTED, sizeof(hci_cp),
2317 &hci_cp);
2318
2319 err = hci_req_run(&req, le_enable_complete);
2320 if (err < 0)
2321 mgmt_pending_remove(cmd);
2322
2323 unlock:
2324 hci_dev_unlock(hdev);
2325 return err;
2326 }
2327
2328 /* This is a helper function to test for pending mgmt commands that can
2329 * cause CoD or EIR HCI commands. We can only allow one such pending
2330 * mgmt command at a time since otherwise we cannot easily track what
2331 * the current values are, will be, and based on that calculate if a new
2332 * HCI command needs to be sent and if yes with what value.
2333 */
2334 static bool pending_eir_or_class(struct hci_dev *hdev)
2335 {
2336 struct pending_cmd *cmd;
2337
2338 list_for_each_entry(cmd, &hdev->mgmt_pending, list) {
2339 switch (cmd->opcode) {
2340 case MGMT_OP_ADD_UUID:
2341 case MGMT_OP_REMOVE_UUID:
2342 case MGMT_OP_SET_DEV_CLASS:
2343 case MGMT_OP_SET_POWERED:
2344 return true;
2345 }
2346 }
2347
2348 return false;
2349 }
2350
2351 static const u8 bluetooth_base_uuid[] = {
2352 0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80,
2353 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2354 };
2355
2356 static u8 get_uuid_size(const u8 *uuid)
2357 {
2358 u32 val;
2359
2360 if (memcmp(uuid, bluetooth_base_uuid, 12))
2361 return 128;
2362
2363 val = get_unaligned_le32(&uuid[12]);
2364 if (val > 0xffff)
2365 return 32;
2366
2367 return 16;
2368 }
2369
2370 static void mgmt_class_complete(struct hci_dev *hdev, u16 mgmt_op, u8 status)
2371 {
2372 struct pending_cmd *cmd;
2373
2374 hci_dev_lock(hdev);
2375
2376 cmd = mgmt_pending_find(mgmt_op, hdev);
2377 if (!cmd)
2378 goto unlock;
2379
2380 cmd_complete(cmd->sk, cmd->index, cmd->opcode, mgmt_status(status),
2381 hdev->dev_class, 3);
2382
2383 mgmt_pending_remove(cmd);
2384
2385 unlock:
2386 hci_dev_unlock(hdev);
2387 }
2388
2389 static void add_uuid_complete(struct hci_dev *hdev, u8 status)
2390 {
2391 BT_DBG("status 0x%02x", status);
2392
2393 mgmt_class_complete(hdev, MGMT_OP_ADD_UUID, status);
2394 }
2395
2396 static int add_uuid(struct sock *sk, struct hci_dev *hdev, void *data, u16 len)
2397 {
2398 struct mgmt_cp_add_uuid *cp = data;
2399 struct pending_cmd *cmd;
2400 struct hci_request req;
2401 struct bt_uuid *uuid;
2402 int err;
2403
2404 BT_DBG("request for %s", hdev->name);
2405
2406 hci_dev_lock(hdev);
2407
2408 if (pending_eir_or_class(hdev)) {
2409 err = cmd_status(sk, hdev->id, MGMT_OP_ADD_UUID,
2410 MGMT_STATUS_BUSY);
2411 goto failed;
2412 }
2413
2414 uuid = kmalloc(sizeof(*uuid), GFP_KERNEL);
2415 if (!uuid) {
2416 err = -ENOMEM;
2417 goto failed;
2418 }
2419
2420 memcpy(uuid->uuid, cp->uuid, 16);
2421 uuid->svc_hint = cp->svc_hint;
2422 uuid->size = get_uuid_size(cp->uuid);
2423
2424 list_add_tail(&uuid->list, &hdev->uuids);
2425
2426 hci_req_init(&req, hdev);
2427
2428 update_class(&req);
2429 update_eir(&req);
2430
2431 err = hci_req_run(&req, add_uuid_complete);
2432 if (err < 0) {
2433 if (err != -ENODATA)
2434 goto failed;
2435
2436 err = cmd_complete(sk, hdev->id, MGMT_OP_ADD_UUID, 0,
2437 hdev->dev_class, 3);
2438 goto failed;
2439 }
2440
2441 cmd = mgmt_pending_add(sk, MGMT_OP_ADD_UUID, hdev, data, len);
2442 if (!cmd) {
2443 err = -ENOMEM;
2444 goto failed;
2445 }
2446
2447 err = 0;
2448
2449 failed:
2450 hci_dev_unlock(hdev);
2451 return err;
2452 }
2453
2454 static bool enable_service_cache(struct hci_dev *hdev)
2455 {
2456 if (!hdev_is_powered(hdev))
2457 return false;
2458
2459 if (!test_and_set_bit(HCI_SERVICE_CACHE, &hdev->dev_flags)) {
2460 queue_delayed_work(hdev->workqueue, &hdev->service_cache,
2461 CACHE_TIMEOUT);
2462 return true;
2463 }
2464
2465 return false;
2466 }
2467
2468 static void remove_uuid_complete(struct hci_dev *hdev, u8 status)
2469 {
2470 BT_DBG("status 0x%02x", status);
2471
2472 mgmt_class_complete(hdev, MGMT_OP_REMOVE_UUID, status);
2473 }
2474
2475 static int remove_uuid(struct sock *sk, struct hci_dev *hdev, void *data,
2476 u16 len)
2477 {
2478 struct mgmt_cp_remove_uuid *cp = data;
2479 struct pending_cmd *cmd;
2480 struct bt_uuid *match, *tmp;
2481 u8 bt_uuid_any[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
2482 struct hci_request req;
2483 int err, found;
2484
2485 BT_DBG("request for %s", hdev->name);
2486
2487 hci_dev_lock(hdev);
2488
2489 if (pending_eir_or_class(hdev)) {
2490 err = cmd_status(sk, hdev->id, MGMT_OP_REMOVE_UUID,
2491 MGMT_STATUS_BUSY);
2492 goto unlock;
2493 }
2494
2495 if (memcmp(cp->uuid, bt_uuid_any, 16) == 0) {
2496 hci_uuids_clear(hdev);
2497
2498 if (enable_service_cache(hdev)) {
2499 err = cmd_complete(sk, hdev->id, MGMT_OP_REMOVE_UUID,
2500 0, hdev->dev_class, 3);
2501 goto unlock;
2502 }
2503
2504 goto update_class;
2505 }
2506
2507 found = 0;
2508
2509 list_for_each_entry_safe(match, tmp, &hdev->uuids, list) {
2510 if (memcmp(match->uuid, cp->uuid, 16) != 0)
2511 continue;
2512
2513 list_del(&match->list);
2514 kfree(match);
2515 found++;
2516 }
2517
2518 if (found == 0) {
2519 err = cmd_status(sk, hdev->id, MGMT_OP_REMOVE_UUID,
2520 MGMT_STATUS_INVALID_PARAMS);
2521 goto unlock;
2522 }
2523
2524 update_class:
2525 hci_req_init(&req, hdev);
2526
2527 update_class(&req);
2528 update_eir(&req);
2529
2530 err = hci_req_run(&req, remove_uuid_complete);
2531 if (err < 0) {
2532 if (err != -ENODATA)
2533 goto unlock;
2534
2535 err = cmd_complete(sk, hdev->id, MGMT_OP_REMOVE_UUID, 0,
2536 hdev->dev_class, 3);
2537 goto unlock;
2538 }
2539
2540 cmd = mgmt_pending_add(sk, MGMT_OP_REMOVE_UUID, hdev, data, len);
2541 if (!cmd) {
2542 err = -ENOMEM;
2543 goto unlock;
2544 }
2545
2546 err = 0;
2547
2548 unlock:
2549 hci_dev_unlock(hdev);
2550 return err;
2551 }
2552
2553 static void set_class_complete(struct hci_dev *hdev, u8 status)
2554 {
2555 BT_DBG("status 0x%02x", status);
2556
2557 mgmt_class_complete(hdev, MGMT_OP_SET_DEV_CLASS, status);
2558 }
2559
2560 static int set_dev_class(struct sock *sk, struct hci_dev *hdev, void *data,
2561 u16 len)
2562 {
2563 struct mgmt_cp_set_dev_class *cp = data;
2564 struct pending_cmd *cmd;
2565 struct hci_request req;
2566 int err;
2567
2568 BT_DBG("request for %s", hdev->name);
2569
2570 if (!lmp_bredr_capable(hdev))
2571 return cmd_status(sk, hdev->id, MGMT_OP_SET_DEV_CLASS,
2572 MGMT_STATUS_NOT_SUPPORTED);
2573
2574 hci_dev_lock(hdev);
2575
2576 if (pending_eir_or_class(hdev)) {
2577 err = cmd_status(sk, hdev->id, MGMT_OP_SET_DEV_CLASS,
2578 MGMT_STATUS_BUSY);
2579 goto unlock;
2580 }
2581
2582 if ((cp->minor & 0x03) != 0 || (cp->major & 0xe0) != 0) {
2583 err = cmd_status(sk, hdev->id, MGMT_OP_SET_DEV_CLASS,
2584 MGMT_STATUS_INVALID_PARAMS);
2585 goto unlock;
2586 }
2587
2588 hdev->major_class = cp->major;
2589 hdev->minor_class = cp->minor;
2590
2591 if (!hdev_is_powered(hdev)) {
2592 err = cmd_complete(sk, hdev->id, MGMT_OP_SET_DEV_CLASS, 0,
2593 hdev->dev_class, 3);
2594 goto unlock;
2595 }
2596
2597 hci_req_init(&req, hdev);
2598
2599 if (test_and_clear_bit(HCI_SERVICE_CACHE, &hdev->dev_flags)) {
2600 hci_dev_unlock(hdev);
2601 cancel_delayed_work_sync(&hdev->service_cache);
2602 hci_dev_lock(hdev);
2603 update_eir(&req);
2604 }
2605
2606 update_class(&req);
2607
2608 err = hci_req_run(&req, set_class_complete);
2609 if (err < 0) {
2610 if (err != -ENODATA)
2611 goto unlock;
2612
2613 err = cmd_complete(sk, hdev->id, MGMT_OP_SET_DEV_CLASS, 0,
2614 hdev->dev_class, 3);
2615 goto unlock;
2616 }
2617
2618 cmd = mgmt_pending_add(sk, MGMT_OP_SET_DEV_CLASS, hdev, data, len);
2619 if (!cmd) {
2620 err = -ENOMEM;
2621 goto unlock;
2622 }
2623
2624 err = 0;
2625
2626 unlock:
2627 hci_dev_unlock(hdev);
2628 return err;
2629 }
2630
2631 static int load_link_keys(struct sock *sk, struct hci_dev *hdev, void *data,
2632 u16 len)
2633 {
2634 struct mgmt_cp_load_link_keys *cp = data;
2635 const u16 max_key_count = ((U16_MAX - sizeof(*cp)) /
2636 sizeof(struct mgmt_link_key_info));
2637 u16 key_count, expected_len;
2638 bool changed;
2639 int i;
2640
2641 BT_DBG("request for %s", hdev->name);
2642
2643 if (!lmp_bredr_capable(hdev))
2644 return cmd_status(sk, hdev->id, MGMT_OP_LOAD_LINK_KEYS,
2645 MGMT_STATUS_NOT_SUPPORTED);
2646
2647 key_count = __le16_to_cpu(cp->key_count);
2648 if (key_count > max_key_count) {
2649 BT_ERR("load_link_keys: too big key_count value %u",
2650 key_count);
2651 return cmd_status(sk, hdev->id, MGMT_OP_LOAD_LINK_KEYS,
2652 MGMT_STATUS_INVALID_PARAMS);
2653 }
2654
2655 expected_len = sizeof(*cp) + key_count *
2656 sizeof(struct mgmt_link_key_info);
2657 if (expected_len != len) {
2658 BT_ERR("load_link_keys: expected %u bytes, got %u bytes",
2659 expected_len, len);
2660 return cmd_status(sk, hdev->id, MGMT_OP_LOAD_LINK_KEYS,
2661 MGMT_STATUS_INVALID_PARAMS);
2662 }
2663
2664 if (cp->debug_keys != 0x00 && cp->debug_keys != 0x01)
2665 return cmd_status(sk, hdev->id, MGMT_OP_LOAD_LINK_KEYS,
2666 MGMT_STATUS_INVALID_PARAMS);
2667
2668 BT_DBG("%s debug_keys %u key_count %u", hdev->name, cp->debug_keys,
2669 key_count);
2670
2671 for (i = 0; i < key_count; i++) {
2672 struct mgmt_link_key_info *key = &cp->keys[i];
2673
2674 if (key->addr.type != BDADDR_BREDR || key->type > 0x08)
2675 return cmd_status(sk, hdev->id, MGMT_OP_LOAD_LINK_KEYS,
2676 MGMT_STATUS_INVALID_PARAMS);
2677 }
2678
2679 hci_dev_lock(hdev);
2680
2681 hci_link_keys_clear(hdev);
2682
2683 if (cp->debug_keys)
2684 changed = !test_and_set_bit(HCI_KEEP_DEBUG_KEYS,
2685 &hdev->dev_flags);
2686 else
2687 changed = test_and_clear_bit(HCI_KEEP_DEBUG_KEYS,
2688 &hdev->dev_flags);
2689
2690 if (changed)
2691 new_settings(hdev, NULL);
2692
2693 for (i = 0; i < key_count; i++) {
2694 struct mgmt_link_key_info *key = &cp->keys[i];
2695
2696 /* Always ignore debug keys and require a new pairing if
2697 * the user wants to use them.
2698 */
2699 if (key->type == HCI_LK_DEBUG_COMBINATION)
2700 continue;
2701
2702 hci_add_link_key(hdev, NULL, &key->addr.bdaddr, key->val,
2703 key->type, key->pin_len, NULL);
2704 }
2705
2706 cmd_complete(sk, hdev->id, MGMT_OP_LOAD_LINK_KEYS, 0, NULL, 0);
2707
2708 hci_dev_unlock(hdev);
2709
2710 return 0;
2711 }
2712
2713 static int device_unpaired(struct hci_dev *hdev, bdaddr_t *bdaddr,
2714 u8 addr_type, struct sock *skip_sk)
2715 {
2716 struct mgmt_ev_device_unpaired ev;
2717
2718 bacpy(&ev.addr.bdaddr, bdaddr);
2719 ev.addr.type = addr_type;
2720
2721 return mgmt_event(MGMT_EV_DEVICE_UNPAIRED, hdev, &ev, sizeof(ev),
2722 skip_sk);
2723 }
2724
2725 static int unpair_device(struct sock *sk, struct hci_dev *hdev, void *data,
2726 u16 len)
2727 {
2728 struct mgmt_cp_unpair_device *cp = data;
2729 struct mgmt_rp_unpair_device rp;
2730 struct hci_cp_disconnect dc;
2731 struct pending_cmd *cmd;
2732 struct hci_conn *conn;
2733 int err;
2734
2735 memset(&rp, 0, sizeof(rp));
2736 bacpy(&rp.addr.bdaddr, &cp->addr.bdaddr);
2737 rp.addr.type = cp->addr.type;
2738
2739 if (!bdaddr_type_is_valid(cp->addr.type))
2740 return cmd_complete(sk, hdev->id, MGMT_OP_UNPAIR_DEVICE,
2741 MGMT_STATUS_INVALID_PARAMS,
2742 &rp, sizeof(rp));
2743
2744 if (cp->disconnect != 0x00 && cp->disconnect != 0x01)
2745 return cmd_complete(sk, hdev->id, MGMT_OP_UNPAIR_DEVICE,
2746 MGMT_STATUS_INVALID_PARAMS,
2747 &rp, sizeof(rp));
2748
2749 hci_dev_lock(hdev);
2750
2751 if (!hdev_is_powered(hdev)) {
2752 err = cmd_complete(sk, hdev->id, MGMT_OP_UNPAIR_DEVICE,
2753 MGMT_STATUS_NOT_POWERED, &rp, sizeof(rp));
2754 goto unlock;
2755 }
2756
2757 if (cp->addr.type == BDADDR_BREDR) {
2758 /* If disconnection is requested, then look up the
2759 * connection. If the remote device is connected, it
2760 * will be later used to terminate the link.
2761 *
2762 * Setting it to NULL explicitly will cause no
2763 * termination of the link.
2764 */
2765 if (cp->disconnect)
2766 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK,
2767 &cp->addr.bdaddr);
2768 else
2769 conn = NULL;
2770
2771 err = hci_remove_link_key(hdev, &cp->addr.bdaddr);
2772 } else {
2773 u8 addr_type;
2774
2775 conn = hci_conn_hash_lookup_ba(hdev, LE_LINK,
2776 &cp->addr.bdaddr);
2777 if (conn) {
2778 /* Defer clearing up the connection parameters
2779 * until closing to give a chance of keeping
2780 * them if a repairing happens.
2781 */
2782 set_bit(HCI_CONN_PARAM_REMOVAL_PEND, &conn->flags);
2783
2784 /* If disconnection is not requested, then
2785 * clear the connection variable so that the
2786 * link is not terminated.
2787 */
2788 if (!cp->disconnect)
2789 conn = NULL;
2790 }
2791
2792 if (cp->addr.type == BDADDR_LE_PUBLIC)
2793 addr_type = ADDR_LE_DEV_PUBLIC;
2794 else
2795 addr_type = ADDR_LE_DEV_RANDOM;
2796
2797 hci_remove_irk(hdev, &cp->addr.bdaddr, addr_type);
2798
2799 err = hci_remove_ltk(hdev, &cp->addr.bdaddr, addr_type);
2800 }
2801
2802 if (err < 0) {
2803 err = cmd_complete(sk, hdev->id, MGMT_OP_UNPAIR_DEVICE,
2804 MGMT_STATUS_NOT_PAIRED, &rp, sizeof(rp));
2805 goto unlock;
2806 }
2807
2808 /* If the connection variable is set, then termination of the
2809 * link is requested.
2810 */
2811 if (!conn) {
2812 err = cmd_complete(sk, hdev->id, MGMT_OP_UNPAIR_DEVICE, 0,
2813 &rp, sizeof(rp));
2814 device_unpaired(hdev, &cp->addr.bdaddr, cp->addr.type, sk);
2815 goto unlock;
2816 }
2817
2818 cmd = mgmt_pending_add(sk, MGMT_OP_UNPAIR_DEVICE, hdev, cp,
2819 sizeof(*cp));
2820 if (!cmd) {
2821 err = -ENOMEM;
2822 goto unlock;
2823 }
2824
2825 cmd->cmd_complete = addr_cmd_complete;
2826
2827 dc.handle = cpu_to_le16(conn->handle);
2828 dc.reason = 0x13; /* Remote User Terminated Connection */
2829 err = hci_send_cmd(hdev, HCI_OP_DISCONNECT, sizeof(dc), &dc);
2830 if (err < 0)
2831 mgmt_pending_remove(cmd);
2832
2833 unlock:
2834 hci_dev_unlock(hdev);
2835 return err;
2836 }
2837
2838 static int disconnect(struct sock *sk, struct hci_dev *hdev, void *data,
2839 u16 len)
2840 {
2841 struct mgmt_cp_disconnect *cp = data;
2842 struct mgmt_rp_disconnect rp;
2843 struct pending_cmd *cmd;
2844 struct hci_conn *conn;
2845 int err;
2846
2847 BT_DBG("");
2848
2849 memset(&rp, 0, sizeof(rp));
2850 bacpy(&rp.addr.bdaddr, &cp->addr.bdaddr);
2851 rp.addr.type = cp->addr.type;
2852
2853 if (!bdaddr_type_is_valid(cp->addr.type))
2854 return cmd_complete(sk, hdev->id, MGMT_OP_DISCONNECT,
2855 MGMT_STATUS_INVALID_PARAMS,
2856 &rp, sizeof(rp));
2857
2858 hci_dev_lock(hdev);
2859
2860 if (!test_bit(HCI_UP, &hdev->flags)) {
2861 err = cmd_complete(sk, hdev->id, MGMT_OP_DISCONNECT,
2862 MGMT_STATUS_NOT_POWERED, &rp, sizeof(rp));
2863 goto failed;
2864 }
2865
2866 if (mgmt_pending_find(MGMT_OP_DISCONNECT, hdev)) {
2867 err = cmd_complete(sk, hdev->id, MGMT_OP_DISCONNECT,
2868 MGMT_STATUS_BUSY, &rp, sizeof(rp));
2869 goto failed;
2870 }
2871
2872 if (cp->addr.type == BDADDR_BREDR)
2873 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK,
2874 &cp->addr.bdaddr);
2875 else
2876 conn = hci_conn_hash_lookup_ba(hdev, LE_LINK, &cp->addr.bdaddr);
2877
2878 if (!conn || conn->state == BT_OPEN || conn->state == BT_CLOSED) {
2879 err = cmd_complete(sk, hdev->id, MGMT_OP_DISCONNECT,
2880 MGMT_STATUS_NOT_CONNECTED, &rp, sizeof(rp));
2881 goto failed;
2882 }
2883
2884 cmd = mgmt_pending_add(sk, MGMT_OP_DISCONNECT, hdev, data, len);
2885 if (!cmd) {
2886 err = -ENOMEM;
2887 goto failed;
2888 }
2889
2890 cmd->cmd_complete = generic_cmd_complete;
2891
2892 err = hci_disconnect(conn, HCI_ERROR_REMOTE_USER_TERM);
2893 if (err < 0)
2894 mgmt_pending_remove(cmd);
2895
2896 failed:
2897 hci_dev_unlock(hdev);
2898 return err;
2899 }
2900
2901 static u8 link_to_bdaddr(u8 link_type, u8 addr_type)
2902 {
2903 switch (link_type) {
2904 case LE_LINK:
2905 switch (addr_type) {
2906 case ADDR_LE_DEV_PUBLIC:
2907 return BDADDR_LE_PUBLIC;
2908
2909 default:
2910 /* Fallback to LE Random address type */
2911 return BDADDR_LE_RANDOM;
2912 }
2913
2914 default:
2915 /* Fallback to BR/EDR type */
2916 return BDADDR_BREDR;
2917 }
2918 }
2919
2920 static int get_connections(struct sock *sk, struct hci_dev *hdev, void *data,
2921 u16 data_len)
2922 {
2923 struct mgmt_rp_get_connections *rp;
2924 struct hci_conn *c;
2925 size_t rp_len;
2926 int err;
2927 u16 i;
2928
2929 BT_DBG("");
2930
2931 hci_dev_lock(hdev);
2932
2933 if (!hdev_is_powered(hdev)) {
2934 err = cmd_status(sk, hdev->id, MGMT_OP_GET_CONNECTIONS,
2935 MGMT_STATUS_NOT_POWERED);
2936 goto unlock;
2937 }
2938
2939 i = 0;
2940 list_for_each_entry(c, &hdev->conn_hash.list, list) {
2941 if (test_bit(HCI_CONN_MGMT_CONNECTED, &c->flags))
2942 i++;
2943 }
2944
2945 rp_len = sizeof(*rp) + (i * sizeof(struct mgmt_addr_info));
2946 rp = kmalloc(rp_len, GFP_KERNEL);
2947 if (!rp) {
2948 err = -ENOMEM;
2949 goto unlock;
2950 }
2951
2952 i = 0;
2953 list_for_each_entry(c, &hdev->conn_hash.list, list) {
2954 if (!test_bit(HCI_CONN_MGMT_CONNECTED, &c->flags))
2955 continue;
2956 bacpy(&rp->addr[i].bdaddr, &c->dst);
2957 rp->addr[i].type = link_to_bdaddr(c->type, c->dst_type);
2958 if (c->type == SCO_LINK || c->type == ESCO_LINK)
2959 continue;
2960 i++;
2961 }
2962
2963 rp->conn_count = cpu_to_le16(i);
2964
2965 /* Recalculate length in case of filtered SCO connections, etc */
2966 rp_len = sizeof(*rp) + (i * sizeof(struct mgmt_addr_info));
2967
2968 err = cmd_complete(sk, hdev->id, MGMT_OP_GET_CONNECTIONS, 0, rp,
2969 rp_len);
2970
2971 kfree(rp);
2972
2973 unlock:
2974 hci_dev_unlock(hdev);
2975 return err;
2976 }
2977
2978 static int send_pin_code_neg_reply(struct sock *sk, struct hci_dev *hdev,
2979 struct mgmt_cp_pin_code_neg_reply *cp)
2980 {
2981 struct pending_cmd *cmd;
2982 int err;
2983
2984 cmd = mgmt_pending_add(sk, MGMT_OP_PIN_CODE_NEG_REPLY, hdev, cp,
2985 sizeof(*cp));
2986 if (!cmd)
2987 return -ENOMEM;
2988
2989 err = hci_send_cmd(hdev, HCI_OP_PIN_CODE_NEG_REPLY,
2990 sizeof(cp->addr.bdaddr), &cp->addr.bdaddr);
2991 if (err < 0)
2992 mgmt_pending_remove(cmd);
2993
2994 return err;
2995 }
2996
2997 static int pin_code_reply(struct sock *sk, struct hci_dev *hdev, void *data,
2998 u16 len)
2999 {
3000 struct hci_conn *conn;
3001 struct mgmt_cp_pin_code_reply *cp = data;
3002 struct hci_cp_pin_code_reply reply;
3003 struct pending_cmd *cmd;
3004 int err;
3005
3006 BT_DBG("");
3007
3008 hci_dev_lock(hdev);
3009
3010 if (!hdev_is_powered(hdev)) {
3011 err = cmd_status(sk, hdev->id, MGMT_OP_PIN_CODE_REPLY,
3012 MGMT_STATUS_NOT_POWERED);
3013 goto failed;
3014 }
3015
3016 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->addr.bdaddr);
3017 if (!conn) {
3018 err = cmd_status(sk, hdev->id, MGMT_OP_PIN_CODE_REPLY,
3019 MGMT_STATUS_NOT_CONNECTED);
3020 goto failed;
3021 }
3022
3023 if (conn->pending_sec_level == BT_SECURITY_HIGH && cp->pin_len != 16) {
3024 struct mgmt_cp_pin_code_neg_reply ncp;
3025
3026 memcpy(&ncp.addr, &cp->addr, sizeof(ncp.addr));
3027
3028 BT_ERR("PIN code is not 16 bytes long");
3029
3030 err = send_pin_code_neg_reply(sk, hdev, &ncp);
3031 if (err >= 0)
3032 err = cmd_status(sk, hdev->id, MGMT_OP_PIN_CODE_REPLY,
3033 MGMT_STATUS_INVALID_PARAMS);
3034
3035 goto failed;
3036 }
3037
3038 cmd = mgmt_pending_add(sk, MGMT_OP_PIN_CODE_REPLY, hdev, data, len);
3039 if (!cmd) {
3040 err = -ENOMEM;
3041 goto failed;
3042 }
3043
3044 cmd->cmd_complete = addr_cmd_complete;
3045
3046 bacpy(&reply.bdaddr, &cp->addr.bdaddr);
3047 reply.pin_len = cp->pin_len;
3048 memcpy(reply.pin_code, cp->pin_code, sizeof(reply.pin_code));
3049
3050 err = hci_send_cmd(hdev, HCI_OP_PIN_CODE_REPLY, sizeof(reply), &reply);
3051 if (err < 0)
3052 mgmt_pending_remove(cmd);
3053
3054 failed:
3055 hci_dev_unlock(hdev);
3056 return err;
3057 }
3058
3059 static int set_io_capability(struct sock *sk, struct hci_dev *hdev, void *data,
3060 u16 len)
3061 {
3062 struct mgmt_cp_set_io_capability *cp = data;
3063
3064 BT_DBG("");
3065
3066 if (cp->io_capability > SMP_IO_KEYBOARD_DISPLAY)
3067 return cmd_complete(sk, hdev->id, MGMT_OP_SET_IO_CAPABILITY,
3068 MGMT_STATUS_INVALID_PARAMS, NULL, 0);
3069
3070 hci_dev_lock(hdev);
3071
3072 hdev->io_capability = cp->io_capability;
3073
3074 BT_DBG("%s IO capability set to 0x%02x", hdev->name,
3075 hdev->io_capability);
3076
3077 hci_dev_unlock(hdev);
3078
3079 return cmd_complete(sk, hdev->id, MGMT_OP_SET_IO_CAPABILITY, 0, NULL,
3080 0);
3081 }
3082
3083 static struct pending_cmd *find_pairing(struct hci_conn *conn)
3084 {
3085 struct hci_dev *hdev = conn->hdev;
3086 struct pending_cmd *cmd;
3087
3088 list_for_each_entry(cmd, &hdev->mgmt_pending, list) {
3089 if (cmd->opcode != MGMT_OP_PAIR_DEVICE)
3090 continue;
3091
3092 if (cmd->user_data != conn)
3093 continue;
3094
3095 return cmd;
3096 }
3097
3098 return NULL;
3099 }
3100
3101 static void pairing_complete(struct pending_cmd *cmd, u8 status)
3102 {
3103 struct mgmt_rp_pair_device rp;
3104 struct hci_conn *conn = cmd->user_data;
3105
3106 bacpy(&rp.addr.bdaddr, &conn->dst);
3107 rp.addr.type = link_to_bdaddr(conn->type, conn->dst_type);
3108
3109 cmd_complete(cmd->sk, cmd->index, MGMT_OP_PAIR_DEVICE, status,
3110 &rp, sizeof(rp));
3111
3112 /* So we don't get further callbacks for this connection */
3113 conn->connect_cfm_cb = NULL;
3114 conn->security_cfm_cb = NULL;
3115 conn->disconn_cfm_cb = NULL;
3116
3117 hci_conn_drop(conn);
3118 mgmt_pending_remove(cmd);
3119
3120 /* The device is paired so there is no need to remove
3121 * its connection parameters anymore.
3122 */
3123 clear_bit(HCI_CONN_PARAM_REMOVAL_PEND, &conn->flags);
3124
3125 hci_conn_put(conn);
3126 }
3127
3128 void mgmt_smp_complete(struct hci_conn *conn, bool complete)
3129 {
3130 u8 status = complete ? MGMT_STATUS_SUCCESS : MGMT_STATUS_FAILED;
3131 struct pending_cmd *cmd;
3132
3133 cmd = find_pairing(conn);
3134 if (cmd)
3135 cmd->cmd_complete(cmd, status);
3136 }
3137
3138 static void pairing_complete_cb(struct hci_conn *conn, u8 status)
3139 {
3140 struct pending_cmd *cmd;
3141
3142 BT_DBG("status %u", status);
3143
3144 cmd = find_pairing(conn);
3145 if (!cmd)
3146 BT_DBG("Unable to find a pending command");
3147 else
3148 cmd->cmd_complete(cmd, mgmt_status(status));
3149 }
3150
3151 static void le_pairing_complete_cb(struct hci_conn *conn, u8 status)
3152 {
3153 struct pending_cmd *cmd;
3154
3155 BT_DBG("status %u", status);
3156
3157 if (!status)
3158 return;
3159
3160 cmd = find_pairing(conn);
3161 if (!cmd)
3162 BT_DBG("Unable to find a pending command");
3163 else
3164 cmd->cmd_complete(cmd, mgmt_status(status));
3165 }
3166
3167 static int pair_device(struct sock *sk, struct hci_dev *hdev, void *data,
3168 u16 len)
3169 {
3170 struct mgmt_cp_pair_device *cp = data;
3171 struct mgmt_rp_pair_device rp;
3172 struct pending_cmd *cmd;
3173 u8 sec_level, auth_type;
3174 struct hci_conn *conn;
3175 int err;
3176
3177 BT_DBG("");
3178
3179 memset(&rp, 0, sizeof(rp));
3180 bacpy(&rp.addr.bdaddr, &cp->addr.bdaddr);
3181 rp.addr.type = cp->addr.type;
3182
3183 if (!bdaddr_type_is_valid(cp->addr.type))
3184 return cmd_complete(sk, hdev->id, MGMT_OP_PAIR_DEVICE,
3185 MGMT_STATUS_INVALID_PARAMS,
3186 &rp, sizeof(rp));
3187
3188 if (cp->io_cap > SMP_IO_KEYBOARD_DISPLAY)
3189 return cmd_complete(sk, hdev->id, MGMT_OP_PAIR_DEVICE,
3190 MGMT_STATUS_INVALID_PARAMS,
3191 &rp, sizeof(rp));
3192
3193 hci_dev_lock(hdev);
3194
3195 if (!hdev_is_powered(hdev)) {
3196 err = cmd_complete(sk, hdev->id, MGMT_OP_PAIR_DEVICE,
3197 MGMT_STATUS_NOT_POWERED, &rp, sizeof(rp));
3198 goto unlock;
3199 }
3200
3201 sec_level = BT_SECURITY_MEDIUM;
3202 auth_type = HCI_AT_DEDICATED_BONDING;
3203
3204 if (cp->addr.type == BDADDR_BREDR) {
3205 conn = hci_connect_acl(hdev, &cp->addr.bdaddr, sec_level,
3206 auth_type);
3207 } else {
3208 u8 addr_type;
3209
3210 /* Convert from L2CAP channel address type to HCI address type
3211 */
3212 if (cp->addr.type == BDADDR_LE_PUBLIC)
3213 addr_type = ADDR_LE_DEV_PUBLIC;
3214 else
3215 addr_type = ADDR_LE_DEV_RANDOM;
3216
3217 /* When pairing a new device, it is expected to remember
3218 * this device for future connections. Adding the connection
3219 * parameter information ahead of time allows tracking
3220 * of the slave preferred values and will speed up any
3221 * further connection establishment.
3222 *
3223 * If connection parameters already exist, then they
3224 * will be kept and this function does nothing.
3225 */
3226 hci_conn_params_add(hdev, &cp->addr.bdaddr, addr_type);
3227
3228 conn = hci_connect_le(hdev, &cp->addr.bdaddr, addr_type,
3229 sec_level, HCI_LE_CONN_TIMEOUT,
3230 HCI_ROLE_MASTER);
3231 }
3232
3233 if (IS_ERR(conn)) {
3234 int status;
3235
3236 if (PTR_ERR(conn) == -EBUSY)
3237 status = MGMT_STATUS_BUSY;
3238 else
3239 status = MGMT_STATUS_CONNECT_FAILED;
3240
3241 err = cmd_complete(sk, hdev->id, MGMT_OP_PAIR_DEVICE,
3242 status, &rp,
3243 sizeof(rp));
3244 goto unlock;
3245 }
3246
3247 if (conn->connect_cfm_cb) {
3248 hci_conn_drop(conn);
3249 err = cmd_complete(sk, hdev->id, MGMT_OP_PAIR_DEVICE,
3250 MGMT_STATUS_BUSY, &rp, sizeof(rp));
3251 goto unlock;
3252 }
3253
3254 cmd = mgmt_pending_add(sk, MGMT_OP_PAIR_DEVICE, hdev, data, len);
3255 if (!cmd) {
3256 err = -ENOMEM;
3257 hci_conn_drop(conn);
3258 goto unlock;
3259 }
3260
3261 cmd->cmd_complete = pairing_complete;
3262
3263 /* For LE, just connecting isn't a proof that the pairing finished */
3264 if (cp->addr.type == BDADDR_BREDR) {
3265 conn->connect_cfm_cb = pairing_complete_cb;
3266 conn->security_cfm_cb = pairing_complete_cb;
3267 conn->disconn_cfm_cb = pairing_complete_cb;
3268 } else {
3269 conn->connect_cfm_cb = le_pairing_complete_cb;
3270 conn->security_cfm_cb = le_pairing_complete_cb;
3271 conn->disconn_cfm_cb = le_pairing_complete_cb;
3272 }
3273
3274 conn->io_capability = cp->io_cap;
3275 cmd->user_data = hci_conn_get(conn);
3276
3277 if ((conn->state == BT_CONNECTED || conn->state == BT_CONFIG) &&
3278 hci_conn_security(conn, sec_level, auth_type, true))
3279 pairing_complete(cmd, 0);
3280
3281 err = 0;
3282
3283 unlock:
3284 hci_dev_unlock(hdev);
3285 return err;
3286 }
3287
3288 static int cancel_pair_device(struct sock *sk, struct hci_dev *hdev, void *data,
3289 u16 len)
3290 {
3291 struct mgmt_addr_info *addr = data;
3292 struct pending_cmd *cmd;
3293 struct hci_conn *conn;
3294 int err;
3295
3296 BT_DBG("");
3297
3298 hci_dev_lock(hdev);
3299
3300 if (!hdev_is_powered(hdev)) {
3301 err = cmd_status(sk, hdev->id, MGMT_OP_CANCEL_PAIR_DEVICE,
3302 MGMT_STATUS_NOT_POWERED);
3303 goto unlock;
3304 }
3305
3306 cmd = mgmt_pending_find(MGMT_OP_PAIR_DEVICE, hdev);
3307 if (!cmd) {
3308 err = cmd_status(sk, hdev->id, MGMT_OP_CANCEL_PAIR_DEVICE,
3309 MGMT_STATUS_INVALID_PARAMS);
3310 goto unlock;
3311 }
3312
3313 conn = cmd->user_data;
3314
3315 if (bacmp(&addr->bdaddr, &conn->dst) != 0) {
3316 err = cmd_status(sk, hdev->id, MGMT_OP_CANCEL_PAIR_DEVICE,
3317 MGMT_STATUS_INVALID_PARAMS);
3318 goto unlock;
3319 }
3320
3321 pairing_complete(cmd, MGMT_STATUS_CANCELLED);
3322
3323 err = cmd_complete(sk, hdev->id, MGMT_OP_CANCEL_PAIR_DEVICE, 0,
3324 addr, sizeof(*addr));
3325 unlock:
3326 hci_dev_unlock(hdev);
3327 return err;
3328 }
3329
3330 static int user_pairing_resp(struct sock *sk, struct hci_dev *hdev,
3331 struct mgmt_addr_info *addr, u16 mgmt_op,
3332 u16 hci_op, __le32 passkey)
3333 {
3334 struct pending_cmd *cmd;
3335 struct hci_conn *conn;
3336 int err;
3337
3338 hci_dev_lock(hdev);
3339
3340 if (!hdev_is_powered(hdev)) {
3341 err = cmd_complete(sk, hdev->id, mgmt_op,
3342 MGMT_STATUS_NOT_POWERED, addr,
3343 sizeof(*addr));
3344 goto done;
3345 }
3346
3347 if (addr->type == BDADDR_BREDR)
3348 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &addr->bdaddr);
3349 else
3350 conn = hci_conn_hash_lookup_ba(hdev, LE_LINK, &addr->bdaddr);
3351
3352 if (!conn) {
3353 err = cmd_complete(sk, hdev->id, mgmt_op,
3354 MGMT_STATUS_NOT_CONNECTED, addr,
3355 sizeof(*addr));
3356 goto done;
3357 }
3358
3359 if (addr->type == BDADDR_LE_PUBLIC || addr->type == BDADDR_LE_RANDOM) {
3360 err = smp_user_confirm_reply(conn, mgmt_op, passkey);
3361 if (!err)
3362 err = cmd_complete(sk, hdev->id, mgmt_op,
3363 MGMT_STATUS_SUCCESS, addr,
3364 sizeof(*addr));
3365 else
3366 err = cmd_complete(sk, hdev->id, mgmt_op,
3367 MGMT_STATUS_FAILED, addr,
3368 sizeof(*addr));
3369
3370 goto done;
3371 }
3372
3373 cmd = mgmt_pending_add(sk, mgmt_op, hdev, addr, sizeof(*addr));
3374 if (!cmd) {
3375 err = -ENOMEM;
3376 goto done;
3377 }
3378
3379 cmd->cmd_complete = addr_cmd_complete;
3380
3381 /* Continue with pairing via HCI */
3382 if (hci_op == HCI_OP_USER_PASSKEY_REPLY) {
3383 struct hci_cp_user_passkey_reply cp;
3384
3385 bacpy(&cp.bdaddr, &addr->bdaddr);
3386 cp.passkey = passkey;
3387 err = hci_send_cmd(hdev, hci_op, sizeof(cp), &cp);
3388 } else
3389 err = hci_send_cmd(hdev, hci_op, sizeof(addr->bdaddr),
3390 &addr->bdaddr);
3391
3392 if (err < 0)
3393 mgmt_pending_remove(cmd);
3394
3395 done:
3396 hci_dev_unlock(hdev);
3397 return err;
3398 }
3399
3400 static int pin_code_neg_reply(struct sock *sk, struct hci_dev *hdev,
3401 void *data, u16 len)
3402 {
3403 struct mgmt_cp_pin_code_neg_reply *cp = data;
3404
3405 BT_DBG("");
3406
3407 return user_pairing_resp(sk, hdev, &cp->addr,
3408 MGMT_OP_PIN_CODE_NEG_REPLY,
3409 HCI_OP_PIN_CODE_NEG_REPLY, 0);
3410 }
3411
3412 static int user_confirm_reply(struct sock *sk, struct hci_dev *hdev, void *data,
3413 u16 len)
3414 {
3415 struct mgmt_cp_user_confirm_reply *cp = data;
3416
3417 BT_DBG("");
3418
3419 if (len != sizeof(*cp))
3420 return cmd_status(sk, hdev->id, MGMT_OP_USER_CONFIRM_REPLY,
3421 MGMT_STATUS_INVALID_PARAMS);
3422
3423 return user_pairing_resp(sk, hdev, &cp->addr,
3424 MGMT_OP_USER_CONFIRM_REPLY,
3425 HCI_OP_USER_CONFIRM_REPLY, 0);
3426 }
3427
3428 static int user_confirm_neg_reply(struct sock *sk, struct hci_dev *hdev,
3429 void *data, u16 len)
3430 {
3431 struct mgmt_cp_user_confirm_neg_reply *cp = data;
3432
3433 BT_DBG("");
3434
3435 return user_pairing_resp(sk, hdev, &cp->addr,
3436 MGMT_OP_USER_CONFIRM_NEG_REPLY,
3437 HCI_OP_USER_CONFIRM_NEG_REPLY, 0);
3438 }
3439
3440 static int user_passkey_reply(struct sock *sk, struct hci_dev *hdev, void *data,
3441 u16 len)
3442 {
3443 struct mgmt_cp_user_passkey_reply *cp = data;
3444
3445 BT_DBG("");
3446
3447 return user_pairing_resp(sk, hdev, &cp->addr,
3448 MGMT_OP_USER_PASSKEY_REPLY,
3449 HCI_OP_USER_PASSKEY_REPLY, cp->passkey);
3450 }
3451
3452 static int user_passkey_neg_reply(struct sock *sk, struct hci_dev *hdev,
3453 void *data, u16 len)
3454 {
3455 struct mgmt_cp_user_passkey_neg_reply *cp = data;
3456
3457 BT_DBG("");
3458
3459 return user_pairing_resp(sk, hdev, &cp->addr,
3460 MGMT_OP_USER_PASSKEY_NEG_REPLY,
3461 HCI_OP_USER_PASSKEY_NEG_REPLY, 0);
3462 }
3463
3464 static void update_name(struct hci_request *req)
3465 {
3466 struct hci_dev *hdev = req->hdev;
3467 struct hci_cp_write_local_name cp;
3468
3469 memcpy(cp.name, hdev->dev_name, sizeof(cp.name));
3470
3471 hci_req_add(req, HCI_OP_WRITE_LOCAL_NAME, sizeof(cp), &cp);
3472 }
3473
3474 static void set_name_complete(struct hci_dev *hdev, u8 status)
3475 {
3476 struct mgmt_cp_set_local_name *cp;
3477 struct pending_cmd *cmd;
3478
3479 BT_DBG("status 0x%02x", status);
3480
3481 hci_dev_lock(hdev);
3482
3483 cmd = mgmt_pending_find(MGMT_OP_SET_LOCAL_NAME, hdev);
3484 if (!cmd)
3485 goto unlock;
3486
3487 cp = cmd->param;
3488
3489 if (status)
3490 cmd_status(cmd->sk, hdev->id, MGMT_OP_SET_LOCAL_NAME,
3491 mgmt_status(status));
3492 else
3493 cmd_complete(cmd->sk, hdev->id, MGMT_OP_SET_LOCAL_NAME, 0,
3494 cp, sizeof(*cp));
3495
3496 mgmt_pending_remove(cmd);
3497
3498 unlock:
3499 hci_dev_unlock(hdev);
3500 }
3501
3502 static int set_local_name(struct sock *sk, struct hci_dev *hdev, void *data,
3503 u16 len)
3504 {
3505 struct mgmt_cp_set_local_name *cp = data;
3506 struct pending_cmd *cmd;
3507 struct hci_request req;
3508 int err;
3509
3510 BT_DBG("");
3511
3512 hci_dev_lock(hdev);
3513
3514 /* If the old values are the same as the new ones just return a
3515 * direct command complete event.
3516 */
3517 if (!memcmp(hdev->dev_name, cp->name, sizeof(hdev->dev_name)) &&
3518 !memcmp(hdev->short_name, cp->short_name,
3519 sizeof(hdev->short_name))) {
3520 err = cmd_complete(sk, hdev->id, MGMT_OP_SET_LOCAL_NAME, 0,
3521 data, len);
3522 goto failed;
3523 }
3524
3525 memcpy(hdev->short_name, cp->short_name, sizeof(hdev->short_name));
3526
3527 if (!hdev_is_powered(hdev)) {
3528 memcpy(hdev->dev_name, cp->name, sizeof(hdev->dev_name));
3529
3530 err = cmd_complete(sk, hdev->id, MGMT_OP_SET_LOCAL_NAME, 0,
3531 data, len);
3532 if (err < 0)
3533 goto failed;
3534
3535 err = mgmt_event(MGMT_EV_LOCAL_NAME_CHANGED, hdev, data, len,
3536 sk);
3537
3538 goto failed;
3539 }
3540
3541 cmd = mgmt_pending_add(sk, MGMT_OP_SET_LOCAL_NAME, hdev, data, len);
3542 if (!cmd) {
3543 err = -ENOMEM;
3544 goto failed;
3545 }
3546
3547 memcpy(hdev->dev_name, cp->name, sizeof(hdev->dev_name));
3548
3549 hci_req_init(&req, hdev);
3550
3551 if (lmp_bredr_capable(hdev)) {
3552 update_name(&req);
3553 update_eir(&req);
3554 }
3555
3556 /* The name is stored in the scan response data and so
3557 * no need to udpate the advertising data here.
3558 */
3559 if (lmp_le_capable(hdev))
3560 update_scan_rsp_data(&req);
3561
3562 err = hci_req_run(&req, set_name_complete);
3563 if (err < 0)
3564 mgmt_pending_remove(cmd);
3565
3566 failed:
3567 hci_dev_unlock(hdev);
3568 return err;
3569 }
3570
3571 static int read_local_oob_data(struct sock *sk, struct hci_dev *hdev,
3572 void *data, u16 data_len)
3573 {
3574 struct pending_cmd *cmd;
3575 int err;
3576
3577 BT_DBG("%s", hdev->name);
3578
3579 hci_dev_lock(hdev);
3580
3581 if (!hdev_is_powered(hdev)) {
3582 err = cmd_status(sk, hdev->id, MGMT_OP_READ_LOCAL_OOB_DATA,
3583 MGMT_STATUS_NOT_POWERED);
3584 goto unlock;
3585 }
3586
3587 if (!lmp_ssp_capable(hdev)) {
3588 err = cmd_status(sk, hdev->id, MGMT_OP_READ_LOCAL_OOB_DATA,
3589 MGMT_STATUS_NOT_SUPPORTED);
3590 goto unlock;
3591 }
3592
3593 if (mgmt_pending_find(MGMT_OP_READ_LOCAL_OOB_DATA, hdev)) {
3594 err = cmd_status(sk, hdev->id, MGMT_OP_READ_LOCAL_OOB_DATA,
3595 MGMT_STATUS_BUSY);
3596 goto unlock;
3597 }
3598
3599 cmd = mgmt_pending_add(sk, MGMT_OP_READ_LOCAL_OOB_DATA, hdev, NULL, 0);
3600 if (!cmd) {
3601 err = -ENOMEM;
3602 goto unlock;
3603 }
3604
3605 if (bredr_sc_enabled(hdev))
3606 err = hci_send_cmd(hdev, HCI_OP_READ_LOCAL_OOB_EXT_DATA,
3607 0, NULL);
3608 else
3609 err = hci_send_cmd(hdev, HCI_OP_READ_LOCAL_OOB_DATA, 0, NULL);
3610
3611 if (err < 0)
3612 mgmt_pending_remove(cmd);
3613
3614 unlock:
3615 hci_dev_unlock(hdev);
3616 return err;
3617 }
3618
3619 static int add_remote_oob_data(struct sock *sk, struct hci_dev *hdev,
3620 void *data, u16 len)
3621 {
3622 int err;
3623
3624 BT_DBG("%s ", hdev->name);
3625
3626 hci_dev_lock(hdev);
3627
3628 if (len == MGMT_ADD_REMOTE_OOB_DATA_SIZE) {
3629 struct mgmt_cp_add_remote_oob_data *cp = data;
3630 u8 status;
3631
3632 if (cp->addr.type != BDADDR_BREDR) {
3633 err = cmd_complete(sk, hdev->id,
3634 MGMT_OP_ADD_REMOTE_OOB_DATA,
3635 MGMT_STATUS_INVALID_PARAMS,
3636 &cp->addr, sizeof(cp->addr));
3637 goto unlock;
3638 }
3639
3640 err = hci_add_remote_oob_data(hdev, &cp->addr.bdaddr,
3641 cp->addr.type, cp->hash,
3642 cp->rand, NULL, NULL);
3643 if (err < 0)
3644 status = MGMT_STATUS_FAILED;
3645 else
3646 status = MGMT_STATUS_SUCCESS;
3647
3648 err = cmd_complete(sk, hdev->id, MGMT_OP_ADD_REMOTE_OOB_DATA,
3649 status, &cp->addr, sizeof(cp->addr));
3650 } else if (len == MGMT_ADD_REMOTE_OOB_EXT_DATA_SIZE) {
3651 struct mgmt_cp_add_remote_oob_ext_data *cp = data;
3652 u8 *rand192, *hash192;
3653 u8 status;
3654
3655 if (cp->addr.type != BDADDR_BREDR) {
3656 err = cmd_complete(sk, hdev->id,
3657 MGMT_OP_ADD_REMOTE_OOB_DATA,
3658 MGMT_STATUS_INVALID_PARAMS,
3659 &cp->addr, sizeof(cp->addr));
3660 goto unlock;
3661 }
3662
3663 if (bdaddr_type_is_le(cp->addr.type)) {
3664 rand192 = NULL;
3665 hash192 = NULL;
3666 } else {
3667 rand192 = cp->rand192;
3668 hash192 = cp->hash192;
3669 }
3670
3671 err = hci_add_remote_oob_data(hdev, &cp->addr.bdaddr,
3672 cp->addr.type, hash192, rand192,
3673 cp->hash256, cp->rand256);
3674 if (err < 0)
3675 status = MGMT_STATUS_FAILED;
3676 else
3677 status = MGMT_STATUS_SUCCESS;
3678
3679 err = cmd_complete(sk, hdev->id, MGMT_OP_ADD_REMOTE_OOB_DATA,
3680 status, &cp->addr, sizeof(cp->addr));
3681 } else {
3682 BT_ERR("add_remote_oob_data: invalid length of %u bytes", len);
3683 err = cmd_status(sk, hdev->id, MGMT_OP_ADD_REMOTE_OOB_DATA,
3684 MGMT_STATUS_INVALID_PARAMS);
3685 }
3686
3687 unlock:
3688 hci_dev_unlock(hdev);
3689 return err;
3690 }
3691
3692 static int remove_remote_oob_data(struct sock *sk, struct hci_dev *hdev,
3693 void *data, u16 len)
3694 {
3695 struct mgmt_cp_remove_remote_oob_data *cp = data;
3696 u8 status;
3697 int err;
3698
3699 BT_DBG("%s", hdev->name);
3700
3701 if (cp->addr.type != BDADDR_BREDR)
3702 return cmd_complete(sk, hdev->id, MGMT_OP_REMOVE_REMOTE_OOB_DATA,
3703 MGMT_STATUS_INVALID_PARAMS,
3704 &cp->addr, sizeof(cp->addr));
3705
3706 hci_dev_lock(hdev);
3707
3708 if (!bacmp(&cp->addr.bdaddr, BDADDR_ANY)) {
3709 hci_remote_oob_data_clear(hdev);
3710 status = MGMT_STATUS_SUCCESS;
3711 goto done;
3712 }
3713
3714 err = hci_remove_remote_oob_data(hdev, &cp->addr.bdaddr, cp->addr.type);
3715 if (err < 0)
3716 status = MGMT_STATUS_INVALID_PARAMS;
3717 else
3718 status = MGMT_STATUS_SUCCESS;
3719
3720 done:
3721 err = cmd_complete(sk, hdev->id, MGMT_OP_REMOVE_REMOTE_OOB_DATA,
3722 status, &cp->addr, sizeof(cp->addr));
3723
3724 hci_dev_unlock(hdev);
3725 return err;
3726 }
3727
3728 static bool trigger_discovery(struct hci_request *req, u8 *status)
3729 {
3730 struct hci_dev *hdev = req->hdev;
3731 struct hci_cp_le_set_scan_param param_cp;
3732 struct hci_cp_le_set_scan_enable enable_cp;
3733 struct hci_cp_inquiry inq_cp;
3734 /* General inquiry access code (GIAC) */
3735 u8 lap[3] = { 0x33, 0x8b, 0x9e };
3736 u8 own_addr_type;
3737 int err;
3738
3739 switch (hdev->discovery.type) {
3740 case DISCOV_TYPE_BREDR:
3741 *status = mgmt_bredr_support(hdev);
3742 if (*status)
3743 return false;
3744
3745 if (test_bit(HCI_INQUIRY, &hdev->flags)) {
3746 *status = MGMT_STATUS_BUSY;
3747 return false;
3748 }
3749
3750 hci_inquiry_cache_flush(hdev);
3751
3752 memset(&inq_cp, 0, sizeof(inq_cp));
3753 memcpy(&inq_cp.lap, lap, sizeof(inq_cp.lap));
3754 inq_cp.length = DISCOV_BREDR_INQUIRY_LEN;
3755 hci_req_add(req, HCI_OP_INQUIRY, sizeof(inq_cp), &inq_cp);
3756 break;
3757
3758 case DISCOV_TYPE_LE:
3759 case DISCOV_TYPE_INTERLEAVED:
3760 *status = mgmt_le_support(hdev);
3761 if (*status)
3762 return false;
3763
3764 if (hdev->discovery.type == DISCOV_TYPE_INTERLEAVED &&
3765 !test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags)) {
3766 *status = MGMT_STATUS_NOT_SUPPORTED;
3767 return false;
3768 }
3769
3770 if (test_bit(HCI_LE_ADV, &hdev->dev_flags)) {
3771 /* Don't let discovery abort an outgoing
3772 * connection attempt that's using directed
3773 * advertising.
3774 */
3775 if (hci_conn_hash_lookup_state(hdev, LE_LINK,
3776 BT_CONNECT)) {
3777 *status = MGMT_STATUS_REJECTED;
3778 return false;
3779 }
3780
3781 disable_advertising(req);
3782 }
3783
3784 /* If controller is scanning, it means the background scanning
3785 * is running. Thus, we should temporarily stop it in order to
3786 * set the discovery scanning parameters.
3787 */
3788 if (test_bit(HCI_LE_SCAN, &hdev->dev_flags))
3789 hci_req_add_le_scan_disable(req);
3790
3791 memset(&param_cp, 0, sizeof(param_cp));
3792
3793 /* All active scans will be done with either a resolvable
3794 * private address (when privacy feature has been enabled)
3795 * or non-resolvable private address.
3796 */
3797 err = hci_update_random_address(req, true, &own_addr_type);
3798 if (err < 0) {
3799 *status = MGMT_STATUS_FAILED;
3800 return false;
3801 }
3802
3803 param_cp.type = LE_SCAN_ACTIVE;
3804 param_cp.interval = cpu_to_le16(DISCOV_LE_SCAN_INT);
3805 param_cp.window = cpu_to_le16(DISCOV_LE_SCAN_WIN);
3806 param_cp.own_address_type = own_addr_type;
3807 hci_req_add(req, HCI_OP_LE_SET_SCAN_PARAM, sizeof(param_cp),
3808 &param_cp);
3809
3810 memset(&enable_cp, 0, sizeof(enable_cp));
3811 enable_cp.enable = LE_SCAN_ENABLE;
3812 enable_cp.filter_dup = LE_SCAN_FILTER_DUP_ENABLE;
3813 hci_req_add(req, HCI_OP_LE_SET_SCAN_ENABLE, sizeof(enable_cp),
3814 &enable_cp);
3815 break;
3816
3817 default:
3818 *status = MGMT_STATUS_INVALID_PARAMS;
3819 return false;
3820 }
3821
3822 return true;
3823 }
3824
3825 static void start_discovery_complete(struct hci_dev *hdev, u8 status)
3826 {
3827 struct pending_cmd *cmd;
3828 unsigned long timeout;
3829
3830 BT_DBG("status %d", status);
3831
3832 hci_dev_lock(hdev);
3833
3834 cmd = mgmt_pending_find(MGMT_OP_START_DISCOVERY, hdev);
3835 if (!cmd)
3836 cmd = mgmt_pending_find(MGMT_OP_START_SERVICE_DISCOVERY, hdev);
3837
3838 if (cmd) {
3839 cmd->cmd_complete(cmd, mgmt_status(status));
3840 mgmt_pending_remove(cmd);
3841 }
3842
3843 if (status) {
3844 hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
3845 goto unlock;
3846 }
3847
3848 hci_discovery_set_state(hdev, DISCOVERY_FINDING);
3849
3850 switch (hdev->discovery.type) {
3851 case DISCOV_TYPE_LE:
3852 timeout = msecs_to_jiffies(DISCOV_LE_TIMEOUT);
3853 break;
3854 case DISCOV_TYPE_INTERLEAVED:
3855 timeout = msecs_to_jiffies(hdev->discov_interleaved_timeout);
3856 break;
3857 case DISCOV_TYPE_BREDR:
3858 timeout = 0;
3859 break;
3860 default:
3861 BT_ERR("Invalid discovery type %d", hdev->discovery.type);
3862 timeout = 0;
3863 break;
3864 }
3865
3866 if (timeout)
3867 queue_delayed_work(hdev->workqueue,
3868 &hdev->le_scan_disable, timeout);
3869
3870 unlock:
3871 hci_dev_unlock(hdev);
3872 }
3873
3874 static int start_discovery(struct sock *sk, struct hci_dev *hdev,
3875 void *data, u16 len)
3876 {
3877 struct mgmt_cp_start_discovery *cp = data;
3878 struct pending_cmd *cmd;
3879 struct hci_request req;
3880 u8 status;
3881 int err;
3882
3883 BT_DBG("%s", hdev->name);
3884
3885 hci_dev_lock(hdev);
3886
3887 if (!hdev_is_powered(hdev)) {
3888 err = cmd_complete(sk, hdev->id, MGMT_OP_START_DISCOVERY,
3889 MGMT_STATUS_NOT_POWERED,
3890 &cp->type, sizeof(cp->type));
3891 goto failed;
3892 }
3893
3894 if (hdev->discovery.state != DISCOVERY_STOPPED ||
3895 test_bit(HCI_PERIODIC_INQ, &hdev->dev_flags)) {
3896 err = cmd_complete(sk, hdev->id, MGMT_OP_START_DISCOVERY,
3897 MGMT_STATUS_BUSY, &cp->type,
3898 sizeof(cp->type));
3899 goto failed;
3900 }
3901
3902 cmd = mgmt_pending_add(sk, MGMT_OP_START_DISCOVERY, hdev, data, len);
3903 if (!cmd) {
3904 err = -ENOMEM;
3905 goto failed;
3906 }
3907
3908 cmd->cmd_complete = generic_cmd_complete;
3909
3910 /* Clear the discovery filter first to free any previously
3911 * allocated memory for the UUID list.
3912 */
3913 hci_discovery_filter_clear(hdev);
3914
3915 hdev->discovery.type = cp->type;
3916 hdev->discovery.report_invalid_rssi = false;
3917
3918 hci_req_init(&req, hdev);
3919
3920 if (!trigger_discovery(&req, &status)) {
3921 err = cmd_complete(sk, hdev->id, MGMT_OP_START_DISCOVERY,
3922 status, &cp->type, sizeof(cp->type));
3923 mgmt_pending_remove(cmd);
3924 goto failed;
3925 }
3926
3927 err = hci_req_run(&req, start_discovery_complete);
3928 if (err < 0) {
3929 mgmt_pending_remove(cmd);
3930 goto failed;
3931 }
3932
3933 hci_discovery_set_state(hdev, DISCOVERY_STARTING);
3934
3935 failed:
3936 hci_dev_unlock(hdev);
3937 return err;
3938 }
3939
3940 static void service_discovery_cmd_complete(struct pending_cmd *cmd, u8 status)
3941 {
3942 cmd_complete(cmd->sk, cmd->index, cmd->opcode, status, cmd->param, 1);
3943 }
3944
3945 static int start_service_discovery(struct sock *sk, struct hci_dev *hdev,
3946 void *data, u16 len)
3947 {
3948 struct mgmt_cp_start_service_discovery *cp = data;
3949 struct pending_cmd *cmd;
3950 struct hci_request req;
3951 const u16 max_uuid_count = ((U16_MAX - sizeof(*cp)) / 16);
3952 u16 uuid_count, expected_len;
3953 u8 status;
3954 int err;
3955
3956 BT_DBG("%s", hdev->name);
3957
3958 hci_dev_lock(hdev);
3959
3960 if (!hdev_is_powered(hdev)) {
3961 err = cmd_complete(sk, hdev->id,
3962 MGMT_OP_START_SERVICE_DISCOVERY,
3963 MGMT_STATUS_NOT_POWERED,
3964 &cp->type, sizeof(cp->type));
3965 goto failed;
3966 }
3967
3968 if (hdev->discovery.state != DISCOVERY_STOPPED ||
3969 test_bit(HCI_PERIODIC_INQ, &hdev->dev_flags)) {
3970 err = cmd_complete(sk, hdev->id,
3971 MGMT_OP_START_SERVICE_DISCOVERY,
3972 MGMT_STATUS_BUSY, &cp->type,
3973 sizeof(cp->type));
3974 goto failed;
3975 }
3976
3977 uuid_count = __le16_to_cpu(cp->uuid_count);
3978 if (uuid_count > max_uuid_count) {
3979 BT_ERR("service_discovery: too big uuid_count value %u",
3980 uuid_count);
3981 err = cmd_complete(sk, hdev->id,
3982 MGMT_OP_START_SERVICE_DISCOVERY,
3983 MGMT_STATUS_INVALID_PARAMS, &cp->type,
3984 sizeof(cp->type));
3985 goto failed;
3986 }
3987
3988 expected_len = sizeof(*cp) + uuid_count * 16;
3989 if (expected_len != len) {
3990 BT_ERR("service_discovery: expected %u bytes, got %u bytes",
3991 expected_len, len);
3992 err = cmd_complete(sk, hdev->id,
3993 MGMT_OP_START_SERVICE_DISCOVERY,
3994 MGMT_STATUS_INVALID_PARAMS, &cp->type,
3995 sizeof(cp->type));
3996 goto failed;
3997 }
3998
3999 cmd = mgmt_pending_add(sk, MGMT_OP_START_SERVICE_DISCOVERY,
4000 hdev, data, len);
4001 if (!cmd) {
4002 err = -ENOMEM;
4003 goto failed;
4004 }
4005
4006 cmd->cmd_complete = service_discovery_cmd_complete;
4007
4008 /* Clear the discovery filter first to free any previously
4009 * allocated memory for the UUID list.
4010 */
4011 hci_discovery_filter_clear(hdev);
4012
4013 hdev->discovery.type = cp->type;
4014 hdev->discovery.rssi = cp->rssi;
4015 hdev->discovery.uuid_count = uuid_count;
4016
4017 if (uuid_count > 0) {
4018 hdev->discovery.uuids = kmemdup(cp->uuids, uuid_count * 16,
4019 GFP_KERNEL);
4020 if (!hdev->discovery.uuids) {
4021 err = cmd_complete(sk, hdev->id,
4022 MGMT_OP_START_SERVICE_DISCOVERY,
4023 MGMT_STATUS_FAILED,
4024 &cp->type, sizeof(cp->type));
4025 mgmt_pending_remove(cmd);
4026 goto failed;
4027 }
4028 }
4029
4030 hci_req_init(&req, hdev);
4031
4032 if (!trigger_discovery(&req, &status)) {
4033 err = cmd_complete(sk, hdev->id,
4034 MGMT_OP_START_SERVICE_DISCOVERY,
4035 status, &cp->type, sizeof(cp->type));
4036 mgmt_pending_remove(cmd);
4037 goto failed;
4038 }
4039
4040 err = hci_req_run(&req, start_discovery_complete);
4041 if (err < 0) {
4042 mgmt_pending_remove(cmd);
4043 goto failed;
4044 }
4045
4046 hci_discovery_set_state(hdev, DISCOVERY_STARTING);
4047
4048 failed:
4049 hci_dev_unlock(hdev);
4050 return err;
4051 }
4052
4053 static void stop_discovery_complete(struct hci_dev *hdev, u8 status)
4054 {
4055 struct pending_cmd *cmd;
4056
4057 BT_DBG("status %d", status);
4058
4059 hci_dev_lock(hdev);
4060
4061 cmd = mgmt_pending_find(MGMT_OP_STOP_DISCOVERY, hdev);
4062 if (cmd) {
4063 cmd->cmd_complete(cmd, mgmt_status(status));
4064 mgmt_pending_remove(cmd);
4065 }
4066
4067 if (!status)
4068 hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
4069
4070 hci_dev_unlock(hdev);
4071 }
4072
4073 static int stop_discovery(struct sock *sk, struct hci_dev *hdev, void *data,
4074 u16 len)
4075 {
4076 struct mgmt_cp_stop_discovery *mgmt_cp = data;
4077 struct pending_cmd *cmd;
4078 struct hci_request req;
4079 int err;
4080
4081 BT_DBG("%s", hdev->name);
4082
4083 hci_dev_lock(hdev);
4084
4085 if (!hci_discovery_active(hdev)) {
4086 err = cmd_complete(sk, hdev->id, MGMT_OP_STOP_DISCOVERY,
4087 MGMT_STATUS_REJECTED, &mgmt_cp->type,
4088 sizeof(mgmt_cp->type));
4089 goto unlock;
4090 }
4091
4092 if (hdev->discovery.type != mgmt_cp->type) {
4093 err = cmd_complete(sk, hdev->id, MGMT_OP_STOP_DISCOVERY,
4094 MGMT_STATUS_INVALID_PARAMS, &mgmt_cp->type,
4095 sizeof(mgmt_cp->type));
4096 goto unlock;
4097 }
4098
4099 cmd = mgmt_pending_add(sk, MGMT_OP_STOP_DISCOVERY, hdev, data, len);
4100 if (!cmd) {
4101 err = -ENOMEM;
4102 goto unlock;
4103 }
4104
4105 cmd->cmd_complete = generic_cmd_complete;
4106
4107 hci_req_init(&req, hdev);
4108
4109 hci_stop_discovery(&req);
4110
4111 err = hci_req_run(&req, stop_discovery_complete);
4112 if (!err) {
4113 hci_discovery_set_state(hdev, DISCOVERY_STOPPING);
4114 goto unlock;
4115 }
4116
4117 mgmt_pending_remove(cmd);
4118
4119 /* If no HCI commands were sent we're done */
4120 if (err == -ENODATA) {
4121 err = cmd_complete(sk, hdev->id, MGMT_OP_STOP_DISCOVERY, 0,
4122 &mgmt_cp->type, sizeof(mgmt_cp->type));
4123 hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
4124 }
4125
4126 unlock:
4127 hci_dev_unlock(hdev);
4128 return err;
4129 }
4130
4131 static int confirm_name(struct sock *sk, struct hci_dev *hdev, void *data,
4132 u16 len)
4133 {
4134 struct mgmt_cp_confirm_name *cp = data;
4135 struct inquiry_entry *e;
4136 int err;
4137
4138 BT_DBG("%s", hdev->name);
4139
4140 hci_dev_lock(hdev);
4141
4142 if (!hci_discovery_active(hdev)) {
4143 err = cmd_complete(sk, hdev->id, MGMT_OP_CONFIRM_NAME,
4144 MGMT_STATUS_FAILED, &cp->addr,
4145 sizeof(cp->addr));
4146 goto failed;
4147 }
4148
4149 e = hci_inquiry_cache_lookup_unknown(hdev, &cp->addr.bdaddr);
4150 if (!e) {
4151 err = cmd_complete(sk, hdev->id, MGMT_OP_CONFIRM_NAME,
4152 MGMT_STATUS_INVALID_PARAMS, &cp->addr,
4153 sizeof(cp->addr));
4154 goto failed;
4155 }
4156
4157 if (cp->name_known) {
4158 e->name_state = NAME_KNOWN;
4159 list_del(&e->list);
4160 } else {
4161 e->name_state = NAME_NEEDED;
4162 hci_inquiry_cache_update_resolve(hdev, e);
4163 }
4164
4165 err = cmd_complete(sk, hdev->id, MGMT_OP_CONFIRM_NAME, 0, &cp->addr,
4166 sizeof(cp->addr));
4167
4168 failed:
4169 hci_dev_unlock(hdev);
4170 return err;
4171 }
4172
4173 static int block_device(struct sock *sk, struct hci_dev *hdev, void *data,
4174 u16 len)
4175 {
4176 struct mgmt_cp_block_device *cp = data;
4177 u8 status;
4178 int err;
4179
4180 BT_DBG("%s", hdev->name);
4181
4182 if (!bdaddr_type_is_valid(cp->addr.type))
4183 return cmd_complete(sk, hdev->id, MGMT_OP_BLOCK_DEVICE,
4184 MGMT_STATUS_INVALID_PARAMS,
4185 &cp->addr, sizeof(cp->addr));
4186
4187 hci_dev_lock(hdev);
4188
4189 err = hci_bdaddr_list_add(&hdev->blacklist, &cp->addr.bdaddr,
4190 cp->addr.type);
4191 if (err < 0) {
4192 status = MGMT_STATUS_FAILED;
4193 goto done;
4194 }
4195
4196 mgmt_event(MGMT_EV_DEVICE_BLOCKED, hdev, &cp->addr, sizeof(cp->addr),
4197 sk);
4198 status = MGMT_STATUS_SUCCESS;
4199
4200 done:
4201 err = cmd_complete(sk, hdev->id, MGMT_OP_BLOCK_DEVICE, status,
4202 &cp->addr, sizeof(cp->addr));
4203
4204 hci_dev_unlock(hdev);
4205
4206 return err;
4207 }
4208
4209 static int unblock_device(struct sock *sk, struct hci_dev *hdev, void *data,
4210 u16 len)
4211 {
4212 struct mgmt_cp_unblock_device *cp = data;
4213 u8 status;
4214 int err;
4215
4216 BT_DBG("%s", hdev->name);
4217
4218 if (!bdaddr_type_is_valid(cp->addr.type))
4219 return cmd_complete(sk, hdev->id, MGMT_OP_UNBLOCK_DEVICE,
4220 MGMT_STATUS_INVALID_PARAMS,
4221 &cp->addr, sizeof(cp->addr));
4222
4223 hci_dev_lock(hdev);
4224
4225 err = hci_bdaddr_list_del(&hdev->blacklist, &cp->addr.bdaddr,
4226 cp->addr.type);
4227 if (err < 0) {
4228 status = MGMT_STATUS_INVALID_PARAMS;
4229 goto done;
4230 }
4231
4232 mgmt_event(MGMT_EV_DEVICE_UNBLOCKED, hdev, &cp->addr, sizeof(cp->addr),
4233 sk);
4234 status = MGMT_STATUS_SUCCESS;
4235
4236 done:
4237 err = cmd_complete(sk, hdev->id, MGMT_OP_UNBLOCK_DEVICE, status,
4238 &cp->addr, sizeof(cp->addr));
4239
4240 hci_dev_unlock(hdev);
4241
4242 return err;
4243 }
4244
4245 static int set_device_id(struct sock *sk, struct hci_dev *hdev, void *data,
4246 u16 len)
4247 {
4248 struct mgmt_cp_set_device_id *cp = data;
4249 struct hci_request req;
4250 int err;
4251 __u16 source;
4252
4253 BT_DBG("%s", hdev->name);
4254
4255 source = __le16_to_cpu(cp->source);
4256
4257 if (source > 0x0002)
4258 return cmd_status(sk, hdev->id, MGMT_OP_SET_DEVICE_ID,
4259 MGMT_STATUS_INVALID_PARAMS);
4260
4261 hci_dev_lock(hdev);
4262
4263 hdev->devid_source = source;
4264 hdev->devid_vendor = __le16_to_cpu(cp->vendor);
4265 hdev->devid_product = __le16_to_cpu(cp->product);
4266 hdev->devid_version = __le16_to_cpu(cp->version);
4267
4268 err = cmd_complete(sk, hdev->id, MGMT_OP_SET_DEVICE_ID, 0, NULL, 0);
4269
4270 hci_req_init(&req, hdev);
4271 update_eir(&req);
4272 hci_req_run(&req, NULL);
4273
4274 hci_dev_unlock(hdev);
4275
4276 return err;
4277 }
4278
4279 static void set_advertising_complete(struct hci_dev *hdev, u8 status)
4280 {
4281 struct cmd_lookup match = { NULL, hdev };
4282
4283 hci_dev_lock(hdev);
4284
4285 if (status) {
4286 u8 mgmt_err = mgmt_status(status);
4287
4288 mgmt_pending_foreach(MGMT_OP_SET_ADVERTISING, hdev,
4289 cmd_status_rsp, &mgmt_err);
4290 goto unlock;
4291 }
4292
4293 if (test_bit(HCI_LE_ADV, &hdev->dev_flags))
4294 set_bit(HCI_ADVERTISING, &hdev->dev_flags);
4295 else
4296 clear_bit(HCI_ADVERTISING, &hdev->dev_flags);
4297
4298 mgmt_pending_foreach(MGMT_OP_SET_ADVERTISING, hdev, settings_rsp,
4299 &match);
4300
4301 new_settings(hdev, match.sk);
4302
4303 if (match.sk)
4304 sock_put(match.sk);
4305
4306 unlock:
4307 hci_dev_unlock(hdev);
4308 }
4309
4310 static int set_advertising(struct sock *sk, struct hci_dev *hdev, void *data,
4311 u16 len)
4312 {
4313 struct mgmt_mode *cp = data;
4314 struct pending_cmd *cmd;
4315 struct hci_request req;
4316 u8 val, enabled, status;
4317 int err;
4318
4319 BT_DBG("request for %s", hdev->name);
4320
4321 status = mgmt_le_support(hdev);
4322 if (status)
4323 return cmd_status(sk, hdev->id, MGMT_OP_SET_ADVERTISING,
4324 status);
4325
4326 if (cp->val != 0x00 && cp->val != 0x01)
4327 return cmd_status(sk, hdev->id, MGMT_OP_SET_ADVERTISING,
4328 MGMT_STATUS_INVALID_PARAMS);
4329
4330 hci_dev_lock(hdev);
4331
4332 val = !!cp->val;
4333 enabled = test_bit(HCI_ADVERTISING, &hdev->dev_flags);
4334
4335 /* The following conditions are ones which mean that we should
4336 * not do any HCI communication but directly send a mgmt
4337 * response to user space (after toggling the flag if
4338 * necessary).
4339 */
4340 if (!hdev_is_powered(hdev) || val == enabled ||
4341 hci_conn_num(hdev, LE_LINK) > 0 ||
4342 (test_bit(HCI_LE_SCAN, &hdev->dev_flags) &&
4343 hdev->le_scan_type == LE_SCAN_ACTIVE)) {
4344 bool changed = false;
4345
4346 if (val != test_bit(HCI_ADVERTISING, &hdev->dev_flags)) {
4347 change_bit(HCI_ADVERTISING, &hdev->dev_flags);
4348 changed = true;
4349 }
4350
4351 err = send_settings_rsp(sk, MGMT_OP_SET_ADVERTISING, hdev);
4352 if (err < 0)
4353 goto unlock;
4354
4355 if (changed)
4356 err = new_settings(hdev, sk);
4357
4358 goto unlock;
4359 }
4360
4361 if (mgmt_pending_find(MGMT_OP_SET_ADVERTISING, hdev) ||
4362 mgmt_pending_find(MGMT_OP_SET_LE, hdev)) {
4363 err = cmd_status(sk, hdev->id, MGMT_OP_SET_ADVERTISING,
4364 MGMT_STATUS_BUSY);
4365 goto unlock;
4366 }
4367
4368 cmd = mgmt_pending_add(sk, MGMT_OP_SET_ADVERTISING, hdev, data, len);
4369 if (!cmd) {
4370 err = -ENOMEM;
4371 goto unlock;
4372 }
4373
4374 hci_req_init(&req, hdev);
4375
4376 if (val)
4377 enable_advertising(&req);
4378 else
4379 disable_advertising(&req);
4380
4381 err = hci_req_run(&req, set_advertising_complete);
4382 if (err < 0)
4383 mgmt_pending_remove(cmd);
4384
4385 unlock:
4386 hci_dev_unlock(hdev);
4387 return err;
4388 }
4389
4390 static int set_static_address(struct sock *sk, struct hci_dev *hdev,
4391 void *data, u16 len)
4392 {
4393 struct mgmt_cp_set_static_address *cp = data;
4394 int err;
4395
4396 BT_DBG("%s", hdev->name);
4397
4398 if (!lmp_le_capable(hdev))
4399 return cmd_status(sk, hdev->id, MGMT_OP_SET_STATIC_ADDRESS,
4400 MGMT_STATUS_NOT_SUPPORTED);
4401
4402 if (hdev_is_powered(hdev))
4403 return cmd_status(sk, hdev->id, MGMT_OP_SET_STATIC_ADDRESS,
4404 MGMT_STATUS_REJECTED);
4405
4406 if (bacmp(&cp->bdaddr, BDADDR_ANY)) {
4407 if (!bacmp(&cp->bdaddr, BDADDR_NONE))
4408 return cmd_status(sk, hdev->id,
4409 MGMT_OP_SET_STATIC_ADDRESS,
4410 MGMT_STATUS_INVALID_PARAMS);
4411
4412 /* Two most significant bits shall be set */
4413 if ((cp->bdaddr.b[5] & 0xc0) != 0xc0)
4414 return cmd_status(sk, hdev->id,
4415 MGMT_OP_SET_STATIC_ADDRESS,
4416 MGMT_STATUS_INVALID_PARAMS);
4417 }
4418
4419 hci_dev_lock(hdev);
4420
4421 bacpy(&hdev->static_addr, &cp->bdaddr);
4422
4423 err = cmd_complete(sk, hdev->id, MGMT_OP_SET_STATIC_ADDRESS, 0, NULL, 0);
4424
4425 hci_dev_unlock(hdev);
4426
4427 return err;
4428 }
4429
4430 static int set_scan_params(struct sock *sk, struct hci_dev *hdev,
4431 void *data, u16 len)
4432 {
4433 struct mgmt_cp_set_scan_params *cp = data;
4434 __u16 interval, window;
4435 int err;
4436
4437 BT_DBG("%s", hdev->name);
4438
4439 if (!lmp_le_capable(hdev))
4440 return cmd_status(sk, hdev->id, MGMT_OP_SET_SCAN_PARAMS,
4441 MGMT_STATUS_NOT_SUPPORTED);
4442
4443 interval = __le16_to_cpu(cp->interval);
4444
4445 if (interval < 0x0004 || interval > 0x4000)
4446 return cmd_status(sk, hdev->id, MGMT_OP_SET_SCAN_PARAMS,
4447 MGMT_STATUS_INVALID_PARAMS);
4448
4449 window = __le16_to_cpu(cp->window);
4450
4451 if (window < 0x0004 || window > 0x4000)
4452 return cmd_status(sk, hdev->id, MGMT_OP_SET_SCAN_PARAMS,
4453 MGMT_STATUS_INVALID_PARAMS);
4454
4455 if (window > interval)
4456 return cmd_status(sk, hdev->id, MGMT_OP_SET_SCAN_PARAMS,
4457 MGMT_STATUS_INVALID_PARAMS);
4458
4459 hci_dev_lock(hdev);
4460
4461 hdev->le_scan_interval = interval;
4462 hdev->le_scan_window = window;
4463
4464 err = cmd_complete(sk, hdev->id, MGMT_OP_SET_SCAN_PARAMS, 0, NULL, 0);
4465
4466 /* If background scan is running, restart it so new parameters are
4467 * loaded.
4468 */
4469 if (test_bit(HCI_LE_SCAN, &hdev->dev_flags) &&
4470 hdev->discovery.state == DISCOVERY_STOPPED) {
4471 struct hci_request req;
4472
4473 hci_req_init(&req, hdev);
4474
4475 hci_req_add_le_scan_disable(&req);
4476 hci_req_add_le_passive_scan(&req);
4477
4478 hci_req_run(&req, NULL);
4479 }
4480
4481 hci_dev_unlock(hdev);
4482
4483 return err;
4484 }
4485
4486 static void fast_connectable_complete(struct hci_dev *hdev, u8 status)
4487 {
4488 struct pending_cmd *cmd;
4489
4490 BT_DBG("status 0x%02x", status);
4491
4492 hci_dev_lock(hdev);
4493
4494 cmd = mgmt_pending_find(MGMT_OP_SET_FAST_CONNECTABLE, hdev);
4495 if (!cmd)
4496 goto unlock;
4497
4498 if (status) {
4499 cmd_status(cmd->sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE,
4500 mgmt_status(status));
4501 } else {
4502 struct mgmt_mode *cp = cmd->param;
4503
4504 if (cp->val)
4505 set_bit(HCI_FAST_CONNECTABLE, &hdev->dev_flags);
4506 else
4507 clear_bit(HCI_FAST_CONNECTABLE, &hdev->dev_flags);
4508
4509 send_settings_rsp(cmd->sk, MGMT_OP_SET_FAST_CONNECTABLE, hdev);
4510 new_settings(hdev, cmd->sk);
4511 }
4512
4513 mgmt_pending_remove(cmd);
4514
4515 unlock:
4516 hci_dev_unlock(hdev);
4517 }
4518
4519 static int set_fast_connectable(struct sock *sk, struct hci_dev *hdev,
4520 void *data, u16 len)
4521 {
4522 struct mgmt_mode *cp = data;
4523 struct pending_cmd *cmd;
4524 struct hci_request req;
4525 int err;
4526
4527 BT_DBG("%s", hdev->name);
4528
4529 if (!test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags) ||
4530 hdev->hci_ver < BLUETOOTH_VER_1_2)
4531 return cmd_status(sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE,
4532 MGMT_STATUS_NOT_SUPPORTED);
4533
4534 if (cp->val != 0x00 && cp->val != 0x01)
4535 return cmd_status(sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE,
4536 MGMT_STATUS_INVALID_PARAMS);
4537
4538 if (!hdev_is_powered(hdev))
4539 return cmd_status(sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE,
4540 MGMT_STATUS_NOT_POWERED);
4541
4542 if (!test_bit(HCI_CONNECTABLE, &hdev->dev_flags))
4543 return cmd_status(sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE,
4544 MGMT_STATUS_REJECTED);
4545
4546 hci_dev_lock(hdev);
4547
4548 if (mgmt_pending_find(MGMT_OP_SET_FAST_CONNECTABLE, hdev)) {
4549 err = cmd_status(sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE,
4550 MGMT_STATUS_BUSY);
4551 goto unlock;
4552 }
4553
4554 if (!!cp->val == test_bit(HCI_FAST_CONNECTABLE, &hdev->dev_flags)) {
4555 err = send_settings_rsp(sk, MGMT_OP_SET_FAST_CONNECTABLE,
4556 hdev);
4557 goto unlock;
4558 }
4559
4560 cmd = mgmt_pending_add(sk, MGMT_OP_SET_FAST_CONNECTABLE, hdev,
4561 data, len);
4562 if (!cmd) {
4563 err = -ENOMEM;
4564 goto unlock;
4565 }
4566
4567 hci_req_init(&req, hdev);
4568
4569 write_fast_connectable(&req, cp->val);
4570
4571 err = hci_req_run(&req, fast_connectable_complete);
4572 if (err < 0) {
4573 err = cmd_status(sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE,
4574 MGMT_STATUS_FAILED);
4575 mgmt_pending_remove(cmd);
4576 }
4577
4578 unlock:
4579 hci_dev_unlock(hdev);
4580
4581 return err;
4582 }
4583
4584 static void set_bredr_complete(struct hci_dev *hdev, u8 status)
4585 {
4586 struct pending_cmd *cmd;
4587
4588 BT_DBG("status 0x%02x", status);
4589
4590 hci_dev_lock(hdev);
4591
4592 cmd = mgmt_pending_find(MGMT_OP_SET_BREDR, hdev);
4593 if (!cmd)
4594 goto unlock;
4595
4596 if (status) {
4597 u8 mgmt_err = mgmt_status(status);
4598
4599 /* We need to restore the flag if related HCI commands
4600 * failed.
4601 */
4602 clear_bit(HCI_BREDR_ENABLED, &hdev->dev_flags);
4603
4604 cmd_status(cmd->sk, cmd->index, cmd->opcode, mgmt_err);
4605 } else {
4606 send_settings_rsp(cmd->sk, MGMT_OP_SET_BREDR, hdev);
4607 new_settings(hdev, cmd->sk);
4608 }
4609
4610 mgmt_pending_remove(cmd);
4611
4612 unlock:
4613 hci_dev_unlock(hdev);
4614 }
4615
4616 static int set_bredr(struct sock *sk, struct hci_dev *hdev, void *data, u16 len)
4617 {
4618 struct mgmt_mode *cp = data;
4619 struct pending_cmd *cmd;
4620 struct hci_request req;
4621 int err;
4622
4623 BT_DBG("request for %s", hdev->name);
4624
4625 if (!lmp_bredr_capable(hdev) || !lmp_le_capable(hdev))
4626 return cmd_status(sk, hdev->id, MGMT_OP_SET_BREDR,
4627 MGMT_STATUS_NOT_SUPPORTED);
4628
4629 if (!test_bit(HCI_LE_ENABLED, &hdev->dev_flags))
4630 return cmd_status(sk, hdev->id, MGMT_OP_SET_BREDR,
4631 MGMT_STATUS_REJECTED);
4632
4633 if (cp->val != 0x00 && cp->val != 0x01)
4634 return cmd_status(sk, hdev->id, MGMT_OP_SET_BREDR,
4635 MGMT_STATUS_INVALID_PARAMS);
4636
4637 hci_dev_lock(hdev);
4638
4639 if (cp->val == test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags)) {
4640 err = send_settings_rsp(sk, MGMT_OP_SET_BREDR, hdev);
4641 goto unlock;
4642 }
4643
4644 if (!hdev_is_powered(hdev)) {
4645 if (!cp->val) {
4646 clear_bit(HCI_DISCOVERABLE, &hdev->dev_flags);
4647 clear_bit(HCI_SSP_ENABLED, &hdev->dev_flags);
4648 clear_bit(HCI_LINK_SECURITY, &hdev->dev_flags);
4649 clear_bit(HCI_FAST_CONNECTABLE, &hdev->dev_flags);
4650 clear_bit(HCI_HS_ENABLED, &hdev->dev_flags);
4651 }
4652
4653 change_bit(HCI_BREDR_ENABLED, &hdev->dev_flags);
4654
4655 err = send_settings_rsp(sk, MGMT_OP_SET_BREDR, hdev);
4656 if (err < 0)
4657 goto unlock;
4658
4659 err = new_settings(hdev, sk);
4660 goto unlock;
4661 }
4662
4663 /* Reject disabling when powered on */
4664 if (!cp->val) {
4665 err = cmd_status(sk, hdev->id, MGMT_OP_SET_BREDR,
4666 MGMT_STATUS_REJECTED);
4667 goto unlock;
4668 }
4669
4670 if (mgmt_pending_find(MGMT_OP_SET_BREDR, hdev)) {
4671 err = cmd_status(sk, hdev->id, MGMT_OP_SET_BREDR,
4672 MGMT_STATUS_BUSY);
4673 goto unlock;
4674 }
4675
4676 cmd = mgmt_pending_add(sk, MGMT_OP_SET_BREDR, hdev, data, len);
4677 if (!cmd) {
4678 err = -ENOMEM;
4679 goto unlock;
4680 }
4681
4682 /* We need to flip the bit already here so that update_adv_data
4683 * generates the correct flags.
4684 */
4685 set_bit(HCI_BREDR_ENABLED, &hdev->dev_flags);
4686
4687 hci_req_init(&req, hdev);
4688
4689 write_fast_connectable(&req, false);
4690 hci_update_page_scan(hdev, &req);
4691
4692 /* Since only the advertising data flags will change, there
4693 * is no need to update the scan response data.
4694 */
4695 update_adv_data(&req);
4696
4697 err = hci_req_run(&req, set_bredr_complete);
4698 if (err < 0)
4699 mgmt_pending_remove(cmd);
4700
4701 unlock:
4702 hci_dev_unlock(hdev);
4703 return err;
4704 }
4705
4706 static int set_secure_conn(struct sock *sk, struct hci_dev *hdev,
4707 void *data, u16 len)
4708 {
4709 struct mgmt_mode *cp = data;
4710 struct pending_cmd *cmd;
4711 u8 val;
4712 int err;
4713
4714 BT_DBG("request for %s", hdev->name);
4715
4716 if (!test_bit(HCI_LE_ENABLED, &hdev->dev_flags) &&
4717 !lmp_sc_capable(hdev) && !test_bit(HCI_FORCE_SC, &hdev->dbg_flags))
4718 return cmd_status(sk, hdev->id, MGMT_OP_SET_SECURE_CONN,
4719 MGMT_STATUS_NOT_SUPPORTED);
4720
4721 if (cp->val != 0x00 && cp->val != 0x01 && cp->val != 0x02)
4722 return cmd_status(sk, hdev->id, MGMT_OP_SET_SECURE_CONN,
4723 MGMT_STATUS_INVALID_PARAMS);
4724
4725 hci_dev_lock(hdev);
4726
4727 if (!hdev_is_powered(hdev) ||
4728 (!lmp_sc_capable(hdev) &&
4729 !test_bit(HCI_FORCE_SC, &hdev->dbg_flags)) ||
4730 !test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags)) {
4731 bool changed;
4732
4733 if (cp->val) {
4734 changed = !test_and_set_bit(HCI_SC_ENABLED,
4735 &hdev->dev_flags);
4736 if (cp->val == 0x02)
4737 set_bit(HCI_SC_ONLY, &hdev->dev_flags);
4738 else
4739 clear_bit(HCI_SC_ONLY, &hdev->dev_flags);
4740 } else {
4741 changed = test_and_clear_bit(HCI_SC_ENABLED,
4742 &hdev->dev_flags);
4743 clear_bit(HCI_SC_ONLY, &hdev->dev_flags);
4744 }
4745
4746 err = send_settings_rsp(sk, MGMT_OP_SET_SECURE_CONN, hdev);
4747 if (err < 0)
4748 goto failed;
4749
4750 if (changed)
4751 err = new_settings(hdev, sk);
4752
4753 goto failed;
4754 }
4755
4756 if (mgmt_pending_find(MGMT_OP_SET_SECURE_CONN, hdev)) {
4757 err = cmd_status(sk, hdev->id, MGMT_OP_SET_SECURE_CONN,
4758 MGMT_STATUS_BUSY);
4759 goto failed;
4760 }
4761
4762 val = !!cp->val;
4763
4764 if (val == test_bit(HCI_SC_ENABLED, &hdev->dev_flags) &&
4765 (cp->val == 0x02) == test_bit(HCI_SC_ONLY, &hdev->dev_flags)) {
4766 err = send_settings_rsp(sk, MGMT_OP_SET_SECURE_CONN, hdev);
4767 goto failed;
4768 }
4769
4770 cmd = mgmt_pending_add(sk, MGMT_OP_SET_SECURE_CONN, hdev, data, len);
4771 if (!cmd) {
4772 err = -ENOMEM;
4773 goto failed;
4774 }
4775
4776 err = hci_send_cmd(hdev, HCI_OP_WRITE_SC_SUPPORT, 1, &val);
4777 if (err < 0) {
4778 mgmt_pending_remove(cmd);
4779 goto failed;
4780 }
4781
4782 if (cp->val == 0x02)
4783 set_bit(HCI_SC_ONLY, &hdev->dev_flags);
4784 else
4785 clear_bit(HCI_SC_ONLY, &hdev->dev_flags);
4786
4787 failed:
4788 hci_dev_unlock(hdev);
4789 return err;
4790 }
4791
4792 static int set_debug_keys(struct sock *sk, struct hci_dev *hdev,
4793 void *data, u16 len)
4794 {
4795 struct mgmt_mode *cp = data;
4796 bool changed, use_changed;
4797 int err;
4798
4799 BT_DBG("request for %s", hdev->name);
4800
4801 if (cp->val != 0x00 && cp->val != 0x01 && cp->val != 0x02)
4802 return cmd_status(sk, hdev->id, MGMT_OP_SET_DEBUG_KEYS,
4803 MGMT_STATUS_INVALID_PARAMS);
4804
4805 hci_dev_lock(hdev);
4806
4807 if (cp->val)
4808 changed = !test_and_set_bit(HCI_KEEP_DEBUG_KEYS,
4809 &hdev->dev_flags);
4810 else
4811 changed = test_and_clear_bit(HCI_KEEP_DEBUG_KEYS,
4812 &hdev->dev_flags);
4813
4814 if (cp->val == 0x02)
4815 use_changed = !test_and_set_bit(HCI_USE_DEBUG_KEYS,
4816 &hdev->dev_flags);
4817 else
4818 use_changed = test_and_clear_bit(HCI_USE_DEBUG_KEYS,
4819 &hdev->dev_flags);
4820
4821 if (hdev_is_powered(hdev) && use_changed &&
4822 test_bit(HCI_SSP_ENABLED, &hdev->dev_flags)) {
4823 u8 mode = (cp->val == 0x02) ? 0x01 : 0x00;
4824 hci_send_cmd(hdev, HCI_OP_WRITE_SSP_DEBUG_MODE,
4825 sizeof(mode), &mode);
4826 }
4827
4828 err = send_settings_rsp(sk, MGMT_OP_SET_DEBUG_KEYS, hdev);
4829 if (err < 0)
4830 goto unlock;
4831
4832 if (changed)
4833 err = new_settings(hdev, sk);
4834
4835 unlock:
4836 hci_dev_unlock(hdev);
4837 return err;
4838 }
4839
4840 static int set_privacy(struct sock *sk, struct hci_dev *hdev, void *cp_data,
4841 u16 len)
4842 {
4843 struct mgmt_cp_set_privacy *cp = cp_data;
4844 bool changed;
4845 int err;
4846
4847 BT_DBG("request for %s", hdev->name);
4848
4849 if (!lmp_le_capable(hdev))
4850 return cmd_status(sk, hdev->id, MGMT_OP_SET_PRIVACY,
4851 MGMT_STATUS_NOT_SUPPORTED);
4852
4853 if (cp->privacy != 0x00 && cp->privacy != 0x01)
4854 return cmd_status(sk, hdev->id, MGMT_OP_SET_PRIVACY,
4855 MGMT_STATUS_INVALID_PARAMS);
4856
4857 if (hdev_is_powered(hdev))
4858 return cmd_status(sk, hdev->id, MGMT_OP_SET_PRIVACY,
4859 MGMT_STATUS_REJECTED);
4860
4861 hci_dev_lock(hdev);
4862
4863 /* If user space supports this command it is also expected to
4864 * handle IRKs. Therefore, set the HCI_RPA_RESOLVING flag.
4865 */
4866 set_bit(HCI_RPA_RESOLVING, &hdev->dev_flags);
4867
4868 if (cp->privacy) {
4869 changed = !test_and_set_bit(HCI_PRIVACY, &hdev->dev_flags);
4870 memcpy(hdev->irk, cp->irk, sizeof(hdev->irk));
4871 set_bit(HCI_RPA_EXPIRED, &hdev->dev_flags);
4872 } else {
4873 changed = test_and_clear_bit(HCI_PRIVACY, &hdev->dev_flags);
4874 memset(hdev->irk, 0, sizeof(hdev->irk));
4875 clear_bit(HCI_RPA_EXPIRED, &hdev->dev_flags);
4876 }
4877
4878 err = send_settings_rsp(sk, MGMT_OP_SET_PRIVACY, hdev);
4879 if (err < 0)
4880 goto unlock;
4881
4882 if (changed)
4883 err = new_settings(hdev, sk);
4884
4885 unlock:
4886 hci_dev_unlock(hdev);
4887 return err;
4888 }
4889
4890 static bool irk_is_valid(struct mgmt_irk_info *irk)
4891 {
4892 switch (irk->addr.type) {
4893 case BDADDR_LE_PUBLIC:
4894 return true;
4895
4896 case BDADDR_LE_RANDOM:
4897 /* Two most significant bits shall be set */
4898 if ((irk->addr.bdaddr.b[5] & 0xc0) != 0xc0)
4899 return false;
4900 return true;
4901 }
4902
4903 return false;
4904 }
4905
4906 static int load_irks(struct sock *sk, struct hci_dev *hdev, void *cp_data,
4907 u16 len)
4908 {
4909 struct mgmt_cp_load_irks *cp = cp_data;
4910 const u16 max_irk_count = ((U16_MAX - sizeof(*cp)) /
4911 sizeof(struct mgmt_irk_info));
4912 u16 irk_count, expected_len;
4913 int i, err;
4914
4915 BT_DBG("request for %s", hdev->name);
4916
4917 if (!lmp_le_capable(hdev))
4918 return cmd_status(sk, hdev->id, MGMT_OP_LOAD_IRKS,
4919 MGMT_STATUS_NOT_SUPPORTED);
4920
4921 irk_count = __le16_to_cpu(cp->irk_count);
4922 if (irk_count > max_irk_count) {
4923 BT_ERR("load_irks: too big irk_count value %u", irk_count);
4924 return cmd_status(sk, hdev->id, MGMT_OP_LOAD_IRKS,
4925 MGMT_STATUS_INVALID_PARAMS);
4926 }
4927
4928 expected_len = sizeof(*cp) + irk_count * sizeof(struct mgmt_irk_info);
4929 if (expected_len != len) {
4930 BT_ERR("load_irks: expected %u bytes, got %u bytes",
4931 expected_len, len);
4932 return cmd_status(sk, hdev->id, MGMT_OP_LOAD_IRKS,
4933 MGMT_STATUS_INVALID_PARAMS);
4934 }
4935
4936 BT_DBG("%s irk_count %u", hdev->name, irk_count);
4937
4938 for (i = 0; i < irk_count; i++) {
4939 struct mgmt_irk_info *key = &cp->irks[i];
4940
4941 if (!irk_is_valid(key))
4942 return cmd_status(sk, hdev->id,
4943 MGMT_OP_LOAD_IRKS,
4944 MGMT_STATUS_INVALID_PARAMS);
4945 }
4946
4947 hci_dev_lock(hdev);
4948
4949 hci_smp_irks_clear(hdev);
4950
4951 for (i = 0; i < irk_count; i++) {
4952 struct mgmt_irk_info *irk = &cp->irks[i];
4953 u8 addr_type;
4954
4955 if (irk->addr.type == BDADDR_LE_PUBLIC)
4956 addr_type = ADDR_LE_DEV_PUBLIC;
4957 else
4958 addr_type = ADDR_LE_DEV_RANDOM;
4959
4960 hci_add_irk(hdev, &irk->addr.bdaddr, addr_type, irk->val,
4961 BDADDR_ANY);
4962 }
4963
4964 set_bit(HCI_RPA_RESOLVING, &hdev->dev_flags);
4965
4966 err = cmd_complete(sk, hdev->id, MGMT_OP_LOAD_IRKS, 0, NULL, 0);
4967
4968 hci_dev_unlock(hdev);
4969
4970 return err;
4971 }
4972
4973 static bool ltk_is_valid(struct mgmt_ltk_info *key)
4974 {
4975 if (key->master != 0x00 && key->master != 0x01)
4976 return false;
4977
4978 switch (key->addr.type) {
4979 case BDADDR_LE_PUBLIC:
4980 return true;
4981
4982 case BDADDR_LE_RANDOM:
4983 /* Two most significant bits shall be set */
4984 if ((key->addr.bdaddr.b[5] & 0xc0) != 0xc0)
4985 return false;
4986 return true;
4987 }
4988
4989 return false;
4990 }
4991
4992 static int load_long_term_keys(struct sock *sk, struct hci_dev *hdev,
4993 void *cp_data, u16 len)
4994 {
4995 struct mgmt_cp_load_long_term_keys *cp = cp_data;
4996 const u16 max_key_count = ((U16_MAX - sizeof(*cp)) /
4997 sizeof(struct mgmt_ltk_info));
4998 u16 key_count, expected_len;
4999 int i, err;
5000
5001 BT_DBG("request for %s", hdev->name);
5002
5003 if (!lmp_le_capable(hdev))
5004 return cmd_status(sk, hdev->id, MGMT_OP_LOAD_LONG_TERM_KEYS,
5005 MGMT_STATUS_NOT_SUPPORTED);
5006
5007 key_count = __le16_to_cpu(cp->key_count);
5008 if (key_count > max_key_count) {
5009 BT_ERR("load_ltks: too big key_count value %u", key_count);
5010 return cmd_status(sk, hdev->id, MGMT_OP_LOAD_LONG_TERM_KEYS,
5011 MGMT_STATUS_INVALID_PARAMS);
5012 }
5013
5014 expected_len = sizeof(*cp) + key_count *
5015 sizeof(struct mgmt_ltk_info);
5016 if (expected_len != len) {
5017 BT_ERR("load_keys: expected %u bytes, got %u bytes",
5018 expected_len, len);
5019 return cmd_status(sk, hdev->id, MGMT_OP_LOAD_LONG_TERM_KEYS,
5020 MGMT_STATUS_INVALID_PARAMS);
5021 }
5022
5023 BT_DBG("%s key_count %u", hdev->name, key_count);
5024
5025 for (i = 0; i < key_count; i++) {
5026 struct mgmt_ltk_info *key = &cp->keys[i];
5027
5028 if (!ltk_is_valid(key))
5029 return cmd_status(sk, hdev->id,
5030 MGMT_OP_LOAD_LONG_TERM_KEYS,
5031 MGMT_STATUS_INVALID_PARAMS);
5032 }
5033
5034 hci_dev_lock(hdev);
5035
5036 hci_smp_ltks_clear(hdev);
5037
5038 for (i = 0; i < key_count; i++) {
5039 struct mgmt_ltk_info *key = &cp->keys[i];
5040 u8 type, addr_type, authenticated;
5041
5042 if (key->addr.type == BDADDR_LE_PUBLIC)
5043 addr_type = ADDR_LE_DEV_PUBLIC;
5044 else
5045 addr_type = ADDR_LE_DEV_RANDOM;
5046
5047 switch (key->type) {
5048 case MGMT_LTK_UNAUTHENTICATED:
5049 authenticated = 0x00;
5050 type = key->master ? SMP_LTK : SMP_LTK_SLAVE;
5051 break;
5052 case MGMT_LTK_AUTHENTICATED:
5053 authenticated = 0x01;
5054 type = key->master ? SMP_LTK : SMP_LTK_SLAVE;
5055 break;
5056 case MGMT_LTK_P256_UNAUTH:
5057 authenticated = 0x00;
5058 type = SMP_LTK_P256;
5059 break;
5060 case MGMT_LTK_P256_AUTH:
5061 authenticated = 0x01;
5062 type = SMP_LTK_P256;
5063 break;
5064 case MGMT_LTK_P256_DEBUG:
5065 authenticated = 0x00;
5066 type = SMP_LTK_P256_DEBUG;
5067 default:
5068 continue;
5069 }
5070
5071 hci_add_ltk(hdev, &key->addr.bdaddr, addr_type, type,
5072 authenticated, key->val, key->enc_size, key->ediv,
5073 key->rand);
5074 }
5075
5076 err = cmd_complete(sk, hdev->id, MGMT_OP_LOAD_LONG_TERM_KEYS, 0,
5077 NULL, 0);
5078
5079 hci_dev_unlock(hdev);
5080
5081 return err;
5082 }
5083
5084 static void conn_info_cmd_complete(struct pending_cmd *cmd, u8 status)
5085 {
5086 struct hci_conn *conn = cmd->user_data;
5087 struct mgmt_rp_get_conn_info rp;
5088
5089 memcpy(&rp.addr, cmd->param, sizeof(rp.addr));
5090
5091 if (status == MGMT_STATUS_SUCCESS) {
5092 rp.rssi = conn->rssi;
5093 rp.tx_power = conn->tx_power;
5094 rp.max_tx_power = conn->max_tx_power;
5095 } else {
5096 rp.rssi = HCI_RSSI_INVALID;
5097 rp.tx_power = HCI_TX_POWER_INVALID;
5098 rp.max_tx_power = HCI_TX_POWER_INVALID;
5099 }
5100
5101 cmd_complete(cmd->sk, cmd->index, MGMT_OP_GET_CONN_INFO, status,
5102 &rp, sizeof(rp));
5103
5104 hci_conn_drop(conn);
5105 hci_conn_put(conn);
5106 }
5107
5108 static void conn_info_refresh_complete(struct hci_dev *hdev, u8 hci_status)
5109 {
5110 struct hci_cp_read_rssi *cp;
5111 struct pending_cmd *cmd;
5112 struct hci_conn *conn;
5113 u16 handle;
5114 u8 status;
5115
5116 BT_DBG("status 0x%02x", hci_status);
5117
5118 hci_dev_lock(hdev);
5119
5120 /* Commands sent in request are either Read RSSI or Read Transmit Power
5121 * Level so we check which one was last sent to retrieve connection
5122 * handle. Both commands have handle as first parameter so it's safe to
5123 * cast data on the same command struct.
5124 *
5125 * First command sent is always Read RSSI and we fail only if it fails.
5126 * In other case we simply override error to indicate success as we
5127 * already remembered if TX power value is actually valid.
5128 */
5129 cp = hci_sent_cmd_data(hdev, HCI_OP_READ_RSSI);
5130 if (!cp) {
5131 cp = hci_sent_cmd_data(hdev, HCI_OP_READ_TX_POWER);
5132 status = MGMT_STATUS_SUCCESS;
5133 } else {
5134 status = mgmt_status(hci_status);
5135 }
5136
5137 if (!cp) {
5138 BT_ERR("invalid sent_cmd in conn_info response");
5139 goto unlock;
5140 }
5141
5142 handle = __le16_to_cpu(cp->handle);
5143 conn = hci_conn_hash_lookup_handle(hdev, handle);
5144 if (!conn) {
5145 BT_ERR("unknown handle (%d) in conn_info response", handle);
5146 goto unlock;
5147 }
5148
5149 cmd = mgmt_pending_find_data(MGMT_OP_GET_CONN_INFO, hdev, conn);
5150 if (!cmd)
5151 goto unlock;
5152
5153 cmd->cmd_complete(cmd, status);
5154 mgmt_pending_remove(cmd);
5155
5156 unlock:
5157 hci_dev_unlock(hdev);
5158 }
5159
5160 static int get_conn_info(struct sock *sk, struct hci_dev *hdev, void *data,
5161 u16 len)
5162 {
5163 struct mgmt_cp_get_conn_info *cp = data;
5164 struct mgmt_rp_get_conn_info rp;
5165 struct hci_conn *conn;
5166 unsigned long conn_info_age;
5167 int err = 0;
5168
5169 BT_DBG("%s", hdev->name);
5170
5171 memset(&rp, 0, sizeof(rp));
5172 bacpy(&rp.addr.bdaddr, &cp->addr.bdaddr);
5173 rp.addr.type = cp->addr.type;
5174
5175 if (!bdaddr_type_is_valid(cp->addr.type))
5176 return cmd_complete(sk, hdev->id, MGMT_OP_GET_CONN_INFO,
5177 MGMT_STATUS_INVALID_PARAMS,
5178 &rp, sizeof(rp));
5179
5180 hci_dev_lock(hdev);
5181
5182 if (!hdev_is_powered(hdev)) {
5183 err = cmd_complete(sk, hdev->id, MGMT_OP_GET_CONN_INFO,
5184 MGMT_STATUS_NOT_POWERED, &rp, sizeof(rp));
5185 goto unlock;
5186 }
5187
5188 if (cp->addr.type == BDADDR_BREDR)
5189 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK,
5190 &cp->addr.bdaddr);
5191 else
5192 conn = hci_conn_hash_lookup_ba(hdev, LE_LINK, &cp->addr.bdaddr);
5193
5194 if (!conn || conn->state != BT_CONNECTED) {
5195 err = cmd_complete(sk, hdev->id, MGMT_OP_GET_CONN_INFO,
5196 MGMT_STATUS_NOT_CONNECTED, &rp, sizeof(rp));
5197 goto unlock;
5198 }
5199
5200 if (mgmt_pending_find_data(MGMT_OP_GET_CONN_INFO, hdev, conn)) {
5201 err = cmd_complete(sk, hdev->id, MGMT_OP_GET_CONN_INFO,
5202 MGMT_STATUS_BUSY, &rp, sizeof(rp));
5203 goto unlock;
5204 }
5205
5206 /* To avoid client trying to guess when to poll again for information we
5207 * calculate conn info age as random value between min/max set in hdev.
5208 */
5209 conn_info_age = hdev->conn_info_min_age +
5210 prandom_u32_max(hdev->conn_info_max_age -
5211 hdev->conn_info_min_age);
5212
5213 /* Query controller to refresh cached values if they are too old or were
5214 * never read.
5215 */
5216 if (time_after(jiffies, conn->conn_info_timestamp +
5217 msecs_to_jiffies(conn_info_age)) ||
5218 !conn->conn_info_timestamp) {
5219 struct hci_request req;
5220 struct hci_cp_read_tx_power req_txp_cp;
5221 struct hci_cp_read_rssi req_rssi_cp;
5222 struct pending_cmd *cmd;
5223
5224 hci_req_init(&req, hdev);
5225 req_rssi_cp.handle = cpu_to_le16(conn->handle);
5226 hci_req_add(&req, HCI_OP_READ_RSSI, sizeof(req_rssi_cp),
5227 &req_rssi_cp);
5228
5229 /* For LE links TX power does not change thus we don't need to
5230 * query for it once value is known.
5231 */
5232 if (!bdaddr_type_is_le(cp->addr.type) ||
5233 conn->tx_power == HCI_TX_POWER_INVALID) {
5234 req_txp_cp.handle = cpu_to_le16(conn->handle);
5235 req_txp_cp.type = 0x00;
5236 hci_req_add(&req, HCI_OP_READ_TX_POWER,
5237 sizeof(req_txp_cp), &req_txp_cp);
5238 }
5239
5240 /* Max TX power needs to be read only once per connection */
5241 if (conn->max_tx_power == HCI_TX_POWER_INVALID) {
5242 req_txp_cp.handle = cpu_to_le16(conn->handle);
5243 req_txp_cp.type = 0x01;
5244 hci_req_add(&req, HCI_OP_READ_TX_POWER,
5245 sizeof(req_txp_cp), &req_txp_cp);
5246 }
5247
5248 err = hci_req_run(&req, conn_info_refresh_complete);
5249 if (err < 0)
5250 goto unlock;
5251
5252 cmd = mgmt_pending_add(sk, MGMT_OP_GET_CONN_INFO, hdev,
5253 data, len);
5254 if (!cmd) {
5255 err = -ENOMEM;
5256 goto unlock;
5257 }
5258
5259 hci_conn_hold(conn);
5260 cmd->user_data = hci_conn_get(conn);
5261 cmd->cmd_complete = conn_info_cmd_complete;
5262
5263 conn->conn_info_timestamp = jiffies;
5264 } else {
5265 /* Cache is valid, just reply with values cached in hci_conn */
5266 rp.rssi = conn->rssi;
5267 rp.tx_power = conn->tx_power;
5268 rp.max_tx_power = conn->max_tx_power;
5269
5270 err = cmd_complete(sk, hdev->id, MGMT_OP_GET_CONN_INFO,
5271 MGMT_STATUS_SUCCESS, &rp, sizeof(rp));
5272 }
5273
5274 unlock:
5275 hci_dev_unlock(hdev);
5276 return err;
5277 }
5278
5279 static void clock_info_cmd_complete(struct pending_cmd *cmd, u8 status)
5280 {
5281 struct hci_conn *conn = cmd->user_data;
5282 struct mgmt_rp_get_clock_info rp;
5283 struct hci_dev *hdev;
5284
5285 memset(&rp, 0, sizeof(rp));
5286 memcpy(&rp.addr, &cmd->param, sizeof(rp.addr));
5287
5288 if (status)
5289 goto complete;
5290
5291 hdev = hci_dev_get(cmd->index);
5292 if (hdev) {
5293 rp.local_clock = cpu_to_le32(hdev->clock);
5294 hci_dev_put(hdev);
5295 }
5296
5297 if (conn) {
5298 rp.piconet_clock = cpu_to_le32(conn->clock);
5299 rp.accuracy = cpu_to_le16(conn->clock_accuracy);
5300 }
5301
5302 complete:
5303 cmd_complete(cmd->sk, cmd->index, cmd->opcode, status, &rp, sizeof(rp));
5304
5305 if (conn) {
5306 hci_conn_drop(conn);
5307 hci_conn_put(conn);
5308 }
5309 }
5310
5311 static void get_clock_info_complete(struct hci_dev *hdev, u8 status)
5312 {
5313 struct hci_cp_read_clock *hci_cp;
5314 struct pending_cmd *cmd;
5315 struct hci_conn *conn;
5316
5317 BT_DBG("%s status %u", hdev->name, status);
5318
5319 hci_dev_lock(hdev);
5320
5321 hci_cp = hci_sent_cmd_data(hdev, HCI_OP_READ_CLOCK);
5322 if (!hci_cp)
5323 goto unlock;
5324
5325 if (hci_cp->which) {
5326 u16 handle = __le16_to_cpu(hci_cp->handle);
5327 conn = hci_conn_hash_lookup_handle(hdev, handle);
5328 } else {
5329 conn = NULL;
5330 }
5331
5332 cmd = mgmt_pending_find_data(MGMT_OP_GET_CLOCK_INFO, hdev, conn);
5333 if (!cmd)
5334 goto unlock;
5335
5336 cmd->cmd_complete(cmd, mgmt_status(status));
5337 mgmt_pending_remove(cmd);
5338
5339 unlock:
5340 hci_dev_unlock(hdev);
5341 }
5342
5343 static int get_clock_info(struct sock *sk, struct hci_dev *hdev, void *data,
5344 u16 len)
5345 {
5346 struct mgmt_cp_get_clock_info *cp = data;
5347 struct mgmt_rp_get_clock_info rp;
5348 struct hci_cp_read_clock hci_cp;
5349 struct pending_cmd *cmd;
5350 struct hci_request req;
5351 struct hci_conn *conn;
5352 int err;
5353
5354 BT_DBG("%s", hdev->name);
5355
5356 memset(&rp, 0, sizeof(rp));
5357 bacpy(&rp.addr.bdaddr, &cp->addr.bdaddr);
5358 rp.addr.type = cp->addr.type;
5359
5360 if (cp->addr.type != BDADDR_BREDR)
5361 return cmd_complete(sk, hdev->id, MGMT_OP_GET_CLOCK_INFO,
5362 MGMT_STATUS_INVALID_PARAMS,
5363 &rp, sizeof(rp));
5364
5365 hci_dev_lock(hdev);
5366
5367 if (!hdev_is_powered(hdev)) {
5368 err = cmd_complete(sk, hdev->id, MGMT_OP_GET_CLOCK_INFO,
5369 MGMT_STATUS_NOT_POWERED, &rp, sizeof(rp));
5370 goto unlock;
5371 }
5372
5373 if (bacmp(&cp->addr.bdaddr, BDADDR_ANY)) {
5374 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK,
5375 &cp->addr.bdaddr);
5376 if (!conn || conn->state != BT_CONNECTED) {
5377 err = cmd_complete(sk, hdev->id,
5378 MGMT_OP_GET_CLOCK_INFO,
5379 MGMT_STATUS_NOT_CONNECTED,
5380 &rp, sizeof(rp));
5381 goto unlock;
5382 }
5383 } else {
5384 conn = NULL;
5385 }
5386
5387 cmd = mgmt_pending_add(sk, MGMT_OP_GET_CLOCK_INFO, hdev, data, len);
5388 if (!cmd) {
5389 err = -ENOMEM;
5390 goto unlock;
5391 }
5392
5393 cmd->cmd_complete = clock_info_cmd_complete;
5394
5395 hci_req_init(&req, hdev);
5396
5397 memset(&hci_cp, 0, sizeof(hci_cp));
5398 hci_req_add(&req, HCI_OP_READ_CLOCK, sizeof(hci_cp), &hci_cp);
5399
5400 if (conn) {
5401 hci_conn_hold(conn);
5402 cmd->user_data = hci_conn_get(conn);
5403
5404 hci_cp.handle = cpu_to_le16(conn->handle);
5405 hci_cp.which = 0x01; /* Piconet clock */
5406 hci_req_add(&req, HCI_OP_READ_CLOCK, sizeof(hci_cp), &hci_cp);
5407 }
5408
5409 err = hci_req_run(&req, get_clock_info_complete);
5410 if (err < 0)
5411 mgmt_pending_remove(cmd);
5412
5413 unlock:
5414 hci_dev_unlock(hdev);
5415 return err;
5416 }
5417
5418 static void device_added(struct sock *sk, struct hci_dev *hdev,
5419 bdaddr_t *bdaddr, u8 type, u8 action)
5420 {
5421 struct mgmt_ev_device_added ev;
5422
5423 bacpy(&ev.addr.bdaddr, bdaddr);
5424 ev.addr.type = type;
5425 ev.action = action;
5426
5427 mgmt_event(MGMT_EV_DEVICE_ADDED, hdev, &ev, sizeof(ev), sk);
5428 }
5429
5430 static int add_device(struct sock *sk, struct hci_dev *hdev,
5431 void *data, u16 len)
5432 {
5433 struct mgmt_cp_add_device *cp = data;
5434 u8 auto_conn, addr_type;
5435 int err;
5436
5437 BT_DBG("%s", hdev->name);
5438
5439 if (!bdaddr_type_is_valid(cp->addr.type) ||
5440 !bacmp(&cp->addr.bdaddr, BDADDR_ANY))
5441 return cmd_complete(sk, hdev->id, MGMT_OP_ADD_DEVICE,
5442 MGMT_STATUS_INVALID_PARAMS,
5443 &cp->addr, sizeof(cp->addr));
5444
5445 if (cp->action != 0x00 && cp->action != 0x01 && cp->action != 0x02)
5446 return cmd_complete(sk, hdev->id, MGMT_OP_ADD_DEVICE,
5447 MGMT_STATUS_INVALID_PARAMS,
5448 &cp->addr, sizeof(cp->addr));
5449
5450 hci_dev_lock(hdev);
5451
5452 if (cp->addr.type == BDADDR_BREDR) {
5453 /* Only incoming connections action is supported for now */
5454 if (cp->action != 0x01) {
5455 err = cmd_complete(sk, hdev->id, MGMT_OP_ADD_DEVICE,
5456 MGMT_STATUS_INVALID_PARAMS,
5457 &cp->addr, sizeof(cp->addr));
5458 goto unlock;
5459 }
5460
5461 err = hci_bdaddr_list_add(&hdev->whitelist, &cp->addr.bdaddr,
5462 cp->addr.type);
5463 if (err)
5464 goto unlock;
5465
5466 hci_update_page_scan(hdev, NULL);
5467
5468 goto added;
5469 }
5470
5471 if (cp->addr.type == BDADDR_LE_PUBLIC)
5472 addr_type = ADDR_LE_DEV_PUBLIC;
5473 else
5474 addr_type = ADDR_LE_DEV_RANDOM;
5475
5476 if (cp->action == 0x02)
5477 auto_conn = HCI_AUTO_CONN_ALWAYS;
5478 else if (cp->action == 0x01)
5479 auto_conn = HCI_AUTO_CONN_DIRECT;
5480 else
5481 auto_conn = HCI_AUTO_CONN_REPORT;
5482
5483 /* If the connection parameters don't exist for this device,
5484 * they will be created and configured with defaults.
5485 */
5486 if (hci_conn_params_set(hdev, &cp->addr.bdaddr, addr_type,
5487 auto_conn) < 0) {
5488 err = cmd_complete(sk, hdev->id, MGMT_OP_ADD_DEVICE,
5489 MGMT_STATUS_FAILED,
5490 &cp->addr, sizeof(cp->addr));
5491 goto unlock;
5492 }
5493
5494 added:
5495 device_added(sk, hdev, &cp->addr.bdaddr, cp->addr.type, cp->action);
5496
5497 err = cmd_complete(sk, hdev->id, MGMT_OP_ADD_DEVICE,
5498 MGMT_STATUS_SUCCESS, &cp->addr, sizeof(cp->addr));
5499
5500 unlock:
5501 hci_dev_unlock(hdev);
5502 return err;
5503 }
5504
5505 static void device_removed(struct sock *sk, struct hci_dev *hdev,
5506 bdaddr_t *bdaddr, u8 type)
5507 {
5508 struct mgmt_ev_device_removed ev;
5509
5510 bacpy(&ev.addr.bdaddr, bdaddr);
5511 ev.addr.type = type;
5512
5513 mgmt_event(MGMT_EV_DEVICE_REMOVED, hdev, &ev, sizeof(ev), sk);
5514 }
5515
5516 static int remove_device(struct sock *sk, struct hci_dev *hdev,
5517 void *data, u16 len)
5518 {
5519 struct mgmt_cp_remove_device *cp = data;
5520 int err;
5521
5522 BT_DBG("%s", hdev->name);
5523
5524 hci_dev_lock(hdev);
5525
5526 if (bacmp(&cp->addr.bdaddr, BDADDR_ANY)) {
5527 struct hci_conn_params *params;
5528 u8 addr_type;
5529
5530 if (!bdaddr_type_is_valid(cp->addr.type)) {
5531 err = cmd_complete(sk, hdev->id, MGMT_OP_REMOVE_DEVICE,
5532 MGMT_STATUS_INVALID_PARAMS,
5533 &cp->addr, sizeof(cp->addr));
5534 goto unlock;
5535 }
5536
5537 if (cp->addr.type == BDADDR_BREDR) {
5538 err = hci_bdaddr_list_del(&hdev->whitelist,
5539 &cp->addr.bdaddr,
5540 cp->addr.type);
5541 if (err) {
5542 err = cmd_complete(sk, hdev->id,
5543 MGMT_OP_REMOVE_DEVICE,
5544 MGMT_STATUS_INVALID_PARAMS,
5545 &cp->addr, sizeof(cp->addr));
5546 goto unlock;
5547 }
5548
5549 hci_update_page_scan(hdev, NULL);
5550
5551 device_removed(sk, hdev, &cp->addr.bdaddr,
5552 cp->addr.type);
5553 goto complete;
5554 }
5555
5556 if (cp->addr.type == BDADDR_LE_PUBLIC)
5557 addr_type = ADDR_LE_DEV_PUBLIC;
5558 else
5559 addr_type = ADDR_LE_DEV_RANDOM;
5560
5561 params = hci_conn_params_lookup(hdev, &cp->addr.bdaddr,
5562 addr_type);
5563 if (!params) {
5564 err = cmd_complete(sk, hdev->id, MGMT_OP_REMOVE_DEVICE,
5565 MGMT_STATUS_INVALID_PARAMS,
5566 &cp->addr, sizeof(cp->addr));
5567 goto unlock;
5568 }
5569
5570 if (params->auto_connect == HCI_AUTO_CONN_DISABLED) {
5571 err = cmd_complete(sk, hdev->id, MGMT_OP_REMOVE_DEVICE,
5572 MGMT_STATUS_INVALID_PARAMS,
5573 &cp->addr, sizeof(cp->addr));
5574 goto unlock;
5575 }
5576
5577 list_del(&params->action);
5578 list_del(&params->list);
5579 kfree(params);
5580 hci_update_background_scan(hdev);
5581
5582 device_removed(sk, hdev, &cp->addr.bdaddr, cp->addr.type);
5583 } else {
5584 struct hci_conn_params *p, *tmp;
5585 struct bdaddr_list *b, *btmp;
5586
5587 if (cp->addr.type) {
5588 err = cmd_complete(sk, hdev->id, MGMT_OP_REMOVE_DEVICE,
5589 MGMT_STATUS_INVALID_PARAMS,
5590 &cp->addr, sizeof(cp->addr));
5591 goto unlock;
5592 }
5593
5594 list_for_each_entry_safe(b, btmp, &hdev->whitelist, list) {
5595 device_removed(sk, hdev, &b->bdaddr, b->bdaddr_type);
5596 list_del(&b->list);
5597 kfree(b);
5598 }
5599
5600 hci_update_page_scan(hdev, NULL);
5601
5602 list_for_each_entry_safe(p, tmp, &hdev->le_conn_params, list) {
5603 if (p->auto_connect == HCI_AUTO_CONN_DISABLED)
5604 continue;
5605 device_removed(sk, hdev, &p->addr, p->addr_type);
5606 list_del(&p->action);
5607 list_del(&p->list);
5608 kfree(p);
5609 }
5610
5611 BT_DBG("All LE connection parameters were removed");
5612
5613 hci_update_background_scan(hdev);
5614 }
5615
5616 complete:
5617 err = cmd_complete(sk, hdev->id, MGMT_OP_REMOVE_DEVICE,
5618 MGMT_STATUS_SUCCESS, &cp->addr, sizeof(cp->addr));
5619
5620 unlock:
5621 hci_dev_unlock(hdev);
5622 return err;
5623 }
5624
5625 static int load_conn_param(struct sock *sk, struct hci_dev *hdev, void *data,
5626 u16 len)
5627 {
5628 struct mgmt_cp_load_conn_param *cp = data;
5629 const u16 max_param_count = ((U16_MAX - sizeof(*cp)) /
5630 sizeof(struct mgmt_conn_param));
5631 u16 param_count, expected_len;
5632 int i;
5633
5634 if (!lmp_le_capable(hdev))
5635 return cmd_status(sk, hdev->id, MGMT_OP_LOAD_CONN_PARAM,
5636 MGMT_STATUS_NOT_SUPPORTED);
5637
5638 param_count = __le16_to_cpu(cp->param_count);
5639 if (param_count > max_param_count) {
5640 BT_ERR("load_conn_param: too big param_count value %u",
5641 param_count);
5642 return cmd_status(sk, hdev->id, MGMT_OP_LOAD_CONN_PARAM,
5643 MGMT_STATUS_INVALID_PARAMS);
5644 }
5645
5646 expected_len = sizeof(*cp) + param_count *
5647 sizeof(struct mgmt_conn_param);
5648 if (expected_len != len) {
5649 BT_ERR("load_conn_param: expected %u bytes, got %u bytes",
5650 expected_len, len);
5651 return cmd_status(sk, hdev->id, MGMT_OP_LOAD_CONN_PARAM,
5652 MGMT_STATUS_INVALID_PARAMS);
5653 }
5654
5655 BT_DBG("%s param_count %u", hdev->name, param_count);
5656
5657 hci_dev_lock(hdev);
5658
5659 hci_conn_params_clear_disabled(hdev);
5660
5661 for (i = 0; i < param_count; i++) {
5662 struct mgmt_conn_param *param = &cp->params[i];
5663 struct hci_conn_params *hci_param;
5664 u16 min, max, latency, timeout;
5665 u8 addr_type;
5666
5667 BT_DBG("Adding %pMR (type %u)", &param->addr.bdaddr,
5668 param->addr.type);
5669
5670 if (param->addr.type == BDADDR_LE_PUBLIC) {
5671 addr_type = ADDR_LE_DEV_PUBLIC;
5672 } else if (param->addr.type == BDADDR_LE_RANDOM) {
5673 addr_type = ADDR_LE_DEV_RANDOM;
5674 } else {
5675 BT_ERR("Ignoring invalid connection parameters");
5676 continue;
5677 }
5678
5679 min = le16_to_cpu(param->min_interval);
5680 max = le16_to_cpu(param->max_interval);
5681 latency = le16_to_cpu(param->latency);
5682 timeout = le16_to_cpu(param->timeout);
5683
5684 BT_DBG("min 0x%04x max 0x%04x latency 0x%04x timeout 0x%04x",
5685 min, max, latency, timeout);
5686
5687 if (hci_check_conn_params(min, max, latency, timeout) < 0) {
5688 BT_ERR("Ignoring invalid connection parameters");
5689 continue;
5690 }
5691
5692 hci_param = hci_conn_params_add(hdev, &param->addr.bdaddr,
5693 addr_type);
5694 if (!hci_param) {
5695 BT_ERR("Failed to add connection parameters");
5696 continue;
5697 }
5698
5699 hci_param->conn_min_interval = min;
5700 hci_param->conn_max_interval = max;
5701 hci_param->conn_latency = latency;
5702 hci_param->supervision_timeout = timeout;
5703 }
5704
5705 hci_dev_unlock(hdev);
5706
5707 return cmd_complete(sk, hdev->id, MGMT_OP_LOAD_CONN_PARAM, 0, NULL, 0);
5708 }
5709
5710 static int set_external_config(struct sock *sk, struct hci_dev *hdev,
5711 void *data, u16 len)
5712 {
5713 struct mgmt_cp_set_external_config *cp = data;
5714 bool changed;
5715 int err;
5716
5717 BT_DBG("%s", hdev->name);
5718
5719 if (hdev_is_powered(hdev))
5720 return cmd_status(sk, hdev->id, MGMT_OP_SET_EXTERNAL_CONFIG,
5721 MGMT_STATUS_REJECTED);
5722
5723 if (cp->config != 0x00 && cp->config != 0x01)
5724 return cmd_status(sk, hdev->id, MGMT_OP_SET_EXTERNAL_CONFIG,
5725 MGMT_STATUS_INVALID_PARAMS);
5726
5727 if (!test_bit(HCI_QUIRK_EXTERNAL_CONFIG, &hdev->quirks))
5728 return cmd_status(sk, hdev->id, MGMT_OP_SET_EXTERNAL_CONFIG,
5729 MGMT_STATUS_NOT_SUPPORTED);
5730
5731 hci_dev_lock(hdev);
5732
5733 if (cp->config)
5734 changed = !test_and_set_bit(HCI_EXT_CONFIGURED,
5735 &hdev->dev_flags);
5736 else
5737 changed = test_and_clear_bit(HCI_EXT_CONFIGURED,
5738 &hdev->dev_flags);
5739
5740 err = send_options_rsp(sk, MGMT_OP_SET_EXTERNAL_CONFIG, hdev);
5741 if (err < 0)
5742 goto unlock;
5743
5744 if (!changed)
5745 goto unlock;
5746
5747 err = new_options(hdev, sk);
5748
5749 if (test_bit(HCI_UNCONFIGURED, &hdev->dev_flags) == is_configured(hdev)) {
5750 mgmt_index_removed(hdev);
5751
5752 if (test_and_change_bit(HCI_UNCONFIGURED, &hdev->dev_flags)) {
5753 set_bit(HCI_CONFIG, &hdev->dev_flags);
5754 set_bit(HCI_AUTO_OFF, &hdev->dev_flags);
5755
5756 queue_work(hdev->req_workqueue, &hdev->power_on);
5757 } else {
5758 set_bit(HCI_RAW, &hdev->flags);
5759 mgmt_index_added(hdev);
5760 }
5761 }
5762
5763 unlock:
5764 hci_dev_unlock(hdev);
5765 return err;
5766 }
5767
5768 static int set_public_address(struct sock *sk, struct hci_dev *hdev,
5769 void *data, u16 len)
5770 {
5771 struct mgmt_cp_set_public_address *cp = data;
5772 bool changed;
5773 int err;
5774
5775 BT_DBG("%s", hdev->name);
5776
5777 if (hdev_is_powered(hdev))
5778 return cmd_status(sk, hdev->id, MGMT_OP_SET_PUBLIC_ADDRESS,
5779 MGMT_STATUS_REJECTED);
5780
5781 if (!bacmp(&cp->bdaddr, BDADDR_ANY))
5782 return cmd_status(sk, hdev->id, MGMT_OP_SET_PUBLIC_ADDRESS,
5783 MGMT_STATUS_INVALID_PARAMS);
5784
5785 if (!hdev->set_bdaddr)
5786 return cmd_status(sk, hdev->id, MGMT_OP_SET_PUBLIC_ADDRESS,
5787 MGMT_STATUS_NOT_SUPPORTED);
5788
5789 hci_dev_lock(hdev);
5790
5791 changed = !!bacmp(&hdev->public_addr, &cp->bdaddr);
5792 bacpy(&hdev->public_addr, &cp->bdaddr);
5793
5794 err = send_options_rsp(sk, MGMT_OP_SET_PUBLIC_ADDRESS, hdev);
5795 if (err < 0)
5796 goto unlock;
5797
5798 if (!changed)
5799 goto unlock;
5800
5801 if (test_bit(HCI_UNCONFIGURED, &hdev->dev_flags))
5802 err = new_options(hdev, sk);
5803
5804 if (is_configured(hdev)) {
5805 mgmt_index_removed(hdev);
5806
5807 clear_bit(HCI_UNCONFIGURED, &hdev->dev_flags);
5808
5809 set_bit(HCI_CONFIG, &hdev->dev_flags);
5810 set_bit(HCI_AUTO_OFF, &hdev->dev_flags);
5811
5812 queue_work(hdev->req_workqueue, &hdev->power_on);
5813 }
5814
5815 unlock:
5816 hci_dev_unlock(hdev);
5817 return err;
5818 }
5819
5820 static const struct mgmt_handler {
5821 int (*func) (struct sock *sk, struct hci_dev *hdev, void *data,
5822 u16 data_len);
5823 bool var_len;
5824 size_t data_len;
5825 } mgmt_handlers[] = {
5826 { NULL }, /* 0x0000 (no command) */
5827 { read_version, false, MGMT_READ_VERSION_SIZE },
5828 { read_commands, false, MGMT_READ_COMMANDS_SIZE },
5829 { read_index_list, false, MGMT_READ_INDEX_LIST_SIZE },
5830 { read_controller_info, false, MGMT_READ_INFO_SIZE },
5831 { set_powered, false, MGMT_SETTING_SIZE },
5832 { set_discoverable, false, MGMT_SET_DISCOVERABLE_SIZE },
5833 { set_connectable, false, MGMT_SETTING_SIZE },
5834 { set_fast_connectable, false, MGMT_SETTING_SIZE },
5835 { set_bondable, false, MGMT_SETTING_SIZE },
5836 { set_link_security, false, MGMT_SETTING_SIZE },
5837 { set_ssp, false, MGMT_SETTING_SIZE },
5838 { set_hs, false, MGMT_SETTING_SIZE },
5839 { set_le, false, MGMT_SETTING_SIZE },
5840 { set_dev_class, false, MGMT_SET_DEV_CLASS_SIZE },
5841 { set_local_name, false, MGMT_SET_LOCAL_NAME_SIZE },
5842 { add_uuid, false, MGMT_ADD_UUID_SIZE },
5843 { remove_uuid, false, MGMT_REMOVE_UUID_SIZE },
5844 { load_link_keys, true, MGMT_LOAD_LINK_KEYS_SIZE },
5845 { load_long_term_keys, true, MGMT_LOAD_LONG_TERM_KEYS_SIZE },
5846 { disconnect, false, MGMT_DISCONNECT_SIZE },
5847 { get_connections, false, MGMT_GET_CONNECTIONS_SIZE },
5848 { pin_code_reply, false, MGMT_PIN_CODE_REPLY_SIZE },
5849 { pin_code_neg_reply, false, MGMT_PIN_CODE_NEG_REPLY_SIZE },
5850 { set_io_capability, false, MGMT_SET_IO_CAPABILITY_SIZE },
5851 { pair_device, false, MGMT_PAIR_DEVICE_SIZE },
5852 { cancel_pair_device, false, MGMT_CANCEL_PAIR_DEVICE_SIZE },
5853 { unpair_device, false, MGMT_UNPAIR_DEVICE_SIZE },
5854 { user_confirm_reply, false, MGMT_USER_CONFIRM_REPLY_SIZE },
5855 { user_confirm_neg_reply, false, MGMT_USER_CONFIRM_NEG_REPLY_SIZE },
5856 { user_passkey_reply, false, MGMT_USER_PASSKEY_REPLY_SIZE },
5857 { user_passkey_neg_reply, false, MGMT_USER_PASSKEY_NEG_REPLY_SIZE },
5858 { read_local_oob_data, false, MGMT_READ_LOCAL_OOB_DATA_SIZE },
5859 { add_remote_oob_data, true, MGMT_ADD_REMOTE_OOB_DATA_SIZE },
5860 { remove_remote_oob_data, false, MGMT_REMOVE_REMOTE_OOB_DATA_SIZE },
5861 { start_discovery, false, MGMT_START_DISCOVERY_SIZE },
5862 { stop_discovery, false, MGMT_STOP_DISCOVERY_SIZE },
5863 { confirm_name, false, MGMT_CONFIRM_NAME_SIZE },
5864 { block_device, false, MGMT_BLOCK_DEVICE_SIZE },
5865 { unblock_device, false, MGMT_UNBLOCK_DEVICE_SIZE },
5866 { set_device_id, false, MGMT_SET_DEVICE_ID_SIZE },
5867 { set_advertising, false, MGMT_SETTING_SIZE },
5868 { set_bredr, false, MGMT_SETTING_SIZE },
5869 { set_static_address, false, MGMT_SET_STATIC_ADDRESS_SIZE },
5870 { set_scan_params, false, MGMT_SET_SCAN_PARAMS_SIZE },
5871 { set_secure_conn, false, MGMT_SETTING_SIZE },
5872 { set_debug_keys, false, MGMT_SETTING_SIZE },
5873 { set_privacy, false, MGMT_SET_PRIVACY_SIZE },
5874 { load_irks, true, MGMT_LOAD_IRKS_SIZE },
5875 { get_conn_info, false, MGMT_GET_CONN_INFO_SIZE },
5876 { get_clock_info, false, MGMT_GET_CLOCK_INFO_SIZE },
5877 { add_device, false, MGMT_ADD_DEVICE_SIZE },
5878 { remove_device, false, MGMT_REMOVE_DEVICE_SIZE },
5879 { load_conn_param, true, MGMT_LOAD_CONN_PARAM_SIZE },
5880 { read_unconf_index_list, false, MGMT_READ_UNCONF_INDEX_LIST_SIZE },
5881 { read_config_info, false, MGMT_READ_CONFIG_INFO_SIZE },
5882 { set_external_config, false, MGMT_SET_EXTERNAL_CONFIG_SIZE },
5883 { set_public_address, false, MGMT_SET_PUBLIC_ADDRESS_SIZE },
5884 { start_service_discovery,true, MGMT_START_SERVICE_DISCOVERY_SIZE },
5885 };
5886
5887 int mgmt_control(struct sock *sk, struct msghdr *msg, size_t msglen)
5888 {
5889 void *buf;
5890 u8 *cp;
5891 struct mgmt_hdr *hdr;
5892 u16 opcode, index, len;
5893 struct hci_dev *hdev = NULL;
5894 const struct mgmt_handler *handler;
5895 int err;
5896
5897 BT_DBG("got %zu bytes", msglen);
5898
5899 if (msglen < sizeof(*hdr))
5900 return -EINVAL;
5901
5902 buf = kmalloc(msglen, GFP_KERNEL);
5903 if (!buf)
5904 return -ENOMEM;
5905
5906 if (memcpy_fromiovec(buf, msg->msg_iov, msglen)) {
5907 err = -EFAULT;
5908 goto done;
5909 }
5910
5911 hdr = buf;
5912 opcode = __le16_to_cpu(hdr->opcode);
5913 index = __le16_to_cpu(hdr->index);
5914 len = __le16_to_cpu(hdr->len);
5915
5916 if (len != msglen - sizeof(*hdr)) {
5917 err = -EINVAL;
5918 goto done;
5919 }
5920
5921 if (index != MGMT_INDEX_NONE) {
5922 hdev = hci_dev_get(index);
5923 if (!hdev) {
5924 err = cmd_status(sk, index, opcode,
5925 MGMT_STATUS_INVALID_INDEX);
5926 goto done;
5927 }
5928
5929 if (test_bit(HCI_SETUP, &hdev->dev_flags) ||
5930 test_bit(HCI_CONFIG, &hdev->dev_flags) ||
5931 test_bit(HCI_USER_CHANNEL, &hdev->dev_flags)) {
5932 err = cmd_status(sk, index, opcode,
5933 MGMT_STATUS_INVALID_INDEX);
5934 goto done;
5935 }
5936
5937 if (test_bit(HCI_UNCONFIGURED, &hdev->dev_flags) &&
5938 opcode != MGMT_OP_READ_CONFIG_INFO &&
5939 opcode != MGMT_OP_SET_EXTERNAL_CONFIG &&
5940 opcode != MGMT_OP_SET_PUBLIC_ADDRESS) {
5941 err = cmd_status(sk, index, opcode,
5942 MGMT_STATUS_INVALID_INDEX);
5943 goto done;
5944 }
5945 }
5946
5947 if (opcode >= ARRAY_SIZE(mgmt_handlers) ||
5948 mgmt_handlers[opcode].func == NULL) {
5949 BT_DBG("Unknown op %u", opcode);
5950 err = cmd_status(sk, index, opcode,
5951 MGMT_STATUS_UNKNOWN_COMMAND);
5952 goto done;
5953 }
5954
5955 if (hdev && (opcode <= MGMT_OP_READ_INDEX_LIST ||
5956 opcode == MGMT_OP_READ_UNCONF_INDEX_LIST)) {
5957 err = cmd_status(sk, index, opcode,
5958 MGMT_STATUS_INVALID_INDEX);
5959 goto done;
5960 }
5961
5962 if (!hdev && (opcode > MGMT_OP_READ_INDEX_LIST &&
5963 opcode != MGMT_OP_READ_UNCONF_INDEX_LIST)) {
5964 err = cmd_status(sk, index, opcode,
5965 MGMT_STATUS_INVALID_INDEX);
5966 goto done;
5967 }
5968
5969 handler = &mgmt_handlers[opcode];
5970
5971 if ((handler->var_len && len < handler->data_len) ||
5972 (!handler->var_len && len != handler->data_len)) {
5973 err = cmd_status(sk, index, opcode,
5974 MGMT_STATUS_INVALID_PARAMS);
5975 goto done;
5976 }
5977
5978 if (hdev)
5979 mgmt_init_hdev(sk, hdev);
5980
5981 cp = buf + sizeof(*hdr);
5982
5983 err = handler->func(sk, hdev, cp, len);
5984 if (err < 0)
5985 goto done;
5986
5987 err = msglen;
5988
5989 done:
5990 if (hdev)
5991 hci_dev_put(hdev);
5992
5993 kfree(buf);
5994 return err;
5995 }
5996
5997 void mgmt_index_added(struct hci_dev *hdev)
5998 {
5999 if (hdev->dev_type != HCI_BREDR)
6000 return;
6001
6002 if (test_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks))
6003 return;
6004
6005 if (test_bit(HCI_UNCONFIGURED, &hdev->dev_flags))
6006 mgmt_event(MGMT_EV_UNCONF_INDEX_ADDED, hdev, NULL, 0, NULL);
6007 else
6008 mgmt_event(MGMT_EV_INDEX_ADDED, hdev, NULL, 0, NULL);
6009 }
6010
6011 void mgmt_index_removed(struct hci_dev *hdev)
6012 {
6013 u8 status = MGMT_STATUS_INVALID_INDEX;
6014
6015 if (hdev->dev_type != HCI_BREDR)
6016 return;
6017
6018 if (test_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks))
6019 return;
6020
6021 mgmt_pending_foreach(0, hdev, cmd_complete_rsp, &status);
6022
6023 if (test_bit(HCI_UNCONFIGURED, &hdev->dev_flags))
6024 mgmt_event(MGMT_EV_UNCONF_INDEX_REMOVED, hdev, NULL, 0, NULL);
6025 else
6026 mgmt_event(MGMT_EV_INDEX_REMOVED, hdev, NULL, 0, NULL);
6027 }
6028
6029 /* This function requires the caller holds hdev->lock */
6030 static void restart_le_actions(struct hci_dev *hdev)
6031 {
6032 struct hci_conn_params *p;
6033
6034 list_for_each_entry(p, &hdev->le_conn_params, list) {
6035 /* Needed for AUTO_OFF case where might not "really"
6036 * have been powered off.
6037 */
6038 list_del_init(&p->action);
6039
6040 switch (p->auto_connect) {
6041 case HCI_AUTO_CONN_DIRECT:
6042 case HCI_AUTO_CONN_ALWAYS:
6043 list_add(&p->action, &hdev->pend_le_conns);
6044 break;
6045 case HCI_AUTO_CONN_REPORT:
6046 list_add(&p->action, &hdev->pend_le_reports);
6047 break;
6048 default:
6049 break;
6050 }
6051 }
6052
6053 hci_update_background_scan(hdev);
6054 }
6055
6056 static void powered_complete(struct hci_dev *hdev, u8 status)
6057 {
6058 struct cmd_lookup match = { NULL, hdev };
6059
6060 BT_DBG("status 0x%02x", status);
6061
6062 hci_dev_lock(hdev);
6063
6064 restart_le_actions(hdev);
6065
6066 mgmt_pending_foreach(MGMT_OP_SET_POWERED, hdev, settings_rsp, &match);
6067
6068 new_settings(hdev, match.sk);
6069
6070 hci_dev_unlock(hdev);
6071
6072 if (match.sk)
6073 sock_put(match.sk);
6074 }
6075
6076 static int powered_update_hci(struct hci_dev *hdev)
6077 {
6078 struct hci_request req;
6079 u8 link_sec;
6080
6081 hci_req_init(&req, hdev);
6082
6083 if (test_bit(HCI_SSP_ENABLED, &hdev->dev_flags) &&
6084 !lmp_host_ssp_capable(hdev)) {
6085 u8 ssp = 1;
6086
6087 hci_req_add(&req, HCI_OP_WRITE_SSP_MODE, 1, &ssp);
6088 }
6089
6090 if (test_bit(HCI_LE_ENABLED, &hdev->dev_flags) &&
6091 lmp_bredr_capable(hdev)) {
6092 struct hci_cp_write_le_host_supported cp;
6093
6094 cp.le = 0x01;
6095 cp.simul = 0x00;
6096
6097 /* Check first if we already have the right
6098 * host state (host features set)
6099 */
6100 if (cp.le != lmp_host_le_capable(hdev) ||
6101 cp.simul != lmp_host_le_br_capable(hdev))
6102 hci_req_add(&req, HCI_OP_WRITE_LE_HOST_SUPPORTED,
6103 sizeof(cp), &cp);
6104 }
6105
6106 if (lmp_le_capable(hdev)) {
6107 /* Make sure the controller has a good default for
6108 * advertising data. This also applies to the case
6109 * where BR/EDR was toggled during the AUTO_OFF phase.
6110 */
6111 if (test_bit(HCI_LE_ENABLED, &hdev->dev_flags)) {
6112 update_adv_data(&req);
6113 update_scan_rsp_data(&req);
6114 }
6115
6116 if (test_bit(HCI_ADVERTISING, &hdev->dev_flags))
6117 enable_advertising(&req);
6118 }
6119
6120 link_sec = test_bit(HCI_LINK_SECURITY, &hdev->dev_flags);
6121 if (link_sec != test_bit(HCI_AUTH, &hdev->flags))
6122 hci_req_add(&req, HCI_OP_WRITE_AUTH_ENABLE,
6123 sizeof(link_sec), &link_sec);
6124
6125 if (lmp_bredr_capable(hdev)) {
6126 write_fast_connectable(&req, false);
6127 hci_update_page_scan(hdev, &req);
6128 update_class(&req);
6129 update_name(&req);
6130 update_eir(&req);
6131 }
6132
6133 return hci_req_run(&req, powered_complete);
6134 }
6135
6136 int mgmt_powered(struct hci_dev *hdev, u8 powered)
6137 {
6138 struct cmd_lookup match = { NULL, hdev };
6139 u8 status_not_powered = MGMT_STATUS_NOT_POWERED;
6140 u8 zero_cod[] = { 0, 0, 0 };
6141 int err;
6142
6143 if (!test_bit(HCI_MGMT, &hdev->dev_flags))
6144 return 0;
6145
6146 if (powered) {
6147 if (powered_update_hci(hdev) == 0)
6148 return 0;
6149
6150 mgmt_pending_foreach(MGMT_OP_SET_POWERED, hdev, settings_rsp,
6151 &match);
6152 goto new_settings;
6153 }
6154
6155 mgmt_pending_foreach(MGMT_OP_SET_POWERED, hdev, settings_rsp, &match);
6156 mgmt_pending_foreach(0, hdev, cmd_complete_rsp, &status_not_powered);
6157
6158 if (memcmp(hdev->dev_class, zero_cod, sizeof(zero_cod)) != 0)
6159 mgmt_event(MGMT_EV_CLASS_OF_DEV_CHANGED, hdev,
6160 zero_cod, sizeof(zero_cod), NULL);
6161
6162 new_settings:
6163 err = new_settings(hdev, match.sk);
6164
6165 if (match.sk)
6166 sock_put(match.sk);
6167
6168 return err;
6169 }
6170
6171 void mgmt_set_powered_failed(struct hci_dev *hdev, int err)
6172 {
6173 struct pending_cmd *cmd;
6174 u8 status;
6175
6176 cmd = mgmt_pending_find(MGMT_OP_SET_POWERED, hdev);
6177 if (!cmd)
6178 return;
6179
6180 if (err == -ERFKILL)
6181 status = MGMT_STATUS_RFKILLED;
6182 else
6183 status = MGMT_STATUS_FAILED;
6184
6185 cmd_status(cmd->sk, hdev->id, MGMT_OP_SET_POWERED, status);
6186
6187 mgmt_pending_remove(cmd);
6188 }
6189
6190 void mgmt_discoverable_timeout(struct hci_dev *hdev)
6191 {
6192 struct hci_request req;
6193
6194 hci_dev_lock(hdev);
6195
6196 /* When discoverable timeout triggers, then just make sure
6197 * the limited discoverable flag is cleared. Even in the case
6198 * of a timeout triggered from general discoverable, it is
6199 * safe to unconditionally clear the flag.
6200 */
6201 clear_bit(HCI_LIMITED_DISCOVERABLE, &hdev->dev_flags);
6202 clear_bit(HCI_DISCOVERABLE, &hdev->dev_flags);
6203
6204 hci_req_init(&req, hdev);
6205 if (test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags)) {
6206 u8 scan = SCAN_PAGE;
6207 hci_req_add(&req, HCI_OP_WRITE_SCAN_ENABLE,
6208 sizeof(scan), &scan);
6209 }
6210 update_class(&req);
6211 update_adv_data(&req);
6212 hci_req_run(&req, NULL);
6213
6214 hdev->discov_timeout = 0;
6215
6216 new_settings(hdev, NULL);
6217
6218 hci_dev_unlock(hdev);
6219 }
6220
6221 void mgmt_new_link_key(struct hci_dev *hdev, struct link_key *key,
6222 bool persistent)
6223 {
6224 struct mgmt_ev_new_link_key ev;
6225
6226 memset(&ev, 0, sizeof(ev));
6227
6228 ev.store_hint = persistent;
6229 bacpy(&ev.key.addr.bdaddr, &key->bdaddr);
6230 ev.key.addr.type = BDADDR_BREDR;
6231 ev.key.type = key->type;
6232 memcpy(ev.key.val, key->val, HCI_LINK_KEY_SIZE);
6233 ev.key.pin_len = key->pin_len;
6234
6235 mgmt_event(MGMT_EV_NEW_LINK_KEY, hdev, &ev, sizeof(ev), NULL);
6236 }
6237
6238 static u8 mgmt_ltk_type(struct smp_ltk *ltk)
6239 {
6240 switch (ltk->type) {
6241 case SMP_LTK:
6242 case SMP_LTK_SLAVE:
6243 if (ltk->authenticated)
6244 return MGMT_LTK_AUTHENTICATED;
6245 return MGMT_LTK_UNAUTHENTICATED;
6246 case SMP_LTK_P256:
6247 if (ltk->authenticated)
6248 return MGMT_LTK_P256_AUTH;
6249 return MGMT_LTK_P256_UNAUTH;
6250 case SMP_LTK_P256_DEBUG:
6251 return MGMT_LTK_P256_DEBUG;
6252 }
6253
6254 return MGMT_LTK_UNAUTHENTICATED;
6255 }
6256
6257 void mgmt_new_ltk(struct hci_dev *hdev, struct smp_ltk *key, bool persistent)
6258 {
6259 struct mgmt_ev_new_long_term_key ev;
6260
6261 memset(&ev, 0, sizeof(ev));
6262
6263 /* Devices using resolvable or non-resolvable random addresses
6264 * without providing an indentity resolving key don't require
6265 * to store long term keys. Their addresses will change the
6266 * next time around.
6267 *
6268 * Only when a remote device provides an identity address
6269 * make sure the long term key is stored. If the remote
6270 * identity is known, the long term keys are internally
6271 * mapped to the identity address. So allow static random
6272 * and public addresses here.
6273 */
6274 if (key->bdaddr_type == ADDR_LE_DEV_RANDOM &&
6275 (key->bdaddr.b[5] & 0xc0) != 0xc0)
6276 ev.store_hint = 0x00;
6277 else
6278 ev.store_hint = persistent;
6279
6280 bacpy(&ev.key.addr.bdaddr, &key->bdaddr);
6281 ev.key.addr.type = link_to_bdaddr(LE_LINK, key->bdaddr_type);
6282 ev.key.type = mgmt_ltk_type(key);
6283 ev.key.enc_size = key->enc_size;
6284 ev.key.ediv = key->ediv;
6285 ev.key.rand = key->rand;
6286
6287 if (key->type == SMP_LTK)
6288 ev.key.master = 1;
6289
6290 memcpy(ev.key.val, key->val, sizeof(key->val));
6291
6292 mgmt_event(MGMT_EV_NEW_LONG_TERM_KEY, hdev, &ev, sizeof(ev), NULL);
6293 }
6294
6295 void mgmt_new_irk(struct hci_dev *hdev, struct smp_irk *irk)
6296 {
6297 struct mgmt_ev_new_irk ev;
6298
6299 memset(&ev, 0, sizeof(ev));
6300
6301 /* For identity resolving keys from devices that are already
6302 * using a public address or static random address, do not
6303 * ask for storing this key. The identity resolving key really
6304 * is only mandatory for devices using resovlable random
6305 * addresses.
6306 *
6307 * Storing all identity resolving keys has the downside that
6308 * they will be also loaded on next boot of they system. More
6309 * identity resolving keys, means more time during scanning is
6310 * needed to actually resolve these addresses.
6311 */
6312 if (bacmp(&irk->rpa, BDADDR_ANY))
6313 ev.store_hint = 0x01;
6314 else
6315 ev.store_hint = 0x00;
6316
6317 bacpy(&ev.rpa, &irk->rpa);
6318 bacpy(&ev.irk.addr.bdaddr, &irk->bdaddr);
6319 ev.irk.addr.type = link_to_bdaddr(LE_LINK, irk->addr_type);
6320 memcpy(ev.irk.val, irk->val, sizeof(irk->val));
6321
6322 mgmt_event(MGMT_EV_NEW_IRK, hdev, &ev, sizeof(ev), NULL);
6323 }
6324
6325 void mgmt_new_csrk(struct hci_dev *hdev, struct smp_csrk *csrk,
6326 bool persistent)
6327 {
6328 struct mgmt_ev_new_csrk ev;
6329
6330 memset(&ev, 0, sizeof(ev));
6331
6332 /* Devices using resolvable or non-resolvable random addresses
6333 * without providing an indentity resolving key don't require
6334 * to store signature resolving keys. Their addresses will change
6335 * the next time around.
6336 *
6337 * Only when a remote device provides an identity address
6338 * make sure the signature resolving key is stored. So allow
6339 * static random and public addresses here.
6340 */
6341 if (csrk->bdaddr_type == ADDR_LE_DEV_RANDOM &&
6342 (csrk->bdaddr.b[5] & 0xc0) != 0xc0)
6343 ev.store_hint = 0x00;
6344 else
6345 ev.store_hint = persistent;
6346
6347 bacpy(&ev.key.addr.bdaddr, &csrk->bdaddr);
6348 ev.key.addr.type = link_to_bdaddr(LE_LINK, csrk->bdaddr_type);
6349 ev.key.master = csrk->master;
6350 memcpy(ev.key.val, csrk->val, sizeof(csrk->val));
6351
6352 mgmt_event(MGMT_EV_NEW_CSRK, hdev, &ev, sizeof(ev), NULL);
6353 }
6354
6355 void mgmt_new_conn_param(struct hci_dev *hdev, bdaddr_t *bdaddr,
6356 u8 bdaddr_type, u8 store_hint, u16 min_interval,
6357 u16 max_interval, u16 latency, u16 timeout)
6358 {
6359 struct mgmt_ev_new_conn_param ev;
6360
6361 if (!hci_is_identity_address(bdaddr, bdaddr_type))
6362 return;
6363
6364 memset(&ev, 0, sizeof(ev));
6365 bacpy(&ev.addr.bdaddr, bdaddr);
6366 ev.addr.type = link_to_bdaddr(LE_LINK, bdaddr_type);
6367 ev.store_hint = store_hint;
6368 ev.min_interval = cpu_to_le16(min_interval);
6369 ev.max_interval = cpu_to_le16(max_interval);
6370 ev.latency = cpu_to_le16(latency);
6371 ev.timeout = cpu_to_le16(timeout);
6372
6373 mgmt_event(MGMT_EV_NEW_CONN_PARAM, hdev, &ev, sizeof(ev), NULL);
6374 }
6375
6376 static inline u16 eir_append_data(u8 *eir, u16 eir_len, u8 type, u8 *data,
6377 u8 data_len)
6378 {
6379 eir[eir_len++] = sizeof(type) + data_len;
6380 eir[eir_len++] = type;
6381 memcpy(&eir[eir_len], data, data_len);
6382 eir_len += data_len;
6383
6384 return eir_len;
6385 }
6386
6387 void mgmt_device_connected(struct hci_dev *hdev, struct hci_conn *conn,
6388 u32 flags, u8 *name, u8 name_len)
6389 {
6390 char buf[512];
6391 struct mgmt_ev_device_connected *ev = (void *) buf;
6392 u16 eir_len = 0;
6393
6394 bacpy(&ev->addr.bdaddr, &conn->dst);
6395 ev->addr.type = link_to_bdaddr(conn->type, conn->dst_type);
6396
6397 ev->flags = __cpu_to_le32(flags);
6398
6399 /* We must ensure that the EIR Data fields are ordered and
6400 * unique. Keep it simple for now and avoid the problem by not
6401 * adding any BR/EDR data to the LE adv.
6402 */
6403 if (conn->le_adv_data_len > 0) {
6404 memcpy(&ev->eir[eir_len],
6405 conn->le_adv_data, conn->le_adv_data_len);
6406 eir_len = conn->le_adv_data_len;
6407 } else {
6408 if (name_len > 0)
6409 eir_len = eir_append_data(ev->eir, 0, EIR_NAME_COMPLETE,
6410 name, name_len);
6411
6412 if (memcmp(conn->dev_class, "\0\0\0", 3) != 0)
6413 eir_len = eir_append_data(ev->eir, eir_len,
6414 EIR_CLASS_OF_DEV,
6415 conn->dev_class, 3);
6416 }
6417
6418 ev->eir_len = cpu_to_le16(eir_len);
6419
6420 mgmt_event(MGMT_EV_DEVICE_CONNECTED, hdev, buf,
6421 sizeof(*ev) + eir_len, NULL);
6422 }
6423
6424 static void disconnect_rsp(struct pending_cmd *cmd, void *data)
6425 {
6426 struct sock **sk = data;
6427
6428 cmd->cmd_complete(cmd, 0);
6429
6430 *sk = cmd->sk;
6431 sock_hold(*sk);
6432
6433 mgmt_pending_remove(cmd);
6434 }
6435
6436 static void unpair_device_rsp(struct pending_cmd *cmd, void *data)
6437 {
6438 struct hci_dev *hdev = data;
6439 struct mgmt_cp_unpair_device *cp = cmd->param;
6440
6441 device_unpaired(hdev, &cp->addr.bdaddr, cp->addr.type, cmd->sk);
6442
6443 cmd->cmd_complete(cmd, 0);
6444 mgmt_pending_remove(cmd);
6445 }
6446
6447 bool mgmt_powering_down(struct hci_dev *hdev)
6448 {
6449 struct pending_cmd *cmd;
6450 struct mgmt_mode *cp;
6451
6452 cmd = mgmt_pending_find(MGMT_OP_SET_POWERED, hdev);
6453 if (!cmd)
6454 return false;
6455
6456 cp = cmd->param;
6457 if (!cp->val)
6458 return true;
6459
6460 return false;
6461 }
6462
6463 void mgmt_device_disconnected(struct hci_dev *hdev, bdaddr_t *bdaddr,
6464 u8 link_type, u8 addr_type, u8 reason,
6465 bool mgmt_connected)
6466 {
6467 struct mgmt_ev_device_disconnected ev;
6468 struct sock *sk = NULL;
6469
6470 /* The connection is still in hci_conn_hash so test for 1
6471 * instead of 0 to know if this is the last one.
6472 */
6473 if (mgmt_powering_down(hdev) && hci_conn_count(hdev) == 1) {
6474 cancel_delayed_work(&hdev->power_off);
6475 queue_work(hdev->req_workqueue, &hdev->power_off.work);
6476 }
6477
6478 if (!mgmt_connected)
6479 return;
6480
6481 if (link_type != ACL_LINK && link_type != LE_LINK)
6482 return;
6483
6484 mgmt_pending_foreach(MGMT_OP_DISCONNECT, hdev, disconnect_rsp, &sk);
6485
6486 bacpy(&ev.addr.bdaddr, bdaddr);
6487 ev.addr.type = link_to_bdaddr(link_type, addr_type);
6488 ev.reason = reason;
6489
6490 mgmt_event(MGMT_EV_DEVICE_DISCONNECTED, hdev, &ev, sizeof(ev), sk);
6491
6492 if (sk)
6493 sock_put(sk);
6494
6495 mgmt_pending_foreach(MGMT_OP_UNPAIR_DEVICE, hdev, unpair_device_rsp,
6496 hdev);
6497 }
6498
6499 void mgmt_disconnect_failed(struct hci_dev *hdev, bdaddr_t *bdaddr,
6500 u8 link_type, u8 addr_type, u8 status)
6501 {
6502 u8 bdaddr_type = link_to_bdaddr(link_type, addr_type);
6503 struct mgmt_cp_disconnect *cp;
6504 struct pending_cmd *cmd;
6505
6506 mgmt_pending_foreach(MGMT_OP_UNPAIR_DEVICE, hdev, unpair_device_rsp,
6507 hdev);
6508
6509 cmd = mgmt_pending_find(MGMT_OP_DISCONNECT, hdev);
6510 if (!cmd)
6511 return;
6512
6513 cp = cmd->param;
6514
6515 if (bacmp(bdaddr, &cp->addr.bdaddr))
6516 return;
6517
6518 if (cp->addr.type != bdaddr_type)
6519 return;
6520
6521 cmd->cmd_complete(cmd, mgmt_status(status));
6522 mgmt_pending_remove(cmd);
6523 }
6524
6525 void mgmt_connect_failed(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
6526 u8 addr_type, u8 status)
6527 {
6528 struct mgmt_ev_connect_failed ev;
6529
6530 /* The connection is still in hci_conn_hash so test for 1
6531 * instead of 0 to know if this is the last one.
6532 */
6533 if (mgmt_powering_down(hdev) && hci_conn_count(hdev) == 1) {
6534 cancel_delayed_work(&hdev->power_off);
6535 queue_work(hdev->req_workqueue, &hdev->power_off.work);
6536 }
6537
6538 bacpy(&ev.addr.bdaddr, bdaddr);
6539 ev.addr.type = link_to_bdaddr(link_type, addr_type);
6540 ev.status = mgmt_status(status);
6541
6542 mgmt_event(MGMT_EV_CONNECT_FAILED, hdev, &ev, sizeof(ev), NULL);
6543 }
6544
6545 void mgmt_pin_code_request(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 secure)
6546 {
6547 struct mgmt_ev_pin_code_request ev;
6548
6549 bacpy(&ev.addr.bdaddr, bdaddr);
6550 ev.addr.type = BDADDR_BREDR;
6551 ev.secure = secure;
6552
6553 mgmt_event(MGMT_EV_PIN_CODE_REQUEST, hdev, &ev, sizeof(ev), NULL);
6554 }
6555
6556 void mgmt_pin_code_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
6557 u8 status)
6558 {
6559 struct pending_cmd *cmd;
6560
6561 cmd = mgmt_pending_find(MGMT_OP_PIN_CODE_REPLY, hdev);
6562 if (!cmd)
6563 return;
6564
6565 cmd->cmd_complete(cmd, mgmt_status(status));
6566 mgmt_pending_remove(cmd);
6567 }
6568
6569 void mgmt_pin_code_neg_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
6570 u8 status)
6571 {
6572 struct pending_cmd *cmd;
6573
6574 cmd = mgmt_pending_find(MGMT_OP_PIN_CODE_NEG_REPLY, hdev);
6575 if (!cmd)
6576 return;
6577
6578 cmd->cmd_complete(cmd, mgmt_status(status));
6579 mgmt_pending_remove(cmd);
6580 }
6581
6582 int mgmt_user_confirm_request(struct hci_dev *hdev, bdaddr_t *bdaddr,
6583 u8 link_type, u8 addr_type, u32 value,
6584 u8 confirm_hint)
6585 {
6586 struct mgmt_ev_user_confirm_request ev;
6587
6588 BT_DBG("%s", hdev->name);
6589
6590 bacpy(&ev.addr.bdaddr, bdaddr);
6591 ev.addr.type = link_to_bdaddr(link_type, addr_type);
6592 ev.confirm_hint = confirm_hint;
6593 ev.value = cpu_to_le32(value);
6594
6595 return mgmt_event(MGMT_EV_USER_CONFIRM_REQUEST, hdev, &ev, sizeof(ev),
6596 NULL);
6597 }
6598
6599 int mgmt_user_passkey_request(struct hci_dev *hdev, bdaddr_t *bdaddr,
6600 u8 link_type, u8 addr_type)
6601 {
6602 struct mgmt_ev_user_passkey_request ev;
6603
6604 BT_DBG("%s", hdev->name);
6605
6606 bacpy(&ev.addr.bdaddr, bdaddr);
6607 ev.addr.type = link_to_bdaddr(link_type, addr_type);
6608
6609 return mgmt_event(MGMT_EV_USER_PASSKEY_REQUEST, hdev, &ev, sizeof(ev),
6610 NULL);
6611 }
6612
6613 static int user_pairing_resp_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
6614 u8 link_type, u8 addr_type, u8 status,
6615 u8 opcode)
6616 {
6617 struct pending_cmd *cmd;
6618
6619 cmd = mgmt_pending_find(opcode, hdev);
6620 if (!cmd)
6621 return -ENOENT;
6622
6623 cmd->cmd_complete(cmd, mgmt_status(status));
6624 mgmt_pending_remove(cmd);
6625
6626 return 0;
6627 }
6628
6629 int mgmt_user_confirm_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
6630 u8 link_type, u8 addr_type, u8 status)
6631 {
6632 return user_pairing_resp_complete(hdev, bdaddr, link_type, addr_type,
6633 status, MGMT_OP_USER_CONFIRM_REPLY);
6634 }
6635
6636 int mgmt_user_confirm_neg_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
6637 u8 link_type, u8 addr_type, u8 status)
6638 {
6639 return user_pairing_resp_complete(hdev, bdaddr, link_type, addr_type,
6640 status,
6641 MGMT_OP_USER_CONFIRM_NEG_REPLY);
6642 }
6643
6644 int mgmt_user_passkey_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
6645 u8 link_type, u8 addr_type, u8 status)
6646 {
6647 return user_pairing_resp_complete(hdev, bdaddr, link_type, addr_type,
6648 status, MGMT_OP_USER_PASSKEY_REPLY);
6649 }
6650
6651 int mgmt_user_passkey_neg_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
6652 u8 link_type, u8 addr_type, u8 status)
6653 {
6654 return user_pairing_resp_complete(hdev, bdaddr, link_type, addr_type,
6655 status,
6656 MGMT_OP_USER_PASSKEY_NEG_REPLY);
6657 }
6658
6659 int mgmt_user_passkey_notify(struct hci_dev *hdev, bdaddr_t *bdaddr,
6660 u8 link_type, u8 addr_type, u32 passkey,
6661 u8 entered)
6662 {
6663 struct mgmt_ev_passkey_notify ev;
6664
6665 BT_DBG("%s", hdev->name);
6666
6667 bacpy(&ev.addr.bdaddr, bdaddr);
6668 ev.addr.type = link_to_bdaddr(link_type, addr_type);
6669 ev.passkey = __cpu_to_le32(passkey);
6670 ev.entered = entered;
6671
6672 return mgmt_event(MGMT_EV_PASSKEY_NOTIFY, hdev, &ev, sizeof(ev), NULL);
6673 }
6674
6675 void mgmt_auth_failed(struct hci_conn *conn, u8 hci_status)
6676 {
6677 struct mgmt_ev_auth_failed ev;
6678 struct pending_cmd *cmd;
6679 u8 status = mgmt_status(hci_status);
6680
6681 bacpy(&ev.addr.bdaddr, &conn->dst);
6682 ev.addr.type = link_to_bdaddr(conn->type, conn->dst_type);
6683 ev.status = status;
6684
6685 cmd = find_pairing(conn);
6686
6687 mgmt_event(MGMT_EV_AUTH_FAILED, conn->hdev, &ev, sizeof(ev),
6688 cmd ? cmd->sk : NULL);
6689
6690 if (cmd)
6691 pairing_complete(cmd, status);
6692 }
6693
6694 void mgmt_auth_enable_complete(struct hci_dev *hdev, u8 status)
6695 {
6696 struct cmd_lookup match = { NULL, hdev };
6697 bool changed;
6698
6699 if (status) {
6700 u8 mgmt_err = mgmt_status(status);
6701 mgmt_pending_foreach(MGMT_OP_SET_LINK_SECURITY, hdev,
6702 cmd_status_rsp, &mgmt_err);
6703 return;
6704 }
6705
6706 if (test_bit(HCI_AUTH, &hdev->flags))
6707 changed = !test_and_set_bit(HCI_LINK_SECURITY,
6708 &hdev->dev_flags);
6709 else
6710 changed = test_and_clear_bit(HCI_LINK_SECURITY,
6711 &hdev->dev_flags);
6712
6713 mgmt_pending_foreach(MGMT_OP_SET_LINK_SECURITY, hdev, settings_rsp,
6714 &match);
6715
6716 if (changed)
6717 new_settings(hdev, match.sk);
6718
6719 if (match.sk)
6720 sock_put(match.sk);
6721 }
6722
6723 static void clear_eir(struct hci_request *req)
6724 {
6725 struct hci_dev *hdev = req->hdev;
6726 struct hci_cp_write_eir cp;
6727
6728 if (!lmp_ext_inq_capable(hdev))
6729 return;
6730
6731 memset(hdev->eir, 0, sizeof(hdev->eir));
6732
6733 memset(&cp, 0, sizeof(cp));
6734
6735 hci_req_add(req, HCI_OP_WRITE_EIR, sizeof(cp), &cp);
6736 }
6737
6738 void mgmt_ssp_enable_complete(struct hci_dev *hdev, u8 enable, u8 status)
6739 {
6740 struct cmd_lookup match = { NULL, hdev };
6741 struct hci_request req;
6742 bool changed = false;
6743
6744 if (status) {
6745 u8 mgmt_err = mgmt_status(status);
6746
6747 if (enable && test_and_clear_bit(HCI_SSP_ENABLED,
6748 &hdev->dev_flags)) {
6749 clear_bit(HCI_HS_ENABLED, &hdev->dev_flags);
6750 new_settings(hdev, NULL);
6751 }
6752
6753 mgmt_pending_foreach(MGMT_OP_SET_SSP, hdev, cmd_status_rsp,
6754 &mgmt_err);
6755 return;
6756 }
6757
6758 if (enable) {
6759 changed = !test_and_set_bit(HCI_SSP_ENABLED, &hdev->dev_flags);
6760 } else {
6761 changed = test_and_clear_bit(HCI_SSP_ENABLED, &hdev->dev_flags);
6762 if (!changed)
6763 changed = test_and_clear_bit(HCI_HS_ENABLED,
6764 &hdev->dev_flags);
6765 else
6766 clear_bit(HCI_HS_ENABLED, &hdev->dev_flags);
6767 }
6768
6769 mgmt_pending_foreach(MGMT_OP_SET_SSP, hdev, settings_rsp, &match);
6770
6771 if (changed)
6772 new_settings(hdev, match.sk);
6773
6774 if (match.sk)
6775 sock_put(match.sk);
6776
6777 hci_req_init(&req, hdev);
6778
6779 if (test_bit(HCI_SSP_ENABLED, &hdev->dev_flags)) {
6780 if (test_bit(HCI_USE_DEBUG_KEYS, &hdev->dev_flags))
6781 hci_req_add(&req, HCI_OP_WRITE_SSP_DEBUG_MODE,
6782 sizeof(enable), &enable);
6783 update_eir(&req);
6784 } else {
6785 clear_eir(&req);
6786 }
6787
6788 hci_req_run(&req, NULL);
6789 }
6790
6791 void mgmt_sc_enable_complete(struct hci_dev *hdev, u8 enable, u8 status)
6792 {
6793 struct cmd_lookup match = { NULL, hdev };
6794 bool changed = false;
6795
6796 if (status) {
6797 u8 mgmt_err = mgmt_status(status);
6798
6799 if (enable) {
6800 if (test_and_clear_bit(HCI_SC_ENABLED,
6801 &hdev->dev_flags))
6802 new_settings(hdev, NULL);
6803 clear_bit(HCI_SC_ONLY, &hdev->dev_flags);
6804 }
6805
6806 mgmt_pending_foreach(MGMT_OP_SET_SECURE_CONN, hdev,
6807 cmd_status_rsp, &mgmt_err);
6808 return;
6809 }
6810
6811 if (enable) {
6812 changed = !test_and_set_bit(HCI_SC_ENABLED, &hdev->dev_flags);
6813 } else {
6814 changed = test_and_clear_bit(HCI_SC_ENABLED, &hdev->dev_flags);
6815 clear_bit(HCI_SC_ONLY, &hdev->dev_flags);
6816 }
6817
6818 mgmt_pending_foreach(MGMT_OP_SET_SECURE_CONN, hdev,
6819 settings_rsp, &match);
6820
6821 if (changed)
6822 new_settings(hdev, match.sk);
6823
6824 if (match.sk)
6825 sock_put(match.sk);
6826 }
6827
6828 static void sk_lookup(struct pending_cmd *cmd, void *data)
6829 {
6830 struct cmd_lookup *match = data;
6831
6832 if (match->sk == NULL) {
6833 match->sk = cmd->sk;
6834 sock_hold(match->sk);
6835 }
6836 }
6837
6838 void mgmt_set_class_of_dev_complete(struct hci_dev *hdev, u8 *dev_class,
6839 u8 status)
6840 {
6841 struct cmd_lookup match = { NULL, hdev, mgmt_status(status) };
6842
6843 mgmt_pending_foreach(MGMT_OP_SET_DEV_CLASS, hdev, sk_lookup, &match);
6844 mgmt_pending_foreach(MGMT_OP_ADD_UUID, hdev, sk_lookup, &match);
6845 mgmt_pending_foreach(MGMT_OP_REMOVE_UUID, hdev, sk_lookup, &match);
6846
6847 if (!status)
6848 mgmt_event(MGMT_EV_CLASS_OF_DEV_CHANGED, hdev, dev_class, 3,
6849 NULL);
6850
6851 if (match.sk)
6852 sock_put(match.sk);
6853 }
6854
6855 void mgmt_set_local_name_complete(struct hci_dev *hdev, u8 *name, u8 status)
6856 {
6857 struct mgmt_cp_set_local_name ev;
6858 struct pending_cmd *cmd;
6859
6860 if (status)
6861 return;
6862
6863 memset(&ev, 0, sizeof(ev));
6864 memcpy(ev.name, name, HCI_MAX_NAME_LENGTH);
6865 memcpy(ev.short_name, hdev->short_name, HCI_MAX_SHORT_NAME_LENGTH);
6866
6867 cmd = mgmt_pending_find(MGMT_OP_SET_LOCAL_NAME, hdev);
6868 if (!cmd) {
6869 memcpy(hdev->dev_name, name, sizeof(hdev->dev_name));
6870
6871 /* If this is a HCI command related to powering on the
6872 * HCI dev don't send any mgmt signals.
6873 */
6874 if (mgmt_pending_find(MGMT_OP_SET_POWERED, hdev))
6875 return;
6876 }
6877
6878 mgmt_event(MGMT_EV_LOCAL_NAME_CHANGED, hdev, &ev, sizeof(ev),
6879 cmd ? cmd->sk : NULL);
6880 }
6881
6882 void mgmt_read_local_oob_data_complete(struct hci_dev *hdev, u8 *hash192,
6883 u8 *rand192, u8 *hash256, u8 *rand256,
6884 u8 status)
6885 {
6886 struct pending_cmd *cmd;
6887
6888 BT_DBG("%s status %u", hdev->name, status);
6889
6890 cmd = mgmt_pending_find(MGMT_OP_READ_LOCAL_OOB_DATA, hdev);
6891 if (!cmd)
6892 return;
6893
6894 if (status) {
6895 cmd_status(cmd->sk, hdev->id, MGMT_OP_READ_LOCAL_OOB_DATA,
6896 mgmt_status(status));
6897 } else {
6898 if (bredr_sc_enabled(hdev) && hash256 && rand256) {
6899 struct mgmt_rp_read_local_oob_ext_data rp;
6900
6901 memcpy(rp.hash192, hash192, sizeof(rp.hash192));
6902 memcpy(rp.rand192, rand192, sizeof(rp.rand192));
6903
6904 memcpy(rp.hash256, hash256, sizeof(rp.hash256));
6905 memcpy(rp.rand256, rand256, sizeof(rp.rand256));
6906
6907 cmd_complete(cmd->sk, hdev->id,
6908 MGMT_OP_READ_LOCAL_OOB_DATA, 0,
6909 &rp, sizeof(rp));
6910 } else {
6911 struct mgmt_rp_read_local_oob_data rp;
6912
6913 memcpy(rp.hash, hash192, sizeof(rp.hash));
6914 memcpy(rp.rand, rand192, sizeof(rp.rand));
6915
6916 cmd_complete(cmd->sk, hdev->id,
6917 MGMT_OP_READ_LOCAL_OOB_DATA, 0,
6918 &rp, sizeof(rp));
6919 }
6920 }
6921
6922 mgmt_pending_remove(cmd);
6923 }
6924
6925 static inline bool has_uuid(u8 *uuid, u16 uuid_count, u8 (*uuids)[16])
6926 {
6927 int i;
6928
6929 for (i = 0; i < uuid_count; i++) {
6930 if (!memcmp(uuid, uuids[i], 16))
6931 return true;
6932 }
6933
6934 return false;
6935 }
6936
6937 static bool eir_has_uuids(u8 *eir, u16 eir_len, u16 uuid_count, u8 (*uuids)[16])
6938 {
6939 u16 parsed = 0;
6940
6941 while (parsed < eir_len) {
6942 u8 field_len = eir[0];
6943 u8 uuid[16];
6944 int i;
6945
6946 if (field_len == 0)
6947 break;
6948
6949 if (eir_len - parsed < field_len + 1)
6950 break;
6951
6952 switch (eir[1]) {
6953 case EIR_UUID16_ALL:
6954 case EIR_UUID16_SOME:
6955 for (i = 0; i + 3 <= field_len; i += 2) {
6956 memcpy(uuid, bluetooth_base_uuid, 16);
6957 uuid[13] = eir[i + 3];
6958 uuid[12] = eir[i + 2];
6959 if (has_uuid(uuid, uuid_count, uuids))
6960 return true;
6961 }
6962 break;
6963 case EIR_UUID32_ALL:
6964 case EIR_UUID32_SOME:
6965 for (i = 0; i + 5 <= field_len; i += 4) {
6966 memcpy(uuid, bluetooth_base_uuid, 16);
6967 uuid[15] = eir[i + 5];
6968 uuid[14] = eir[i + 4];
6969 uuid[13] = eir[i + 3];
6970 uuid[12] = eir[i + 2];
6971 if (has_uuid(uuid, uuid_count, uuids))
6972 return true;
6973 }
6974 break;
6975 case EIR_UUID128_ALL:
6976 case EIR_UUID128_SOME:
6977 for (i = 0; i + 17 <= field_len; i += 16) {
6978 memcpy(uuid, eir + i + 2, 16);
6979 if (has_uuid(uuid, uuid_count, uuids))
6980 return true;
6981 }
6982 break;
6983 }
6984
6985 parsed += field_len + 1;
6986 eir += field_len + 1;
6987 }
6988
6989 return false;
6990 }
6991
6992 void mgmt_device_found(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
6993 u8 addr_type, u8 *dev_class, s8 rssi, u32 flags,
6994 u8 *eir, u16 eir_len, u8 *scan_rsp, u8 scan_rsp_len)
6995 {
6996 char buf[512];
6997 struct mgmt_ev_device_found *ev = (void *) buf;
6998 size_t ev_size;
6999 bool match;
7000
7001 /* Don't send events for a non-kernel initiated discovery. With
7002 * LE one exception is if we have pend_le_reports > 0 in which
7003 * case we're doing passive scanning and want these events.
7004 */
7005 if (!hci_discovery_active(hdev)) {
7006 if (link_type == ACL_LINK)
7007 return;
7008 if (link_type == LE_LINK && list_empty(&hdev->pend_le_reports))
7009 return;
7010 }
7011
7012 /* When using service discovery with a RSSI threshold, then check
7013 * if such a RSSI threshold is specified. If a RSSI threshold has
7014 * been specified, then all results with a RSSI smaller than the
7015 * RSSI threshold will be dropped.
7016 *
7017 * For BR/EDR devices (pre 1.2) providing no RSSI during inquiry,
7018 * the results are also dropped.
7019 */
7020 if (hdev->discovery.rssi != HCI_RSSI_INVALID &&
7021 (rssi < hdev->discovery.rssi || rssi == HCI_RSSI_INVALID))
7022 return;
7023
7024 /* Make sure that the buffer is big enough. The 5 extra bytes
7025 * are for the potential CoD field.
7026 */
7027 if (sizeof(*ev) + eir_len + scan_rsp_len + 5 > sizeof(buf))
7028 return;
7029
7030 memset(buf, 0, sizeof(buf));
7031
7032 /* In case of device discovery with BR/EDR devices (pre 1.2), the
7033 * RSSI value was reported as 0 when not available. This behavior
7034 * is kept when using device discovery. This is required for full
7035 * backwards compatibility with the API.
7036 *
7037 * However when using service discovery, the value 127 will be
7038 * returned when the RSSI is not available.
7039 */
7040 if (rssi == HCI_RSSI_INVALID && !hdev->discovery.report_invalid_rssi)
7041 rssi = 0;
7042
7043 bacpy(&ev->addr.bdaddr, bdaddr);
7044 ev->addr.type = link_to_bdaddr(link_type, addr_type);
7045 ev->rssi = rssi;
7046 ev->flags = cpu_to_le32(flags);
7047
7048 if (eir_len > 0) {
7049 /* When using service discovery and a list of UUID is
7050 * provided, results with no matching UUID should be
7051 * dropped. In case there is a match the result is
7052 * kept and checking possible scan response data
7053 * will be skipped.
7054 */
7055 if (hdev->discovery.uuid_count > 0) {
7056 match = eir_has_uuids(eir, eir_len,
7057 hdev->discovery.uuid_count,
7058 hdev->discovery.uuids);
7059 if (!match)
7060 return;
7061 }
7062
7063 /* Copy EIR or advertising data into event */
7064 memcpy(ev->eir, eir, eir_len);
7065 } else {
7066 /* When using service discovery and a list of UUID is
7067 * provided, results with empty EIR or advertising data
7068 * should be dropped since they do not match any UUID.
7069 */
7070 if (hdev->discovery.uuid_count > 0)
7071 return;
7072 }
7073
7074 if (dev_class && !eir_has_data_type(ev->eir, eir_len, EIR_CLASS_OF_DEV))
7075 eir_len = eir_append_data(ev->eir, eir_len, EIR_CLASS_OF_DEV,
7076 dev_class, 3);
7077
7078 if (scan_rsp_len > 0) {
7079 /* When using service discovery and a list of UUID is
7080 * provided, results with no matching UUID should be
7081 * dropped if there is no previous match from the
7082 * advertising data.
7083 */
7084 if (hdev->discovery.uuid_count > 0) {
7085 if (!match && !eir_has_uuids(scan_rsp, scan_rsp_len,
7086 hdev->discovery.uuid_count,
7087 hdev->discovery.uuids))
7088 return;
7089 }
7090
7091 /* Append scan response data to event */
7092 memcpy(ev->eir + eir_len, scan_rsp, scan_rsp_len);
7093 } else {
7094 /* When using service discovery and a list of UUID is
7095 * provided, results with empty scan response and no
7096 * previous matched advertising data should be dropped.
7097 */
7098 if (hdev->discovery.uuid_count > 0 && !match)
7099 return;
7100 }
7101
7102 ev->eir_len = cpu_to_le16(eir_len + scan_rsp_len);
7103 ev_size = sizeof(*ev) + eir_len + scan_rsp_len;
7104
7105 mgmt_event(MGMT_EV_DEVICE_FOUND, hdev, ev, ev_size, NULL);
7106 }
7107
7108 void mgmt_remote_name(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
7109 u8 addr_type, s8 rssi, u8 *name, u8 name_len)
7110 {
7111 struct mgmt_ev_device_found *ev;
7112 char buf[sizeof(*ev) + HCI_MAX_NAME_LENGTH + 2];
7113 u16 eir_len;
7114
7115 ev = (struct mgmt_ev_device_found *) buf;
7116
7117 memset(buf, 0, sizeof(buf));
7118
7119 bacpy(&ev->addr.bdaddr, bdaddr);
7120 ev->addr.type = link_to_bdaddr(link_type, addr_type);
7121 ev->rssi = rssi;
7122
7123 eir_len = eir_append_data(ev->eir, 0, EIR_NAME_COMPLETE, name,
7124 name_len);
7125
7126 ev->eir_len = cpu_to_le16(eir_len);
7127
7128 mgmt_event(MGMT_EV_DEVICE_FOUND, hdev, ev, sizeof(*ev) + eir_len, NULL);
7129 }
7130
7131 void mgmt_discovering(struct hci_dev *hdev, u8 discovering)
7132 {
7133 struct mgmt_ev_discovering ev;
7134
7135 BT_DBG("%s discovering %u", hdev->name, discovering);
7136
7137 memset(&ev, 0, sizeof(ev));
7138 ev.type = hdev->discovery.type;
7139 ev.discovering = discovering;
7140
7141 mgmt_event(MGMT_EV_DISCOVERING, hdev, &ev, sizeof(ev), NULL);
7142 }
7143
7144 static void adv_enable_complete(struct hci_dev *hdev, u8 status)
7145 {
7146 BT_DBG("%s status %u", hdev->name, status);
7147 }
7148
7149 void mgmt_reenable_advertising(struct hci_dev *hdev)
7150 {
7151 struct hci_request req;
7152
7153 if (!test_bit(HCI_ADVERTISING, &hdev->dev_flags))
7154 return;
7155
7156 hci_req_init(&req, hdev);
7157 enable_advertising(&req);
7158 hci_req_run(&req, adv_enable_complete);
7159 }
This page took 0.259965 seconds and 5 git commands to generate.