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