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