Merge tag 'spi-fix-v4.9-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi
[cascardo/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_ERR("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_ERR("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_ERR("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_ERR("add_remote_oob_data: invalid length of %u bytes", len);
3395                 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_ADD_REMOTE_OOB_DATA,
3396                                       MGMT_STATUS_INVALID_PARAMS);
3397         }
3398
3399 unlock:
3400         hci_dev_unlock(hdev);
3401         return err;
3402 }
3403
3404 static int remove_remote_oob_data(struct sock *sk, struct hci_dev *hdev,
3405                                   void *data, u16 len)
3406 {
3407         struct mgmt_cp_remove_remote_oob_data *cp = data;
3408         u8 status;
3409         int err;
3410
3411         BT_DBG("%s", hdev->name);
3412
3413         if (cp->addr.type != BDADDR_BREDR)
3414                 return mgmt_cmd_complete(sk, hdev->id,
3415                                          MGMT_OP_REMOVE_REMOTE_OOB_DATA,
3416                                          MGMT_STATUS_INVALID_PARAMS,
3417                                          &cp->addr, sizeof(cp->addr));
3418
3419         hci_dev_lock(hdev);
3420
3421         if (!bacmp(&cp->addr.bdaddr, BDADDR_ANY)) {
3422                 hci_remote_oob_data_clear(hdev);
3423                 status = MGMT_STATUS_SUCCESS;
3424                 goto done;
3425         }
3426
3427         err = hci_remove_remote_oob_data(hdev, &cp->addr.bdaddr, cp->addr.type);
3428         if (err < 0)
3429                 status = MGMT_STATUS_INVALID_PARAMS;
3430         else
3431                 status = MGMT_STATUS_SUCCESS;
3432
3433 done:
3434         err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_REMOVE_REMOTE_OOB_DATA,
3435                                 status, &cp->addr, sizeof(cp->addr));
3436
3437         hci_dev_unlock(hdev);
3438         return err;
3439 }
3440
3441 void mgmt_start_discovery_complete(struct hci_dev *hdev, u8 status)
3442 {
3443         struct mgmt_pending_cmd *cmd;
3444
3445         BT_DBG("status %d", status);
3446
3447         hci_dev_lock(hdev);
3448
3449         cmd = pending_find(MGMT_OP_START_DISCOVERY, hdev);
3450         if (!cmd)
3451                 cmd = pending_find(MGMT_OP_START_SERVICE_DISCOVERY, hdev);
3452
3453         if (!cmd)
3454                 cmd = pending_find(MGMT_OP_START_LIMITED_DISCOVERY, hdev);
3455
3456         if (cmd) {
3457                 cmd->cmd_complete(cmd, mgmt_status(status));
3458                 mgmt_pending_remove(cmd);
3459         }
3460
3461         hci_dev_unlock(hdev);
3462 }
3463
3464 static bool discovery_type_is_valid(struct hci_dev *hdev, uint8_t type,
3465                                     uint8_t *mgmt_status)
3466 {
3467         switch (type) {
3468         case DISCOV_TYPE_LE:
3469                 *mgmt_status = mgmt_le_support(hdev);
3470                 if (*mgmt_status)
3471                         return false;
3472                 break;
3473         case DISCOV_TYPE_INTERLEAVED:
3474                 *mgmt_status = mgmt_le_support(hdev);
3475                 if (*mgmt_status)
3476                         return false;
3477                 /* Intentional fall-through */
3478         case DISCOV_TYPE_BREDR:
3479                 *mgmt_status = mgmt_bredr_support(hdev);
3480                 if (*mgmt_status)
3481                         return false;
3482                 break;
3483         default:
3484                 *mgmt_status = MGMT_STATUS_INVALID_PARAMS;
3485                 return false;
3486         }
3487
3488         return true;
3489 }
3490
3491 static int start_discovery_internal(struct sock *sk, struct hci_dev *hdev,
3492                                     u16 op, void *data, u16 len)
3493 {
3494         struct mgmt_cp_start_discovery *cp = data;
3495         struct mgmt_pending_cmd *cmd;
3496         u8 status;
3497         int err;
3498
3499         BT_DBG("%s", hdev->name);
3500
3501         hci_dev_lock(hdev);
3502
3503         if (!hdev_is_powered(hdev)) {
3504                 err = mgmt_cmd_complete(sk, hdev->id, op,
3505                                         MGMT_STATUS_NOT_POWERED,
3506                                         &cp->type, sizeof(cp->type));
3507                 goto failed;
3508         }
3509
3510         if (hdev->discovery.state != DISCOVERY_STOPPED ||
3511             hci_dev_test_flag(hdev, HCI_PERIODIC_INQ)) {
3512                 err = mgmt_cmd_complete(sk, hdev->id, op, MGMT_STATUS_BUSY,
3513                                         &cp->type, sizeof(cp->type));
3514                 goto failed;
3515         }
3516
3517         if (!discovery_type_is_valid(hdev, cp->type, &status)) {
3518                 err = mgmt_cmd_complete(sk, hdev->id, op, status,
3519                                         &cp->type, sizeof(cp->type));
3520                 goto failed;
3521         }
3522
3523         /* Clear the discovery filter first to free any previously
3524          * allocated memory for the UUID list.
3525          */
3526         hci_discovery_filter_clear(hdev);
3527
3528         hdev->discovery.type = cp->type;
3529         hdev->discovery.report_invalid_rssi = false;
3530         if (op == MGMT_OP_START_LIMITED_DISCOVERY)
3531                 hdev->discovery.limited = true;
3532         else
3533                 hdev->discovery.limited = false;
3534
3535         cmd = mgmt_pending_add(sk, op, hdev, data, len);
3536         if (!cmd) {
3537                 err = -ENOMEM;
3538                 goto failed;
3539         }
3540
3541         cmd->cmd_complete = generic_cmd_complete;
3542
3543         hci_discovery_set_state(hdev, DISCOVERY_STARTING);
3544         queue_work(hdev->req_workqueue, &hdev->discov_update);
3545         err = 0;
3546
3547 failed:
3548         hci_dev_unlock(hdev);
3549         return err;
3550 }
3551
3552 static int start_discovery(struct sock *sk, struct hci_dev *hdev,
3553                            void *data, u16 len)
3554 {
3555         return start_discovery_internal(sk, hdev, MGMT_OP_START_DISCOVERY,
3556                                         data, len);
3557 }
3558
3559 static int start_limited_discovery(struct sock *sk, struct hci_dev *hdev,
3560                                    void *data, u16 len)
3561 {
3562         return start_discovery_internal(sk, hdev,
3563                                         MGMT_OP_START_LIMITED_DISCOVERY,
3564                                         data, len);
3565 }
3566
3567 static int service_discovery_cmd_complete(struct mgmt_pending_cmd *cmd,
3568                                           u8 status)
3569 {
3570         return mgmt_cmd_complete(cmd->sk, cmd->index, cmd->opcode, status,
3571                                  cmd->param, 1);
3572 }
3573
3574 static int start_service_discovery(struct sock *sk, struct hci_dev *hdev,
3575                                    void *data, u16 len)
3576 {
3577         struct mgmt_cp_start_service_discovery *cp = data;
3578         struct mgmt_pending_cmd *cmd;
3579         const u16 max_uuid_count = ((U16_MAX - sizeof(*cp)) / 16);
3580         u16 uuid_count, expected_len;
3581         u8 status;
3582         int err;
3583
3584         BT_DBG("%s", hdev->name);
3585
3586         hci_dev_lock(hdev);
3587
3588         if (!hdev_is_powered(hdev)) {
3589                 err = mgmt_cmd_complete(sk, hdev->id,
3590                                         MGMT_OP_START_SERVICE_DISCOVERY,
3591                                         MGMT_STATUS_NOT_POWERED,
3592                                         &cp->type, sizeof(cp->type));
3593                 goto failed;
3594         }
3595
3596         if (hdev->discovery.state != DISCOVERY_STOPPED ||
3597             hci_dev_test_flag(hdev, HCI_PERIODIC_INQ)) {
3598                 err = mgmt_cmd_complete(sk, hdev->id,
3599                                         MGMT_OP_START_SERVICE_DISCOVERY,
3600                                         MGMT_STATUS_BUSY, &cp->type,
3601                                         sizeof(cp->type));
3602                 goto failed;
3603         }
3604
3605         uuid_count = __le16_to_cpu(cp->uuid_count);
3606         if (uuid_count > max_uuid_count) {
3607                 BT_ERR("service_discovery: too big uuid_count value %u",
3608                        uuid_count);
3609                 err = mgmt_cmd_complete(sk, hdev->id,
3610                                         MGMT_OP_START_SERVICE_DISCOVERY,
3611                                         MGMT_STATUS_INVALID_PARAMS, &cp->type,
3612                                         sizeof(cp->type));
3613                 goto failed;
3614         }
3615
3616         expected_len = sizeof(*cp) + uuid_count * 16;
3617         if (expected_len != len) {
3618                 BT_ERR("service_discovery: expected %u bytes, got %u bytes",
3619                        expected_len, len);
3620                 err = mgmt_cmd_complete(sk, hdev->id,
3621                                         MGMT_OP_START_SERVICE_DISCOVERY,
3622                                         MGMT_STATUS_INVALID_PARAMS, &cp->type,
3623                                         sizeof(cp->type));
3624                 goto failed;
3625         }
3626
3627         if (!discovery_type_is_valid(hdev, cp->type, &status)) {
3628                 err = mgmt_cmd_complete(sk, hdev->id,
3629                                         MGMT_OP_START_SERVICE_DISCOVERY,
3630                                         status, &cp->type, sizeof(cp->type));
3631                 goto failed;
3632         }
3633
3634         cmd = mgmt_pending_add(sk, MGMT_OP_START_SERVICE_DISCOVERY,
3635                                hdev, data, len);
3636         if (!cmd) {
3637                 err = -ENOMEM;
3638                 goto failed;
3639         }
3640
3641         cmd->cmd_complete = service_discovery_cmd_complete;
3642
3643         /* Clear the discovery filter first to free any previously
3644          * allocated memory for the UUID list.
3645          */
3646         hci_discovery_filter_clear(hdev);
3647
3648         hdev->discovery.result_filtering = true;
3649         hdev->discovery.type = cp->type;
3650         hdev->discovery.rssi = cp->rssi;
3651         hdev->discovery.uuid_count = uuid_count;
3652
3653         if (uuid_count > 0) {
3654                 hdev->discovery.uuids = kmemdup(cp->uuids, uuid_count * 16,
3655                                                 GFP_KERNEL);
3656                 if (!hdev->discovery.uuids) {
3657                         err = mgmt_cmd_complete(sk, hdev->id,
3658                                                 MGMT_OP_START_SERVICE_DISCOVERY,
3659                                                 MGMT_STATUS_FAILED,
3660                                                 &cp->type, sizeof(cp->type));
3661                         mgmt_pending_remove(cmd);
3662                         goto failed;
3663                 }
3664         }
3665
3666         hci_discovery_set_state(hdev, DISCOVERY_STARTING);
3667         queue_work(hdev->req_workqueue, &hdev->discov_update);
3668         err = 0;
3669
3670 failed:
3671         hci_dev_unlock(hdev);
3672         return err;
3673 }
3674
3675 void mgmt_stop_discovery_complete(struct hci_dev *hdev, u8 status)
3676 {
3677         struct mgmt_pending_cmd *cmd;
3678
3679         BT_DBG("status %d", status);
3680
3681         hci_dev_lock(hdev);
3682
3683         cmd = pending_find(MGMT_OP_STOP_DISCOVERY, hdev);
3684         if (cmd) {
3685                 cmd->cmd_complete(cmd, mgmt_status(status));
3686                 mgmt_pending_remove(cmd);
3687         }
3688
3689         hci_dev_unlock(hdev);
3690 }
3691
3692 static int stop_discovery(struct sock *sk, struct hci_dev *hdev, void *data,
3693                           u16 len)
3694 {
3695         struct mgmt_cp_stop_discovery *mgmt_cp = data;
3696         struct mgmt_pending_cmd *cmd;
3697         int err;
3698
3699         BT_DBG("%s", hdev->name);
3700
3701         hci_dev_lock(hdev);
3702
3703         if (!hci_discovery_active(hdev)) {
3704                 err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_STOP_DISCOVERY,
3705                                         MGMT_STATUS_REJECTED, &mgmt_cp->type,
3706                                         sizeof(mgmt_cp->type));
3707                 goto unlock;
3708         }
3709
3710         if (hdev->discovery.type != mgmt_cp->type) {
3711                 err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_STOP_DISCOVERY,
3712                                         MGMT_STATUS_INVALID_PARAMS,
3713                                         &mgmt_cp->type, sizeof(mgmt_cp->type));
3714                 goto unlock;
3715         }
3716
3717         cmd = mgmt_pending_add(sk, MGMT_OP_STOP_DISCOVERY, hdev, data, len);
3718         if (!cmd) {
3719                 err = -ENOMEM;
3720                 goto unlock;
3721         }
3722
3723         cmd->cmd_complete = generic_cmd_complete;
3724
3725         hci_discovery_set_state(hdev, DISCOVERY_STOPPING);
3726         queue_work(hdev->req_workqueue, &hdev->discov_update);
3727         err = 0;
3728
3729 unlock:
3730         hci_dev_unlock(hdev);
3731         return err;
3732 }
3733
3734 static int confirm_name(struct sock *sk, struct hci_dev *hdev, void *data,
3735                         u16 len)
3736 {
3737         struct mgmt_cp_confirm_name *cp = data;
3738         struct inquiry_entry *e;
3739         int err;
3740
3741         BT_DBG("%s", hdev->name);
3742
3743         hci_dev_lock(hdev);
3744
3745         if (!hci_discovery_active(hdev)) {
3746                 err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_CONFIRM_NAME,
3747                                         MGMT_STATUS_FAILED, &cp->addr,
3748                                         sizeof(cp->addr));
3749                 goto failed;
3750         }
3751
3752         e = hci_inquiry_cache_lookup_unknown(hdev, &cp->addr.bdaddr);
3753         if (!e) {
3754                 err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_CONFIRM_NAME,
3755                                         MGMT_STATUS_INVALID_PARAMS, &cp->addr,
3756                                         sizeof(cp->addr));
3757                 goto failed;
3758         }
3759
3760         if (cp->name_known) {
3761                 e->name_state = NAME_KNOWN;
3762                 list_del(&e->list);
3763         } else {
3764                 e->name_state = NAME_NEEDED;
3765                 hci_inquiry_cache_update_resolve(hdev, e);
3766         }
3767
3768         err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_CONFIRM_NAME, 0,
3769                                 &cp->addr, sizeof(cp->addr));
3770
3771 failed:
3772         hci_dev_unlock(hdev);
3773         return err;
3774 }
3775
3776 static int block_device(struct sock *sk, struct hci_dev *hdev, void *data,
3777                         u16 len)
3778 {
3779         struct mgmt_cp_block_device *cp = data;
3780         u8 status;
3781         int err;
3782
3783         BT_DBG("%s", hdev->name);
3784
3785         if (!bdaddr_type_is_valid(cp->addr.type))
3786                 return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_BLOCK_DEVICE,
3787                                          MGMT_STATUS_INVALID_PARAMS,
3788                                          &cp->addr, sizeof(cp->addr));
3789
3790         hci_dev_lock(hdev);
3791
3792         err = hci_bdaddr_list_add(&hdev->blacklist, &cp->addr.bdaddr,
3793                                   cp->addr.type);
3794         if (err < 0) {
3795                 status = MGMT_STATUS_FAILED;
3796                 goto done;
3797         }
3798
3799         mgmt_event(MGMT_EV_DEVICE_BLOCKED, hdev, &cp->addr, sizeof(cp->addr),
3800                    sk);
3801         status = MGMT_STATUS_SUCCESS;
3802
3803 done:
3804         err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_BLOCK_DEVICE, status,
3805                                 &cp->addr, sizeof(cp->addr));
3806
3807         hci_dev_unlock(hdev);
3808
3809         return err;
3810 }
3811
3812 static int unblock_device(struct sock *sk, struct hci_dev *hdev, void *data,
3813                           u16 len)
3814 {
3815         struct mgmt_cp_unblock_device *cp = data;
3816         u8 status;
3817         int err;
3818
3819         BT_DBG("%s", hdev->name);
3820
3821         if (!bdaddr_type_is_valid(cp->addr.type))
3822                 return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_UNBLOCK_DEVICE,
3823                                          MGMT_STATUS_INVALID_PARAMS,
3824                                          &cp->addr, sizeof(cp->addr));
3825
3826         hci_dev_lock(hdev);
3827
3828         err = hci_bdaddr_list_del(&hdev->blacklist, &cp->addr.bdaddr,
3829                                   cp->addr.type);
3830         if (err < 0) {
3831                 status = MGMT_STATUS_INVALID_PARAMS;
3832                 goto done;
3833         }
3834
3835         mgmt_event(MGMT_EV_DEVICE_UNBLOCKED, hdev, &cp->addr, sizeof(cp->addr),
3836                    sk);
3837         status = MGMT_STATUS_SUCCESS;
3838
3839 done:
3840         err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_UNBLOCK_DEVICE, status,
3841                                 &cp->addr, sizeof(cp->addr));
3842
3843         hci_dev_unlock(hdev);
3844
3845         return err;
3846 }
3847
3848 static int set_device_id(struct sock *sk, struct hci_dev *hdev, void *data,
3849                          u16 len)
3850 {
3851         struct mgmt_cp_set_device_id *cp = data;
3852         struct hci_request req;
3853         int err;
3854         __u16 source;
3855
3856         BT_DBG("%s", hdev->name);
3857
3858         source = __le16_to_cpu(cp->source);
3859
3860         if (source > 0x0002)
3861                 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_DEVICE_ID,
3862                                        MGMT_STATUS_INVALID_PARAMS);
3863
3864         hci_dev_lock(hdev);
3865
3866         hdev->devid_source = source;
3867         hdev->devid_vendor = __le16_to_cpu(cp->vendor);
3868         hdev->devid_product = __le16_to_cpu(cp->product);
3869         hdev->devid_version = __le16_to_cpu(cp->version);
3870
3871         err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_SET_DEVICE_ID, 0,
3872                                 NULL, 0);
3873
3874         hci_req_init(&req, hdev);
3875         __hci_req_update_eir(&req);
3876         hci_req_run(&req, NULL);
3877
3878         hci_dev_unlock(hdev);
3879
3880         return err;
3881 }
3882
3883 static void enable_advertising_instance(struct hci_dev *hdev, u8 status,
3884                                         u16 opcode)
3885 {
3886         BT_DBG("status %d", status);
3887 }
3888
3889 static void set_advertising_complete(struct hci_dev *hdev, u8 status,
3890                                      u16 opcode)
3891 {
3892         struct cmd_lookup match = { NULL, hdev };
3893         struct hci_request req;
3894         u8 instance;
3895         struct adv_info *adv_instance;
3896         int err;
3897
3898         hci_dev_lock(hdev);
3899
3900         if (status) {
3901                 u8 mgmt_err = mgmt_status(status);
3902
3903                 mgmt_pending_foreach(MGMT_OP_SET_ADVERTISING, hdev,
3904                                      cmd_status_rsp, &mgmt_err);
3905                 goto unlock;
3906         }
3907
3908         if (hci_dev_test_flag(hdev, HCI_LE_ADV))
3909                 hci_dev_set_flag(hdev, HCI_ADVERTISING);
3910         else
3911                 hci_dev_clear_flag(hdev, HCI_ADVERTISING);
3912
3913         mgmt_pending_foreach(MGMT_OP_SET_ADVERTISING, hdev, settings_rsp,
3914                              &match);
3915
3916         new_settings(hdev, match.sk);
3917
3918         if (match.sk)
3919                 sock_put(match.sk);
3920
3921         /* If "Set Advertising" was just disabled and instance advertising was
3922          * set up earlier, then re-enable multi-instance advertising.
3923          */
3924         if (hci_dev_test_flag(hdev, HCI_ADVERTISING) ||
3925             list_empty(&hdev->adv_instances))
3926                 goto unlock;
3927
3928         instance = hdev->cur_adv_instance;
3929         if (!instance) {
3930                 adv_instance = list_first_entry_or_null(&hdev->adv_instances,
3931                                                         struct adv_info, list);
3932                 if (!adv_instance)
3933                         goto unlock;
3934
3935                 instance = adv_instance->instance;
3936         }
3937
3938         hci_req_init(&req, hdev);
3939
3940         err = __hci_req_schedule_adv_instance(&req, instance, true);
3941
3942         if (!err)
3943                 err = hci_req_run(&req, enable_advertising_instance);
3944
3945         if (err)
3946                 BT_ERR("Failed to re-configure advertising");
3947
3948 unlock:
3949         hci_dev_unlock(hdev);
3950 }
3951
3952 static int set_advertising(struct sock *sk, struct hci_dev *hdev, void *data,
3953                            u16 len)
3954 {
3955         struct mgmt_mode *cp = data;
3956         struct mgmt_pending_cmd *cmd;
3957         struct hci_request req;
3958         u8 val, status;
3959         int err;
3960
3961         BT_DBG("request for %s", hdev->name);
3962
3963         status = mgmt_le_support(hdev);
3964         if (status)
3965                 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_ADVERTISING,
3966                                        status);
3967
3968         if (cp->val != 0x00 && cp->val != 0x01 && cp->val != 0x02)
3969                 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_ADVERTISING,
3970                                        MGMT_STATUS_INVALID_PARAMS);
3971
3972         hci_dev_lock(hdev);
3973
3974         val = !!cp->val;
3975
3976         /* The following conditions are ones which mean that we should
3977          * not do any HCI communication but directly send a mgmt
3978          * response to user space (after toggling the flag if
3979          * necessary).
3980          */
3981         if (!hdev_is_powered(hdev) ||
3982             (val == hci_dev_test_flag(hdev, HCI_ADVERTISING) &&
3983              (cp->val == 0x02) == hci_dev_test_flag(hdev, HCI_ADVERTISING_CONNECTABLE)) ||
3984             hci_conn_num(hdev, LE_LINK) > 0 ||
3985             (hci_dev_test_flag(hdev, HCI_LE_SCAN) &&
3986              hdev->le_scan_type == LE_SCAN_ACTIVE)) {
3987                 bool changed;
3988
3989                 if (cp->val) {
3990                         hdev->cur_adv_instance = 0x00;
3991                         changed = !hci_dev_test_and_set_flag(hdev, HCI_ADVERTISING);
3992                         if (cp->val == 0x02)
3993                                 hci_dev_set_flag(hdev, HCI_ADVERTISING_CONNECTABLE);
3994                         else
3995                                 hci_dev_clear_flag(hdev, HCI_ADVERTISING_CONNECTABLE);
3996                 } else {
3997                         changed = hci_dev_test_and_clear_flag(hdev, HCI_ADVERTISING);
3998                         hci_dev_clear_flag(hdev, HCI_ADVERTISING_CONNECTABLE);
3999                 }
4000
4001                 err = send_settings_rsp(sk, MGMT_OP_SET_ADVERTISING, hdev);
4002                 if (err < 0)
4003                         goto unlock;
4004
4005                 if (changed)
4006                         err = new_settings(hdev, sk);
4007
4008                 goto unlock;
4009         }
4010
4011         if (pending_find(MGMT_OP_SET_ADVERTISING, hdev) ||
4012             pending_find(MGMT_OP_SET_LE, hdev)) {
4013                 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_ADVERTISING,
4014                                       MGMT_STATUS_BUSY);
4015                 goto unlock;
4016         }
4017
4018         cmd = mgmt_pending_add(sk, MGMT_OP_SET_ADVERTISING, hdev, data, len);
4019         if (!cmd) {
4020                 err = -ENOMEM;
4021                 goto unlock;
4022         }
4023
4024         hci_req_init(&req, hdev);
4025
4026         if (cp->val == 0x02)
4027                 hci_dev_set_flag(hdev, HCI_ADVERTISING_CONNECTABLE);
4028         else
4029                 hci_dev_clear_flag(hdev, HCI_ADVERTISING_CONNECTABLE);
4030
4031         cancel_adv_timeout(hdev);
4032
4033         if (val) {
4034                 /* Switch to instance "0" for the Set Advertising setting.
4035                  * We cannot use update_[adv|scan_rsp]_data() here as the
4036                  * HCI_ADVERTISING flag is not yet set.
4037                  */
4038                 hdev->cur_adv_instance = 0x00;
4039                 __hci_req_update_adv_data(&req, 0x00);
4040                 __hci_req_update_scan_rsp_data(&req, 0x00);
4041                 __hci_req_enable_advertising(&req);
4042         } else {
4043                 __hci_req_disable_advertising(&req);
4044         }
4045
4046         err = hci_req_run(&req, set_advertising_complete);
4047         if (err < 0)
4048                 mgmt_pending_remove(cmd);
4049
4050 unlock:
4051         hci_dev_unlock(hdev);
4052         return err;
4053 }
4054
4055 static int set_static_address(struct sock *sk, struct hci_dev *hdev,
4056                               void *data, u16 len)
4057 {
4058         struct mgmt_cp_set_static_address *cp = data;
4059         int err;
4060
4061         BT_DBG("%s", hdev->name);
4062
4063         if (!lmp_le_capable(hdev))
4064                 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_STATIC_ADDRESS,
4065                                        MGMT_STATUS_NOT_SUPPORTED);
4066
4067         if (hdev_is_powered(hdev))
4068                 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_STATIC_ADDRESS,
4069                                        MGMT_STATUS_REJECTED);
4070
4071         if (bacmp(&cp->bdaddr, BDADDR_ANY)) {
4072                 if (!bacmp(&cp->bdaddr, BDADDR_NONE))
4073                         return mgmt_cmd_status(sk, hdev->id,
4074                                                MGMT_OP_SET_STATIC_ADDRESS,
4075                                                MGMT_STATUS_INVALID_PARAMS);
4076
4077                 /* Two most significant bits shall be set */
4078                 if ((cp->bdaddr.b[5] & 0xc0) != 0xc0)
4079                         return mgmt_cmd_status(sk, hdev->id,
4080                                                MGMT_OP_SET_STATIC_ADDRESS,
4081                                                MGMT_STATUS_INVALID_PARAMS);
4082         }
4083
4084         hci_dev_lock(hdev);
4085
4086         bacpy(&hdev->static_addr, &cp->bdaddr);
4087
4088         err = send_settings_rsp(sk, MGMT_OP_SET_STATIC_ADDRESS, hdev);
4089         if (err < 0)
4090                 goto unlock;
4091
4092         err = new_settings(hdev, sk);
4093
4094 unlock:
4095         hci_dev_unlock(hdev);
4096         return err;
4097 }
4098
4099 static int set_scan_params(struct sock *sk, struct hci_dev *hdev,
4100                            void *data, u16 len)
4101 {
4102         struct mgmt_cp_set_scan_params *cp = data;
4103         __u16 interval, window;
4104         int err;
4105
4106         BT_DBG("%s", hdev->name);
4107
4108         if (!lmp_le_capable(hdev))
4109                 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_SCAN_PARAMS,
4110                                        MGMT_STATUS_NOT_SUPPORTED);
4111
4112         interval = __le16_to_cpu(cp->interval);
4113
4114         if (interval < 0x0004 || interval > 0x4000)
4115                 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_SCAN_PARAMS,
4116                                        MGMT_STATUS_INVALID_PARAMS);
4117
4118         window = __le16_to_cpu(cp->window);
4119
4120         if (window < 0x0004 || window > 0x4000)
4121                 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_SCAN_PARAMS,
4122                                        MGMT_STATUS_INVALID_PARAMS);
4123
4124         if (window > interval)
4125                 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_SCAN_PARAMS,
4126                                        MGMT_STATUS_INVALID_PARAMS);
4127
4128         hci_dev_lock(hdev);
4129
4130         hdev->le_scan_interval = interval;
4131         hdev->le_scan_window = window;
4132
4133         err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_SET_SCAN_PARAMS, 0,
4134                                 NULL, 0);
4135
4136         /* If background scan is running, restart it so new parameters are
4137          * loaded.
4138          */
4139         if (hci_dev_test_flag(hdev, HCI_LE_SCAN) &&
4140             hdev->discovery.state == DISCOVERY_STOPPED) {
4141                 struct hci_request req;
4142
4143                 hci_req_init(&req, hdev);
4144
4145                 hci_req_add_le_scan_disable(&req);
4146                 hci_req_add_le_passive_scan(&req);
4147
4148                 hci_req_run(&req, NULL);
4149         }
4150
4151         hci_dev_unlock(hdev);
4152
4153         return err;
4154 }
4155
4156 static void fast_connectable_complete(struct hci_dev *hdev, u8 status,
4157                                       u16 opcode)
4158 {
4159         struct mgmt_pending_cmd *cmd;
4160
4161         BT_DBG("status 0x%02x", status);
4162
4163         hci_dev_lock(hdev);
4164
4165         cmd = pending_find(MGMT_OP_SET_FAST_CONNECTABLE, hdev);
4166         if (!cmd)
4167                 goto unlock;
4168
4169         if (status) {
4170                 mgmt_cmd_status(cmd->sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE,
4171                                 mgmt_status(status));
4172         } else {
4173                 struct mgmt_mode *cp = cmd->param;
4174
4175                 if (cp->val)
4176                         hci_dev_set_flag(hdev, HCI_FAST_CONNECTABLE);
4177                 else
4178                         hci_dev_clear_flag(hdev, HCI_FAST_CONNECTABLE);
4179
4180                 send_settings_rsp(cmd->sk, MGMT_OP_SET_FAST_CONNECTABLE, hdev);
4181                 new_settings(hdev, cmd->sk);
4182         }
4183
4184         mgmt_pending_remove(cmd);
4185
4186 unlock:
4187         hci_dev_unlock(hdev);
4188 }
4189
4190 static int set_fast_connectable(struct sock *sk, struct hci_dev *hdev,
4191                                 void *data, u16 len)
4192 {
4193         struct mgmt_mode *cp = data;
4194         struct mgmt_pending_cmd *cmd;
4195         struct hci_request req;
4196         int err;
4197
4198         BT_DBG("%s", hdev->name);
4199
4200         if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED) ||
4201             hdev->hci_ver < BLUETOOTH_VER_1_2)
4202                 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE,
4203                                        MGMT_STATUS_NOT_SUPPORTED);
4204
4205         if (cp->val != 0x00 && cp->val != 0x01)
4206                 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE,
4207                                        MGMT_STATUS_INVALID_PARAMS);
4208
4209         hci_dev_lock(hdev);
4210
4211         if (pending_find(MGMT_OP_SET_FAST_CONNECTABLE, hdev)) {
4212                 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE,
4213                                       MGMT_STATUS_BUSY);
4214                 goto unlock;
4215         }
4216
4217         if (!!cp->val == hci_dev_test_flag(hdev, HCI_FAST_CONNECTABLE)) {
4218                 err = send_settings_rsp(sk, MGMT_OP_SET_FAST_CONNECTABLE,
4219                                         hdev);
4220                 goto unlock;
4221         }
4222
4223         if (!hdev_is_powered(hdev)) {
4224                 hci_dev_change_flag(hdev, HCI_FAST_CONNECTABLE);
4225                 err = send_settings_rsp(sk, MGMT_OP_SET_FAST_CONNECTABLE,
4226                                         hdev);
4227                 new_settings(hdev, sk);
4228                 goto unlock;
4229         }
4230
4231         cmd = mgmt_pending_add(sk, MGMT_OP_SET_FAST_CONNECTABLE, hdev,
4232                                data, len);
4233         if (!cmd) {
4234                 err = -ENOMEM;
4235                 goto unlock;
4236         }
4237
4238         hci_req_init(&req, hdev);
4239
4240         __hci_req_write_fast_connectable(&req, cp->val);
4241
4242         err = hci_req_run(&req, fast_connectable_complete);
4243         if (err < 0) {
4244                 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE,
4245                                       MGMT_STATUS_FAILED);
4246                 mgmt_pending_remove(cmd);
4247         }
4248
4249 unlock:
4250         hci_dev_unlock(hdev);
4251
4252         return err;
4253 }
4254
4255 static void set_bredr_complete(struct hci_dev *hdev, u8 status, u16 opcode)
4256 {
4257         struct mgmt_pending_cmd *cmd;
4258
4259         BT_DBG("status 0x%02x", status);
4260
4261         hci_dev_lock(hdev);
4262
4263         cmd = pending_find(MGMT_OP_SET_BREDR, hdev);
4264         if (!cmd)
4265                 goto unlock;
4266
4267         if (status) {
4268                 u8 mgmt_err = mgmt_status(status);
4269
4270                 /* We need to restore the flag if related HCI commands
4271                  * failed.
4272                  */
4273                 hci_dev_clear_flag(hdev, HCI_BREDR_ENABLED);
4274
4275                 mgmt_cmd_status(cmd->sk, cmd->index, cmd->opcode, mgmt_err);
4276         } else {
4277                 send_settings_rsp(cmd->sk, MGMT_OP_SET_BREDR, hdev);
4278                 new_settings(hdev, cmd->sk);
4279         }
4280
4281         mgmt_pending_remove(cmd);
4282
4283 unlock:
4284         hci_dev_unlock(hdev);
4285 }
4286
4287 static int set_bredr(struct sock *sk, struct hci_dev *hdev, void *data, u16 len)
4288 {
4289         struct mgmt_mode *cp = data;
4290         struct mgmt_pending_cmd *cmd;
4291         struct hci_request req;
4292         int err;
4293
4294         BT_DBG("request for %s", hdev->name);
4295
4296         if (!lmp_bredr_capable(hdev) || !lmp_le_capable(hdev))
4297                 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_BREDR,
4298                                        MGMT_STATUS_NOT_SUPPORTED);
4299
4300         if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED))
4301                 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_BREDR,
4302                                        MGMT_STATUS_REJECTED);
4303
4304         if (cp->val != 0x00 && cp->val != 0x01)
4305                 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_BREDR,
4306                                        MGMT_STATUS_INVALID_PARAMS);
4307
4308         hci_dev_lock(hdev);
4309
4310         if (cp->val == hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) {
4311                 err = send_settings_rsp(sk, MGMT_OP_SET_BREDR, hdev);
4312                 goto unlock;
4313         }
4314
4315         if (!hdev_is_powered(hdev)) {
4316                 if (!cp->val) {
4317                         hci_dev_clear_flag(hdev, HCI_DISCOVERABLE);
4318                         hci_dev_clear_flag(hdev, HCI_SSP_ENABLED);
4319                         hci_dev_clear_flag(hdev, HCI_LINK_SECURITY);
4320                         hci_dev_clear_flag(hdev, HCI_FAST_CONNECTABLE);
4321                         hci_dev_clear_flag(hdev, HCI_HS_ENABLED);
4322                 }
4323
4324                 hci_dev_change_flag(hdev, HCI_BREDR_ENABLED);
4325
4326                 err = send_settings_rsp(sk, MGMT_OP_SET_BREDR, hdev);
4327                 if (err < 0)
4328                         goto unlock;
4329
4330                 err = new_settings(hdev, sk);
4331                 goto unlock;
4332         }
4333
4334         /* Reject disabling when powered on */
4335         if (!cp->val) {
4336                 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_BREDR,
4337                                       MGMT_STATUS_REJECTED);
4338                 goto unlock;
4339         } else {
4340                 /* When configuring a dual-mode controller to operate
4341                  * with LE only and using a static address, then switching
4342                  * BR/EDR back on is not allowed.
4343                  *
4344                  * Dual-mode controllers shall operate with the public
4345                  * address as its identity address for BR/EDR and LE. So
4346                  * reject the attempt to create an invalid configuration.
4347                  *
4348                  * The same restrictions applies when secure connections
4349                  * has been enabled. For BR/EDR this is a controller feature
4350                  * while for LE it is a host stack feature. This means that
4351                  * switching BR/EDR back on when secure connections has been
4352                  * enabled is not a supported transaction.
4353                  */
4354                 if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED) &&
4355                     (bacmp(&hdev->static_addr, BDADDR_ANY) ||
4356                      hci_dev_test_flag(hdev, HCI_SC_ENABLED))) {
4357                         err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_BREDR,
4358                                               MGMT_STATUS_REJECTED);
4359                         goto unlock;
4360                 }
4361         }
4362
4363         if (pending_find(MGMT_OP_SET_BREDR, hdev)) {
4364                 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_BREDR,
4365                                       MGMT_STATUS_BUSY);
4366                 goto unlock;
4367         }
4368
4369         cmd = mgmt_pending_add(sk, MGMT_OP_SET_BREDR, hdev, data, len);
4370         if (!cmd) {
4371                 err = -ENOMEM;
4372                 goto unlock;
4373         }
4374
4375         /* We need to flip the bit already here so that
4376          * hci_req_update_adv_data generates the correct flags.
4377          */
4378         hci_dev_set_flag(hdev, HCI_BREDR_ENABLED);
4379
4380         hci_req_init(&req, hdev);
4381
4382         __hci_req_write_fast_connectable(&req, false);
4383         __hci_req_update_scan(&req);
4384
4385         /* Since only the advertising data flags will change, there
4386          * is no need to update the scan response data.
4387          */
4388         __hci_req_update_adv_data(&req, hdev->cur_adv_instance);
4389
4390         err = hci_req_run(&req, set_bredr_complete);
4391         if (err < 0)
4392                 mgmt_pending_remove(cmd);
4393
4394 unlock:
4395         hci_dev_unlock(hdev);
4396         return err;
4397 }
4398
4399 static void sc_enable_complete(struct hci_dev *hdev, u8 status, u16 opcode)
4400 {
4401         struct mgmt_pending_cmd *cmd;
4402         struct mgmt_mode *cp;
4403
4404         BT_DBG("%s status %u", hdev->name, status);
4405
4406         hci_dev_lock(hdev);
4407
4408         cmd = pending_find(MGMT_OP_SET_SECURE_CONN, hdev);
4409         if (!cmd)
4410                 goto unlock;
4411
4412         if (status) {
4413                 mgmt_cmd_status(cmd->sk, cmd->index, cmd->opcode,
4414                                 mgmt_status(status));
4415                 goto remove;
4416         }
4417
4418         cp = cmd->param;
4419
4420         switch (cp->val) {
4421         case 0x00:
4422                 hci_dev_clear_flag(hdev, HCI_SC_ENABLED);
4423                 hci_dev_clear_flag(hdev, HCI_SC_ONLY);
4424                 break;
4425         case 0x01:
4426                 hci_dev_set_flag(hdev, HCI_SC_ENABLED);
4427                 hci_dev_clear_flag(hdev, HCI_SC_ONLY);
4428                 break;
4429         case 0x02:
4430                 hci_dev_set_flag(hdev, HCI_SC_ENABLED);
4431                 hci_dev_set_flag(hdev, HCI_SC_ONLY);
4432                 break;
4433         }
4434
4435         send_settings_rsp(cmd->sk, MGMT_OP_SET_SECURE_CONN, hdev);
4436         new_settings(hdev, cmd->sk);
4437
4438 remove:
4439         mgmt_pending_remove(cmd);
4440 unlock:
4441         hci_dev_unlock(hdev);
4442 }
4443
4444 static int set_secure_conn(struct sock *sk, struct hci_dev *hdev,
4445                            void *data, u16 len)
4446 {
4447         struct mgmt_mode *cp = data;
4448         struct mgmt_pending_cmd *cmd;
4449         struct hci_request req;
4450         u8 val;
4451         int err;
4452
4453         BT_DBG("request for %s", hdev->name);
4454
4455         if (!lmp_sc_capable(hdev) &&
4456             !hci_dev_test_flag(hdev, HCI_LE_ENABLED))
4457                 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_SECURE_CONN,
4458                                        MGMT_STATUS_NOT_SUPPORTED);
4459
4460         if (hci_dev_test_flag(hdev, HCI_BREDR_ENABLED) &&
4461             lmp_sc_capable(hdev) &&
4462             !hci_dev_test_flag(hdev, HCI_SSP_ENABLED))
4463                 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_SECURE_CONN,
4464                                        MGMT_STATUS_REJECTED);
4465
4466         if (cp->val != 0x00 && cp->val != 0x01 && cp->val != 0x02)
4467                 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_SECURE_CONN,
4468                                   MGMT_STATUS_INVALID_PARAMS);
4469
4470         hci_dev_lock(hdev);
4471
4472         if (!hdev_is_powered(hdev) || !lmp_sc_capable(hdev) ||
4473             !hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) {
4474                 bool changed;
4475
4476                 if (cp->val) {
4477                         changed = !hci_dev_test_and_set_flag(hdev,
4478                                                              HCI_SC_ENABLED);
4479                         if (cp->val == 0x02)
4480                                 hci_dev_set_flag(hdev, HCI_SC_ONLY);
4481                         else
4482                                 hci_dev_clear_flag(hdev, HCI_SC_ONLY);
4483                 } else {
4484                         changed = hci_dev_test_and_clear_flag(hdev,
4485                                                               HCI_SC_ENABLED);
4486                         hci_dev_clear_flag(hdev, HCI_SC_ONLY);
4487                 }
4488
4489                 err = send_settings_rsp(sk, MGMT_OP_SET_SECURE_CONN, hdev);
4490                 if (err < 0)
4491                         goto failed;
4492
4493                 if (changed)
4494                         err = new_settings(hdev, sk);
4495
4496                 goto failed;
4497         }
4498
4499         if (pending_find(MGMT_OP_SET_SECURE_CONN, hdev)) {
4500                 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_SECURE_CONN,
4501                                       MGMT_STATUS_BUSY);
4502                 goto failed;
4503         }
4504
4505         val = !!cp->val;
4506
4507         if (val == hci_dev_test_flag(hdev, HCI_SC_ENABLED) &&
4508             (cp->val == 0x02) == hci_dev_test_flag(hdev, HCI_SC_ONLY)) {
4509                 err = send_settings_rsp(sk, MGMT_OP_SET_SECURE_CONN, hdev);
4510                 goto failed;
4511         }
4512
4513         cmd = mgmt_pending_add(sk, MGMT_OP_SET_SECURE_CONN, hdev, data, len);
4514         if (!cmd) {
4515                 err = -ENOMEM;
4516                 goto failed;
4517         }
4518
4519         hci_req_init(&req, hdev);
4520         hci_req_add(&req, HCI_OP_WRITE_SC_SUPPORT, 1, &val);
4521         err = hci_req_run(&req, sc_enable_complete);
4522         if (err < 0) {
4523                 mgmt_pending_remove(cmd);
4524                 goto failed;
4525         }
4526
4527 failed:
4528         hci_dev_unlock(hdev);
4529         return err;
4530 }
4531
4532 static int set_debug_keys(struct sock *sk, struct hci_dev *hdev,
4533                           void *data, u16 len)
4534 {
4535         struct mgmt_mode *cp = data;
4536         bool changed, use_changed;
4537         int err;
4538
4539         BT_DBG("request for %s", hdev->name);
4540
4541         if (cp->val != 0x00 && cp->val != 0x01 && cp->val != 0x02)
4542                 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_DEBUG_KEYS,
4543                                        MGMT_STATUS_INVALID_PARAMS);
4544
4545         hci_dev_lock(hdev);
4546
4547         if (cp->val)
4548                 changed = !hci_dev_test_and_set_flag(hdev, HCI_KEEP_DEBUG_KEYS);
4549         else
4550                 changed = hci_dev_test_and_clear_flag(hdev,
4551                                                       HCI_KEEP_DEBUG_KEYS);
4552
4553         if (cp->val == 0x02)
4554                 use_changed = !hci_dev_test_and_set_flag(hdev,
4555                                                          HCI_USE_DEBUG_KEYS);
4556         else
4557                 use_changed = hci_dev_test_and_clear_flag(hdev,
4558                                                           HCI_USE_DEBUG_KEYS);
4559
4560         if (hdev_is_powered(hdev) && use_changed &&
4561             hci_dev_test_flag(hdev, HCI_SSP_ENABLED)) {
4562                 u8 mode = (cp->val == 0x02) ? 0x01 : 0x00;
4563                 hci_send_cmd(hdev, HCI_OP_WRITE_SSP_DEBUG_MODE,
4564                              sizeof(mode), &mode);
4565         }
4566
4567         err = send_settings_rsp(sk, MGMT_OP_SET_DEBUG_KEYS, hdev);
4568         if (err < 0)
4569                 goto unlock;
4570
4571         if (changed)
4572                 err = new_settings(hdev, sk);
4573
4574 unlock:
4575         hci_dev_unlock(hdev);
4576         return err;
4577 }
4578
4579 static int set_privacy(struct sock *sk, struct hci_dev *hdev, void *cp_data,
4580                        u16 len)
4581 {
4582         struct mgmt_cp_set_privacy *cp = cp_data;
4583         bool changed;
4584         int err;
4585
4586         BT_DBG("request for %s", hdev->name);
4587
4588         if (!lmp_le_capable(hdev))
4589                 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_PRIVACY,
4590                                        MGMT_STATUS_NOT_SUPPORTED);
4591
4592         if (cp->privacy != 0x00 && cp->privacy != 0x01 && cp->privacy != 0x02)
4593                 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_PRIVACY,
4594                                        MGMT_STATUS_INVALID_PARAMS);
4595
4596         if (hdev_is_powered(hdev))
4597                 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_PRIVACY,
4598                                        MGMT_STATUS_REJECTED);
4599
4600         hci_dev_lock(hdev);
4601
4602         /* If user space supports this command it is also expected to
4603          * handle IRKs. Therefore, set the HCI_RPA_RESOLVING flag.
4604          */
4605         hci_dev_set_flag(hdev, HCI_RPA_RESOLVING);
4606
4607         if (cp->privacy) {
4608                 changed = !hci_dev_test_and_set_flag(hdev, HCI_PRIVACY);
4609                 memcpy(hdev->irk, cp->irk, sizeof(hdev->irk));
4610                 hci_dev_set_flag(hdev, HCI_RPA_EXPIRED);
4611                 if (cp->privacy == 0x02)
4612                         hci_dev_set_flag(hdev, HCI_LIMITED_PRIVACY);
4613                 else
4614                         hci_dev_clear_flag(hdev, HCI_LIMITED_PRIVACY);
4615         } else {
4616                 changed = hci_dev_test_and_clear_flag(hdev, HCI_PRIVACY);
4617                 memset(hdev->irk, 0, sizeof(hdev->irk));
4618                 hci_dev_clear_flag(hdev, HCI_RPA_EXPIRED);
4619                 hci_dev_clear_flag(hdev, HCI_LIMITED_PRIVACY);
4620         }
4621
4622         err = send_settings_rsp(sk, MGMT_OP_SET_PRIVACY, hdev);
4623         if (err < 0)
4624                 goto unlock;
4625
4626         if (changed)
4627                 err = new_settings(hdev, sk);
4628
4629 unlock:
4630         hci_dev_unlock(hdev);
4631         return err;
4632 }
4633
4634 static bool irk_is_valid(struct mgmt_irk_info *irk)
4635 {
4636         switch (irk->addr.type) {
4637         case BDADDR_LE_PUBLIC:
4638                 return true;
4639
4640         case BDADDR_LE_RANDOM:
4641                 /* Two most significant bits shall be set */
4642                 if ((irk->addr.bdaddr.b[5] & 0xc0) != 0xc0)
4643                         return false;
4644                 return true;
4645         }
4646
4647         return false;
4648 }
4649
4650 static int load_irks(struct sock *sk, struct hci_dev *hdev, void *cp_data,
4651                      u16 len)
4652 {
4653         struct mgmt_cp_load_irks *cp = cp_data;
4654         const u16 max_irk_count = ((U16_MAX - sizeof(*cp)) /
4655                                    sizeof(struct mgmt_irk_info));
4656         u16 irk_count, expected_len;
4657         int i, err;
4658
4659         BT_DBG("request for %s", hdev->name);
4660
4661         if (!lmp_le_capable(hdev))
4662                 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_LOAD_IRKS,
4663                                        MGMT_STATUS_NOT_SUPPORTED);
4664
4665         irk_count = __le16_to_cpu(cp->irk_count);
4666         if (irk_count > max_irk_count) {
4667                 BT_ERR("load_irks: too big irk_count value %u", irk_count);
4668                 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_LOAD_IRKS,
4669                                        MGMT_STATUS_INVALID_PARAMS);
4670         }
4671
4672         expected_len = sizeof(*cp) + irk_count * sizeof(struct mgmt_irk_info);
4673         if (expected_len != len) {
4674                 BT_ERR("load_irks: expected %u bytes, got %u bytes",
4675                        expected_len, len);
4676                 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_LOAD_IRKS,
4677                                        MGMT_STATUS_INVALID_PARAMS);
4678         }
4679
4680         BT_DBG("%s irk_count %u", hdev->name, irk_count);
4681
4682         for (i = 0; i < irk_count; i++) {
4683                 struct mgmt_irk_info *key = &cp->irks[i];
4684
4685                 if (!irk_is_valid(key))
4686                         return mgmt_cmd_status(sk, hdev->id,
4687                                                MGMT_OP_LOAD_IRKS,
4688                                                MGMT_STATUS_INVALID_PARAMS);
4689         }
4690
4691         hci_dev_lock(hdev);
4692
4693         hci_smp_irks_clear(hdev);
4694
4695         for (i = 0; i < irk_count; i++) {
4696                 struct mgmt_irk_info *irk = &cp->irks[i];
4697
4698                 hci_add_irk(hdev, &irk->addr.bdaddr,
4699                             le_addr_type(irk->addr.type), irk->val,
4700                             BDADDR_ANY);
4701         }
4702
4703         hci_dev_set_flag(hdev, HCI_RPA_RESOLVING);
4704
4705         err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_LOAD_IRKS, 0, NULL, 0);
4706
4707         hci_dev_unlock(hdev);
4708
4709         return err;
4710 }
4711
4712 static bool ltk_is_valid(struct mgmt_ltk_info *key)
4713 {
4714         if (key->master != 0x00 && key->master != 0x01)
4715                 return false;
4716
4717         switch (key->addr.type) {
4718         case BDADDR_LE_PUBLIC:
4719                 return true;
4720
4721         case BDADDR_LE_RANDOM:
4722                 /* Two most significant bits shall be set */
4723                 if ((key->addr.bdaddr.b[5] & 0xc0) != 0xc0)
4724                         return false;
4725                 return true;
4726         }
4727
4728         return false;
4729 }
4730
4731 static int load_long_term_keys(struct sock *sk, struct hci_dev *hdev,
4732                                void *cp_data, u16 len)
4733 {
4734         struct mgmt_cp_load_long_term_keys *cp = cp_data;
4735         const u16 max_key_count = ((U16_MAX - sizeof(*cp)) /
4736                                    sizeof(struct mgmt_ltk_info));
4737         u16 key_count, expected_len;
4738         int i, err;
4739
4740         BT_DBG("request for %s", hdev->name);
4741
4742         if (!lmp_le_capable(hdev))
4743                 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_LOAD_LONG_TERM_KEYS,
4744                                        MGMT_STATUS_NOT_SUPPORTED);
4745
4746         key_count = __le16_to_cpu(cp->key_count);
4747         if (key_count > max_key_count) {
4748                 BT_ERR("load_ltks: too big key_count value %u", key_count);
4749                 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_LOAD_LONG_TERM_KEYS,
4750                                        MGMT_STATUS_INVALID_PARAMS);
4751         }
4752
4753         expected_len = sizeof(*cp) + key_count *
4754                                         sizeof(struct mgmt_ltk_info);
4755         if (expected_len != len) {
4756                 BT_ERR("load_keys: expected %u bytes, got %u bytes",
4757                        expected_len, len);
4758                 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_LOAD_LONG_TERM_KEYS,
4759                                        MGMT_STATUS_INVALID_PARAMS);
4760         }
4761
4762         BT_DBG("%s key_count %u", hdev->name, key_count);
4763
4764         for (i = 0; i < key_count; i++) {
4765                 struct mgmt_ltk_info *key = &cp->keys[i];
4766
4767                 if (!ltk_is_valid(key))
4768                         return mgmt_cmd_status(sk, hdev->id,
4769                                                MGMT_OP_LOAD_LONG_TERM_KEYS,
4770                                                MGMT_STATUS_INVALID_PARAMS);
4771         }
4772
4773         hci_dev_lock(hdev);
4774
4775         hci_smp_ltks_clear(hdev);
4776
4777         for (i = 0; i < key_count; i++) {
4778                 struct mgmt_ltk_info *key = &cp->keys[i];
4779                 u8 type, authenticated;
4780
4781                 switch (key->type) {
4782                 case MGMT_LTK_UNAUTHENTICATED:
4783                         authenticated = 0x00;
4784                         type = key->master ? SMP_LTK : SMP_LTK_SLAVE;
4785                         break;
4786                 case MGMT_LTK_AUTHENTICATED:
4787                         authenticated = 0x01;
4788                         type = key->master ? SMP_LTK : SMP_LTK_SLAVE;
4789                         break;
4790                 case MGMT_LTK_P256_UNAUTH:
4791                         authenticated = 0x00;
4792                         type = SMP_LTK_P256;
4793                         break;
4794                 case MGMT_LTK_P256_AUTH:
4795                         authenticated = 0x01;
4796                         type = SMP_LTK_P256;
4797                         break;
4798                 case MGMT_LTK_P256_DEBUG:
4799                         authenticated = 0x00;
4800                         type = SMP_LTK_P256_DEBUG;
4801                 default:
4802                         continue;
4803                 }
4804
4805                 hci_add_ltk(hdev, &key->addr.bdaddr,
4806                             le_addr_type(key->addr.type), type, authenticated,
4807                             key->val, key->enc_size, key->ediv, key->rand);
4808         }
4809
4810         err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_LOAD_LONG_TERM_KEYS, 0,
4811                            NULL, 0);
4812
4813         hci_dev_unlock(hdev);
4814
4815         return err;
4816 }
4817
4818 static int conn_info_cmd_complete(struct mgmt_pending_cmd *cmd, u8 status)
4819 {
4820         struct hci_conn *conn = cmd->user_data;
4821         struct mgmt_rp_get_conn_info rp;
4822         int err;
4823
4824         memcpy(&rp.addr, cmd->param, sizeof(rp.addr));
4825
4826         if (status == MGMT_STATUS_SUCCESS) {
4827                 rp.rssi = conn->rssi;
4828                 rp.tx_power = conn->tx_power;
4829                 rp.max_tx_power = conn->max_tx_power;
4830         } else {
4831                 rp.rssi = HCI_RSSI_INVALID;
4832                 rp.tx_power = HCI_TX_POWER_INVALID;
4833                 rp.max_tx_power = HCI_TX_POWER_INVALID;
4834         }
4835
4836         err = mgmt_cmd_complete(cmd->sk, cmd->index, MGMT_OP_GET_CONN_INFO,
4837                                 status, &rp, sizeof(rp));
4838
4839         hci_conn_drop(conn);
4840         hci_conn_put(conn);
4841
4842         return err;
4843 }
4844
4845 static void conn_info_refresh_complete(struct hci_dev *hdev, u8 hci_status,
4846                                        u16 opcode)
4847 {
4848         struct hci_cp_read_rssi *cp;
4849         struct mgmt_pending_cmd *cmd;
4850         struct hci_conn *conn;
4851         u16 handle;
4852         u8 status;
4853
4854         BT_DBG("status 0x%02x", hci_status);
4855
4856         hci_dev_lock(hdev);
4857
4858         /* Commands sent in request are either Read RSSI or Read Transmit Power
4859          * Level so we check which one was last sent to retrieve connection
4860          * handle.  Both commands have handle as first parameter so it's safe to
4861          * cast data on the same command struct.
4862          *
4863          * First command sent is always Read RSSI and we fail only if it fails.
4864          * In other case we simply override error to indicate success as we
4865          * already remembered if TX power value is actually valid.
4866          */
4867         cp = hci_sent_cmd_data(hdev, HCI_OP_READ_RSSI);
4868         if (!cp) {
4869                 cp = hci_sent_cmd_data(hdev, HCI_OP_READ_TX_POWER);
4870                 status = MGMT_STATUS_SUCCESS;
4871         } else {
4872                 status = mgmt_status(hci_status);
4873         }
4874
4875         if (!cp) {
4876                 BT_ERR("invalid sent_cmd in conn_info response");
4877                 goto unlock;
4878         }
4879
4880         handle = __le16_to_cpu(cp->handle);
4881         conn = hci_conn_hash_lookup_handle(hdev, handle);
4882         if (!conn) {
4883                 BT_ERR("unknown handle (%d) in conn_info response", handle);
4884                 goto unlock;
4885         }
4886
4887         cmd = pending_find_data(MGMT_OP_GET_CONN_INFO, hdev, conn);
4888         if (!cmd)
4889                 goto unlock;
4890
4891         cmd->cmd_complete(cmd, status);
4892         mgmt_pending_remove(cmd);
4893
4894 unlock:
4895         hci_dev_unlock(hdev);
4896 }
4897
4898 static int get_conn_info(struct sock *sk, struct hci_dev *hdev, void *data,
4899                          u16 len)
4900 {
4901         struct mgmt_cp_get_conn_info *cp = data;
4902         struct mgmt_rp_get_conn_info rp;
4903         struct hci_conn *conn;
4904         unsigned long conn_info_age;
4905         int err = 0;
4906
4907         BT_DBG("%s", hdev->name);
4908
4909         memset(&rp, 0, sizeof(rp));
4910         bacpy(&rp.addr.bdaddr, &cp->addr.bdaddr);
4911         rp.addr.type = cp->addr.type;
4912
4913         if (!bdaddr_type_is_valid(cp->addr.type))
4914                 return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_GET_CONN_INFO,
4915                                          MGMT_STATUS_INVALID_PARAMS,
4916                                          &rp, sizeof(rp));
4917
4918         hci_dev_lock(hdev);
4919
4920         if (!hdev_is_powered(hdev)) {
4921                 err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_GET_CONN_INFO,
4922                                         MGMT_STATUS_NOT_POWERED, &rp,
4923                                         sizeof(rp));
4924                 goto unlock;
4925         }
4926
4927         if (cp->addr.type == BDADDR_BREDR)
4928                 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK,
4929                                                &cp->addr.bdaddr);
4930         else
4931                 conn = hci_conn_hash_lookup_ba(hdev, LE_LINK, &cp->addr.bdaddr);
4932
4933         if (!conn || conn->state != BT_CONNECTED) {
4934                 err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_GET_CONN_INFO,
4935                                         MGMT_STATUS_NOT_CONNECTED, &rp,
4936                                         sizeof(rp));
4937                 goto unlock;
4938         }
4939
4940         if (pending_find_data(MGMT_OP_GET_CONN_INFO, hdev, conn)) {
4941                 err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_GET_CONN_INFO,
4942                                         MGMT_STATUS_BUSY, &rp, sizeof(rp));
4943                 goto unlock;
4944         }
4945
4946         /* To avoid client trying to guess when to poll again for information we
4947          * calculate conn info age as random value between min/max set in hdev.
4948          */
4949         conn_info_age = hdev->conn_info_min_age +
4950                         prandom_u32_max(hdev->conn_info_max_age -
4951                                         hdev->conn_info_min_age);
4952
4953         /* Query controller to refresh cached values if they are too old or were
4954          * never read.
4955          */
4956         if (time_after(jiffies, conn->conn_info_timestamp +
4957                        msecs_to_jiffies(conn_info_age)) ||
4958             !conn->conn_info_timestamp) {
4959                 struct hci_request req;
4960                 struct hci_cp_read_tx_power req_txp_cp;
4961                 struct hci_cp_read_rssi req_rssi_cp;
4962                 struct mgmt_pending_cmd *cmd;
4963
4964                 hci_req_init(&req, hdev);
4965                 req_rssi_cp.handle = cpu_to_le16(conn->handle);
4966                 hci_req_add(&req, HCI_OP_READ_RSSI, sizeof(req_rssi_cp),
4967                             &req_rssi_cp);
4968
4969                 /* For LE links TX power does not change thus we don't need to
4970                  * query for it once value is known.
4971                  */
4972                 if (!bdaddr_type_is_le(cp->addr.type) ||
4973                     conn->tx_power == HCI_TX_POWER_INVALID) {
4974                         req_txp_cp.handle = cpu_to_le16(conn->handle);
4975                         req_txp_cp.type = 0x00;
4976                         hci_req_add(&req, HCI_OP_READ_TX_POWER,
4977                                     sizeof(req_txp_cp), &req_txp_cp);
4978                 }
4979
4980                 /* Max TX power needs to be read only once per connection */
4981                 if (conn->max_tx_power == HCI_TX_POWER_INVALID) {
4982                         req_txp_cp.handle = cpu_to_le16(conn->handle);
4983                         req_txp_cp.type = 0x01;
4984                         hci_req_add(&req, HCI_OP_READ_TX_POWER,
4985                                     sizeof(req_txp_cp), &req_txp_cp);
4986                 }
4987
4988                 err = hci_req_run(&req, conn_info_refresh_complete);
4989                 if (err < 0)
4990                         goto unlock;
4991
4992                 cmd = mgmt_pending_add(sk, MGMT_OP_GET_CONN_INFO, hdev,
4993                                        data, len);
4994                 if (!cmd) {
4995                         err = -ENOMEM;
4996                         goto unlock;
4997                 }
4998
4999                 hci_conn_hold(conn);
5000                 cmd->user_data = hci_conn_get(conn);
5001                 cmd->cmd_complete = conn_info_cmd_complete;
5002
5003                 conn->conn_info_timestamp = jiffies;
5004         } else {
5005                 /* Cache is valid, just reply with values cached in hci_conn */
5006                 rp.rssi = conn->rssi;
5007                 rp.tx_power = conn->tx_power;
5008                 rp.max_tx_power = conn->max_tx_power;
5009
5010                 err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_GET_CONN_INFO,
5011                                         MGMT_STATUS_SUCCESS, &rp, sizeof(rp));
5012         }
5013
5014 unlock:
5015         hci_dev_unlock(hdev);
5016         return err;
5017 }
5018
5019 static int clock_info_cmd_complete(struct mgmt_pending_cmd *cmd, u8 status)
5020 {
5021         struct hci_conn *conn = cmd->user_data;
5022         struct mgmt_rp_get_clock_info rp;
5023         struct hci_dev *hdev;
5024         int err;
5025
5026         memset(&rp, 0, sizeof(rp));
5027         memcpy(&rp.addr, cmd->param, sizeof(rp.addr));
5028
5029         if (status)
5030                 goto complete;
5031
5032         hdev = hci_dev_get(cmd->index);
5033         if (hdev) {
5034                 rp.local_clock = cpu_to_le32(hdev->clock);
5035                 hci_dev_put(hdev);
5036         }
5037
5038         if (conn) {
5039                 rp.piconet_clock = cpu_to_le32(conn->clock);
5040                 rp.accuracy = cpu_to_le16(conn->clock_accuracy);
5041         }
5042
5043 complete:
5044         err = mgmt_cmd_complete(cmd->sk, cmd->index, cmd->opcode, status, &rp,
5045                                 sizeof(rp));
5046
5047         if (conn) {
5048                 hci_conn_drop(conn);
5049                 hci_conn_put(conn);
5050         }
5051
5052         return err;
5053 }
5054
5055 static void get_clock_info_complete(struct hci_dev *hdev, u8 status, u16 opcode)
5056 {
5057         struct hci_cp_read_clock *hci_cp;
5058         struct mgmt_pending_cmd *cmd;
5059         struct hci_conn *conn;
5060
5061         BT_DBG("%s status %u", hdev->name, status);
5062
5063         hci_dev_lock(hdev);
5064
5065         hci_cp = hci_sent_cmd_data(hdev, HCI_OP_READ_CLOCK);
5066         if (!hci_cp)
5067                 goto unlock;
5068
5069         if (hci_cp->which) {
5070                 u16 handle = __le16_to_cpu(hci_cp->handle);
5071                 conn = hci_conn_hash_lookup_handle(hdev, handle);
5072         } else {
5073                 conn = NULL;
5074         }
5075
5076         cmd = pending_find_data(MGMT_OP_GET_CLOCK_INFO, hdev, conn);
5077         if (!cmd)
5078                 goto unlock;
5079
5080         cmd->cmd_complete(cmd, mgmt_status(status));
5081         mgmt_pending_remove(cmd);
5082
5083 unlock:
5084         hci_dev_unlock(hdev);
5085 }
5086
5087 static int get_clock_info(struct sock *sk, struct hci_dev *hdev, void *data,
5088                          u16 len)
5089 {
5090         struct mgmt_cp_get_clock_info *cp = data;
5091         struct mgmt_rp_get_clock_info rp;
5092         struct hci_cp_read_clock hci_cp;
5093         struct mgmt_pending_cmd *cmd;
5094         struct hci_request req;
5095         struct hci_conn *conn;
5096         int err;
5097
5098         BT_DBG("%s", hdev->name);
5099
5100         memset(&rp, 0, sizeof(rp));
5101         bacpy(&rp.addr.bdaddr, &cp->addr.bdaddr);
5102         rp.addr.type = cp->addr.type;
5103
5104         if (cp->addr.type != BDADDR_BREDR)
5105                 return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_GET_CLOCK_INFO,
5106                                          MGMT_STATUS_INVALID_PARAMS,
5107                                          &rp, sizeof(rp));
5108
5109         hci_dev_lock(hdev);
5110
5111         if (!hdev_is_powered(hdev)) {
5112                 err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_GET_CLOCK_INFO,
5113                                         MGMT_STATUS_NOT_POWERED, &rp,
5114                                         sizeof(rp));
5115                 goto unlock;
5116         }
5117
5118         if (bacmp(&cp->addr.bdaddr, BDADDR_ANY)) {
5119                 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK,
5120                                                &cp->addr.bdaddr);
5121                 if (!conn || conn->state != BT_CONNECTED) {
5122                         err = mgmt_cmd_complete(sk, hdev->id,
5123                                                 MGMT_OP_GET_CLOCK_INFO,
5124                                                 MGMT_STATUS_NOT_CONNECTED,
5125                                                 &rp, sizeof(rp));
5126                         goto unlock;
5127                 }
5128         } else {
5129                 conn = NULL;
5130         }
5131
5132         cmd = mgmt_pending_add(sk, MGMT_OP_GET_CLOCK_INFO, hdev, data, len);
5133         if (!cmd) {
5134                 err = -ENOMEM;
5135                 goto unlock;
5136         }
5137
5138         cmd->cmd_complete = clock_info_cmd_complete;
5139
5140         hci_req_init(&req, hdev);
5141
5142         memset(&hci_cp, 0, sizeof(hci_cp));
5143         hci_req_add(&req, HCI_OP_READ_CLOCK, sizeof(hci_cp), &hci_cp);
5144
5145         if (conn) {
5146                 hci_conn_hold(conn);
5147                 cmd->user_data = hci_conn_get(conn);
5148
5149                 hci_cp.handle = cpu_to_le16(conn->handle);
5150                 hci_cp.which = 0x01; /* Piconet clock */
5151                 hci_req_add(&req, HCI_OP_READ_CLOCK, sizeof(hci_cp), &hci_cp);
5152         }
5153
5154         err = hci_req_run(&req, get_clock_info_complete);
5155         if (err < 0)
5156                 mgmt_pending_remove(cmd);
5157
5158 unlock:
5159         hci_dev_unlock(hdev);
5160         return err;
5161 }
5162
5163 static bool is_connected(struct hci_dev *hdev, bdaddr_t *addr, u8 type)
5164 {
5165         struct hci_conn *conn;
5166
5167         conn = hci_conn_hash_lookup_ba(hdev, LE_LINK, addr);
5168         if (!conn)
5169                 return false;
5170
5171         if (conn->dst_type != type)
5172                 return false;
5173
5174         if (conn->state != BT_CONNECTED)
5175                 return false;
5176
5177         return true;
5178 }
5179
5180 /* This function requires the caller holds hdev->lock */
5181 static int hci_conn_params_set(struct hci_dev *hdev, bdaddr_t *addr,
5182                                u8 addr_type, u8 auto_connect)
5183 {
5184         struct hci_conn_params *params;
5185
5186         params = hci_conn_params_add(hdev, addr, addr_type);
5187         if (!params)
5188                 return -EIO;
5189
5190         if (params->auto_connect == auto_connect)
5191                 return 0;
5192
5193         list_del_init(&params->action);
5194
5195         switch (auto_connect) {
5196         case HCI_AUTO_CONN_DISABLED:
5197         case HCI_AUTO_CONN_LINK_LOSS:
5198                 /* If auto connect is being disabled when we're trying to
5199                  * connect to device, keep connecting.
5200                  */
5201                 if (params->explicit_connect)
5202                         list_add(&params->action, &hdev->pend_le_conns);
5203                 break;
5204         case HCI_AUTO_CONN_REPORT:
5205                 if (params->explicit_connect)
5206                         list_add(&params->action, &hdev->pend_le_conns);
5207                 else
5208                         list_add(&params->action, &hdev->pend_le_reports);
5209                 break;
5210         case HCI_AUTO_CONN_DIRECT:
5211         case HCI_AUTO_CONN_ALWAYS:
5212                 if (!is_connected(hdev, addr, addr_type))
5213                         list_add(&params->action, &hdev->pend_le_conns);
5214                 break;
5215         }
5216
5217         params->auto_connect = auto_connect;
5218
5219         BT_DBG("addr %pMR (type %u) auto_connect %u", addr, addr_type,
5220                auto_connect);
5221
5222         return 0;
5223 }
5224
5225 static void device_added(struct sock *sk, struct hci_dev *hdev,
5226                          bdaddr_t *bdaddr, u8 type, u8 action)
5227 {
5228         struct mgmt_ev_device_added ev;
5229
5230         bacpy(&ev.addr.bdaddr, bdaddr);
5231         ev.addr.type = type;
5232         ev.action = action;
5233
5234         mgmt_event(MGMT_EV_DEVICE_ADDED, hdev, &ev, sizeof(ev), sk);
5235 }
5236
5237 static int add_device(struct sock *sk, struct hci_dev *hdev,
5238                       void *data, u16 len)
5239 {
5240         struct mgmt_cp_add_device *cp = data;
5241         u8 auto_conn, addr_type;
5242         int err;
5243
5244         BT_DBG("%s", hdev->name);
5245
5246         if (!bdaddr_type_is_valid(cp->addr.type) ||
5247             !bacmp(&cp->addr.bdaddr, BDADDR_ANY))
5248                 return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_ADD_DEVICE,
5249                                          MGMT_STATUS_INVALID_PARAMS,
5250                                          &cp->addr, sizeof(cp->addr));
5251
5252         if (cp->action != 0x00 && cp->action != 0x01 && cp->action != 0x02)
5253                 return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_ADD_DEVICE,
5254                                          MGMT_STATUS_INVALID_PARAMS,
5255                                          &cp->addr, sizeof(cp->addr));
5256
5257         hci_dev_lock(hdev);
5258
5259         if (cp->addr.type == BDADDR_BREDR) {
5260                 /* Only incoming connections action is supported for now */
5261                 if (cp->action != 0x01) {
5262                         err = mgmt_cmd_complete(sk, hdev->id,
5263                                                 MGMT_OP_ADD_DEVICE,
5264                                                 MGMT_STATUS_INVALID_PARAMS,
5265                                                 &cp->addr, sizeof(cp->addr));
5266                         goto unlock;
5267                 }
5268
5269                 err = hci_bdaddr_list_add(&hdev->whitelist, &cp->addr.bdaddr,
5270                                           cp->addr.type);
5271                 if (err)
5272                         goto unlock;
5273
5274                 hci_req_update_scan(hdev);
5275
5276                 goto added;
5277         }
5278
5279         addr_type = le_addr_type(cp->addr.type);
5280
5281         if (cp->action == 0x02)
5282                 auto_conn = HCI_AUTO_CONN_ALWAYS;
5283         else if (cp->action == 0x01)
5284                 auto_conn = HCI_AUTO_CONN_DIRECT;
5285         else
5286                 auto_conn = HCI_AUTO_CONN_REPORT;
5287
5288         /* Kernel internally uses conn_params with resolvable private
5289          * address, but Add Device allows only identity addresses.
5290          * Make sure it is enforced before calling
5291          * hci_conn_params_lookup.
5292          */
5293         if (!hci_is_identity_address(&cp->addr.bdaddr, addr_type)) {
5294                 err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_ADD_DEVICE,
5295                                         MGMT_STATUS_INVALID_PARAMS,
5296                                         &cp->addr, sizeof(cp->addr));
5297                 goto unlock;
5298         }
5299
5300         /* If the connection parameters don't exist for this device,
5301          * they will be created and configured with defaults.
5302          */
5303         if (hci_conn_params_set(hdev, &cp->addr.bdaddr, addr_type,
5304                                 auto_conn) < 0) {
5305                 err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_ADD_DEVICE,
5306                                         MGMT_STATUS_FAILED, &cp->addr,
5307                                         sizeof(cp->addr));
5308                 goto unlock;
5309         }
5310
5311         hci_update_background_scan(hdev);
5312
5313 added:
5314         device_added(sk, hdev, &cp->addr.bdaddr, cp->addr.type, cp->action);
5315
5316         err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_ADD_DEVICE,
5317                                 MGMT_STATUS_SUCCESS, &cp->addr,
5318                                 sizeof(cp->addr));
5319
5320 unlock:
5321         hci_dev_unlock(hdev);
5322         return err;
5323 }
5324
5325 static void device_removed(struct sock *sk, struct hci_dev *hdev,
5326                            bdaddr_t *bdaddr, u8 type)
5327 {
5328         struct mgmt_ev_device_removed ev;
5329
5330         bacpy(&ev.addr.bdaddr, bdaddr);
5331         ev.addr.type = type;
5332
5333         mgmt_event(MGMT_EV_DEVICE_REMOVED, hdev, &ev, sizeof(ev), sk);
5334 }
5335
5336 static int remove_device(struct sock *sk, struct hci_dev *hdev,
5337                          void *data, u16 len)
5338 {
5339         struct mgmt_cp_remove_device *cp = data;
5340         int err;
5341
5342         BT_DBG("%s", hdev->name);
5343
5344         hci_dev_lock(hdev);
5345
5346         if (bacmp(&cp->addr.bdaddr, BDADDR_ANY)) {
5347                 struct hci_conn_params *params;
5348                 u8 addr_type;
5349
5350                 if (!bdaddr_type_is_valid(cp->addr.type)) {
5351                         err = mgmt_cmd_complete(sk, hdev->id,
5352                                                 MGMT_OP_REMOVE_DEVICE,
5353                                                 MGMT_STATUS_INVALID_PARAMS,
5354                                                 &cp->addr, sizeof(cp->addr));
5355                         goto unlock;
5356                 }
5357
5358                 if (cp->addr.type == BDADDR_BREDR) {
5359                         err = hci_bdaddr_list_del(&hdev->whitelist,
5360                                                   &cp->addr.bdaddr,
5361                                                   cp->addr.type);
5362                         if (err) {
5363                                 err = mgmt_cmd_complete(sk, hdev->id,
5364                                                         MGMT_OP_REMOVE_DEVICE,
5365                                                         MGMT_STATUS_INVALID_PARAMS,
5366                                                         &cp->addr,
5367                                                         sizeof(cp->addr));
5368                                 goto unlock;
5369                         }
5370
5371                         hci_req_update_scan(hdev);
5372
5373                         device_removed(sk, hdev, &cp->addr.bdaddr,
5374                                        cp->addr.type);
5375                         goto complete;
5376                 }
5377
5378                 addr_type = le_addr_type(cp->addr.type);
5379
5380                 /* Kernel internally uses conn_params with resolvable private
5381                  * address, but Remove Device allows only identity addresses.
5382                  * Make sure it is enforced before calling
5383                  * hci_conn_params_lookup.
5384                  */
5385                 if (!hci_is_identity_address(&cp->addr.bdaddr, addr_type)) {
5386                         err = mgmt_cmd_complete(sk, hdev->id,
5387                                                 MGMT_OP_REMOVE_DEVICE,
5388                                                 MGMT_STATUS_INVALID_PARAMS,
5389                                                 &cp->addr, sizeof(cp->addr));
5390                         goto unlock;
5391                 }
5392
5393                 params = hci_conn_params_lookup(hdev, &cp->addr.bdaddr,
5394                                                 addr_type);
5395                 if (!params) {
5396                         err = mgmt_cmd_complete(sk, hdev->id,
5397                                                 MGMT_OP_REMOVE_DEVICE,
5398                                                 MGMT_STATUS_INVALID_PARAMS,
5399                                                 &cp->addr, sizeof(cp->addr));
5400                         goto unlock;
5401                 }
5402
5403                 if (params->auto_connect == HCI_AUTO_CONN_DISABLED ||
5404                     params->auto_connect == HCI_AUTO_CONN_EXPLICIT) {
5405                         err = mgmt_cmd_complete(sk, hdev->id,
5406                                                 MGMT_OP_REMOVE_DEVICE,
5407                                                 MGMT_STATUS_INVALID_PARAMS,
5408                                                 &cp->addr, sizeof(cp->addr));
5409                         goto unlock;
5410                 }
5411
5412                 list_del(&params->action);
5413                 list_del(&params->list);
5414                 kfree(params);
5415                 hci_update_background_scan(hdev);
5416
5417                 device_removed(sk, hdev, &cp->addr.bdaddr, cp->addr.type);
5418         } else {
5419                 struct hci_conn_params *p, *tmp;
5420                 struct bdaddr_list *b, *btmp;
5421
5422                 if (cp->addr.type) {
5423                         err = mgmt_cmd_complete(sk, hdev->id,
5424                                                 MGMT_OP_REMOVE_DEVICE,
5425                                                 MGMT_STATUS_INVALID_PARAMS,
5426                                                 &cp->addr, sizeof(cp->addr));
5427                         goto unlock;
5428                 }
5429
5430                 list_for_each_entry_safe(b, btmp, &hdev->whitelist, list) {
5431                         device_removed(sk, hdev, &b->bdaddr, b->bdaddr_type);
5432                         list_del(&b->list);
5433                         kfree(b);
5434                 }
5435
5436                 hci_req_update_scan(hdev);
5437
5438                 list_for_each_entry_safe(p, tmp, &hdev->le_conn_params, list) {
5439                         if (p->auto_connect == HCI_AUTO_CONN_DISABLED)
5440                                 continue;
5441                         device_removed(sk, hdev, &p->addr, p->addr_type);
5442                         if (p->explicit_connect) {
5443                                 p->auto_connect = HCI_AUTO_CONN_EXPLICIT;
5444                                 continue;
5445                         }
5446                         list_del(&p->action);
5447                         list_del(&p->list);
5448                         kfree(p);
5449                 }
5450
5451                 BT_DBG("All LE connection parameters were removed");
5452
5453                 hci_update_background_scan(hdev);
5454         }
5455
5456 complete:
5457         err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_REMOVE_DEVICE,
5458                                 MGMT_STATUS_SUCCESS, &cp->addr,
5459                                 sizeof(cp->addr));
5460 unlock:
5461         hci_dev_unlock(hdev);
5462         return err;
5463 }
5464
5465 static int load_conn_param(struct sock *sk, struct hci_dev *hdev, void *data,
5466                            u16 len)
5467 {
5468         struct mgmt_cp_load_conn_param *cp = data;
5469         const u16 max_param_count = ((U16_MAX - sizeof(*cp)) /
5470                                      sizeof(struct mgmt_conn_param));
5471         u16 param_count, expected_len;
5472         int i;
5473
5474         if (!lmp_le_capable(hdev))
5475                 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_LOAD_CONN_PARAM,
5476                                        MGMT_STATUS_NOT_SUPPORTED);
5477
5478         param_count = __le16_to_cpu(cp->param_count);
5479         if (param_count > max_param_count) {
5480                 BT_ERR("load_conn_param: too big param_count value %u",
5481                        param_count);
5482                 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_LOAD_CONN_PARAM,
5483                                        MGMT_STATUS_INVALID_PARAMS);
5484         }
5485
5486         expected_len = sizeof(*cp) + param_count *
5487                                         sizeof(struct mgmt_conn_param);
5488         if (expected_len != len) {
5489                 BT_ERR("load_conn_param: expected %u bytes, got %u bytes",
5490                        expected_len, len);
5491                 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_LOAD_CONN_PARAM,
5492                                        MGMT_STATUS_INVALID_PARAMS);
5493         }
5494
5495         BT_DBG("%s param_count %u", hdev->name, param_count);
5496
5497         hci_dev_lock(hdev);
5498
5499         hci_conn_params_clear_disabled(hdev);
5500
5501         for (i = 0; i < param_count; i++) {
5502                 struct mgmt_conn_param *param = &cp->params[i];
5503                 struct hci_conn_params *hci_param;
5504                 u16 min, max, latency, timeout;
5505                 u8 addr_type;
5506
5507                 BT_DBG("Adding %pMR (type %u)", &param->addr.bdaddr,
5508                        param->addr.type);
5509
5510                 if (param->addr.type == BDADDR_LE_PUBLIC) {
5511                         addr_type = ADDR_LE_DEV_PUBLIC;
5512                 } else if (param->addr.type == BDADDR_LE_RANDOM) {
5513                         addr_type = ADDR_LE_DEV_RANDOM;
5514                 } else {
5515                         BT_ERR("Ignoring invalid connection parameters");
5516                         continue;
5517                 }
5518
5519                 min = le16_to_cpu(param->min_interval);
5520                 max = le16_to_cpu(param->max_interval);
5521                 latency = le16_to_cpu(param->latency);
5522                 timeout = le16_to_cpu(param->timeout);
5523
5524                 BT_DBG("min 0x%04x max 0x%04x latency 0x%04x timeout 0x%04x",
5525                        min, max, latency, timeout);
5526
5527                 if (hci_check_conn_params(min, max, latency, timeout) < 0) {
5528                         BT_ERR("Ignoring invalid connection parameters");
5529                         continue;
5530                 }
5531
5532                 hci_param = hci_conn_params_add(hdev, &param->addr.bdaddr,
5533                                                 addr_type);
5534                 if (!hci_param) {
5535                         BT_ERR("Failed to add connection parameters");
5536                         continue;
5537                 }
5538
5539                 hci_param->conn_min_interval = min;
5540                 hci_param->conn_max_interval = max;
5541                 hci_param->conn_latency = latency;
5542                 hci_param->supervision_timeout = timeout;
5543         }
5544
5545         hci_dev_unlock(hdev);
5546
5547         return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_LOAD_CONN_PARAM, 0,
5548                                  NULL, 0);
5549 }
5550
5551 static int set_external_config(struct sock *sk, struct hci_dev *hdev,
5552                                void *data, u16 len)
5553 {
5554         struct mgmt_cp_set_external_config *cp = data;
5555         bool changed;
5556         int err;
5557
5558         BT_DBG("%s", hdev->name);
5559
5560         if (hdev_is_powered(hdev))
5561                 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_EXTERNAL_CONFIG,
5562                                        MGMT_STATUS_REJECTED);
5563
5564         if (cp->config != 0x00 && cp->config != 0x01)
5565                 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_EXTERNAL_CONFIG,
5566                                          MGMT_STATUS_INVALID_PARAMS);
5567
5568         if (!test_bit(HCI_QUIRK_EXTERNAL_CONFIG, &hdev->quirks))
5569                 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_EXTERNAL_CONFIG,
5570                                        MGMT_STATUS_NOT_SUPPORTED);
5571
5572         hci_dev_lock(hdev);
5573
5574         if (cp->config)
5575                 changed = !hci_dev_test_and_set_flag(hdev, HCI_EXT_CONFIGURED);
5576         else
5577                 changed = hci_dev_test_and_clear_flag(hdev, HCI_EXT_CONFIGURED);
5578
5579         err = send_options_rsp(sk, MGMT_OP_SET_EXTERNAL_CONFIG, hdev);
5580         if (err < 0)
5581                 goto unlock;
5582
5583         if (!changed)
5584                 goto unlock;
5585
5586         err = new_options(hdev, sk);
5587
5588         if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED) == is_configured(hdev)) {
5589                 mgmt_index_removed(hdev);
5590
5591                 if (hci_dev_test_and_change_flag(hdev, HCI_UNCONFIGURED)) {
5592                         hci_dev_set_flag(hdev, HCI_CONFIG);
5593                         hci_dev_set_flag(hdev, HCI_AUTO_OFF);
5594
5595                         queue_work(hdev->req_workqueue, &hdev->power_on);
5596                 } else {
5597                         set_bit(HCI_RAW, &hdev->flags);
5598                         mgmt_index_added(hdev);
5599                 }
5600         }
5601
5602 unlock:
5603         hci_dev_unlock(hdev);
5604         return err;
5605 }
5606
5607 static int set_public_address(struct sock *sk, struct hci_dev *hdev,
5608                               void *data, u16 len)
5609 {
5610         struct mgmt_cp_set_public_address *cp = data;
5611         bool changed;
5612         int err;
5613
5614         BT_DBG("%s", hdev->name);
5615
5616         if (hdev_is_powered(hdev))
5617                 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_PUBLIC_ADDRESS,
5618                                        MGMT_STATUS_REJECTED);
5619
5620         if (!bacmp(&cp->bdaddr, BDADDR_ANY))
5621                 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_PUBLIC_ADDRESS,
5622                                        MGMT_STATUS_INVALID_PARAMS);
5623
5624         if (!hdev->set_bdaddr)
5625                 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_PUBLIC_ADDRESS,
5626                                        MGMT_STATUS_NOT_SUPPORTED);
5627
5628         hci_dev_lock(hdev);
5629
5630         changed = !!bacmp(&hdev->public_addr, &cp->bdaddr);
5631         bacpy(&hdev->public_addr, &cp->bdaddr);
5632
5633         err = send_options_rsp(sk, MGMT_OP_SET_PUBLIC_ADDRESS, hdev);
5634         if (err < 0)
5635                 goto unlock;
5636
5637         if (!changed)
5638                 goto unlock;
5639
5640         if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED))
5641                 err = new_options(hdev, sk);
5642
5643         if (is_configured(hdev)) {
5644                 mgmt_index_removed(hdev);
5645
5646                 hci_dev_clear_flag(hdev, HCI_UNCONFIGURED);
5647
5648                 hci_dev_set_flag(hdev, HCI_CONFIG);
5649                 hci_dev_set_flag(hdev, HCI_AUTO_OFF);
5650
5651                 queue_work(hdev->req_workqueue, &hdev->power_on);
5652         }
5653
5654 unlock:
5655         hci_dev_unlock(hdev);
5656         return err;
5657 }
5658
5659 static void read_local_oob_ext_data_complete(struct hci_dev *hdev, u8 status,
5660                                              u16 opcode, struct sk_buff *skb)
5661 {
5662         const struct mgmt_cp_read_local_oob_ext_data *mgmt_cp;
5663         struct mgmt_rp_read_local_oob_ext_data *mgmt_rp;
5664         u8 *h192, *r192, *h256, *r256;
5665         struct mgmt_pending_cmd *cmd;
5666         u16 eir_len;
5667         int err;
5668
5669         BT_DBG("%s status %u", hdev->name, status);
5670
5671         cmd = pending_find(MGMT_OP_READ_LOCAL_OOB_EXT_DATA, hdev);
5672         if (!cmd)
5673                 return;
5674
5675         mgmt_cp = cmd->param;
5676
5677         if (status) {
5678                 status = mgmt_status(status);
5679                 eir_len = 0;
5680
5681                 h192 = NULL;
5682                 r192 = NULL;
5683                 h256 = NULL;
5684                 r256 = NULL;
5685         } else if (opcode == HCI_OP_READ_LOCAL_OOB_DATA) {
5686                 struct hci_rp_read_local_oob_data *rp;
5687
5688                 if (skb->len != sizeof(*rp)) {
5689                         status = MGMT_STATUS_FAILED;
5690                         eir_len = 0;
5691                 } else {
5692                         status = MGMT_STATUS_SUCCESS;
5693                         rp = (void *)skb->data;
5694
5695                         eir_len = 5 + 18 + 18;
5696                         h192 = rp->hash;
5697                         r192 = rp->rand;
5698                         h256 = NULL;
5699                         r256 = NULL;
5700                 }
5701         } else {
5702                 struct hci_rp_read_local_oob_ext_data *rp;
5703
5704                 if (skb->len != sizeof(*rp)) {
5705                         status = MGMT_STATUS_FAILED;
5706                         eir_len = 0;
5707                 } else {
5708                         status = MGMT_STATUS_SUCCESS;
5709                         rp = (void *)skb->data;
5710
5711                         if (hci_dev_test_flag(hdev, HCI_SC_ONLY)) {
5712                                 eir_len = 5 + 18 + 18;
5713                                 h192 = NULL;
5714                                 r192 = NULL;
5715                         } else {
5716                                 eir_len = 5 + 18 + 18 + 18 + 18;
5717                                 h192 = rp->hash192;
5718                                 r192 = rp->rand192;
5719                         }
5720
5721                         h256 = rp->hash256;
5722                         r256 = rp->rand256;
5723                 }
5724         }
5725
5726         mgmt_rp = kmalloc(sizeof(*mgmt_rp) + eir_len, GFP_KERNEL);
5727         if (!mgmt_rp)
5728                 goto done;
5729
5730         if (status)
5731                 goto send_rsp;
5732
5733         eir_len = eir_append_data(mgmt_rp->eir, 0, EIR_CLASS_OF_DEV,
5734                                   hdev->dev_class, 3);
5735
5736         if (h192 && r192) {
5737                 eir_len = eir_append_data(mgmt_rp->eir, eir_len,
5738                                           EIR_SSP_HASH_C192, h192, 16);
5739                 eir_len = eir_append_data(mgmt_rp->eir, eir_len,
5740                                           EIR_SSP_RAND_R192, r192, 16);
5741         }
5742
5743         if (h256 && r256) {
5744                 eir_len = eir_append_data(mgmt_rp->eir, eir_len,
5745                                           EIR_SSP_HASH_C256, h256, 16);
5746                 eir_len = eir_append_data(mgmt_rp->eir, eir_len,
5747                                           EIR_SSP_RAND_R256, r256, 16);
5748         }
5749
5750 send_rsp:
5751         mgmt_rp->type = mgmt_cp->type;
5752         mgmt_rp->eir_len = cpu_to_le16(eir_len);
5753
5754         err = mgmt_cmd_complete(cmd->sk, hdev->id,
5755                                 MGMT_OP_READ_LOCAL_OOB_EXT_DATA, status,
5756                                 mgmt_rp, sizeof(*mgmt_rp) + eir_len);
5757         if (err < 0 || status)
5758                 goto done;
5759
5760         hci_sock_set_flag(cmd->sk, HCI_MGMT_OOB_DATA_EVENTS);
5761
5762         err = mgmt_limited_event(MGMT_EV_LOCAL_OOB_DATA_UPDATED, hdev,
5763                                  mgmt_rp, sizeof(*mgmt_rp) + eir_len,
5764                                  HCI_MGMT_OOB_DATA_EVENTS, cmd->sk);
5765 done:
5766         kfree(mgmt_rp);
5767         mgmt_pending_remove(cmd);
5768 }
5769
5770 static int read_local_ssp_oob_req(struct hci_dev *hdev, struct sock *sk,
5771                                   struct mgmt_cp_read_local_oob_ext_data *cp)
5772 {
5773         struct mgmt_pending_cmd *cmd;
5774         struct hci_request req;
5775         int err;
5776
5777         cmd = mgmt_pending_add(sk, MGMT_OP_READ_LOCAL_OOB_EXT_DATA, hdev,
5778                                cp, sizeof(*cp));
5779         if (!cmd)
5780                 return -ENOMEM;
5781
5782         hci_req_init(&req, hdev);
5783
5784         if (bredr_sc_enabled(hdev))
5785                 hci_req_add(&req, HCI_OP_READ_LOCAL_OOB_EXT_DATA, 0, NULL);
5786         else
5787                 hci_req_add(&req, HCI_OP_READ_LOCAL_OOB_DATA, 0, NULL);
5788
5789         err = hci_req_run_skb(&req, read_local_oob_ext_data_complete);
5790         if (err < 0) {
5791                 mgmt_pending_remove(cmd);
5792                 return err;
5793         }
5794
5795         return 0;
5796 }
5797
5798 static int read_local_oob_ext_data(struct sock *sk, struct hci_dev *hdev,
5799                                    void *data, u16 data_len)
5800 {
5801         struct mgmt_cp_read_local_oob_ext_data *cp = data;
5802         struct mgmt_rp_read_local_oob_ext_data *rp;
5803         size_t rp_len;
5804         u16 eir_len;
5805         u8 status, flags, role, addr[7], hash[16], rand[16];
5806         int err;
5807
5808         BT_DBG("%s", hdev->name);
5809
5810         if (hdev_is_powered(hdev)) {
5811                 switch (cp->type) {
5812                 case BIT(BDADDR_BREDR):
5813                         status = mgmt_bredr_support(hdev);
5814                         if (status)
5815                                 eir_len = 0;
5816                         else
5817                                 eir_len = 5;
5818                         break;
5819                 case (BIT(BDADDR_LE_PUBLIC) | BIT(BDADDR_LE_RANDOM)):
5820                         status = mgmt_le_support(hdev);
5821                         if (status)
5822                                 eir_len = 0;
5823                         else
5824                                 eir_len = 9 + 3 + 18 + 18 + 3;
5825                         break;
5826                 default:
5827                         status = MGMT_STATUS_INVALID_PARAMS;
5828                         eir_len = 0;
5829                         break;
5830                 }
5831         } else {
5832                 status = MGMT_STATUS_NOT_POWERED;
5833                 eir_len = 0;
5834         }
5835
5836         rp_len = sizeof(*rp) + eir_len;
5837         rp = kmalloc(rp_len, GFP_ATOMIC);
5838         if (!rp)
5839                 return -ENOMEM;
5840
5841         if (status)
5842                 goto complete;
5843
5844         hci_dev_lock(hdev);
5845
5846         eir_len = 0;
5847         switch (cp->type) {
5848         case BIT(BDADDR_BREDR):
5849                 if (hci_dev_test_flag(hdev, HCI_SSP_ENABLED)) {
5850                         err = read_local_ssp_oob_req(hdev, sk, cp);
5851                         hci_dev_unlock(hdev);
5852                         if (!err)
5853                                 goto done;
5854
5855                         status = MGMT_STATUS_FAILED;
5856                         goto complete;
5857                 } else {
5858                         eir_len = eir_append_data(rp->eir, eir_len,
5859                                                   EIR_CLASS_OF_DEV,
5860                                                   hdev->dev_class, 3);
5861                 }
5862                 break;
5863         case (BIT(BDADDR_LE_PUBLIC) | BIT(BDADDR_LE_RANDOM)):
5864                 if (hci_dev_test_flag(hdev, HCI_SC_ENABLED) &&
5865                     smp_generate_oob(hdev, hash, rand) < 0) {
5866                         hci_dev_unlock(hdev);
5867                         status = MGMT_STATUS_FAILED;
5868                         goto complete;
5869                 }
5870
5871                 /* This should return the active RPA, but since the RPA
5872                  * is only programmed on demand, it is really hard to fill
5873                  * this in at the moment. For now disallow retrieving
5874                  * local out-of-band data when privacy is in use.
5875                  *
5876                  * Returning the identity address will not help here since
5877                  * pairing happens before the identity resolving key is
5878                  * known and thus the connection establishment happens
5879                  * based on the RPA and not the identity address.
5880                  */
5881                 if (hci_dev_test_flag(hdev, HCI_PRIVACY)) {
5882                         hci_dev_unlock(hdev);
5883                         status = MGMT_STATUS_REJECTED;
5884                         goto complete;
5885                 }
5886
5887                 if (hci_dev_test_flag(hdev, HCI_FORCE_STATIC_ADDR) ||
5888                    !bacmp(&hdev->bdaddr, BDADDR_ANY) ||
5889                    (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED) &&
5890                     bacmp(&hdev->static_addr, BDADDR_ANY))) {
5891                         memcpy(addr, &hdev->static_addr, 6);
5892                         addr[6] = 0x01;
5893                 } else {
5894                         memcpy(addr, &hdev->bdaddr, 6);
5895                         addr[6] = 0x00;
5896                 }
5897
5898                 eir_len = eir_append_data(rp->eir, eir_len, EIR_LE_BDADDR,
5899                                           addr, sizeof(addr));
5900
5901                 if (hci_dev_test_flag(hdev, HCI_ADVERTISING))
5902                         role = 0x02;
5903                 else
5904                         role = 0x01;
5905
5906                 eir_len = eir_append_data(rp->eir, eir_len, EIR_LE_ROLE,
5907                                           &role, sizeof(role));
5908
5909                 if (hci_dev_test_flag(hdev, HCI_SC_ENABLED)) {
5910                         eir_len = eir_append_data(rp->eir, eir_len,
5911                                                   EIR_LE_SC_CONFIRM,
5912                                                   hash, sizeof(hash));
5913
5914                         eir_len = eir_append_data(rp->eir, eir_len,
5915                                                   EIR_LE_SC_RANDOM,
5916                                                   rand, sizeof(rand));
5917                 }
5918
5919                 flags = mgmt_get_adv_discov_flags(hdev);
5920
5921                 if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED))
5922                         flags |= LE_AD_NO_BREDR;
5923
5924                 eir_len = eir_append_data(rp->eir, eir_len, EIR_FLAGS,
5925                                           &flags, sizeof(flags));
5926                 break;
5927         }
5928
5929         hci_dev_unlock(hdev);
5930
5931         hci_sock_set_flag(sk, HCI_MGMT_OOB_DATA_EVENTS);
5932
5933         status = MGMT_STATUS_SUCCESS;
5934
5935 complete:
5936         rp->type = cp->type;
5937         rp->eir_len = cpu_to_le16(eir_len);
5938
5939         err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_READ_LOCAL_OOB_EXT_DATA,
5940                                 status, rp, sizeof(*rp) + eir_len);
5941         if (err < 0 || status)
5942                 goto done;
5943
5944         err = mgmt_limited_event(MGMT_EV_LOCAL_OOB_DATA_UPDATED, hdev,
5945                                  rp, sizeof(*rp) + eir_len,
5946                                  HCI_MGMT_OOB_DATA_EVENTS, sk);
5947
5948 done:
5949         kfree(rp);
5950
5951         return err;
5952 }
5953
5954 static u32 get_supported_adv_flags(struct hci_dev *hdev)
5955 {
5956         u32 flags = 0;
5957
5958         flags |= MGMT_ADV_FLAG_CONNECTABLE;
5959         flags |= MGMT_ADV_FLAG_DISCOV;
5960         flags |= MGMT_ADV_FLAG_LIMITED_DISCOV;
5961         flags |= MGMT_ADV_FLAG_MANAGED_FLAGS;
5962         flags |= MGMT_ADV_FLAG_APPEARANCE;
5963         flags |= MGMT_ADV_FLAG_LOCAL_NAME;
5964
5965         if (hdev->adv_tx_power != HCI_TX_POWER_INVALID)
5966                 flags |= MGMT_ADV_FLAG_TX_POWER;
5967
5968         return flags;
5969 }
5970
5971 static int read_adv_features(struct sock *sk, struct hci_dev *hdev,
5972                              void *data, u16 data_len)
5973 {
5974         struct mgmt_rp_read_adv_features *rp;
5975         size_t rp_len;
5976         int err;
5977         struct adv_info *adv_instance;
5978         u32 supported_flags;
5979         u8 *instance;
5980
5981         BT_DBG("%s", hdev->name);
5982
5983         if (!lmp_le_capable(hdev))
5984                 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_READ_ADV_FEATURES,
5985                                        MGMT_STATUS_REJECTED);
5986
5987         hci_dev_lock(hdev);
5988
5989         rp_len = sizeof(*rp) + hdev->adv_instance_cnt;
5990         rp = kmalloc(rp_len, GFP_ATOMIC);
5991         if (!rp) {
5992                 hci_dev_unlock(hdev);
5993                 return -ENOMEM;
5994         }
5995
5996         supported_flags = get_supported_adv_flags(hdev);
5997
5998         rp->supported_flags = cpu_to_le32(supported_flags);
5999         rp->max_adv_data_len = HCI_MAX_AD_LENGTH;
6000         rp->max_scan_rsp_len = HCI_MAX_AD_LENGTH;
6001         rp->max_instances = HCI_MAX_ADV_INSTANCES;
6002         rp->num_instances = hdev->adv_instance_cnt;
6003
6004         instance = rp->instance;
6005         list_for_each_entry(adv_instance, &hdev->adv_instances, list) {
6006                 *instance = adv_instance->instance;
6007                 instance++;
6008         }
6009
6010         hci_dev_unlock(hdev);
6011
6012         err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_READ_ADV_FEATURES,
6013                                 MGMT_STATUS_SUCCESS, rp, rp_len);
6014
6015         kfree(rp);
6016
6017         return err;
6018 }
6019
6020 static u8 calculate_name_len(struct hci_dev *hdev)
6021 {
6022         u8 buf[HCI_MAX_SHORT_NAME_LENGTH + 3];
6023
6024         return append_local_name(hdev, buf, 0);
6025 }
6026
6027 static u8 tlv_data_max_len(struct hci_dev *hdev, u32 adv_flags,
6028                            bool is_adv_data)
6029 {
6030         u8 max_len = HCI_MAX_AD_LENGTH;
6031
6032         if (is_adv_data) {
6033                 if (adv_flags & (MGMT_ADV_FLAG_DISCOV |
6034                                  MGMT_ADV_FLAG_LIMITED_DISCOV |
6035                                  MGMT_ADV_FLAG_MANAGED_FLAGS))
6036                         max_len -= 3;
6037
6038                 if (adv_flags & MGMT_ADV_FLAG_TX_POWER)
6039                         max_len -= 3;
6040         } else {
6041                 if (adv_flags & MGMT_ADV_FLAG_LOCAL_NAME)
6042                         max_len -= calculate_name_len(hdev);
6043
6044                 if (adv_flags & (MGMT_ADV_FLAG_APPEARANCE))
6045                         max_len -= 4;
6046         }
6047
6048         return max_len;
6049 }
6050
6051 static bool flags_managed(u32 adv_flags)
6052 {
6053         return adv_flags & (MGMT_ADV_FLAG_DISCOV |
6054                             MGMT_ADV_FLAG_LIMITED_DISCOV |
6055                             MGMT_ADV_FLAG_MANAGED_FLAGS);
6056 }
6057
6058 static bool tx_power_managed(u32 adv_flags)
6059 {
6060         return adv_flags & MGMT_ADV_FLAG_TX_POWER;
6061 }
6062
6063 static bool name_managed(u32 adv_flags)
6064 {
6065         return adv_flags & MGMT_ADV_FLAG_LOCAL_NAME;
6066 }
6067
6068 static bool appearance_managed(u32 adv_flags)
6069 {
6070         return adv_flags & MGMT_ADV_FLAG_APPEARANCE;
6071 }
6072
6073 static bool tlv_data_is_valid(struct hci_dev *hdev, u32 adv_flags, u8 *data,
6074                               u8 len, bool is_adv_data)
6075 {
6076         int i, cur_len;
6077         u8 max_len;
6078
6079         max_len = tlv_data_max_len(hdev, adv_flags, is_adv_data);
6080
6081         if (len > max_len)
6082                 return false;
6083
6084         /* Make sure that the data is correctly formatted. */
6085         for (i = 0, cur_len = 0; i < len; i += (cur_len + 1)) {
6086                 cur_len = data[i];
6087
6088                 if (data[i + 1] == EIR_FLAGS &&
6089                     (!is_adv_data || flags_managed(adv_flags)))
6090                         return false;
6091
6092                 if (data[i + 1] == EIR_TX_POWER && tx_power_managed(adv_flags))
6093                         return false;
6094
6095                 if (data[i + 1] == EIR_NAME_COMPLETE && name_managed(adv_flags))
6096                         return false;
6097
6098                 if (data[i + 1] == EIR_NAME_SHORT && name_managed(adv_flags))
6099                         return false;
6100
6101                 if (data[i + 1] == EIR_APPEARANCE &&
6102                     appearance_managed(adv_flags))
6103                         return false;
6104
6105                 /* If the current field length would exceed the total data
6106                  * length, then it's invalid.
6107                  */
6108                 if (i + cur_len >= len)
6109                         return false;
6110         }
6111
6112         return true;
6113 }
6114
6115 static void add_advertising_complete(struct hci_dev *hdev, u8 status,
6116                                      u16 opcode)
6117 {
6118         struct mgmt_pending_cmd *cmd;
6119         struct mgmt_cp_add_advertising *cp;
6120         struct mgmt_rp_add_advertising rp;
6121         struct adv_info *adv_instance, *n;
6122         u8 instance;
6123
6124         BT_DBG("status %d", status);
6125
6126         hci_dev_lock(hdev);
6127
6128         cmd = pending_find(MGMT_OP_ADD_ADVERTISING, hdev);
6129
6130         list_for_each_entry_safe(adv_instance, n, &hdev->adv_instances, list) {
6131                 if (!adv_instance->pending)
6132                         continue;
6133
6134                 if (!status) {
6135                         adv_instance->pending = false;
6136                         continue;
6137                 }
6138
6139                 instance = adv_instance->instance;
6140
6141                 if (hdev->cur_adv_instance == instance)
6142                         cancel_adv_timeout(hdev);
6143
6144                 hci_remove_adv_instance(hdev, instance);
6145                 mgmt_advertising_removed(cmd ? cmd->sk : NULL, hdev, instance);
6146         }
6147
6148         if (!cmd)
6149                 goto unlock;
6150
6151         cp = cmd->param;
6152         rp.instance = cp->instance;
6153
6154         if (status)
6155                 mgmt_cmd_status(cmd->sk, cmd->index, cmd->opcode,
6156                                 mgmt_status(status));
6157         else
6158                 mgmt_cmd_complete(cmd->sk, cmd->index, cmd->opcode,
6159                                   mgmt_status(status), &rp, sizeof(rp));
6160
6161         mgmt_pending_remove(cmd);
6162
6163 unlock:
6164         hci_dev_unlock(hdev);
6165 }
6166
6167 static int add_advertising(struct sock *sk, struct hci_dev *hdev,
6168                            void *data, u16 data_len)
6169 {
6170         struct mgmt_cp_add_advertising *cp = data;
6171         struct mgmt_rp_add_advertising rp;
6172         u32 flags;
6173         u32 supported_flags;
6174         u8 status;
6175         u16 timeout, duration;
6176         unsigned int prev_instance_cnt = hdev->adv_instance_cnt;
6177         u8 schedule_instance = 0;
6178         struct adv_info *next_instance;
6179         int err;
6180         struct mgmt_pending_cmd *cmd;
6181         struct hci_request req;
6182
6183         BT_DBG("%s", hdev->name);
6184
6185         status = mgmt_le_support(hdev);
6186         if (status)
6187                 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_ADD_ADVERTISING,
6188                                        status);
6189
6190         if (cp->instance < 1 || cp->instance > HCI_MAX_ADV_INSTANCES)
6191                 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_ADD_ADVERTISING,
6192                                        MGMT_STATUS_INVALID_PARAMS);
6193
6194         if (data_len != sizeof(*cp) + cp->adv_data_len + cp->scan_rsp_len)
6195                 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_ADD_ADVERTISING,
6196                                        MGMT_STATUS_INVALID_PARAMS);
6197
6198         flags = __le32_to_cpu(cp->flags);
6199         timeout = __le16_to_cpu(cp->timeout);
6200         duration = __le16_to_cpu(cp->duration);
6201
6202         /* The current implementation only supports a subset of the specified
6203          * flags.
6204          */
6205         supported_flags = get_supported_adv_flags(hdev);
6206         if (flags & ~supported_flags)
6207                 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_ADD_ADVERTISING,
6208                                        MGMT_STATUS_INVALID_PARAMS);
6209
6210         hci_dev_lock(hdev);
6211
6212         if (timeout && !hdev_is_powered(hdev)) {
6213                 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_ADD_ADVERTISING,
6214                                       MGMT_STATUS_REJECTED);
6215                 goto unlock;
6216         }
6217
6218         if (pending_find(MGMT_OP_ADD_ADVERTISING, hdev) ||
6219             pending_find(MGMT_OP_REMOVE_ADVERTISING, hdev) ||
6220             pending_find(MGMT_OP_SET_LE, hdev)) {
6221                 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_ADD_ADVERTISING,
6222                                       MGMT_STATUS_BUSY);
6223                 goto unlock;
6224         }
6225
6226         if (!tlv_data_is_valid(hdev, flags, cp->data, cp->adv_data_len, true) ||
6227             !tlv_data_is_valid(hdev, flags, cp->data + cp->adv_data_len,
6228                                cp->scan_rsp_len, false)) {
6229                 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_ADD_ADVERTISING,
6230                                       MGMT_STATUS_INVALID_PARAMS);
6231                 goto unlock;
6232         }
6233
6234         err = hci_add_adv_instance(hdev, cp->instance, flags,
6235                                    cp->adv_data_len, cp->data,
6236                                    cp->scan_rsp_len,
6237                                    cp->data + cp->adv_data_len,
6238                                    timeout, duration);
6239         if (err < 0) {
6240                 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_ADD_ADVERTISING,
6241                                       MGMT_STATUS_FAILED);
6242                 goto unlock;
6243         }
6244
6245         /* Only trigger an advertising added event if a new instance was
6246          * actually added.
6247          */
6248         if (hdev->adv_instance_cnt > prev_instance_cnt)
6249                 mgmt_advertising_added(sk, hdev, cp->instance);
6250
6251         if (hdev->cur_adv_instance == cp->instance) {
6252                 /* If the currently advertised instance is being changed then
6253                  * cancel the current advertising and schedule the next
6254                  * instance. If there is only one instance then the overridden
6255                  * advertising data will be visible right away.
6256                  */
6257                 cancel_adv_timeout(hdev);
6258
6259                 next_instance = hci_get_next_instance(hdev, cp->instance);
6260                 if (next_instance)
6261                         schedule_instance = next_instance->instance;
6262         } else if (!hdev->adv_instance_timeout) {
6263                 /* Immediately advertise the new instance if no other
6264                  * instance is currently being advertised.
6265                  */
6266                 schedule_instance = cp->instance;
6267         }
6268
6269         /* If the HCI_ADVERTISING flag is set or the device isn't powered or
6270          * there is no instance to be advertised then we have no HCI
6271          * communication to make. Simply return.
6272          */
6273         if (!hdev_is_powered(hdev) ||
6274             hci_dev_test_flag(hdev, HCI_ADVERTISING) ||
6275             !schedule_instance) {
6276                 rp.instance = cp->instance;
6277                 err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_ADD_ADVERTISING,
6278                                         MGMT_STATUS_SUCCESS, &rp, sizeof(rp));
6279                 goto unlock;
6280         }
6281
6282         /* We're good to go, update advertising data, parameters, and start
6283          * advertising.
6284          */
6285         cmd = mgmt_pending_add(sk, MGMT_OP_ADD_ADVERTISING, hdev, data,
6286                                data_len);
6287         if (!cmd) {
6288                 err = -ENOMEM;
6289                 goto unlock;
6290         }
6291
6292         hci_req_init(&req, hdev);
6293
6294         err = __hci_req_schedule_adv_instance(&req, schedule_instance, true);
6295
6296         if (!err)
6297                 err = hci_req_run(&req, add_advertising_complete);
6298
6299         if (err < 0)
6300                 mgmt_pending_remove(cmd);
6301
6302 unlock:
6303         hci_dev_unlock(hdev);
6304
6305         return err;
6306 }
6307
6308 static void remove_advertising_complete(struct hci_dev *hdev, u8 status,
6309                                         u16 opcode)
6310 {
6311         struct mgmt_pending_cmd *cmd;
6312         struct mgmt_cp_remove_advertising *cp;
6313         struct mgmt_rp_remove_advertising rp;
6314
6315         BT_DBG("status %d", status);
6316
6317         hci_dev_lock(hdev);
6318
6319         /* A failure status here only means that we failed to disable
6320          * advertising. Otherwise, the advertising instance has been removed,
6321          * so report success.
6322          */
6323         cmd = pending_find(MGMT_OP_REMOVE_ADVERTISING, hdev);
6324         if (!cmd)
6325                 goto unlock;
6326
6327         cp = cmd->param;
6328         rp.instance = cp->instance;
6329
6330         mgmt_cmd_complete(cmd->sk, cmd->index, cmd->opcode, MGMT_STATUS_SUCCESS,
6331                           &rp, sizeof(rp));
6332         mgmt_pending_remove(cmd);
6333
6334 unlock:
6335         hci_dev_unlock(hdev);
6336 }
6337
6338 static int remove_advertising(struct sock *sk, struct hci_dev *hdev,
6339                               void *data, u16 data_len)
6340 {
6341         struct mgmt_cp_remove_advertising *cp = data;
6342         struct mgmt_rp_remove_advertising rp;
6343         struct mgmt_pending_cmd *cmd;
6344         struct hci_request req;
6345         int err;
6346
6347         BT_DBG("%s", hdev->name);
6348
6349         hci_dev_lock(hdev);
6350
6351         if (cp->instance && !hci_find_adv_instance(hdev, cp->instance)) {
6352                 err = mgmt_cmd_status(sk, hdev->id,
6353                                       MGMT_OP_REMOVE_ADVERTISING,
6354                                       MGMT_STATUS_INVALID_PARAMS);
6355                 goto unlock;
6356         }
6357
6358         if (pending_find(MGMT_OP_ADD_ADVERTISING, hdev) ||
6359             pending_find(MGMT_OP_REMOVE_ADVERTISING, hdev) ||
6360             pending_find(MGMT_OP_SET_LE, hdev)) {
6361                 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_REMOVE_ADVERTISING,
6362                                       MGMT_STATUS_BUSY);
6363                 goto unlock;
6364         }
6365
6366         if (list_empty(&hdev->adv_instances)) {
6367                 err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_REMOVE_ADVERTISING,
6368                                       MGMT_STATUS_INVALID_PARAMS);
6369                 goto unlock;
6370         }
6371
6372         hci_req_init(&req, hdev);
6373
6374         hci_req_clear_adv_instance(hdev, sk, &req, cp->instance, true);
6375
6376         if (list_empty(&hdev->adv_instances))
6377                 __hci_req_disable_advertising(&req);
6378
6379         /* If no HCI commands have been collected so far or the HCI_ADVERTISING
6380          * flag is set or the device isn't powered then we have no HCI
6381          * communication to make. Simply return.
6382          */
6383         if (skb_queue_empty(&req.cmd_q) ||
6384             !hdev_is_powered(hdev) ||
6385             hci_dev_test_flag(hdev, HCI_ADVERTISING)) {
6386                 rp.instance = cp->instance;
6387                 err = mgmt_cmd_complete(sk, hdev->id,
6388                                         MGMT_OP_REMOVE_ADVERTISING,
6389                                         MGMT_STATUS_SUCCESS, &rp, sizeof(rp));
6390                 goto unlock;
6391         }
6392
6393         cmd = mgmt_pending_add(sk, MGMT_OP_REMOVE_ADVERTISING, hdev, data,
6394                                data_len);
6395         if (!cmd) {
6396                 err = -ENOMEM;
6397                 goto unlock;
6398         }
6399
6400         err = hci_req_run(&req, remove_advertising_complete);
6401         if (err < 0)
6402                 mgmt_pending_remove(cmd);
6403
6404 unlock:
6405         hci_dev_unlock(hdev);
6406
6407         return err;
6408 }
6409
6410 static int get_adv_size_info(struct sock *sk, struct hci_dev *hdev,
6411                              void *data, u16 data_len)
6412 {
6413         struct mgmt_cp_get_adv_size_info *cp = data;
6414         struct mgmt_rp_get_adv_size_info rp;
6415         u32 flags, supported_flags;
6416         int err;
6417
6418         BT_DBG("%s", hdev->name);
6419
6420         if (!lmp_le_capable(hdev))
6421                 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_GET_ADV_SIZE_INFO,
6422                                        MGMT_STATUS_REJECTED);
6423
6424         if (cp->instance < 1 || cp->instance > HCI_MAX_ADV_INSTANCES)
6425                 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_GET_ADV_SIZE_INFO,
6426                                        MGMT_STATUS_INVALID_PARAMS);
6427
6428         flags = __le32_to_cpu(cp->flags);
6429
6430         /* The current implementation only supports a subset of the specified
6431          * flags.
6432          */
6433         supported_flags = get_supported_adv_flags(hdev);
6434         if (flags & ~supported_flags)
6435                 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_GET_ADV_SIZE_INFO,
6436                                        MGMT_STATUS_INVALID_PARAMS);
6437
6438         rp.instance = cp->instance;
6439         rp.flags = cp->flags;
6440         rp.max_adv_data_len = tlv_data_max_len(hdev, flags, true);
6441         rp.max_scan_rsp_len = tlv_data_max_len(hdev, flags, false);
6442
6443         err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_GET_ADV_SIZE_INFO,
6444                                 MGMT_STATUS_SUCCESS, &rp, sizeof(rp));
6445
6446         return err;
6447 }
6448
6449 static const struct hci_mgmt_handler mgmt_handlers[] = {
6450         { NULL }, /* 0x0000 (no command) */
6451         { read_version,            MGMT_READ_VERSION_SIZE,
6452                                                 HCI_MGMT_NO_HDEV |
6453                                                 HCI_MGMT_UNTRUSTED },
6454         { read_commands,           MGMT_READ_COMMANDS_SIZE,
6455                                                 HCI_MGMT_NO_HDEV |
6456                                                 HCI_MGMT_UNTRUSTED },
6457         { read_index_list,         MGMT_READ_INDEX_LIST_SIZE,
6458                                                 HCI_MGMT_NO_HDEV |
6459                                                 HCI_MGMT_UNTRUSTED },
6460         { read_controller_info,    MGMT_READ_INFO_SIZE,
6461                                                 HCI_MGMT_UNTRUSTED },
6462         { set_powered,             MGMT_SETTING_SIZE },
6463         { set_discoverable,        MGMT_SET_DISCOVERABLE_SIZE },
6464         { set_connectable,         MGMT_SETTING_SIZE },
6465         { set_fast_connectable,    MGMT_SETTING_SIZE },
6466         { set_bondable,            MGMT_SETTING_SIZE },
6467         { set_link_security,       MGMT_SETTING_SIZE },
6468         { set_ssp,                 MGMT_SETTING_SIZE },
6469         { set_hs,                  MGMT_SETTING_SIZE },
6470         { set_le,                  MGMT_SETTING_SIZE },
6471         { set_dev_class,           MGMT_SET_DEV_CLASS_SIZE },
6472         { set_local_name,          MGMT_SET_LOCAL_NAME_SIZE },
6473         { add_uuid,                MGMT_ADD_UUID_SIZE },
6474         { remove_uuid,             MGMT_REMOVE_UUID_SIZE },
6475         { load_link_keys,          MGMT_LOAD_LINK_KEYS_SIZE,
6476                                                 HCI_MGMT_VAR_LEN },
6477         { load_long_term_keys,     MGMT_LOAD_LONG_TERM_KEYS_SIZE,
6478                                                 HCI_MGMT_VAR_LEN },
6479         { disconnect,              MGMT_DISCONNECT_SIZE },
6480         { get_connections,         MGMT_GET_CONNECTIONS_SIZE },
6481         { pin_code_reply,          MGMT_PIN_CODE_REPLY_SIZE },
6482         { pin_code_neg_reply,      MGMT_PIN_CODE_NEG_REPLY_SIZE },
6483         { set_io_capability,       MGMT_SET_IO_CAPABILITY_SIZE },
6484         { pair_device,             MGMT_PAIR_DEVICE_SIZE },
6485         { cancel_pair_device,      MGMT_CANCEL_PAIR_DEVICE_SIZE },
6486         { unpair_device,           MGMT_UNPAIR_DEVICE_SIZE },
6487         { user_confirm_reply,      MGMT_USER_CONFIRM_REPLY_SIZE },
6488         { user_confirm_neg_reply,  MGMT_USER_CONFIRM_NEG_REPLY_SIZE },
6489         { user_passkey_reply,      MGMT_USER_PASSKEY_REPLY_SIZE },
6490         { user_passkey_neg_reply,  MGMT_USER_PASSKEY_NEG_REPLY_SIZE },
6491         { read_local_oob_data,     MGMT_READ_LOCAL_OOB_DATA_SIZE },
6492         { add_remote_oob_data,     MGMT_ADD_REMOTE_OOB_DATA_SIZE,
6493                                                 HCI_MGMT_VAR_LEN },
6494         { remove_remote_oob_data,  MGMT_REMOVE_REMOTE_OOB_DATA_SIZE },
6495         { start_discovery,         MGMT_START_DISCOVERY_SIZE },
6496         { stop_discovery,          MGMT_STOP_DISCOVERY_SIZE },
6497         { confirm_name,            MGMT_CONFIRM_NAME_SIZE },
6498         { block_device,            MGMT_BLOCK_DEVICE_SIZE },
6499         { unblock_device,          MGMT_UNBLOCK_DEVICE_SIZE },
6500         { set_device_id,           MGMT_SET_DEVICE_ID_SIZE },
6501         { set_advertising,         MGMT_SETTING_SIZE },
6502         { set_bredr,               MGMT_SETTING_SIZE },
6503         { set_static_address,      MGMT_SET_STATIC_ADDRESS_SIZE },
6504         { set_scan_params,         MGMT_SET_SCAN_PARAMS_SIZE },
6505         { set_secure_conn,         MGMT_SETTING_SIZE },
6506         { set_debug_keys,          MGMT_SETTING_SIZE },
6507         { set_privacy,             MGMT_SET_PRIVACY_SIZE },
6508         { load_irks,               MGMT_LOAD_IRKS_SIZE,
6509                                                 HCI_MGMT_VAR_LEN },
6510         { get_conn_info,           MGMT_GET_CONN_INFO_SIZE },
6511         { get_clock_info,          MGMT_GET_CLOCK_INFO_SIZE },
6512         { add_device,              MGMT_ADD_DEVICE_SIZE },
6513         { remove_device,           MGMT_REMOVE_DEVICE_SIZE },
6514         { load_conn_param,         MGMT_LOAD_CONN_PARAM_SIZE,
6515                                                 HCI_MGMT_VAR_LEN },
6516         { read_unconf_index_list,  MGMT_READ_UNCONF_INDEX_LIST_SIZE,
6517                                                 HCI_MGMT_NO_HDEV |
6518                                                 HCI_MGMT_UNTRUSTED },
6519         { read_config_info,        MGMT_READ_CONFIG_INFO_SIZE,
6520                                                 HCI_MGMT_UNCONFIGURED |
6521                                                 HCI_MGMT_UNTRUSTED },
6522         { set_external_config,     MGMT_SET_EXTERNAL_CONFIG_SIZE,
6523                                                 HCI_MGMT_UNCONFIGURED },
6524         { set_public_address,      MGMT_SET_PUBLIC_ADDRESS_SIZE,
6525                                                 HCI_MGMT_UNCONFIGURED },
6526         { start_service_discovery, MGMT_START_SERVICE_DISCOVERY_SIZE,
6527                                                 HCI_MGMT_VAR_LEN },
6528         { read_local_oob_ext_data, MGMT_READ_LOCAL_OOB_EXT_DATA_SIZE },
6529         { read_ext_index_list,     MGMT_READ_EXT_INDEX_LIST_SIZE,
6530                                                 HCI_MGMT_NO_HDEV |
6531                                                 HCI_MGMT_UNTRUSTED },
6532         { read_adv_features,       MGMT_READ_ADV_FEATURES_SIZE },
6533         { add_advertising,         MGMT_ADD_ADVERTISING_SIZE,
6534                                                 HCI_MGMT_VAR_LEN },
6535         { remove_advertising,      MGMT_REMOVE_ADVERTISING_SIZE },
6536         { get_adv_size_info,       MGMT_GET_ADV_SIZE_INFO_SIZE },
6537         { start_limited_discovery, MGMT_START_DISCOVERY_SIZE },
6538         { read_ext_controller_info,MGMT_READ_EXT_INFO_SIZE,
6539                                                 HCI_MGMT_UNTRUSTED },
6540         { set_appearance,          MGMT_SET_APPEARANCE_SIZE },
6541 };
6542
6543 void mgmt_index_added(struct hci_dev *hdev)
6544 {
6545         struct mgmt_ev_ext_index ev;
6546
6547         if (test_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks))
6548                 return;
6549
6550         switch (hdev->dev_type) {
6551         case HCI_PRIMARY:
6552                 if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED)) {
6553                         mgmt_index_event(MGMT_EV_UNCONF_INDEX_ADDED, hdev,
6554                                          NULL, 0, HCI_MGMT_UNCONF_INDEX_EVENTS);
6555                         ev.type = 0x01;
6556                 } else {
6557                         mgmt_index_event(MGMT_EV_INDEX_ADDED, hdev, NULL, 0,
6558                                          HCI_MGMT_INDEX_EVENTS);
6559                         ev.type = 0x00;
6560                 }
6561                 break;
6562         case HCI_AMP:
6563                 ev.type = 0x02;
6564                 break;
6565         default:
6566                 return;
6567         }
6568
6569         ev.bus = hdev->bus;
6570
6571         mgmt_index_event(MGMT_EV_EXT_INDEX_ADDED, hdev, &ev, sizeof(ev),
6572                          HCI_MGMT_EXT_INDEX_EVENTS);
6573 }
6574
6575 void mgmt_index_removed(struct hci_dev *hdev)
6576 {
6577         struct mgmt_ev_ext_index ev;
6578         u8 status = MGMT_STATUS_INVALID_INDEX;
6579
6580         if (test_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks))
6581                 return;
6582
6583         switch (hdev->dev_type) {
6584         case HCI_PRIMARY:
6585                 mgmt_pending_foreach(0, hdev, cmd_complete_rsp, &status);
6586
6587                 if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED)) {
6588                         mgmt_index_event(MGMT_EV_UNCONF_INDEX_REMOVED, hdev,
6589                                          NULL, 0, HCI_MGMT_UNCONF_INDEX_EVENTS);
6590                         ev.type = 0x01;
6591                 } else {
6592                         mgmt_index_event(MGMT_EV_INDEX_REMOVED, hdev, NULL, 0,
6593                                          HCI_MGMT_INDEX_EVENTS);
6594                         ev.type = 0x00;
6595                 }
6596                 break;
6597         case HCI_AMP:
6598                 ev.type = 0x02;
6599                 break;
6600         default:
6601                 return;
6602         }
6603
6604         ev.bus = hdev->bus;
6605
6606         mgmt_index_event(MGMT_EV_EXT_INDEX_REMOVED, hdev, &ev, sizeof(ev),
6607                          HCI_MGMT_EXT_INDEX_EVENTS);
6608 }
6609
6610 /* This function requires the caller holds hdev->lock */
6611 static void restart_le_actions(struct hci_dev *hdev)
6612 {
6613         struct hci_conn_params *p;
6614
6615         list_for_each_entry(p, &hdev->le_conn_params, list) {
6616                 /* Needed for AUTO_OFF case where might not "really"
6617                  * have been powered off.
6618                  */
6619                 list_del_init(&p->action);
6620
6621                 switch (p->auto_connect) {
6622                 case HCI_AUTO_CONN_DIRECT:
6623                 case HCI_AUTO_CONN_ALWAYS:
6624                         list_add(&p->action, &hdev->pend_le_conns);
6625                         break;
6626                 case HCI_AUTO_CONN_REPORT:
6627                         list_add(&p->action, &hdev->pend_le_reports);
6628                         break;
6629                 default:
6630                         break;
6631                 }
6632         }
6633 }
6634
6635 void mgmt_power_on(struct hci_dev *hdev, int err)
6636 {
6637         struct cmd_lookup match = { NULL, hdev };
6638
6639         BT_DBG("err %d", err);
6640
6641         hci_dev_lock(hdev);
6642
6643         if (!err) {
6644                 restart_le_actions(hdev);
6645                 hci_update_background_scan(hdev);
6646         }
6647
6648         mgmt_pending_foreach(MGMT_OP_SET_POWERED, hdev, settings_rsp, &match);
6649
6650         new_settings(hdev, match.sk);
6651
6652         if (match.sk)
6653                 sock_put(match.sk);
6654
6655         hci_dev_unlock(hdev);
6656 }
6657
6658 void __mgmt_power_off(struct hci_dev *hdev)
6659 {
6660         struct cmd_lookup match = { NULL, hdev };
6661         u8 status, zero_cod[] = { 0, 0, 0 };
6662
6663         mgmt_pending_foreach(MGMT_OP_SET_POWERED, hdev, settings_rsp, &match);
6664
6665         /* If the power off is because of hdev unregistration let
6666          * use the appropriate INVALID_INDEX status. Otherwise use
6667          * NOT_POWERED. We cover both scenarios here since later in
6668          * mgmt_index_removed() any hci_conn callbacks will have already
6669          * been triggered, potentially causing misleading DISCONNECTED
6670          * status responses.
6671          */
6672         if (hci_dev_test_flag(hdev, HCI_UNREGISTER))
6673                 status = MGMT_STATUS_INVALID_INDEX;
6674         else
6675                 status = MGMT_STATUS_NOT_POWERED;
6676
6677         mgmt_pending_foreach(0, hdev, cmd_complete_rsp, &status);
6678
6679         if (memcmp(hdev->dev_class, zero_cod, sizeof(zero_cod)) != 0) {
6680                 mgmt_limited_event(MGMT_EV_CLASS_OF_DEV_CHANGED, hdev,
6681                                    zero_cod, sizeof(zero_cod),
6682                                    HCI_MGMT_DEV_CLASS_EVENTS, NULL);
6683                 ext_info_changed(hdev, NULL);
6684         }
6685
6686         new_settings(hdev, match.sk);
6687
6688         if (match.sk)
6689                 sock_put(match.sk);
6690 }
6691
6692 void mgmt_set_powered_failed(struct hci_dev *hdev, int err)
6693 {
6694         struct mgmt_pending_cmd *cmd;
6695         u8 status;
6696
6697         cmd = pending_find(MGMT_OP_SET_POWERED, hdev);
6698         if (!cmd)
6699                 return;
6700
6701         if (err == -ERFKILL)
6702                 status = MGMT_STATUS_RFKILLED;
6703         else
6704                 status = MGMT_STATUS_FAILED;
6705
6706         mgmt_cmd_status(cmd->sk, hdev->id, MGMT_OP_SET_POWERED, status);
6707
6708         mgmt_pending_remove(cmd);
6709 }
6710
6711 void mgmt_new_link_key(struct hci_dev *hdev, struct link_key *key,
6712                        bool persistent)
6713 {
6714         struct mgmt_ev_new_link_key ev;
6715
6716         memset(&ev, 0, sizeof(ev));
6717
6718         ev.store_hint = persistent;
6719         bacpy(&ev.key.addr.bdaddr, &key->bdaddr);
6720         ev.key.addr.type = BDADDR_BREDR;
6721         ev.key.type = key->type;
6722         memcpy(ev.key.val, key->val, HCI_LINK_KEY_SIZE);
6723         ev.key.pin_len = key->pin_len;
6724
6725         mgmt_event(MGMT_EV_NEW_LINK_KEY, hdev, &ev, sizeof(ev), NULL);
6726 }
6727
6728 static u8 mgmt_ltk_type(struct smp_ltk *ltk)
6729 {
6730         switch (ltk->type) {
6731         case SMP_LTK:
6732         case SMP_LTK_SLAVE:
6733                 if (ltk->authenticated)
6734                         return MGMT_LTK_AUTHENTICATED;
6735                 return MGMT_LTK_UNAUTHENTICATED;
6736         case SMP_LTK_P256:
6737                 if (ltk->authenticated)
6738                         return MGMT_LTK_P256_AUTH;
6739                 return MGMT_LTK_P256_UNAUTH;
6740         case SMP_LTK_P256_DEBUG:
6741                 return MGMT_LTK_P256_DEBUG;
6742         }
6743
6744         return MGMT_LTK_UNAUTHENTICATED;
6745 }
6746
6747 void mgmt_new_ltk(struct hci_dev *hdev, struct smp_ltk *key, bool persistent)
6748 {
6749         struct mgmt_ev_new_long_term_key ev;
6750
6751         memset(&ev, 0, sizeof(ev));
6752
6753         /* Devices using resolvable or non-resolvable random addresses
6754          * without providing an identity resolving key don't require
6755          * to store long term keys. Their addresses will change the
6756          * next time around.
6757          *
6758          * Only when a remote device provides an identity address
6759          * make sure the long term key is stored. If the remote
6760          * identity is known, the long term keys are internally
6761          * mapped to the identity address. So allow static random
6762          * and public addresses here.
6763          */
6764         if (key->bdaddr_type == ADDR_LE_DEV_RANDOM &&
6765             (key->bdaddr.b[5] & 0xc0) != 0xc0)
6766                 ev.store_hint = 0x00;
6767         else
6768                 ev.store_hint = persistent;
6769
6770         bacpy(&ev.key.addr.bdaddr, &key->bdaddr);
6771         ev.key.addr.type = link_to_bdaddr(LE_LINK, key->bdaddr_type);
6772         ev.key.type = mgmt_ltk_type(key);
6773         ev.key.enc_size = key->enc_size;
6774         ev.key.ediv = key->ediv;
6775         ev.key.rand = key->rand;
6776
6777         if (key->type == SMP_LTK)
6778                 ev.key.master = 1;
6779
6780         /* Make sure we copy only the significant bytes based on the
6781          * encryption key size, and set the rest of the value to zeroes.
6782          */
6783         memcpy(ev.key.val, key->val, key->enc_size);
6784         memset(ev.key.val + key->enc_size, 0,
6785                sizeof(ev.key.val) - key->enc_size);
6786
6787         mgmt_event(MGMT_EV_NEW_LONG_TERM_KEY, hdev, &ev, sizeof(ev), NULL);
6788 }
6789
6790 void mgmt_new_irk(struct hci_dev *hdev, struct smp_irk *irk, bool persistent)
6791 {
6792         struct mgmt_ev_new_irk ev;
6793
6794         memset(&ev, 0, sizeof(ev));
6795
6796         ev.store_hint = persistent;
6797
6798         bacpy(&ev.rpa, &irk->rpa);
6799         bacpy(&ev.irk.addr.bdaddr, &irk->bdaddr);
6800         ev.irk.addr.type = link_to_bdaddr(LE_LINK, irk->addr_type);
6801         memcpy(ev.irk.val, irk->val, sizeof(irk->val));
6802
6803         mgmt_event(MGMT_EV_NEW_IRK, hdev, &ev, sizeof(ev), NULL);
6804 }
6805
6806 void mgmt_new_csrk(struct hci_dev *hdev, struct smp_csrk *csrk,
6807                    bool persistent)
6808 {
6809         struct mgmt_ev_new_csrk ev;
6810
6811         memset(&ev, 0, sizeof(ev));
6812
6813         /* Devices using resolvable or non-resolvable random addresses
6814          * without providing an identity resolving key don't require
6815          * to store signature resolving keys. Their addresses will change
6816          * the next time around.
6817          *
6818          * Only when a remote device provides an identity address
6819          * make sure the signature resolving key is stored. So allow
6820          * static random and public addresses here.
6821          */
6822         if (csrk->bdaddr_type == ADDR_LE_DEV_RANDOM &&
6823             (csrk->bdaddr.b[5] & 0xc0) != 0xc0)
6824                 ev.store_hint = 0x00;
6825         else
6826                 ev.store_hint = persistent;
6827
6828         bacpy(&ev.key.addr.bdaddr, &csrk->bdaddr);
6829         ev.key.addr.type = link_to_bdaddr(LE_LINK, csrk->bdaddr_type);
6830         ev.key.type = csrk->type;
6831         memcpy(ev.key.val, csrk->val, sizeof(csrk->val));
6832
6833         mgmt_event(MGMT_EV_NEW_CSRK, hdev, &ev, sizeof(ev), NULL);
6834 }
6835
6836 void mgmt_new_conn_param(struct hci_dev *hdev, bdaddr_t *bdaddr,
6837                          u8 bdaddr_type, u8 store_hint, u16 min_interval,
6838                          u16 max_interval, u16 latency, u16 timeout)
6839 {
6840         struct mgmt_ev_new_conn_param ev;
6841
6842         if (!hci_is_identity_address(bdaddr, bdaddr_type))
6843                 return;
6844
6845         memset(&ev, 0, sizeof(ev));
6846         bacpy(&ev.addr.bdaddr, bdaddr);
6847         ev.addr.type = link_to_bdaddr(LE_LINK, bdaddr_type);
6848         ev.store_hint = store_hint;
6849         ev.min_interval = cpu_to_le16(min_interval);
6850         ev.max_interval = cpu_to_le16(max_interval);
6851         ev.latency = cpu_to_le16(latency);
6852         ev.timeout = cpu_to_le16(timeout);
6853
6854         mgmt_event(MGMT_EV_NEW_CONN_PARAM, hdev, &ev, sizeof(ev), NULL);
6855 }
6856
6857 void mgmt_device_connected(struct hci_dev *hdev, struct hci_conn *conn,
6858                            u32 flags, u8 *name, u8 name_len)
6859 {
6860         char buf[512];
6861         struct mgmt_ev_device_connected *ev = (void *) buf;
6862         u16 eir_len = 0;
6863
6864         bacpy(&ev->addr.bdaddr, &conn->dst);
6865         ev->addr.type = link_to_bdaddr(conn->type, conn->dst_type);
6866
6867         ev->flags = __cpu_to_le32(flags);
6868
6869         /* We must ensure that the EIR Data fields are ordered and
6870          * unique. Keep it simple for now and avoid the problem by not
6871          * adding any BR/EDR data to the LE adv.
6872          */
6873         if (conn->le_adv_data_len > 0) {
6874                 memcpy(&ev->eir[eir_len],
6875                        conn->le_adv_data, conn->le_adv_data_len);
6876                 eir_len = conn->le_adv_data_len;
6877         } else {
6878                 if (name_len > 0)
6879                         eir_len = eir_append_data(ev->eir, 0, EIR_NAME_COMPLETE,
6880                                                   name, name_len);
6881
6882                 if (memcmp(conn->dev_class, "\0\0\0", 3) != 0)
6883                         eir_len = eir_append_data(ev->eir, eir_len,
6884                                                   EIR_CLASS_OF_DEV,
6885                                                   conn->dev_class, 3);
6886         }
6887
6888         ev->eir_len = cpu_to_le16(eir_len);
6889
6890         mgmt_event(MGMT_EV_DEVICE_CONNECTED, hdev, buf,
6891                     sizeof(*ev) + eir_len, NULL);
6892 }
6893
6894 static void disconnect_rsp(struct mgmt_pending_cmd *cmd, void *data)
6895 {
6896         struct sock **sk = data;
6897
6898         cmd->cmd_complete(cmd, 0);
6899
6900         *sk = cmd->sk;
6901         sock_hold(*sk);
6902
6903         mgmt_pending_remove(cmd);
6904 }
6905
6906 static void unpair_device_rsp(struct mgmt_pending_cmd *cmd, void *data)
6907 {
6908         struct hci_dev *hdev = data;
6909         struct mgmt_cp_unpair_device *cp = cmd->param;
6910
6911         device_unpaired(hdev, &cp->addr.bdaddr, cp->addr.type, cmd->sk);
6912
6913         cmd->cmd_complete(cmd, 0);
6914         mgmt_pending_remove(cmd);
6915 }
6916
6917 bool mgmt_powering_down(struct hci_dev *hdev)
6918 {
6919         struct mgmt_pending_cmd *cmd;
6920         struct mgmt_mode *cp;
6921
6922         cmd = pending_find(MGMT_OP_SET_POWERED, hdev);
6923         if (!cmd)
6924                 return false;
6925
6926         cp = cmd->param;
6927         if (!cp->val)
6928                 return true;
6929
6930         return false;
6931 }
6932
6933 void mgmt_device_disconnected(struct hci_dev *hdev, bdaddr_t *bdaddr,
6934                               u8 link_type, u8 addr_type, u8 reason,
6935                               bool mgmt_connected)
6936 {
6937         struct mgmt_ev_device_disconnected ev;
6938         struct sock *sk = NULL;
6939
6940         /* The connection is still in hci_conn_hash so test for 1
6941          * instead of 0 to know if this is the last one.
6942          */
6943         if (mgmt_powering_down(hdev) && hci_conn_count(hdev) == 1) {
6944                 cancel_delayed_work(&hdev->power_off);
6945                 queue_work(hdev->req_workqueue, &hdev->power_off.work);
6946         }
6947
6948         if (!mgmt_connected)
6949                 return;
6950
6951         if (link_type != ACL_LINK && link_type != LE_LINK)
6952                 return;
6953
6954         mgmt_pending_foreach(MGMT_OP_DISCONNECT, hdev, disconnect_rsp, &sk);
6955
6956         bacpy(&ev.addr.bdaddr, bdaddr);
6957         ev.addr.type = link_to_bdaddr(link_type, addr_type);
6958         ev.reason = reason;
6959
6960         mgmt_event(MGMT_EV_DEVICE_DISCONNECTED, hdev, &ev, sizeof(ev), sk);
6961
6962         if (sk)
6963                 sock_put(sk);
6964
6965         mgmt_pending_foreach(MGMT_OP_UNPAIR_DEVICE, hdev, unpair_device_rsp,
6966                              hdev);
6967 }
6968
6969 void mgmt_disconnect_failed(struct hci_dev *hdev, bdaddr_t *bdaddr,
6970                             u8 link_type, u8 addr_type, u8 status)
6971 {
6972         u8 bdaddr_type = link_to_bdaddr(link_type, addr_type);
6973         struct mgmt_cp_disconnect *cp;
6974         struct mgmt_pending_cmd *cmd;
6975
6976         mgmt_pending_foreach(MGMT_OP_UNPAIR_DEVICE, hdev, unpair_device_rsp,
6977                              hdev);
6978
6979         cmd = pending_find(MGMT_OP_DISCONNECT, hdev);
6980         if (!cmd)
6981                 return;
6982
6983         cp = cmd->param;
6984
6985         if (bacmp(bdaddr, &cp->addr.bdaddr))
6986                 return;
6987
6988         if (cp->addr.type != bdaddr_type)
6989                 return;
6990
6991         cmd->cmd_complete(cmd, mgmt_status(status));
6992         mgmt_pending_remove(cmd);
6993 }
6994
6995 void mgmt_connect_failed(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
6996                          u8 addr_type, u8 status)
6997 {
6998         struct mgmt_ev_connect_failed ev;
6999
7000         /* The connection is still in hci_conn_hash so test for 1
7001          * instead of 0 to know if this is the last one.
7002          */
7003         if (mgmt_powering_down(hdev) && hci_conn_count(hdev) == 1) {
7004                 cancel_delayed_work(&hdev->power_off);
7005                 queue_work(hdev->req_workqueue, &hdev->power_off.work);
7006         }
7007
7008         bacpy(&ev.addr.bdaddr, bdaddr);
7009         ev.addr.type = link_to_bdaddr(link_type, addr_type);
7010         ev.status = mgmt_status(status);
7011
7012         mgmt_event(MGMT_EV_CONNECT_FAILED, hdev, &ev, sizeof(ev), NULL);
7013 }
7014
7015 void mgmt_pin_code_request(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 secure)
7016 {
7017         struct mgmt_ev_pin_code_request ev;
7018
7019         bacpy(&ev.addr.bdaddr, bdaddr);
7020         ev.addr.type = BDADDR_BREDR;
7021         ev.secure = secure;
7022
7023         mgmt_event(MGMT_EV_PIN_CODE_REQUEST, hdev, &ev, sizeof(ev), NULL);
7024 }
7025
7026 void mgmt_pin_code_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
7027                                   u8 status)
7028 {
7029         struct mgmt_pending_cmd *cmd;
7030
7031         cmd = pending_find(MGMT_OP_PIN_CODE_REPLY, hdev);
7032         if (!cmd)
7033                 return;
7034
7035         cmd->cmd_complete(cmd, mgmt_status(status));
7036         mgmt_pending_remove(cmd);
7037 }
7038
7039 void mgmt_pin_code_neg_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
7040                                       u8 status)
7041 {
7042         struct mgmt_pending_cmd *cmd;
7043
7044         cmd = pending_find(MGMT_OP_PIN_CODE_NEG_REPLY, hdev);
7045         if (!cmd)
7046                 return;
7047
7048         cmd->cmd_complete(cmd, mgmt_status(status));
7049         mgmt_pending_remove(cmd);
7050 }
7051
7052 int mgmt_user_confirm_request(struct hci_dev *hdev, bdaddr_t *bdaddr,
7053                               u8 link_type, u8 addr_type, u32 value,
7054                               u8 confirm_hint)
7055 {
7056         struct mgmt_ev_user_confirm_request ev;
7057
7058         BT_DBG("%s", hdev->name);
7059
7060         bacpy(&ev.addr.bdaddr, bdaddr);
7061         ev.addr.type = link_to_bdaddr(link_type, addr_type);
7062         ev.confirm_hint = confirm_hint;
7063         ev.value = cpu_to_le32(value);
7064
7065         return mgmt_event(MGMT_EV_USER_CONFIRM_REQUEST, hdev, &ev, sizeof(ev),
7066                           NULL);
7067 }
7068
7069 int mgmt_user_passkey_request(struct hci_dev *hdev, bdaddr_t *bdaddr,
7070                               u8 link_type, u8 addr_type)
7071 {
7072         struct mgmt_ev_user_passkey_request ev;
7073
7074         BT_DBG("%s", hdev->name);
7075
7076         bacpy(&ev.addr.bdaddr, bdaddr);
7077         ev.addr.type = link_to_bdaddr(link_type, addr_type);
7078
7079         return mgmt_event(MGMT_EV_USER_PASSKEY_REQUEST, hdev, &ev, sizeof(ev),
7080                           NULL);
7081 }
7082
7083 static int user_pairing_resp_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
7084                                       u8 link_type, u8 addr_type, u8 status,
7085                                       u8 opcode)
7086 {
7087         struct mgmt_pending_cmd *cmd;
7088
7089         cmd = pending_find(opcode, hdev);
7090         if (!cmd)
7091                 return -ENOENT;
7092
7093         cmd->cmd_complete(cmd, mgmt_status(status));
7094         mgmt_pending_remove(cmd);
7095
7096         return 0;
7097 }
7098
7099 int mgmt_user_confirm_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
7100                                      u8 link_type, u8 addr_type, u8 status)
7101 {
7102         return user_pairing_resp_complete(hdev, bdaddr, link_type, addr_type,
7103                                           status, MGMT_OP_USER_CONFIRM_REPLY);
7104 }
7105
7106 int mgmt_user_confirm_neg_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
7107                                          u8 link_type, u8 addr_type, u8 status)
7108 {
7109         return user_pairing_resp_complete(hdev, bdaddr, link_type, addr_type,
7110                                           status,
7111                                           MGMT_OP_USER_CONFIRM_NEG_REPLY);
7112 }
7113
7114 int mgmt_user_passkey_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
7115                                      u8 link_type, u8 addr_type, u8 status)
7116 {
7117         return user_pairing_resp_complete(hdev, bdaddr, link_type, addr_type,
7118                                           status, MGMT_OP_USER_PASSKEY_REPLY);
7119 }
7120
7121 int mgmt_user_passkey_neg_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
7122                                          u8 link_type, u8 addr_type, u8 status)
7123 {
7124         return user_pairing_resp_complete(hdev, bdaddr, link_type, addr_type,
7125                                           status,
7126                                           MGMT_OP_USER_PASSKEY_NEG_REPLY);
7127 }
7128
7129 int mgmt_user_passkey_notify(struct hci_dev *hdev, bdaddr_t *bdaddr,
7130                              u8 link_type, u8 addr_type, u32 passkey,
7131                              u8 entered)
7132 {
7133         struct mgmt_ev_passkey_notify ev;
7134
7135         BT_DBG("%s", hdev->name);
7136
7137         bacpy(&ev.addr.bdaddr, bdaddr);
7138         ev.addr.type = link_to_bdaddr(link_type, addr_type);
7139         ev.passkey = __cpu_to_le32(passkey);
7140         ev.entered = entered;
7141
7142         return mgmt_event(MGMT_EV_PASSKEY_NOTIFY, hdev, &ev, sizeof(ev), NULL);
7143 }
7144
7145 void mgmt_auth_failed(struct hci_conn *conn, u8 hci_status)
7146 {
7147         struct mgmt_ev_auth_failed ev;
7148         struct mgmt_pending_cmd *cmd;
7149         u8 status = mgmt_status(hci_status);
7150
7151         bacpy(&ev.addr.bdaddr, &conn->dst);
7152         ev.addr.type = link_to_bdaddr(conn->type, conn->dst_type);
7153         ev.status = status;
7154
7155         cmd = find_pairing(conn);
7156
7157         mgmt_event(MGMT_EV_AUTH_FAILED, conn->hdev, &ev, sizeof(ev),
7158                     cmd ? cmd->sk : NULL);
7159
7160         if (cmd) {
7161                 cmd->cmd_complete(cmd, status);
7162                 mgmt_pending_remove(cmd);
7163         }
7164 }
7165
7166 void mgmt_auth_enable_complete(struct hci_dev *hdev, u8 status)
7167 {
7168         struct cmd_lookup match = { NULL, hdev };
7169         bool changed;
7170
7171         if (status) {
7172                 u8 mgmt_err = mgmt_status(status);
7173                 mgmt_pending_foreach(MGMT_OP_SET_LINK_SECURITY, hdev,
7174                                      cmd_status_rsp, &mgmt_err);
7175                 return;
7176         }
7177
7178         if (test_bit(HCI_AUTH, &hdev->flags))
7179                 changed = !hci_dev_test_and_set_flag(hdev, HCI_LINK_SECURITY);
7180         else
7181                 changed = hci_dev_test_and_clear_flag(hdev, HCI_LINK_SECURITY);
7182
7183         mgmt_pending_foreach(MGMT_OP_SET_LINK_SECURITY, hdev, settings_rsp,
7184                              &match);
7185
7186         if (changed)
7187                 new_settings(hdev, match.sk);
7188
7189         if (match.sk)
7190                 sock_put(match.sk);
7191 }
7192
7193 static void clear_eir(struct hci_request *req)
7194 {
7195         struct hci_dev *hdev = req->hdev;
7196         struct hci_cp_write_eir cp;
7197
7198         if (!lmp_ext_inq_capable(hdev))
7199                 return;
7200
7201         memset(hdev->eir, 0, sizeof(hdev->eir));
7202
7203         memset(&cp, 0, sizeof(cp));
7204
7205         hci_req_add(req, HCI_OP_WRITE_EIR, sizeof(cp), &cp);
7206 }
7207
7208 void mgmt_ssp_enable_complete(struct hci_dev *hdev, u8 enable, u8 status)
7209 {
7210         struct cmd_lookup match = { NULL, hdev };
7211         struct hci_request req;
7212         bool changed = false;
7213
7214         if (status) {
7215                 u8 mgmt_err = mgmt_status(status);
7216
7217                 if (enable && hci_dev_test_and_clear_flag(hdev,
7218                                                           HCI_SSP_ENABLED)) {
7219                         hci_dev_clear_flag(hdev, HCI_HS_ENABLED);
7220                         new_settings(hdev, NULL);
7221                 }
7222
7223                 mgmt_pending_foreach(MGMT_OP_SET_SSP, hdev, cmd_status_rsp,
7224                                      &mgmt_err);
7225                 return;
7226         }
7227
7228         if (enable) {
7229                 changed = !hci_dev_test_and_set_flag(hdev, HCI_SSP_ENABLED);
7230         } else {
7231                 changed = hci_dev_test_and_clear_flag(hdev, HCI_SSP_ENABLED);
7232                 if (!changed)
7233                         changed = hci_dev_test_and_clear_flag(hdev,
7234                                                               HCI_HS_ENABLED);
7235                 else
7236                         hci_dev_clear_flag(hdev, HCI_HS_ENABLED);
7237         }
7238
7239         mgmt_pending_foreach(MGMT_OP_SET_SSP, hdev, settings_rsp, &match);
7240
7241         if (changed)
7242                 new_settings(hdev, match.sk);
7243
7244         if (match.sk)
7245                 sock_put(match.sk);
7246
7247         hci_req_init(&req, hdev);
7248
7249         if (hci_dev_test_flag(hdev, HCI_SSP_ENABLED)) {
7250                 if (hci_dev_test_flag(hdev, HCI_USE_DEBUG_KEYS))
7251                         hci_req_add(&req, HCI_OP_WRITE_SSP_DEBUG_MODE,
7252                                     sizeof(enable), &enable);
7253                 __hci_req_update_eir(&req);
7254         } else {
7255                 clear_eir(&req);
7256         }
7257
7258         hci_req_run(&req, NULL);
7259 }
7260
7261 static void sk_lookup(struct mgmt_pending_cmd *cmd, void *data)
7262 {
7263         struct cmd_lookup *match = data;
7264
7265         if (match->sk == NULL) {
7266                 match->sk = cmd->sk;
7267                 sock_hold(match->sk);
7268         }
7269 }
7270
7271 void mgmt_set_class_of_dev_complete(struct hci_dev *hdev, u8 *dev_class,
7272                                     u8 status)
7273 {
7274         struct cmd_lookup match = { NULL, hdev, mgmt_status(status) };
7275
7276         mgmt_pending_foreach(MGMT_OP_SET_DEV_CLASS, hdev, sk_lookup, &match);
7277         mgmt_pending_foreach(MGMT_OP_ADD_UUID, hdev, sk_lookup, &match);
7278         mgmt_pending_foreach(MGMT_OP_REMOVE_UUID, hdev, sk_lookup, &match);
7279
7280         if (!status) {
7281                 mgmt_limited_event(MGMT_EV_CLASS_OF_DEV_CHANGED, hdev, dev_class,
7282                                    3, HCI_MGMT_DEV_CLASS_EVENTS, NULL);
7283                 ext_info_changed(hdev, NULL);
7284         }
7285
7286         if (match.sk)
7287                 sock_put(match.sk);
7288 }
7289
7290 void mgmt_set_local_name_complete(struct hci_dev *hdev, u8 *name, u8 status)
7291 {
7292         struct mgmt_cp_set_local_name ev;
7293         struct mgmt_pending_cmd *cmd;
7294
7295         if (status)
7296                 return;
7297
7298         memset(&ev, 0, sizeof(ev));
7299         memcpy(ev.name, name, HCI_MAX_NAME_LENGTH);
7300         memcpy(ev.short_name, hdev->short_name, HCI_MAX_SHORT_NAME_LENGTH);
7301
7302         cmd = pending_find(MGMT_OP_SET_LOCAL_NAME, hdev);
7303         if (!cmd) {
7304                 memcpy(hdev->dev_name, name, sizeof(hdev->dev_name));
7305
7306                 /* If this is a HCI command related to powering on the
7307                  * HCI dev don't send any mgmt signals.
7308                  */
7309                 if (pending_find(MGMT_OP_SET_POWERED, hdev))
7310                         return;
7311         }
7312
7313         mgmt_limited_event(MGMT_EV_LOCAL_NAME_CHANGED, hdev, &ev, sizeof(ev),
7314                            HCI_MGMT_LOCAL_NAME_EVENTS, cmd ? cmd->sk : NULL);
7315         ext_info_changed(hdev, cmd ? cmd->sk : NULL);
7316 }
7317
7318 static inline bool has_uuid(u8 *uuid, u16 uuid_count, u8 (*uuids)[16])
7319 {
7320         int i;
7321
7322         for (i = 0; i < uuid_count; i++) {
7323                 if (!memcmp(uuid, uuids[i], 16))
7324                         return true;
7325         }
7326
7327         return false;
7328 }
7329
7330 static bool eir_has_uuids(u8 *eir, u16 eir_len, u16 uuid_count, u8 (*uuids)[16])
7331 {
7332         u16 parsed = 0;
7333
7334         while (parsed < eir_len) {
7335                 u8 field_len = eir[0];
7336                 u8 uuid[16];
7337                 int i;
7338
7339                 if (field_len == 0)
7340                         break;
7341
7342                 if (eir_len - parsed < field_len + 1)
7343                         break;
7344
7345                 switch (eir[1]) {
7346                 case EIR_UUID16_ALL:
7347                 case EIR_UUID16_SOME:
7348                         for (i = 0; i + 3 <= field_len; i += 2) {
7349                                 memcpy(uuid, bluetooth_base_uuid, 16);
7350                                 uuid[13] = eir[i + 3];
7351                                 uuid[12] = eir[i + 2];
7352                                 if (has_uuid(uuid, uuid_count, uuids))
7353                                         return true;
7354                         }
7355                         break;
7356                 case EIR_UUID32_ALL:
7357                 case EIR_UUID32_SOME:
7358                         for (i = 0; i + 5 <= field_len; i += 4) {
7359                                 memcpy(uuid, bluetooth_base_uuid, 16);
7360                                 uuid[15] = eir[i + 5];
7361                                 uuid[14] = eir[i + 4];
7362                                 uuid[13] = eir[i + 3];
7363                                 uuid[12] = eir[i + 2];
7364                                 if (has_uuid(uuid, uuid_count, uuids))
7365                                         return true;
7366                         }
7367                         break;
7368                 case EIR_UUID128_ALL:
7369                 case EIR_UUID128_SOME:
7370                         for (i = 0; i + 17 <= field_len; i += 16) {
7371                                 memcpy(uuid, eir + i + 2, 16);
7372                                 if (has_uuid(uuid, uuid_count, uuids))
7373                                         return true;
7374                         }
7375                         break;
7376                 }
7377
7378                 parsed += field_len + 1;
7379                 eir += field_len + 1;
7380         }
7381
7382         return false;
7383 }
7384
7385 static void restart_le_scan(struct hci_dev *hdev)
7386 {
7387         /* If controller is not scanning we are done. */
7388         if (!hci_dev_test_flag(hdev, HCI_LE_SCAN))
7389                 return;
7390
7391         if (time_after(jiffies + DISCOV_LE_RESTART_DELAY,
7392                        hdev->discovery.scan_start +
7393                        hdev->discovery.scan_duration))
7394                 return;
7395
7396         queue_delayed_work(hdev->req_workqueue, &hdev->le_scan_restart,
7397                            DISCOV_LE_RESTART_DELAY);
7398 }
7399
7400 static bool is_filter_match(struct hci_dev *hdev, s8 rssi, u8 *eir,
7401                             u16 eir_len, u8 *scan_rsp, u8 scan_rsp_len)
7402 {
7403         /* If a RSSI threshold has been specified, and
7404          * HCI_QUIRK_STRICT_DUPLICATE_FILTER is not set, then all results with
7405          * a RSSI smaller than the RSSI threshold will be dropped. If the quirk
7406          * is set, let it through for further processing, as we might need to
7407          * restart the scan.
7408          *
7409          * For BR/EDR devices (pre 1.2) providing no RSSI during inquiry,
7410          * the results are also dropped.
7411          */
7412         if (hdev->discovery.rssi != HCI_RSSI_INVALID &&
7413             (rssi == HCI_RSSI_INVALID ||
7414             (rssi < hdev->discovery.rssi &&
7415              !test_bit(HCI_QUIRK_STRICT_DUPLICATE_FILTER, &hdev->quirks))))
7416                 return  false;
7417
7418         if (hdev->discovery.uuid_count != 0) {
7419                 /* If a list of UUIDs is provided in filter, results with no
7420                  * matching UUID should be dropped.
7421                  */
7422                 if (!eir_has_uuids(eir, eir_len, hdev->discovery.uuid_count,
7423                                    hdev->discovery.uuids) &&
7424                     !eir_has_uuids(scan_rsp, scan_rsp_len,
7425                                    hdev->discovery.uuid_count,
7426                                    hdev->discovery.uuids))
7427                         return false;
7428         }
7429
7430         /* If duplicate filtering does not report RSSI changes, then restart
7431          * scanning to ensure updated result with updated RSSI values.
7432          */
7433         if (test_bit(HCI_QUIRK_STRICT_DUPLICATE_FILTER, &hdev->quirks)) {
7434                 restart_le_scan(hdev);
7435
7436                 /* Validate RSSI value against the RSSI threshold once more. */
7437                 if (hdev->discovery.rssi != HCI_RSSI_INVALID &&
7438                     rssi < hdev->discovery.rssi)
7439                         return false;
7440         }
7441
7442         return true;
7443 }
7444
7445 void mgmt_device_found(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
7446                        u8 addr_type, u8 *dev_class, s8 rssi, u32 flags,
7447                        u8 *eir, u16 eir_len, u8 *scan_rsp, u8 scan_rsp_len)
7448 {
7449         char buf[512];
7450         struct mgmt_ev_device_found *ev = (void *)buf;
7451         size_t ev_size;
7452
7453         /* Don't send events for a non-kernel initiated discovery. With
7454          * LE one exception is if we have pend_le_reports > 0 in which
7455          * case we're doing passive scanning and want these events.
7456          */
7457         if (!hci_discovery_active(hdev)) {
7458                 if (link_type == ACL_LINK)
7459                         return;
7460                 if (link_type == LE_LINK && list_empty(&hdev->pend_le_reports))
7461                         return;
7462         }
7463
7464         if (hdev->discovery.result_filtering) {
7465                 /* We are using service discovery */
7466                 if (!is_filter_match(hdev, rssi, eir, eir_len, scan_rsp,
7467                                      scan_rsp_len))
7468                         return;
7469         }
7470
7471         if (hdev->discovery.limited) {
7472                 /* Check for limited discoverable bit */
7473                 if (dev_class) {
7474                         if (!(dev_class[1] & 0x20))
7475                                 return;
7476                 } else {
7477                         u8 *flags = eir_get_data(eir, eir_len, EIR_FLAGS, NULL);
7478                         if (!flags || !(flags[0] & LE_AD_LIMITED))
7479                                 return;
7480                 }
7481         }
7482
7483         /* Make sure that the buffer is big enough. The 5 extra bytes
7484          * are for the potential CoD field.
7485          */
7486         if (sizeof(*ev) + eir_len + scan_rsp_len + 5 > sizeof(buf))
7487                 return;
7488
7489         memset(buf, 0, sizeof(buf));
7490
7491         /* In case of device discovery with BR/EDR devices (pre 1.2), the
7492          * RSSI value was reported as 0 when not available. This behavior
7493          * is kept when using device discovery. This is required for full
7494          * backwards compatibility with the API.
7495          *
7496          * However when using service discovery, the value 127 will be
7497          * returned when the RSSI is not available.
7498          */
7499         if (rssi == HCI_RSSI_INVALID && !hdev->discovery.report_invalid_rssi &&
7500             link_type == ACL_LINK)
7501                 rssi = 0;
7502
7503         bacpy(&ev->addr.bdaddr, bdaddr);
7504         ev->addr.type = link_to_bdaddr(link_type, addr_type);
7505         ev->rssi = rssi;
7506         ev->flags = cpu_to_le32(flags);
7507
7508         if (eir_len > 0)
7509                 /* Copy EIR or advertising data into event */
7510                 memcpy(ev->eir, eir, eir_len);
7511
7512         if (dev_class && !eir_get_data(ev->eir, eir_len, EIR_CLASS_OF_DEV,
7513                                        NULL))
7514                 eir_len = eir_append_data(ev->eir, eir_len, EIR_CLASS_OF_DEV,
7515                                           dev_class, 3);
7516
7517         if (scan_rsp_len > 0)
7518                 /* Append scan response data to event */
7519                 memcpy(ev->eir + eir_len, scan_rsp, scan_rsp_len);
7520
7521         ev->eir_len = cpu_to_le16(eir_len + scan_rsp_len);
7522         ev_size = sizeof(*ev) + eir_len + scan_rsp_len;
7523
7524         mgmt_event(MGMT_EV_DEVICE_FOUND, hdev, ev, ev_size, NULL);
7525 }
7526
7527 void mgmt_remote_name(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
7528                       u8 addr_type, s8 rssi, u8 *name, u8 name_len)
7529 {
7530         struct mgmt_ev_device_found *ev;
7531         char buf[sizeof(*ev) + HCI_MAX_NAME_LENGTH + 2];
7532         u16 eir_len;
7533
7534         ev = (struct mgmt_ev_device_found *) buf;
7535
7536         memset(buf, 0, sizeof(buf));
7537
7538         bacpy(&ev->addr.bdaddr, bdaddr);
7539         ev->addr.type = link_to_bdaddr(link_type, addr_type);
7540         ev->rssi = rssi;
7541
7542         eir_len = eir_append_data(ev->eir, 0, EIR_NAME_COMPLETE, name,
7543                                   name_len);
7544
7545         ev->eir_len = cpu_to_le16(eir_len);
7546
7547         mgmt_event(MGMT_EV_DEVICE_FOUND, hdev, ev, sizeof(*ev) + eir_len, NULL);
7548 }
7549
7550 void mgmt_discovering(struct hci_dev *hdev, u8 discovering)
7551 {
7552         struct mgmt_ev_discovering ev;
7553
7554         BT_DBG("%s discovering %u", hdev->name, discovering);
7555
7556         memset(&ev, 0, sizeof(ev));
7557         ev.type = hdev->discovery.type;
7558         ev.discovering = discovering;
7559
7560         mgmt_event(MGMT_EV_DISCOVERING, hdev, &ev, sizeof(ev), NULL);
7561 }
7562
7563 static struct hci_mgmt_chan chan = {
7564         .channel        = HCI_CHANNEL_CONTROL,
7565         .handler_count  = ARRAY_SIZE(mgmt_handlers),
7566         .handlers       = mgmt_handlers,
7567         .hdev_init      = mgmt_init_hdev,
7568 };
7569
7570 int mgmt_init(void)
7571 {
7572         return hci_mgmt_chan_register(&chan);
7573 }
7574
7575 void mgmt_exit(void)
7576 {
7577         hci_mgmt_chan_unregister(&chan);
7578 }