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