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