Merge tag 'mvebu-dt-fixes-non-crit-3.15' of git://git.infradead.org/linux-mvebu into...
[sfrench/cifs-2.6.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/mgmt.h>
33
34 #include "smp.h"
35
36 #define MGMT_VERSION    1
37 #define MGMT_REVISION   5
38
39 static const u16 mgmt_commands[] = {
40         MGMT_OP_READ_INDEX_LIST,
41         MGMT_OP_READ_INFO,
42         MGMT_OP_SET_POWERED,
43         MGMT_OP_SET_DISCOVERABLE,
44         MGMT_OP_SET_CONNECTABLE,
45         MGMT_OP_SET_FAST_CONNECTABLE,
46         MGMT_OP_SET_PAIRABLE,
47         MGMT_OP_SET_LINK_SECURITY,
48         MGMT_OP_SET_SSP,
49         MGMT_OP_SET_HS,
50         MGMT_OP_SET_LE,
51         MGMT_OP_SET_DEV_CLASS,
52         MGMT_OP_SET_LOCAL_NAME,
53         MGMT_OP_ADD_UUID,
54         MGMT_OP_REMOVE_UUID,
55         MGMT_OP_LOAD_LINK_KEYS,
56         MGMT_OP_LOAD_LONG_TERM_KEYS,
57         MGMT_OP_DISCONNECT,
58         MGMT_OP_GET_CONNECTIONS,
59         MGMT_OP_PIN_CODE_REPLY,
60         MGMT_OP_PIN_CODE_NEG_REPLY,
61         MGMT_OP_SET_IO_CAPABILITY,
62         MGMT_OP_PAIR_DEVICE,
63         MGMT_OP_CANCEL_PAIR_DEVICE,
64         MGMT_OP_UNPAIR_DEVICE,
65         MGMT_OP_USER_CONFIRM_REPLY,
66         MGMT_OP_USER_CONFIRM_NEG_REPLY,
67         MGMT_OP_USER_PASSKEY_REPLY,
68         MGMT_OP_USER_PASSKEY_NEG_REPLY,
69         MGMT_OP_READ_LOCAL_OOB_DATA,
70         MGMT_OP_ADD_REMOTE_OOB_DATA,
71         MGMT_OP_REMOVE_REMOTE_OOB_DATA,
72         MGMT_OP_START_DISCOVERY,
73         MGMT_OP_STOP_DISCOVERY,
74         MGMT_OP_CONFIRM_NAME,
75         MGMT_OP_BLOCK_DEVICE,
76         MGMT_OP_UNBLOCK_DEVICE,
77         MGMT_OP_SET_DEVICE_ID,
78         MGMT_OP_SET_ADVERTISING,
79         MGMT_OP_SET_BREDR,
80         MGMT_OP_SET_STATIC_ADDRESS,
81         MGMT_OP_SET_SCAN_PARAMS,
82         MGMT_OP_SET_SECURE_CONN,
83         MGMT_OP_SET_DEBUG_KEYS,
84         MGMT_OP_SET_PRIVACY,
85         MGMT_OP_LOAD_IRKS,
86 };
87
88 static const u16 mgmt_events[] = {
89         MGMT_EV_CONTROLLER_ERROR,
90         MGMT_EV_INDEX_ADDED,
91         MGMT_EV_INDEX_REMOVED,
92         MGMT_EV_NEW_SETTINGS,
93         MGMT_EV_CLASS_OF_DEV_CHANGED,
94         MGMT_EV_LOCAL_NAME_CHANGED,
95         MGMT_EV_NEW_LINK_KEY,
96         MGMT_EV_NEW_LONG_TERM_KEY,
97         MGMT_EV_DEVICE_CONNECTED,
98         MGMT_EV_DEVICE_DISCONNECTED,
99         MGMT_EV_CONNECT_FAILED,
100         MGMT_EV_PIN_CODE_REQUEST,
101         MGMT_EV_USER_CONFIRM_REQUEST,
102         MGMT_EV_USER_PASSKEY_REQUEST,
103         MGMT_EV_AUTH_FAILED,
104         MGMT_EV_DEVICE_FOUND,
105         MGMT_EV_DISCOVERING,
106         MGMT_EV_DEVICE_BLOCKED,
107         MGMT_EV_DEVICE_UNBLOCKED,
108         MGMT_EV_DEVICE_UNPAIRED,
109         MGMT_EV_PASSKEY_NOTIFY,
110         MGMT_EV_NEW_IRK,
111         MGMT_EV_NEW_CSRK,
112 };
113
114 #define CACHE_TIMEOUT   msecs_to_jiffies(2 * 1000)
115
116 #define hdev_is_powered(hdev) (test_bit(HCI_UP, &hdev->flags) && \
117                                 !test_bit(HCI_AUTO_OFF, &hdev->dev_flags))
118
119 struct pending_cmd {
120         struct list_head list;
121         u16 opcode;
122         int index;
123         void *param;
124         struct sock *sk;
125         void *user_data;
126 };
127
128 /* HCI to MGMT error code conversion table */
129 static u8 mgmt_status_table[] = {
130         MGMT_STATUS_SUCCESS,
131         MGMT_STATUS_UNKNOWN_COMMAND,    /* Unknown Command */
132         MGMT_STATUS_NOT_CONNECTED,      /* No Connection */
133         MGMT_STATUS_FAILED,             /* Hardware Failure */
134         MGMT_STATUS_CONNECT_FAILED,     /* Page Timeout */
135         MGMT_STATUS_AUTH_FAILED,        /* Authentication Failed */
136         MGMT_STATUS_AUTH_FAILED,        /* PIN or Key Missing */
137         MGMT_STATUS_NO_RESOURCES,       /* Memory Full */
138         MGMT_STATUS_TIMEOUT,            /* Connection Timeout */
139         MGMT_STATUS_NO_RESOURCES,       /* Max Number of Connections */
140         MGMT_STATUS_NO_RESOURCES,       /* Max Number of SCO Connections */
141         MGMT_STATUS_ALREADY_CONNECTED,  /* ACL Connection Exists */
142         MGMT_STATUS_BUSY,               /* Command Disallowed */
143         MGMT_STATUS_NO_RESOURCES,       /* Rejected Limited Resources */
144         MGMT_STATUS_REJECTED,           /* Rejected Security */
145         MGMT_STATUS_REJECTED,           /* Rejected Personal */
146         MGMT_STATUS_TIMEOUT,            /* Host Timeout */
147         MGMT_STATUS_NOT_SUPPORTED,      /* Unsupported Feature */
148         MGMT_STATUS_INVALID_PARAMS,     /* Invalid Parameters */
149         MGMT_STATUS_DISCONNECTED,       /* OE User Ended Connection */
150         MGMT_STATUS_NO_RESOURCES,       /* OE Low Resources */
151         MGMT_STATUS_DISCONNECTED,       /* OE Power Off */
152         MGMT_STATUS_DISCONNECTED,       /* Connection Terminated */
153         MGMT_STATUS_BUSY,               /* Repeated Attempts */
154         MGMT_STATUS_REJECTED,           /* Pairing Not Allowed */
155         MGMT_STATUS_FAILED,             /* Unknown LMP PDU */
156         MGMT_STATUS_NOT_SUPPORTED,      /* Unsupported Remote Feature */
157         MGMT_STATUS_REJECTED,           /* SCO Offset Rejected */
158         MGMT_STATUS_REJECTED,           /* SCO Interval Rejected */
159         MGMT_STATUS_REJECTED,           /* Air Mode Rejected */
160         MGMT_STATUS_INVALID_PARAMS,     /* Invalid LMP Parameters */
161         MGMT_STATUS_FAILED,             /* Unspecified Error */
162         MGMT_STATUS_NOT_SUPPORTED,      /* Unsupported LMP Parameter Value */
163         MGMT_STATUS_FAILED,             /* Role Change Not Allowed */
164         MGMT_STATUS_TIMEOUT,            /* LMP Response Timeout */
165         MGMT_STATUS_FAILED,             /* LMP Error Transaction Collision */
166         MGMT_STATUS_FAILED,             /* LMP PDU Not Allowed */
167         MGMT_STATUS_REJECTED,           /* Encryption Mode Not Accepted */
168         MGMT_STATUS_FAILED,             /* Unit Link Key Used */
169         MGMT_STATUS_NOT_SUPPORTED,      /* QoS Not Supported */
170         MGMT_STATUS_TIMEOUT,            /* Instant Passed */
171         MGMT_STATUS_NOT_SUPPORTED,      /* Pairing Not Supported */
172         MGMT_STATUS_FAILED,             /* Transaction Collision */
173         MGMT_STATUS_INVALID_PARAMS,     /* Unacceptable Parameter */
174         MGMT_STATUS_REJECTED,           /* QoS Rejected */
175         MGMT_STATUS_NOT_SUPPORTED,      /* Classification Not Supported */
176         MGMT_STATUS_REJECTED,           /* Insufficient Security */
177         MGMT_STATUS_INVALID_PARAMS,     /* Parameter Out Of Range */
178         MGMT_STATUS_BUSY,               /* Role Switch Pending */
179         MGMT_STATUS_FAILED,             /* Slot Violation */
180         MGMT_STATUS_FAILED,             /* Role Switch Failed */
181         MGMT_STATUS_INVALID_PARAMS,     /* EIR Too Large */
182         MGMT_STATUS_NOT_SUPPORTED,      /* Simple Pairing Not Supported */
183         MGMT_STATUS_BUSY,               /* Host Busy Pairing */
184         MGMT_STATUS_REJECTED,           /* Rejected, No Suitable Channel */
185         MGMT_STATUS_BUSY,               /* Controller Busy */
186         MGMT_STATUS_INVALID_PARAMS,     /* Unsuitable Connection Interval */
187         MGMT_STATUS_TIMEOUT,            /* Directed Advertising Timeout */
188         MGMT_STATUS_AUTH_FAILED,        /* Terminated Due to MIC Failure */
189         MGMT_STATUS_CONNECT_FAILED,     /* Connection Establishment Failed */
190         MGMT_STATUS_CONNECT_FAILED,     /* MAC Connection Failed */
191 };
192
193 static u8 mgmt_status(u8 hci_status)
194 {
195         if (hci_status < ARRAY_SIZE(mgmt_status_table))
196                 return mgmt_status_table[hci_status];
197
198         return MGMT_STATUS_FAILED;
199 }
200
201 static int cmd_status(struct sock *sk, u16 index, u16 cmd, u8 status)
202 {
203         struct sk_buff *skb;
204         struct mgmt_hdr *hdr;
205         struct mgmt_ev_cmd_status *ev;
206         int err;
207
208         BT_DBG("sock %p, index %u, cmd %u, status %u", sk, index, cmd, status);
209
210         skb = alloc_skb(sizeof(*hdr) + sizeof(*ev), GFP_KERNEL);
211         if (!skb)
212                 return -ENOMEM;
213
214         hdr = (void *) skb_put(skb, sizeof(*hdr));
215
216         hdr->opcode = cpu_to_le16(MGMT_EV_CMD_STATUS);
217         hdr->index = cpu_to_le16(index);
218         hdr->len = cpu_to_le16(sizeof(*ev));
219
220         ev = (void *) skb_put(skb, sizeof(*ev));
221         ev->status = status;
222         ev->opcode = cpu_to_le16(cmd);
223
224         err = sock_queue_rcv_skb(sk, skb);
225         if (err < 0)
226                 kfree_skb(skb);
227
228         return err;
229 }
230
231 static int cmd_complete(struct sock *sk, u16 index, u16 cmd, u8 status,
232                         void *rp, size_t rp_len)
233 {
234         struct sk_buff *skb;
235         struct mgmt_hdr *hdr;
236         struct mgmt_ev_cmd_complete *ev;
237         int err;
238
239         BT_DBG("sock %p", sk);
240
241         skb = alloc_skb(sizeof(*hdr) + sizeof(*ev) + rp_len, GFP_KERNEL);
242         if (!skb)
243                 return -ENOMEM;
244
245         hdr = (void *) skb_put(skb, sizeof(*hdr));
246
247         hdr->opcode = cpu_to_le16(MGMT_EV_CMD_COMPLETE);
248         hdr->index = cpu_to_le16(index);
249         hdr->len = cpu_to_le16(sizeof(*ev) + rp_len);
250
251         ev = (void *) skb_put(skb, sizeof(*ev) + rp_len);
252         ev->opcode = cpu_to_le16(cmd);
253         ev->status = status;
254
255         if (rp)
256                 memcpy(ev->data, rp, rp_len);
257
258         err = sock_queue_rcv_skb(sk, skb);
259         if (err < 0)
260                 kfree_skb(skb);
261
262         return err;
263 }
264
265 static int read_version(struct sock *sk, struct hci_dev *hdev, void *data,
266                         u16 data_len)
267 {
268         struct mgmt_rp_read_version rp;
269
270         BT_DBG("sock %p", sk);
271
272         rp.version = MGMT_VERSION;
273         rp.revision = cpu_to_le16(MGMT_REVISION);
274
275         return cmd_complete(sk, MGMT_INDEX_NONE, MGMT_OP_READ_VERSION, 0, &rp,
276                             sizeof(rp));
277 }
278
279 static int read_commands(struct sock *sk, struct hci_dev *hdev, void *data,
280                          u16 data_len)
281 {
282         struct mgmt_rp_read_commands *rp;
283         const u16 num_commands = ARRAY_SIZE(mgmt_commands);
284         const u16 num_events = ARRAY_SIZE(mgmt_events);
285         __le16 *opcode;
286         size_t rp_size;
287         int i, err;
288
289         BT_DBG("sock %p", sk);
290
291         rp_size = sizeof(*rp) + ((num_commands + num_events) * sizeof(u16));
292
293         rp = kmalloc(rp_size, GFP_KERNEL);
294         if (!rp)
295                 return -ENOMEM;
296
297         rp->num_commands = cpu_to_le16(num_commands);
298         rp->num_events = cpu_to_le16(num_events);
299
300         for (i = 0, opcode = rp->opcodes; i < num_commands; i++, opcode++)
301                 put_unaligned_le16(mgmt_commands[i], opcode);
302
303         for (i = 0; i < num_events; i++, opcode++)
304                 put_unaligned_le16(mgmt_events[i], opcode);
305
306         err = cmd_complete(sk, MGMT_INDEX_NONE, MGMT_OP_READ_COMMANDS, 0, rp,
307                            rp_size);
308         kfree(rp);
309
310         return err;
311 }
312
313 static int read_index_list(struct sock *sk, struct hci_dev *hdev, void *data,
314                            u16 data_len)
315 {
316         struct mgmt_rp_read_index_list *rp;
317         struct hci_dev *d;
318         size_t rp_len;
319         u16 count;
320         int err;
321
322         BT_DBG("sock %p", sk);
323
324         read_lock(&hci_dev_list_lock);
325
326         count = 0;
327         list_for_each_entry(d, &hci_dev_list, list) {
328                 if (d->dev_type == HCI_BREDR)
329                         count++;
330         }
331
332         rp_len = sizeof(*rp) + (2 * count);
333         rp = kmalloc(rp_len, GFP_ATOMIC);
334         if (!rp) {
335                 read_unlock(&hci_dev_list_lock);
336                 return -ENOMEM;
337         }
338
339         count = 0;
340         list_for_each_entry(d, &hci_dev_list, list) {
341                 if (test_bit(HCI_SETUP, &d->dev_flags))
342                         continue;
343
344                 if (test_bit(HCI_USER_CHANNEL, &d->dev_flags))
345                         continue;
346
347                 if (d->dev_type == HCI_BREDR) {
348                         rp->index[count++] = cpu_to_le16(d->id);
349                         BT_DBG("Added hci%u", d->id);
350                 }
351         }
352
353         rp->num_controllers = cpu_to_le16(count);
354         rp_len = sizeof(*rp) + (2 * count);
355
356         read_unlock(&hci_dev_list_lock);
357
358         err = cmd_complete(sk, MGMT_INDEX_NONE, MGMT_OP_READ_INDEX_LIST, 0, rp,
359                            rp_len);
360
361         kfree(rp);
362
363         return err;
364 }
365
366 static u32 get_supported_settings(struct hci_dev *hdev)
367 {
368         u32 settings = 0;
369
370         settings |= MGMT_SETTING_POWERED;
371         settings |= MGMT_SETTING_PAIRABLE;
372         settings |= MGMT_SETTING_DEBUG_KEYS;
373
374         if (lmp_bredr_capable(hdev)) {
375                 settings |= MGMT_SETTING_CONNECTABLE;
376                 if (hdev->hci_ver >= BLUETOOTH_VER_1_2)
377                         settings |= MGMT_SETTING_FAST_CONNECTABLE;
378                 settings |= MGMT_SETTING_DISCOVERABLE;
379                 settings |= MGMT_SETTING_BREDR;
380                 settings |= MGMT_SETTING_LINK_SECURITY;
381
382                 if (lmp_ssp_capable(hdev)) {
383                         settings |= MGMT_SETTING_SSP;
384                         settings |= MGMT_SETTING_HS;
385                 }
386
387                 if (lmp_sc_capable(hdev) ||
388                     test_bit(HCI_FORCE_SC, &hdev->dev_flags))
389                         settings |= MGMT_SETTING_SECURE_CONN;
390         }
391
392         if (lmp_le_capable(hdev)) {
393                 settings |= MGMT_SETTING_LE;
394                 settings |= MGMT_SETTING_ADVERTISING;
395                 settings |= MGMT_SETTING_PRIVACY;
396         }
397
398         return settings;
399 }
400
401 static u32 get_current_settings(struct hci_dev *hdev)
402 {
403         u32 settings = 0;
404
405         if (hdev_is_powered(hdev))
406                 settings |= MGMT_SETTING_POWERED;
407
408         if (test_bit(HCI_CONNECTABLE, &hdev->dev_flags))
409                 settings |= MGMT_SETTING_CONNECTABLE;
410
411         if (test_bit(HCI_FAST_CONNECTABLE, &hdev->dev_flags))
412                 settings |= MGMT_SETTING_FAST_CONNECTABLE;
413
414         if (test_bit(HCI_DISCOVERABLE, &hdev->dev_flags))
415                 settings |= MGMT_SETTING_DISCOVERABLE;
416
417         if (test_bit(HCI_PAIRABLE, &hdev->dev_flags))
418                 settings |= MGMT_SETTING_PAIRABLE;
419
420         if (test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags))
421                 settings |= MGMT_SETTING_BREDR;
422
423         if (test_bit(HCI_LE_ENABLED, &hdev->dev_flags))
424                 settings |= MGMT_SETTING_LE;
425
426         if (test_bit(HCI_LINK_SECURITY, &hdev->dev_flags))
427                 settings |= MGMT_SETTING_LINK_SECURITY;
428
429         if (test_bit(HCI_SSP_ENABLED, &hdev->dev_flags))
430                 settings |= MGMT_SETTING_SSP;
431
432         if (test_bit(HCI_HS_ENABLED, &hdev->dev_flags))
433                 settings |= MGMT_SETTING_HS;
434
435         if (test_bit(HCI_ADVERTISING, &hdev->dev_flags))
436                 settings |= MGMT_SETTING_ADVERTISING;
437
438         if (test_bit(HCI_SC_ENABLED, &hdev->dev_flags))
439                 settings |= MGMT_SETTING_SECURE_CONN;
440
441         if (test_bit(HCI_DEBUG_KEYS, &hdev->dev_flags))
442                 settings |= MGMT_SETTING_DEBUG_KEYS;
443
444         if (test_bit(HCI_PRIVACY, &hdev->dev_flags))
445                 settings |= MGMT_SETTING_PRIVACY;
446
447         return settings;
448 }
449
450 #define PNP_INFO_SVCLASS_ID             0x1200
451
452 static u8 *create_uuid16_list(struct hci_dev *hdev, u8 *data, ptrdiff_t len)
453 {
454         u8 *ptr = data, *uuids_start = NULL;
455         struct bt_uuid *uuid;
456
457         if (len < 4)
458                 return ptr;
459
460         list_for_each_entry(uuid, &hdev->uuids, list) {
461                 u16 uuid16;
462
463                 if (uuid->size != 16)
464                         continue;
465
466                 uuid16 = get_unaligned_le16(&uuid->uuid[12]);
467                 if (uuid16 < 0x1100)
468                         continue;
469
470                 if (uuid16 == PNP_INFO_SVCLASS_ID)
471                         continue;
472
473                 if (!uuids_start) {
474                         uuids_start = ptr;
475                         uuids_start[0] = 1;
476                         uuids_start[1] = EIR_UUID16_ALL;
477                         ptr += 2;
478                 }
479
480                 /* Stop if not enough space to put next UUID */
481                 if ((ptr - data) + sizeof(u16) > len) {
482                         uuids_start[1] = EIR_UUID16_SOME;
483                         break;
484                 }
485
486                 *ptr++ = (uuid16 & 0x00ff);
487                 *ptr++ = (uuid16 & 0xff00) >> 8;
488                 uuids_start[0] += sizeof(uuid16);
489         }
490
491         return ptr;
492 }
493
494 static u8 *create_uuid32_list(struct hci_dev *hdev, u8 *data, ptrdiff_t len)
495 {
496         u8 *ptr = data, *uuids_start = NULL;
497         struct bt_uuid *uuid;
498
499         if (len < 6)
500                 return ptr;
501
502         list_for_each_entry(uuid, &hdev->uuids, list) {
503                 if (uuid->size != 32)
504                         continue;
505
506                 if (!uuids_start) {
507                         uuids_start = ptr;
508                         uuids_start[0] = 1;
509                         uuids_start[1] = EIR_UUID32_ALL;
510                         ptr += 2;
511                 }
512
513                 /* Stop if not enough space to put next UUID */
514                 if ((ptr - data) + sizeof(u32) > len) {
515                         uuids_start[1] = EIR_UUID32_SOME;
516                         break;
517                 }
518
519                 memcpy(ptr, &uuid->uuid[12], sizeof(u32));
520                 ptr += sizeof(u32);
521                 uuids_start[0] += sizeof(u32);
522         }
523
524         return ptr;
525 }
526
527 static u8 *create_uuid128_list(struct hci_dev *hdev, u8 *data, ptrdiff_t len)
528 {
529         u8 *ptr = data, *uuids_start = NULL;
530         struct bt_uuid *uuid;
531
532         if (len < 18)
533                 return ptr;
534
535         list_for_each_entry(uuid, &hdev->uuids, list) {
536                 if (uuid->size != 128)
537                         continue;
538
539                 if (!uuids_start) {
540                         uuids_start = ptr;
541                         uuids_start[0] = 1;
542                         uuids_start[1] = EIR_UUID128_ALL;
543                         ptr += 2;
544                 }
545
546                 /* Stop if not enough space to put next UUID */
547                 if ((ptr - data) + 16 > len) {
548                         uuids_start[1] = EIR_UUID128_SOME;
549                         break;
550                 }
551
552                 memcpy(ptr, uuid->uuid, 16);
553                 ptr += 16;
554                 uuids_start[0] += 16;
555         }
556
557         return ptr;
558 }
559
560 static struct pending_cmd *mgmt_pending_find(u16 opcode, struct hci_dev *hdev)
561 {
562         struct pending_cmd *cmd;
563
564         list_for_each_entry(cmd, &hdev->mgmt_pending, list) {
565                 if (cmd->opcode == opcode)
566                         return cmd;
567         }
568
569         return NULL;
570 }
571
572 static u8 create_scan_rsp_data(struct hci_dev *hdev, u8 *ptr)
573 {
574         u8 ad_len = 0;
575         size_t name_len;
576
577         name_len = strlen(hdev->dev_name);
578         if (name_len > 0) {
579                 size_t max_len = HCI_MAX_AD_LENGTH - ad_len - 2;
580
581                 if (name_len > max_len) {
582                         name_len = max_len;
583                         ptr[1] = EIR_NAME_SHORT;
584                 } else
585                         ptr[1] = EIR_NAME_COMPLETE;
586
587                 ptr[0] = name_len + 1;
588
589                 memcpy(ptr + 2, hdev->dev_name, name_len);
590
591                 ad_len += (name_len + 2);
592                 ptr += (name_len + 2);
593         }
594
595         return ad_len;
596 }
597
598 static void update_scan_rsp_data(struct hci_request *req)
599 {
600         struct hci_dev *hdev = req->hdev;
601         struct hci_cp_le_set_scan_rsp_data cp;
602         u8 len;
603
604         if (!test_bit(HCI_LE_ENABLED, &hdev->dev_flags))
605                 return;
606
607         memset(&cp, 0, sizeof(cp));
608
609         len = create_scan_rsp_data(hdev, cp.data);
610
611         if (hdev->scan_rsp_data_len == len &&
612             memcmp(cp.data, hdev->scan_rsp_data, len) == 0)
613                 return;
614
615         memcpy(hdev->scan_rsp_data, cp.data, sizeof(cp.data));
616         hdev->scan_rsp_data_len = len;
617
618         cp.length = len;
619
620         hci_req_add(req, HCI_OP_LE_SET_SCAN_RSP_DATA, sizeof(cp), &cp);
621 }
622
623 static u8 get_adv_discov_flags(struct hci_dev *hdev)
624 {
625         struct pending_cmd *cmd;
626
627         /* If there's a pending mgmt command the flags will not yet have
628          * their final values, so check for this first.
629          */
630         cmd = mgmt_pending_find(MGMT_OP_SET_DISCOVERABLE, hdev);
631         if (cmd) {
632                 struct mgmt_mode *cp = cmd->param;
633                 if (cp->val == 0x01)
634                         return LE_AD_GENERAL;
635                 else if (cp->val == 0x02)
636                         return LE_AD_LIMITED;
637         } else {
638                 if (test_bit(HCI_LIMITED_DISCOVERABLE, &hdev->dev_flags))
639                         return LE_AD_LIMITED;
640                 else if (test_bit(HCI_DISCOVERABLE, &hdev->dev_flags))
641                         return LE_AD_GENERAL;
642         }
643
644         return 0;
645 }
646
647 static u8 create_adv_data(struct hci_dev *hdev, u8 *ptr)
648 {
649         u8 ad_len = 0, flags = 0;
650
651         flags |= get_adv_discov_flags(hdev);
652
653         if (!test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags))
654                 flags |= LE_AD_NO_BREDR;
655
656         if (flags) {
657                 BT_DBG("adv flags 0x%02x", flags);
658
659                 ptr[0] = 2;
660                 ptr[1] = EIR_FLAGS;
661                 ptr[2] = flags;
662
663                 ad_len += 3;
664                 ptr += 3;
665         }
666
667         if (hdev->adv_tx_power != HCI_TX_POWER_INVALID) {
668                 ptr[0] = 2;
669                 ptr[1] = EIR_TX_POWER;
670                 ptr[2] = (u8) hdev->adv_tx_power;
671
672                 ad_len += 3;
673                 ptr += 3;
674         }
675
676         return ad_len;
677 }
678
679 static void update_adv_data(struct hci_request *req)
680 {
681         struct hci_dev *hdev = req->hdev;
682         struct hci_cp_le_set_adv_data cp;
683         u8 len;
684
685         if (!test_bit(HCI_LE_ENABLED, &hdev->dev_flags))
686                 return;
687
688         memset(&cp, 0, sizeof(cp));
689
690         len = create_adv_data(hdev, cp.data);
691
692         if (hdev->adv_data_len == len &&
693             memcmp(cp.data, hdev->adv_data, len) == 0)
694                 return;
695
696         memcpy(hdev->adv_data, cp.data, sizeof(cp.data));
697         hdev->adv_data_len = len;
698
699         cp.length = len;
700
701         hci_req_add(req, HCI_OP_LE_SET_ADV_DATA, sizeof(cp), &cp);
702 }
703
704 static void create_eir(struct hci_dev *hdev, u8 *data)
705 {
706         u8 *ptr = data;
707         size_t name_len;
708
709         name_len = strlen(hdev->dev_name);
710
711         if (name_len > 0) {
712                 /* EIR Data type */
713                 if (name_len > 48) {
714                         name_len = 48;
715                         ptr[1] = EIR_NAME_SHORT;
716                 } else
717                         ptr[1] = EIR_NAME_COMPLETE;
718
719                 /* EIR Data length */
720                 ptr[0] = name_len + 1;
721
722                 memcpy(ptr + 2, hdev->dev_name, name_len);
723
724                 ptr += (name_len + 2);
725         }
726
727         if (hdev->inq_tx_power != HCI_TX_POWER_INVALID) {
728                 ptr[0] = 2;
729                 ptr[1] = EIR_TX_POWER;
730                 ptr[2] = (u8) hdev->inq_tx_power;
731
732                 ptr += 3;
733         }
734
735         if (hdev->devid_source > 0) {
736                 ptr[0] = 9;
737                 ptr[1] = EIR_DEVICE_ID;
738
739                 put_unaligned_le16(hdev->devid_source, ptr + 2);
740                 put_unaligned_le16(hdev->devid_vendor, ptr + 4);
741                 put_unaligned_le16(hdev->devid_product, ptr + 6);
742                 put_unaligned_le16(hdev->devid_version, ptr + 8);
743
744                 ptr += 10;
745         }
746
747         ptr = create_uuid16_list(hdev, ptr, HCI_MAX_EIR_LENGTH - (ptr - data));
748         ptr = create_uuid32_list(hdev, ptr, HCI_MAX_EIR_LENGTH - (ptr - data));
749         ptr = create_uuid128_list(hdev, ptr, HCI_MAX_EIR_LENGTH - (ptr - data));
750 }
751
752 static void update_eir(struct hci_request *req)
753 {
754         struct hci_dev *hdev = req->hdev;
755         struct hci_cp_write_eir cp;
756
757         if (!hdev_is_powered(hdev))
758                 return;
759
760         if (!lmp_ext_inq_capable(hdev))
761                 return;
762
763         if (!test_bit(HCI_SSP_ENABLED, &hdev->dev_flags))
764                 return;
765
766         if (test_bit(HCI_SERVICE_CACHE, &hdev->dev_flags))
767                 return;
768
769         memset(&cp, 0, sizeof(cp));
770
771         create_eir(hdev, cp.data);
772
773         if (memcmp(cp.data, hdev->eir, sizeof(cp.data)) == 0)
774                 return;
775
776         memcpy(hdev->eir, cp.data, sizeof(cp.data));
777
778         hci_req_add(req, HCI_OP_WRITE_EIR, sizeof(cp), &cp);
779 }
780
781 static u8 get_service_classes(struct hci_dev *hdev)
782 {
783         struct bt_uuid *uuid;
784         u8 val = 0;
785
786         list_for_each_entry(uuid, &hdev->uuids, list)
787                 val |= uuid->svc_hint;
788
789         return val;
790 }
791
792 static void update_class(struct hci_request *req)
793 {
794         struct hci_dev *hdev = req->hdev;
795         u8 cod[3];
796
797         BT_DBG("%s", hdev->name);
798
799         if (!hdev_is_powered(hdev))
800                 return;
801
802         if (!test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags))
803                 return;
804
805         if (test_bit(HCI_SERVICE_CACHE, &hdev->dev_flags))
806                 return;
807
808         cod[0] = hdev->minor_class;
809         cod[1] = hdev->major_class;
810         cod[2] = get_service_classes(hdev);
811
812         if (test_bit(HCI_LIMITED_DISCOVERABLE, &hdev->dev_flags))
813                 cod[1] |= 0x20;
814
815         if (memcmp(cod, hdev->dev_class, 3) == 0)
816                 return;
817
818         hci_req_add(req, HCI_OP_WRITE_CLASS_OF_DEV, sizeof(cod), cod);
819 }
820
821 static bool get_connectable(struct hci_dev *hdev)
822 {
823         struct pending_cmd *cmd;
824
825         /* If there's a pending mgmt command the flag will not yet have
826          * it's final value, so check for this first.
827          */
828         cmd = mgmt_pending_find(MGMT_OP_SET_CONNECTABLE, hdev);
829         if (cmd) {
830                 struct mgmt_mode *cp = cmd->param;
831                 return cp->val;
832         }
833
834         return test_bit(HCI_CONNECTABLE, &hdev->dev_flags);
835 }
836
837 static void enable_advertising(struct hci_request *req)
838 {
839         struct hci_dev *hdev = req->hdev;
840         struct hci_cp_le_set_adv_param cp;
841         u8 own_addr_type, enable = 0x01;
842         bool connectable;
843
844         /* Clear the HCI_ADVERTISING bit temporarily so that the
845          * hci_update_random_address knows that it's safe to go ahead
846          * and write a new random address. The flag will be set back on
847          * as soon as the SET_ADV_ENABLE HCI command completes.
848          */
849         clear_bit(HCI_ADVERTISING, &hdev->dev_flags);
850
851         connectable = get_connectable(hdev);
852
853         /* Set require_privacy to true only when non-connectable
854          * advertising is used. In that case it is fine to use a
855          * non-resolvable private address.
856          */
857         if (hci_update_random_address(req, !connectable, &own_addr_type) < 0)
858                 return;
859
860         memset(&cp, 0, sizeof(cp));
861         cp.min_interval = cpu_to_le16(0x0800);
862         cp.max_interval = cpu_to_le16(0x0800);
863         cp.type = connectable ? LE_ADV_IND : LE_ADV_NONCONN_IND;
864         cp.own_address_type = own_addr_type;
865         cp.channel_map = hdev->le_adv_channel_map;
866
867         hci_req_add(req, HCI_OP_LE_SET_ADV_PARAM, sizeof(cp), &cp);
868
869         hci_req_add(req, HCI_OP_LE_SET_ADV_ENABLE, sizeof(enable), &enable);
870 }
871
872 static void disable_advertising(struct hci_request *req)
873 {
874         u8 enable = 0x00;
875
876         hci_req_add(req, HCI_OP_LE_SET_ADV_ENABLE, sizeof(enable), &enable);
877 }
878
879 static void service_cache_off(struct work_struct *work)
880 {
881         struct hci_dev *hdev = container_of(work, struct hci_dev,
882                                             service_cache.work);
883         struct hci_request req;
884
885         if (!test_and_clear_bit(HCI_SERVICE_CACHE, &hdev->dev_flags))
886                 return;
887
888         hci_req_init(&req, hdev);
889
890         hci_dev_lock(hdev);
891
892         update_eir(&req);
893         update_class(&req);
894
895         hci_dev_unlock(hdev);
896
897         hci_req_run(&req, NULL);
898 }
899
900 static void rpa_expired(struct work_struct *work)
901 {
902         struct hci_dev *hdev = container_of(work, struct hci_dev,
903                                             rpa_expired.work);
904         struct hci_request req;
905
906         BT_DBG("");
907
908         set_bit(HCI_RPA_EXPIRED, &hdev->dev_flags);
909
910         if (!test_bit(HCI_ADVERTISING, &hdev->dev_flags) ||
911             hci_conn_num(hdev, LE_LINK) > 0)
912                 return;
913
914         /* The generation of a new RPA and programming it into the
915          * controller happens in the enable_advertising() function.
916          */
917
918         hci_req_init(&req, hdev);
919
920         disable_advertising(&req);
921         enable_advertising(&req);
922
923         hci_req_run(&req, NULL);
924 }
925
926 static void mgmt_init_hdev(struct sock *sk, struct hci_dev *hdev)
927 {
928         if (test_and_set_bit(HCI_MGMT, &hdev->dev_flags))
929                 return;
930
931         INIT_DELAYED_WORK(&hdev->service_cache, service_cache_off);
932         INIT_DELAYED_WORK(&hdev->rpa_expired, rpa_expired);
933
934         /* Non-mgmt controlled devices get this bit set
935          * implicitly so that pairing works for them, however
936          * for mgmt we require user-space to explicitly enable
937          * it
938          */
939         clear_bit(HCI_PAIRABLE, &hdev->dev_flags);
940 }
941
942 static int read_controller_info(struct sock *sk, struct hci_dev *hdev,
943                                 void *data, u16 data_len)
944 {
945         struct mgmt_rp_read_info rp;
946
947         BT_DBG("sock %p %s", sk, hdev->name);
948
949         hci_dev_lock(hdev);
950
951         memset(&rp, 0, sizeof(rp));
952
953         bacpy(&rp.bdaddr, &hdev->bdaddr);
954
955         rp.version = hdev->hci_ver;
956         rp.manufacturer = cpu_to_le16(hdev->manufacturer);
957
958         rp.supported_settings = cpu_to_le32(get_supported_settings(hdev));
959         rp.current_settings = cpu_to_le32(get_current_settings(hdev));
960
961         memcpy(rp.dev_class, hdev->dev_class, 3);
962
963         memcpy(rp.name, hdev->dev_name, sizeof(hdev->dev_name));
964         memcpy(rp.short_name, hdev->short_name, sizeof(hdev->short_name));
965
966         hci_dev_unlock(hdev);
967
968         return cmd_complete(sk, hdev->id, MGMT_OP_READ_INFO, 0, &rp,
969                             sizeof(rp));
970 }
971
972 static void mgmt_pending_free(struct pending_cmd *cmd)
973 {
974         sock_put(cmd->sk);
975         kfree(cmd->param);
976         kfree(cmd);
977 }
978
979 static struct pending_cmd *mgmt_pending_add(struct sock *sk, u16 opcode,
980                                             struct hci_dev *hdev, void *data,
981                                             u16 len)
982 {
983         struct pending_cmd *cmd;
984
985         cmd = kmalloc(sizeof(*cmd), GFP_KERNEL);
986         if (!cmd)
987                 return NULL;
988
989         cmd->opcode = opcode;
990         cmd->index = hdev->id;
991
992         cmd->param = kmalloc(len, GFP_KERNEL);
993         if (!cmd->param) {
994                 kfree(cmd);
995                 return NULL;
996         }
997
998         if (data)
999                 memcpy(cmd->param, data, len);
1000
1001         cmd->sk = sk;
1002         sock_hold(sk);
1003
1004         list_add(&cmd->list, &hdev->mgmt_pending);
1005
1006         return cmd;
1007 }
1008
1009 static void mgmt_pending_foreach(u16 opcode, struct hci_dev *hdev,
1010                                  void (*cb)(struct pending_cmd *cmd,
1011                                             void *data),
1012                                  void *data)
1013 {
1014         struct pending_cmd *cmd, *tmp;
1015
1016         list_for_each_entry_safe(cmd, tmp, &hdev->mgmt_pending, list) {
1017                 if (opcode > 0 && cmd->opcode != opcode)
1018                         continue;
1019
1020                 cb(cmd, data);
1021         }
1022 }
1023
1024 static void mgmt_pending_remove(struct pending_cmd *cmd)
1025 {
1026         list_del(&cmd->list);
1027         mgmt_pending_free(cmd);
1028 }
1029
1030 static int send_settings_rsp(struct sock *sk, u16 opcode, struct hci_dev *hdev)
1031 {
1032         __le32 settings = cpu_to_le32(get_current_settings(hdev));
1033
1034         return cmd_complete(sk, hdev->id, opcode, 0, &settings,
1035                             sizeof(settings));
1036 }
1037
1038 static void clean_up_hci_complete(struct hci_dev *hdev, u8 status)
1039 {
1040         BT_DBG("%s status 0x%02x", hdev->name, status);
1041
1042         if (hci_conn_count(hdev) == 0) {
1043                 cancel_delayed_work(&hdev->power_off);
1044                 queue_work(hdev->req_workqueue, &hdev->power_off.work);
1045         }
1046 }
1047
1048 static int clean_up_hci_state(struct hci_dev *hdev)
1049 {
1050         struct hci_request req;
1051         struct hci_conn *conn;
1052
1053         hci_req_init(&req, hdev);
1054
1055         if (test_bit(HCI_ISCAN, &hdev->flags) ||
1056             test_bit(HCI_PSCAN, &hdev->flags)) {
1057                 u8 scan = 0x00;
1058                 hci_req_add(&req, HCI_OP_WRITE_SCAN_ENABLE, 1, &scan);
1059         }
1060
1061         if (test_bit(HCI_ADVERTISING, &hdev->dev_flags))
1062                 disable_advertising(&req);
1063
1064         if (test_bit(HCI_LE_SCAN, &hdev->dev_flags)) {
1065                 hci_req_add_le_scan_disable(&req);
1066         }
1067
1068         list_for_each_entry(conn, &hdev->conn_hash.list, list) {
1069                 struct hci_cp_disconnect dc;
1070                 struct hci_cp_reject_conn_req rej;
1071
1072                 switch (conn->state) {
1073                 case BT_CONNECTED:
1074                 case BT_CONFIG:
1075                         dc.handle = cpu_to_le16(conn->handle);
1076                         dc.reason = 0x15; /* Terminated due to Power Off */
1077                         hci_req_add(&req, HCI_OP_DISCONNECT, sizeof(dc), &dc);
1078                         break;
1079                 case BT_CONNECT:
1080                         if (conn->type == LE_LINK)
1081                                 hci_req_add(&req, HCI_OP_LE_CREATE_CONN_CANCEL,
1082                                             0, NULL);
1083                         else if (conn->type == ACL_LINK)
1084                                 hci_req_add(&req, HCI_OP_CREATE_CONN_CANCEL,
1085                                             6, &conn->dst);
1086                         break;
1087                 case BT_CONNECT2:
1088                         bacpy(&rej.bdaddr, &conn->dst);
1089                         rej.reason = 0x15; /* Terminated due to Power Off */
1090                         if (conn->type == ACL_LINK)
1091                                 hci_req_add(&req, HCI_OP_REJECT_CONN_REQ,
1092                                             sizeof(rej), &rej);
1093                         else if (conn->type == SCO_LINK)
1094                                 hci_req_add(&req, HCI_OP_REJECT_SYNC_CONN_REQ,
1095                                             sizeof(rej), &rej);
1096                         break;
1097                 }
1098         }
1099
1100         return hci_req_run(&req, clean_up_hci_complete);
1101 }
1102
1103 static int set_powered(struct sock *sk, struct hci_dev *hdev, void *data,
1104                        u16 len)
1105 {
1106         struct mgmt_mode *cp = data;
1107         struct pending_cmd *cmd;
1108         int err;
1109
1110         BT_DBG("request for %s", hdev->name);
1111
1112         if (cp->val != 0x00 && cp->val != 0x01)
1113                 return cmd_status(sk, hdev->id, MGMT_OP_SET_POWERED,
1114                                   MGMT_STATUS_INVALID_PARAMS);
1115
1116         hci_dev_lock(hdev);
1117
1118         if (mgmt_pending_find(MGMT_OP_SET_POWERED, hdev)) {
1119                 err = cmd_status(sk, hdev->id, MGMT_OP_SET_POWERED,
1120                                  MGMT_STATUS_BUSY);
1121                 goto failed;
1122         }
1123
1124         if (test_and_clear_bit(HCI_AUTO_OFF, &hdev->dev_flags)) {
1125                 cancel_delayed_work(&hdev->power_off);
1126
1127                 if (cp->val) {
1128                         mgmt_pending_add(sk, MGMT_OP_SET_POWERED, hdev,
1129                                          data, len);
1130                         err = mgmt_powered(hdev, 1);
1131                         goto failed;
1132                 }
1133         }
1134
1135         if (!!cp->val == hdev_is_powered(hdev)) {
1136                 err = send_settings_rsp(sk, MGMT_OP_SET_POWERED, hdev);
1137                 goto failed;
1138         }
1139
1140         cmd = mgmt_pending_add(sk, MGMT_OP_SET_POWERED, hdev, data, len);
1141         if (!cmd) {
1142                 err = -ENOMEM;
1143                 goto failed;
1144         }
1145
1146         if (cp->val) {
1147                 queue_work(hdev->req_workqueue, &hdev->power_on);
1148                 err = 0;
1149         } else {
1150                 /* Disconnect connections, stop scans, etc */
1151                 err = clean_up_hci_state(hdev);
1152                 if (!err)
1153                         queue_delayed_work(hdev->req_workqueue, &hdev->power_off,
1154                                            HCI_POWER_OFF_TIMEOUT);
1155
1156                 /* ENODATA means there were no HCI commands queued */
1157                 if (err == -ENODATA) {
1158                         cancel_delayed_work(&hdev->power_off);
1159                         queue_work(hdev->req_workqueue, &hdev->power_off.work);
1160                         err = 0;
1161                 }
1162         }
1163
1164 failed:
1165         hci_dev_unlock(hdev);
1166         return err;
1167 }
1168
1169 static int mgmt_event(u16 event, struct hci_dev *hdev, void *data, u16 data_len,
1170                       struct sock *skip_sk)
1171 {
1172         struct sk_buff *skb;
1173         struct mgmt_hdr *hdr;
1174
1175         skb = alloc_skb(sizeof(*hdr) + data_len, GFP_KERNEL);
1176         if (!skb)
1177                 return -ENOMEM;
1178
1179         hdr = (void *) skb_put(skb, sizeof(*hdr));
1180         hdr->opcode = cpu_to_le16(event);
1181         if (hdev)
1182                 hdr->index = cpu_to_le16(hdev->id);
1183         else
1184                 hdr->index = cpu_to_le16(MGMT_INDEX_NONE);
1185         hdr->len = cpu_to_le16(data_len);
1186
1187         if (data)
1188                 memcpy(skb_put(skb, data_len), data, data_len);
1189
1190         /* Time stamp */
1191         __net_timestamp(skb);
1192
1193         hci_send_to_control(skb, skip_sk);
1194         kfree_skb(skb);
1195
1196         return 0;
1197 }
1198
1199 static int new_settings(struct hci_dev *hdev, struct sock *skip)
1200 {
1201         __le32 ev;
1202
1203         ev = cpu_to_le32(get_current_settings(hdev));
1204
1205         return mgmt_event(MGMT_EV_NEW_SETTINGS, hdev, &ev, sizeof(ev), skip);
1206 }
1207
1208 struct cmd_lookup {
1209         struct sock *sk;
1210         struct hci_dev *hdev;
1211         u8 mgmt_status;
1212 };
1213
1214 static void settings_rsp(struct pending_cmd *cmd, void *data)
1215 {
1216         struct cmd_lookup *match = data;
1217
1218         send_settings_rsp(cmd->sk, cmd->opcode, match->hdev);
1219
1220         list_del(&cmd->list);
1221
1222         if (match->sk == NULL) {
1223                 match->sk = cmd->sk;
1224                 sock_hold(match->sk);
1225         }
1226
1227         mgmt_pending_free(cmd);
1228 }
1229
1230 static void cmd_status_rsp(struct pending_cmd *cmd, void *data)
1231 {
1232         u8 *status = data;
1233
1234         cmd_status(cmd->sk, cmd->index, cmd->opcode, *status);
1235         mgmt_pending_remove(cmd);
1236 }
1237
1238 static u8 mgmt_bredr_support(struct hci_dev *hdev)
1239 {
1240         if (!lmp_bredr_capable(hdev))
1241                 return MGMT_STATUS_NOT_SUPPORTED;
1242         else if (!test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags))
1243                 return MGMT_STATUS_REJECTED;
1244         else
1245                 return MGMT_STATUS_SUCCESS;
1246 }
1247
1248 static u8 mgmt_le_support(struct hci_dev *hdev)
1249 {
1250         if (!lmp_le_capable(hdev))
1251                 return MGMT_STATUS_NOT_SUPPORTED;
1252         else if (!test_bit(HCI_LE_ENABLED, &hdev->dev_flags))
1253                 return MGMT_STATUS_REJECTED;
1254         else
1255                 return MGMT_STATUS_SUCCESS;
1256 }
1257
1258 static void set_discoverable_complete(struct hci_dev *hdev, u8 status)
1259 {
1260         struct pending_cmd *cmd;
1261         struct mgmt_mode *cp;
1262         struct hci_request req;
1263         bool changed;
1264
1265         BT_DBG("status 0x%02x", status);
1266
1267         hci_dev_lock(hdev);
1268
1269         cmd = mgmt_pending_find(MGMT_OP_SET_DISCOVERABLE, hdev);
1270         if (!cmd)
1271                 goto unlock;
1272
1273         if (status) {
1274                 u8 mgmt_err = mgmt_status(status);
1275                 cmd_status(cmd->sk, cmd->index, cmd->opcode, mgmt_err);
1276                 clear_bit(HCI_LIMITED_DISCOVERABLE, &hdev->dev_flags);
1277                 goto remove_cmd;
1278         }
1279
1280         cp = cmd->param;
1281         if (cp->val) {
1282                 changed = !test_and_set_bit(HCI_DISCOVERABLE,
1283                                             &hdev->dev_flags);
1284
1285                 if (hdev->discov_timeout > 0) {
1286                         int to = msecs_to_jiffies(hdev->discov_timeout * 1000);
1287                         queue_delayed_work(hdev->workqueue, &hdev->discov_off,
1288                                            to);
1289                 }
1290         } else {
1291                 changed = test_and_clear_bit(HCI_DISCOVERABLE,
1292                                              &hdev->dev_flags);
1293         }
1294
1295         send_settings_rsp(cmd->sk, MGMT_OP_SET_DISCOVERABLE, hdev);
1296
1297         if (changed)
1298                 new_settings(hdev, cmd->sk);
1299
1300         /* When the discoverable mode gets changed, make sure
1301          * that class of device has the limited discoverable
1302          * bit correctly set.
1303          */
1304         hci_req_init(&req, hdev);
1305         update_class(&req);
1306         hci_req_run(&req, NULL);
1307
1308 remove_cmd:
1309         mgmt_pending_remove(cmd);
1310
1311 unlock:
1312         hci_dev_unlock(hdev);
1313 }
1314
1315 static int set_discoverable(struct sock *sk, struct hci_dev *hdev, void *data,
1316                             u16 len)
1317 {
1318         struct mgmt_cp_set_discoverable *cp = data;
1319         struct pending_cmd *cmd;
1320         struct hci_request req;
1321         u16 timeout;
1322         u8 scan;
1323         int err;
1324
1325         BT_DBG("request for %s", hdev->name);
1326
1327         if (!test_bit(HCI_LE_ENABLED, &hdev->dev_flags) &&
1328             !test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags))
1329                 return cmd_status(sk, hdev->id, MGMT_OP_SET_DISCOVERABLE,
1330                                   MGMT_STATUS_REJECTED);
1331
1332         if (cp->val != 0x00 && cp->val != 0x01 && cp->val != 0x02)
1333                 return cmd_status(sk, hdev->id, MGMT_OP_SET_DISCOVERABLE,
1334                                   MGMT_STATUS_INVALID_PARAMS);
1335
1336         timeout = __le16_to_cpu(cp->timeout);
1337
1338         /* Disabling discoverable requires that no timeout is set,
1339          * and enabling limited discoverable requires a timeout.
1340          */
1341         if ((cp->val == 0x00 && timeout > 0) ||
1342             (cp->val == 0x02 && timeout == 0))
1343                 return cmd_status(sk, hdev->id, MGMT_OP_SET_DISCOVERABLE,
1344                                   MGMT_STATUS_INVALID_PARAMS);
1345
1346         hci_dev_lock(hdev);
1347
1348         if (!hdev_is_powered(hdev) && timeout > 0) {
1349                 err = cmd_status(sk, hdev->id, MGMT_OP_SET_DISCOVERABLE,
1350                                  MGMT_STATUS_NOT_POWERED);
1351                 goto failed;
1352         }
1353
1354         if (mgmt_pending_find(MGMT_OP_SET_DISCOVERABLE, hdev) ||
1355             mgmt_pending_find(MGMT_OP_SET_CONNECTABLE, hdev)) {
1356                 err = cmd_status(sk, hdev->id, MGMT_OP_SET_DISCOVERABLE,
1357                                  MGMT_STATUS_BUSY);
1358                 goto failed;
1359         }
1360
1361         if (!test_bit(HCI_CONNECTABLE, &hdev->dev_flags)) {
1362                 err = cmd_status(sk, hdev->id, MGMT_OP_SET_DISCOVERABLE,
1363                                  MGMT_STATUS_REJECTED);
1364                 goto failed;
1365         }
1366
1367         if (!hdev_is_powered(hdev)) {
1368                 bool changed = false;
1369
1370                 /* Setting limited discoverable when powered off is
1371                  * not a valid operation since it requires a timeout
1372                  * and so no need to check HCI_LIMITED_DISCOVERABLE.
1373                  */
1374                 if (!!cp->val != test_bit(HCI_DISCOVERABLE, &hdev->dev_flags)) {
1375                         change_bit(HCI_DISCOVERABLE, &hdev->dev_flags);
1376                         changed = true;
1377                 }
1378
1379                 err = send_settings_rsp(sk, MGMT_OP_SET_DISCOVERABLE, hdev);
1380                 if (err < 0)
1381                         goto failed;
1382
1383                 if (changed)
1384                         err = new_settings(hdev, sk);
1385
1386                 goto failed;
1387         }
1388
1389         /* If the current mode is the same, then just update the timeout
1390          * value with the new value. And if only the timeout gets updated,
1391          * then no need for any HCI transactions.
1392          */
1393         if (!!cp->val == test_bit(HCI_DISCOVERABLE, &hdev->dev_flags) &&
1394             (cp->val == 0x02) == test_bit(HCI_LIMITED_DISCOVERABLE,
1395                                           &hdev->dev_flags)) {
1396                 cancel_delayed_work(&hdev->discov_off);
1397                 hdev->discov_timeout = timeout;
1398
1399                 if (cp->val && hdev->discov_timeout > 0) {
1400                         int to = msecs_to_jiffies(hdev->discov_timeout * 1000);
1401                         queue_delayed_work(hdev->workqueue, &hdev->discov_off,
1402                                            to);
1403                 }
1404
1405                 err = send_settings_rsp(sk, MGMT_OP_SET_DISCOVERABLE, hdev);
1406                 goto failed;
1407         }
1408
1409         cmd = mgmt_pending_add(sk, MGMT_OP_SET_DISCOVERABLE, hdev, data, len);
1410         if (!cmd) {
1411                 err = -ENOMEM;
1412                 goto failed;
1413         }
1414
1415         /* Cancel any potential discoverable timeout that might be
1416          * still active and store new timeout value. The arming of
1417          * the timeout happens in the complete handler.
1418          */
1419         cancel_delayed_work(&hdev->discov_off);
1420         hdev->discov_timeout = timeout;
1421
1422         /* Limited discoverable mode */
1423         if (cp->val == 0x02)
1424                 set_bit(HCI_LIMITED_DISCOVERABLE, &hdev->dev_flags);
1425         else
1426                 clear_bit(HCI_LIMITED_DISCOVERABLE, &hdev->dev_flags);
1427
1428         hci_req_init(&req, hdev);
1429
1430         /* The procedure for LE-only controllers is much simpler - just
1431          * update the advertising data.
1432          */
1433         if (!test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags))
1434                 goto update_ad;
1435
1436         scan = SCAN_PAGE;
1437
1438         if (cp->val) {
1439                 struct hci_cp_write_current_iac_lap hci_cp;
1440
1441                 if (cp->val == 0x02) {
1442                         /* Limited discoverable mode */
1443                         hci_cp.num_iac = min_t(u8, hdev->num_iac, 2);
1444                         hci_cp.iac_lap[0] = 0x00;       /* LIAC */
1445                         hci_cp.iac_lap[1] = 0x8b;
1446                         hci_cp.iac_lap[2] = 0x9e;
1447                         hci_cp.iac_lap[3] = 0x33;       /* GIAC */
1448                         hci_cp.iac_lap[4] = 0x8b;
1449                         hci_cp.iac_lap[5] = 0x9e;
1450                 } else {
1451                         /* General discoverable mode */
1452                         hci_cp.num_iac = 1;
1453                         hci_cp.iac_lap[0] = 0x33;       /* GIAC */
1454                         hci_cp.iac_lap[1] = 0x8b;
1455                         hci_cp.iac_lap[2] = 0x9e;
1456                 }
1457
1458                 hci_req_add(&req, HCI_OP_WRITE_CURRENT_IAC_LAP,
1459                             (hci_cp.num_iac * 3) + 1, &hci_cp);
1460
1461                 scan |= SCAN_INQUIRY;
1462         } else {
1463                 clear_bit(HCI_LIMITED_DISCOVERABLE, &hdev->dev_flags);
1464         }
1465
1466         hci_req_add(&req, HCI_OP_WRITE_SCAN_ENABLE, sizeof(scan), &scan);
1467
1468 update_ad:
1469         update_adv_data(&req);
1470
1471         err = hci_req_run(&req, set_discoverable_complete);
1472         if (err < 0)
1473                 mgmt_pending_remove(cmd);
1474
1475 failed:
1476         hci_dev_unlock(hdev);
1477         return err;
1478 }
1479
1480 static void write_fast_connectable(struct hci_request *req, bool enable)
1481 {
1482         struct hci_dev *hdev = req->hdev;
1483         struct hci_cp_write_page_scan_activity acp;
1484         u8 type;
1485
1486         if (!test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags))
1487                 return;
1488
1489         if (hdev->hci_ver < BLUETOOTH_VER_1_2)
1490                 return;
1491
1492         if (enable) {
1493                 type = PAGE_SCAN_TYPE_INTERLACED;
1494
1495                 /* 160 msec page scan interval */
1496                 acp.interval = cpu_to_le16(0x0100);
1497         } else {
1498                 type = PAGE_SCAN_TYPE_STANDARD; /* default */
1499
1500                 /* default 1.28 sec page scan */
1501                 acp.interval = cpu_to_le16(0x0800);
1502         }
1503
1504         acp.window = cpu_to_le16(0x0012);
1505
1506         if (__cpu_to_le16(hdev->page_scan_interval) != acp.interval ||
1507             __cpu_to_le16(hdev->page_scan_window) != acp.window)
1508                 hci_req_add(req, HCI_OP_WRITE_PAGE_SCAN_ACTIVITY,
1509                             sizeof(acp), &acp);
1510
1511         if (hdev->page_scan_type != type)
1512                 hci_req_add(req, HCI_OP_WRITE_PAGE_SCAN_TYPE, 1, &type);
1513 }
1514
1515 static void set_connectable_complete(struct hci_dev *hdev, u8 status)
1516 {
1517         struct pending_cmd *cmd;
1518         struct mgmt_mode *cp;
1519         bool changed;
1520
1521         BT_DBG("status 0x%02x", status);
1522
1523         hci_dev_lock(hdev);
1524
1525         cmd = mgmt_pending_find(MGMT_OP_SET_CONNECTABLE, hdev);
1526         if (!cmd)
1527                 goto unlock;
1528
1529         if (status) {
1530                 u8 mgmt_err = mgmt_status(status);
1531                 cmd_status(cmd->sk, cmd->index, cmd->opcode, mgmt_err);
1532                 goto remove_cmd;
1533         }
1534
1535         cp = cmd->param;
1536         if (cp->val)
1537                 changed = !test_and_set_bit(HCI_CONNECTABLE, &hdev->dev_flags);
1538         else
1539                 changed = test_and_clear_bit(HCI_CONNECTABLE, &hdev->dev_flags);
1540
1541         send_settings_rsp(cmd->sk, MGMT_OP_SET_CONNECTABLE, hdev);
1542
1543         if (changed)
1544                 new_settings(hdev, cmd->sk);
1545
1546 remove_cmd:
1547         mgmt_pending_remove(cmd);
1548
1549 unlock:
1550         hci_dev_unlock(hdev);
1551 }
1552
1553 static int set_connectable_update_settings(struct hci_dev *hdev,
1554                                            struct sock *sk, u8 val)
1555 {
1556         bool changed = false;
1557         int err;
1558
1559         if (!!val != test_bit(HCI_CONNECTABLE, &hdev->dev_flags))
1560                 changed = true;
1561
1562         if (val) {
1563                 set_bit(HCI_CONNECTABLE, &hdev->dev_flags);
1564         } else {
1565                 clear_bit(HCI_CONNECTABLE, &hdev->dev_flags);
1566                 clear_bit(HCI_DISCOVERABLE, &hdev->dev_flags);
1567         }
1568
1569         err = send_settings_rsp(sk, MGMT_OP_SET_CONNECTABLE, hdev);
1570         if (err < 0)
1571                 return err;
1572
1573         if (changed)
1574                 return new_settings(hdev, sk);
1575
1576         return 0;
1577 }
1578
1579 static int set_connectable(struct sock *sk, struct hci_dev *hdev, void *data,
1580                            u16 len)
1581 {
1582         struct mgmt_mode *cp = data;
1583         struct pending_cmd *cmd;
1584         struct hci_request req;
1585         u8 scan;
1586         int err;
1587
1588         BT_DBG("request for %s", hdev->name);
1589
1590         if (!test_bit(HCI_LE_ENABLED, &hdev->dev_flags) &&
1591             !test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags))
1592                 return cmd_status(sk, hdev->id, MGMT_OP_SET_CONNECTABLE,
1593                                   MGMT_STATUS_REJECTED);
1594
1595         if (cp->val != 0x00 && cp->val != 0x01)
1596                 return cmd_status(sk, hdev->id, MGMT_OP_SET_CONNECTABLE,
1597                                   MGMT_STATUS_INVALID_PARAMS);
1598
1599         hci_dev_lock(hdev);
1600
1601         if (!hdev_is_powered(hdev)) {
1602                 err = set_connectable_update_settings(hdev, sk, cp->val);
1603                 goto failed;
1604         }
1605
1606         if (mgmt_pending_find(MGMT_OP_SET_DISCOVERABLE, hdev) ||
1607             mgmt_pending_find(MGMT_OP_SET_CONNECTABLE, hdev)) {
1608                 err = cmd_status(sk, hdev->id, MGMT_OP_SET_CONNECTABLE,
1609                                  MGMT_STATUS_BUSY);
1610                 goto failed;
1611         }
1612
1613         cmd = mgmt_pending_add(sk, MGMT_OP_SET_CONNECTABLE, hdev, data, len);
1614         if (!cmd) {
1615                 err = -ENOMEM;
1616                 goto failed;
1617         }
1618
1619         hci_req_init(&req, hdev);
1620
1621         /* If BR/EDR is not enabled and we disable advertising as a
1622          * by-product of disabling connectable, we need to update the
1623          * advertising flags.
1624          */
1625         if (!test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags)) {
1626                 if (!cp->val) {
1627                         clear_bit(HCI_LIMITED_DISCOVERABLE, &hdev->dev_flags);
1628                         clear_bit(HCI_DISCOVERABLE, &hdev->dev_flags);
1629                 }
1630                 update_adv_data(&req);
1631         } else if (cp->val != test_bit(HCI_PSCAN, &hdev->flags)) {
1632                 if (cp->val) {
1633                         scan = SCAN_PAGE;
1634                 } else {
1635                         scan = 0;
1636
1637                         if (test_bit(HCI_ISCAN, &hdev->flags) &&
1638                             hdev->discov_timeout > 0)
1639                                 cancel_delayed_work(&hdev->discov_off);
1640                 }
1641
1642                 hci_req_add(&req, HCI_OP_WRITE_SCAN_ENABLE, 1, &scan);
1643         }
1644
1645         /* If we're going from non-connectable to connectable or
1646          * vice-versa when fast connectable is enabled ensure that fast
1647          * connectable gets disabled. write_fast_connectable won't do
1648          * anything if the page scan parameters are already what they
1649          * should be.
1650          */
1651         if (cp->val || test_bit(HCI_FAST_CONNECTABLE, &hdev->dev_flags))
1652                 write_fast_connectable(&req, false);
1653
1654         if (test_bit(HCI_ADVERTISING, &hdev->dev_flags) &&
1655             hci_conn_num(hdev, LE_LINK) == 0) {
1656                 disable_advertising(&req);
1657                 enable_advertising(&req);
1658         }
1659
1660         err = hci_req_run(&req, set_connectable_complete);
1661         if (err < 0) {
1662                 mgmt_pending_remove(cmd);
1663                 if (err == -ENODATA)
1664                         err = set_connectable_update_settings(hdev, sk,
1665                                                               cp->val);
1666                 goto failed;
1667         }
1668
1669 failed:
1670         hci_dev_unlock(hdev);
1671         return err;
1672 }
1673
1674 static int set_pairable(struct sock *sk, struct hci_dev *hdev, void *data,
1675                         u16 len)
1676 {
1677         struct mgmt_mode *cp = data;
1678         bool changed;
1679         int err;
1680
1681         BT_DBG("request for %s", hdev->name);
1682
1683         if (cp->val != 0x00 && cp->val != 0x01)
1684                 return cmd_status(sk, hdev->id, MGMT_OP_SET_PAIRABLE,
1685                                   MGMT_STATUS_INVALID_PARAMS);
1686
1687         hci_dev_lock(hdev);
1688
1689         if (cp->val)
1690                 changed = !test_and_set_bit(HCI_PAIRABLE, &hdev->dev_flags);
1691         else
1692                 changed = test_and_clear_bit(HCI_PAIRABLE, &hdev->dev_flags);
1693
1694         err = send_settings_rsp(sk, MGMT_OP_SET_PAIRABLE, hdev);
1695         if (err < 0)
1696                 goto unlock;
1697
1698         if (changed)
1699                 err = new_settings(hdev, sk);
1700
1701 unlock:
1702         hci_dev_unlock(hdev);
1703         return err;
1704 }
1705
1706 static int set_link_security(struct sock *sk, struct hci_dev *hdev, void *data,
1707                              u16 len)
1708 {
1709         struct mgmt_mode *cp = data;
1710         struct pending_cmd *cmd;
1711         u8 val, status;
1712         int err;
1713
1714         BT_DBG("request for %s", hdev->name);
1715
1716         status = mgmt_bredr_support(hdev);
1717         if (status)
1718                 return cmd_status(sk, hdev->id, MGMT_OP_SET_LINK_SECURITY,
1719                                   status);
1720
1721         if (cp->val != 0x00 && cp->val != 0x01)
1722                 return cmd_status(sk, hdev->id, MGMT_OP_SET_LINK_SECURITY,
1723                                   MGMT_STATUS_INVALID_PARAMS);
1724
1725         hci_dev_lock(hdev);
1726
1727         if (!hdev_is_powered(hdev)) {
1728                 bool changed = false;
1729
1730                 if (!!cp->val != test_bit(HCI_LINK_SECURITY,
1731                                           &hdev->dev_flags)) {
1732                         change_bit(HCI_LINK_SECURITY, &hdev->dev_flags);
1733                         changed = true;
1734                 }
1735
1736                 err = send_settings_rsp(sk, MGMT_OP_SET_LINK_SECURITY, hdev);
1737                 if (err < 0)
1738                         goto failed;
1739
1740                 if (changed)
1741                         err = new_settings(hdev, sk);
1742
1743                 goto failed;
1744         }
1745
1746         if (mgmt_pending_find(MGMT_OP_SET_LINK_SECURITY, hdev)) {
1747                 err = cmd_status(sk, hdev->id, MGMT_OP_SET_LINK_SECURITY,
1748                                  MGMT_STATUS_BUSY);
1749                 goto failed;
1750         }
1751
1752         val = !!cp->val;
1753
1754         if (test_bit(HCI_AUTH, &hdev->flags) == val) {
1755                 err = send_settings_rsp(sk, MGMT_OP_SET_LINK_SECURITY, hdev);
1756                 goto failed;
1757         }
1758
1759         cmd = mgmt_pending_add(sk, MGMT_OP_SET_LINK_SECURITY, hdev, data, len);
1760         if (!cmd) {
1761                 err = -ENOMEM;
1762                 goto failed;
1763         }
1764
1765         err = hci_send_cmd(hdev, HCI_OP_WRITE_AUTH_ENABLE, sizeof(val), &val);
1766         if (err < 0) {
1767                 mgmt_pending_remove(cmd);
1768                 goto failed;
1769         }
1770
1771 failed:
1772         hci_dev_unlock(hdev);
1773         return err;
1774 }
1775
1776 static int set_ssp(struct sock *sk, struct hci_dev *hdev, void *data, u16 len)
1777 {
1778         struct mgmt_mode *cp = data;
1779         struct pending_cmd *cmd;
1780         u8 status;
1781         int err;
1782
1783         BT_DBG("request for %s", hdev->name);
1784
1785         status = mgmt_bredr_support(hdev);
1786         if (status)
1787                 return cmd_status(sk, hdev->id, MGMT_OP_SET_SSP, status);
1788
1789         if (!lmp_ssp_capable(hdev))
1790                 return cmd_status(sk, hdev->id, MGMT_OP_SET_SSP,
1791                                   MGMT_STATUS_NOT_SUPPORTED);
1792
1793         if (cp->val != 0x00 && cp->val != 0x01)
1794                 return cmd_status(sk, hdev->id, MGMT_OP_SET_SSP,
1795                                   MGMT_STATUS_INVALID_PARAMS);
1796
1797         hci_dev_lock(hdev);
1798
1799         if (!hdev_is_powered(hdev)) {
1800                 bool changed;
1801
1802                 if (cp->val) {
1803                         changed = !test_and_set_bit(HCI_SSP_ENABLED,
1804                                                     &hdev->dev_flags);
1805                 } else {
1806                         changed = test_and_clear_bit(HCI_SSP_ENABLED,
1807                                                      &hdev->dev_flags);
1808                         if (!changed)
1809                                 changed = test_and_clear_bit(HCI_HS_ENABLED,
1810                                                              &hdev->dev_flags);
1811                         else
1812                                 clear_bit(HCI_HS_ENABLED, &hdev->dev_flags);
1813                 }
1814
1815                 err = send_settings_rsp(sk, MGMT_OP_SET_SSP, hdev);
1816                 if (err < 0)
1817                         goto failed;
1818
1819                 if (changed)
1820                         err = new_settings(hdev, sk);
1821
1822                 goto failed;
1823         }
1824
1825         if (mgmt_pending_find(MGMT_OP_SET_SSP, hdev) ||
1826             mgmt_pending_find(MGMT_OP_SET_HS, hdev)) {
1827                 err = cmd_status(sk, hdev->id, MGMT_OP_SET_SSP,
1828                                  MGMT_STATUS_BUSY);
1829                 goto failed;
1830         }
1831
1832         if (!!cp->val == test_bit(HCI_SSP_ENABLED, &hdev->dev_flags)) {
1833                 err = send_settings_rsp(sk, MGMT_OP_SET_SSP, hdev);
1834                 goto failed;
1835         }
1836
1837         cmd = mgmt_pending_add(sk, MGMT_OP_SET_SSP, hdev, data, len);
1838         if (!cmd) {
1839                 err = -ENOMEM;
1840                 goto failed;
1841         }
1842
1843         err = hci_send_cmd(hdev, HCI_OP_WRITE_SSP_MODE, 1, &cp->val);
1844         if (err < 0) {
1845                 mgmt_pending_remove(cmd);
1846                 goto failed;
1847         }
1848
1849 failed:
1850         hci_dev_unlock(hdev);
1851         return err;
1852 }
1853
1854 static int set_hs(struct sock *sk, struct hci_dev *hdev, void *data, u16 len)
1855 {
1856         struct mgmt_mode *cp = data;
1857         bool changed;
1858         u8 status;
1859         int err;
1860
1861         BT_DBG("request for %s", hdev->name);
1862
1863         status = mgmt_bredr_support(hdev);
1864         if (status)
1865                 return cmd_status(sk, hdev->id, MGMT_OP_SET_HS, status);
1866
1867         if (!lmp_ssp_capable(hdev))
1868                 return cmd_status(sk, hdev->id, MGMT_OP_SET_HS,
1869                                   MGMT_STATUS_NOT_SUPPORTED);
1870
1871         if (!test_bit(HCI_SSP_ENABLED, &hdev->dev_flags))
1872                 return cmd_status(sk, hdev->id, MGMT_OP_SET_HS,
1873                                   MGMT_STATUS_REJECTED);
1874
1875         if (cp->val != 0x00 && cp->val != 0x01)
1876                 return cmd_status(sk, hdev->id, MGMT_OP_SET_HS,
1877                                   MGMT_STATUS_INVALID_PARAMS);
1878
1879         hci_dev_lock(hdev);
1880
1881         if (cp->val) {
1882                 changed = !test_and_set_bit(HCI_HS_ENABLED, &hdev->dev_flags);
1883         } else {
1884                 if (hdev_is_powered(hdev)) {
1885                         err = cmd_status(sk, hdev->id, MGMT_OP_SET_HS,
1886                                          MGMT_STATUS_REJECTED);
1887                         goto unlock;
1888                 }
1889
1890                 changed = test_and_clear_bit(HCI_HS_ENABLED, &hdev->dev_flags);
1891         }
1892
1893         err = send_settings_rsp(sk, MGMT_OP_SET_HS, hdev);
1894         if (err < 0)
1895                 goto unlock;
1896
1897         if (changed)
1898                 err = new_settings(hdev, sk);
1899
1900 unlock:
1901         hci_dev_unlock(hdev);
1902         return err;
1903 }
1904
1905 static void le_enable_complete(struct hci_dev *hdev, u8 status)
1906 {
1907         struct cmd_lookup match = { NULL, hdev };
1908
1909         if (status) {
1910                 u8 mgmt_err = mgmt_status(status);
1911
1912                 mgmt_pending_foreach(MGMT_OP_SET_LE, hdev, cmd_status_rsp,
1913                                      &mgmt_err);
1914                 return;
1915         }
1916
1917         mgmt_pending_foreach(MGMT_OP_SET_LE, hdev, settings_rsp, &match);
1918
1919         new_settings(hdev, match.sk);
1920
1921         if (match.sk)
1922                 sock_put(match.sk);
1923
1924         /* Make sure the controller has a good default for
1925          * advertising data. Restrict the update to when LE
1926          * has actually been enabled. During power on, the
1927          * update in powered_update_hci will take care of it.
1928          */
1929         if (test_bit(HCI_LE_ENABLED, &hdev->dev_flags)) {
1930                 struct hci_request req;
1931
1932                 hci_dev_lock(hdev);
1933
1934                 hci_req_init(&req, hdev);
1935                 update_adv_data(&req);
1936                 update_scan_rsp_data(&req);
1937                 hci_req_run(&req, NULL);
1938
1939                 hci_dev_unlock(hdev);
1940         }
1941 }
1942
1943 static int set_le(struct sock *sk, struct hci_dev *hdev, void *data, u16 len)
1944 {
1945         struct mgmt_mode *cp = data;
1946         struct hci_cp_write_le_host_supported hci_cp;
1947         struct pending_cmd *cmd;
1948         struct hci_request req;
1949         int err;
1950         u8 val, enabled;
1951
1952         BT_DBG("request for %s", hdev->name);
1953
1954         if (!lmp_le_capable(hdev))
1955                 return cmd_status(sk, hdev->id, MGMT_OP_SET_LE,
1956                                   MGMT_STATUS_NOT_SUPPORTED);
1957
1958         if (cp->val != 0x00 && cp->val != 0x01)
1959                 return cmd_status(sk, hdev->id, MGMT_OP_SET_LE,
1960                                   MGMT_STATUS_INVALID_PARAMS);
1961
1962         /* LE-only devices do not allow toggling LE on/off */
1963         if (!test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags))
1964                 return cmd_status(sk, hdev->id, MGMT_OP_SET_LE,
1965                                   MGMT_STATUS_REJECTED);
1966
1967         hci_dev_lock(hdev);
1968
1969         val = !!cp->val;
1970         enabled = lmp_host_le_capable(hdev);
1971
1972         if (!hdev_is_powered(hdev) || val == enabled) {
1973                 bool changed = false;
1974
1975                 if (val != test_bit(HCI_LE_ENABLED, &hdev->dev_flags)) {
1976                         change_bit(HCI_LE_ENABLED, &hdev->dev_flags);
1977                         changed = true;
1978                 }
1979
1980                 if (!val && test_bit(HCI_ADVERTISING, &hdev->dev_flags)) {
1981                         clear_bit(HCI_ADVERTISING, &hdev->dev_flags);
1982                         changed = true;
1983                 }
1984
1985                 err = send_settings_rsp(sk, MGMT_OP_SET_LE, hdev);
1986                 if (err < 0)
1987                         goto unlock;
1988
1989                 if (changed)
1990                         err = new_settings(hdev, sk);
1991
1992                 goto unlock;
1993         }
1994
1995         if (mgmt_pending_find(MGMT_OP_SET_LE, hdev) ||
1996             mgmt_pending_find(MGMT_OP_SET_ADVERTISING, hdev)) {
1997                 err = cmd_status(sk, hdev->id, MGMT_OP_SET_LE,
1998                                  MGMT_STATUS_BUSY);
1999                 goto unlock;
2000         }
2001
2002         cmd = mgmt_pending_add(sk, MGMT_OP_SET_LE, hdev, data, len);
2003         if (!cmd) {
2004                 err = -ENOMEM;
2005                 goto unlock;
2006         }
2007
2008         hci_req_init(&req, hdev);
2009
2010         memset(&hci_cp, 0, sizeof(hci_cp));
2011
2012         if (val) {
2013                 hci_cp.le = val;
2014                 hci_cp.simul = lmp_le_br_capable(hdev);
2015         } else {
2016                 if (test_bit(HCI_ADVERTISING, &hdev->dev_flags))
2017                         disable_advertising(&req);
2018         }
2019
2020         hci_req_add(&req, HCI_OP_WRITE_LE_HOST_SUPPORTED, sizeof(hci_cp),
2021                     &hci_cp);
2022
2023         err = hci_req_run(&req, le_enable_complete);
2024         if (err < 0)
2025                 mgmt_pending_remove(cmd);
2026
2027 unlock:
2028         hci_dev_unlock(hdev);
2029         return err;
2030 }
2031
2032 /* This is a helper function to test for pending mgmt commands that can
2033  * cause CoD or EIR HCI commands. We can only allow one such pending
2034  * mgmt command at a time since otherwise we cannot easily track what
2035  * the current values are, will be, and based on that calculate if a new
2036  * HCI command needs to be sent and if yes with what value.
2037  */
2038 static bool pending_eir_or_class(struct hci_dev *hdev)
2039 {
2040         struct pending_cmd *cmd;
2041
2042         list_for_each_entry(cmd, &hdev->mgmt_pending, list) {
2043                 switch (cmd->opcode) {
2044                 case MGMT_OP_ADD_UUID:
2045                 case MGMT_OP_REMOVE_UUID:
2046                 case MGMT_OP_SET_DEV_CLASS:
2047                 case MGMT_OP_SET_POWERED:
2048                         return true;
2049                 }
2050         }
2051
2052         return false;
2053 }
2054
2055 static const u8 bluetooth_base_uuid[] = {
2056                         0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80,
2057                         0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2058 };
2059
2060 static u8 get_uuid_size(const u8 *uuid)
2061 {
2062         u32 val;
2063
2064         if (memcmp(uuid, bluetooth_base_uuid, 12))
2065                 return 128;
2066
2067         val = get_unaligned_le32(&uuid[12]);
2068         if (val > 0xffff)
2069                 return 32;
2070
2071         return 16;
2072 }
2073
2074 static void mgmt_class_complete(struct hci_dev *hdev, u16 mgmt_op, u8 status)
2075 {
2076         struct pending_cmd *cmd;
2077
2078         hci_dev_lock(hdev);
2079
2080         cmd = mgmt_pending_find(mgmt_op, hdev);
2081         if (!cmd)
2082                 goto unlock;
2083
2084         cmd_complete(cmd->sk, cmd->index, cmd->opcode, mgmt_status(status),
2085                      hdev->dev_class, 3);
2086
2087         mgmt_pending_remove(cmd);
2088
2089 unlock:
2090         hci_dev_unlock(hdev);
2091 }
2092
2093 static void add_uuid_complete(struct hci_dev *hdev, u8 status)
2094 {
2095         BT_DBG("status 0x%02x", status);
2096
2097         mgmt_class_complete(hdev, MGMT_OP_ADD_UUID, status);
2098 }
2099
2100 static int add_uuid(struct sock *sk, struct hci_dev *hdev, void *data, u16 len)
2101 {
2102         struct mgmt_cp_add_uuid *cp = data;
2103         struct pending_cmd *cmd;
2104         struct hci_request req;
2105         struct bt_uuid *uuid;
2106         int err;
2107
2108         BT_DBG("request for %s", hdev->name);
2109
2110         hci_dev_lock(hdev);
2111
2112         if (pending_eir_or_class(hdev)) {
2113                 err = cmd_status(sk, hdev->id, MGMT_OP_ADD_UUID,
2114                                  MGMT_STATUS_BUSY);
2115                 goto failed;
2116         }
2117
2118         uuid = kmalloc(sizeof(*uuid), GFP_KERNEL);
2119         if (!uuid) {
2120                 err = -ENOMEM;
2121                 goto failed;
2122         }
2123
2124         memcpy(uuid->uuid, cp->uuid, 16);
2125         uuid->svc_hint = cp->svc_hint;
2126         uuid->size = get_uuid_size(cp->uuid);
2127
2128         list_add_tail(&uuid->list, &hdev->uuids);
2129
2130         hci_req_init(&req, hdev);
2131
2132         update_class(&req);
2133         update_eir(&req);
2134
2135         err = hci_req_run(&req, add_uuid_complete);
2136         if (err < 0) {
2137                 if (err != -ENODATA)
2138                         goto failed;
2139
2140                 err = cmd_complete(sk, hdev->id, MGMT_OP_ADD_UUID, 0,
2141                                    hdev->dev_class, 3);
2142                 goto failed;
2143         }
2144
2145         cmd = mgmt_pending_add(sk, MGMT_OP_ADD_UUID, hdev, data, len);
2146         if (!cmd) {
2147                 err = -ENOMEM;
2148                 goto failed;
2149         }
2150
2151         err = 0;
2152
2153 failed:
2154         hci_dev_unlock(hdev);
2155         return err;
2156 }
2157
2158 static bool enable_service_cache(struct hci_dev *hdev)
2159 {
2160         if (!hdev_is_powered(hdev))
2161                 return false;
2162
2163         if (!test_and_set_bit(HCI_SERVICE_CACHE, &hdev->dev_flags)) {
2164                 queue_delayed_work(hdev->workqueue, &hdev->service_cache,
2165                                    CACHE_TIMEOUT);
2166                 return true;
2167         }
2168
2169         return false;
2170 }
2171
2172 static void remove_uuid_complete(struct hci_dev *hdev, u8 status)
2173 {
2174         BT_DBG("status 0x%02x", status);
2175
2176         mgmt_class_complete(hdev, MGMT_OP_REMOVE_UUID, status);
2177 }
2178
2179 static int remove_uuid(struct sock *sk, struct hci_dev *hdev, void *data,
2180                        u16 len)
2181 {
2182         struct mgmt_cp_remove_uuid *cp = data;
2183         struct pending_cmd *cmd;
2184         struct bt_uuid *match, *tmp;
2185         u8 bt_uuid_any[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
2186         struct hci_request req;
2187         int err, found;
2188
2189         BT_DBG("request for %s", hdev->name);
2190
2191         hci_dev_lock(hdev);
2192
2193         if (pending_eir_or_class(hdev)) {
2194                 err = cmd_status(sk, hdev->id, MGMT_OP_REMOVE_UUID,
2195                                  MGMT_STATUS_BUSY);
2196                 goto unlock;
2197         }
2198
2199         if (memcmp(cp->uuid, bt_uuid_any, 16) == 0) {
2200                 hci_uuids_clear(hdev);
2201
2202                 if (enable_service_cache(hdev)) {
2203                         err = cmd_complete(sk, hdev->id, MGMT_OP_REMOVE_UUID,
2204                                            0, hdev->dev_class, 3);
2205                         goto unlock;
2206                 }
2207
2208                 goto update_class;
2209         }
2210
2211         found = 0;
2212
2213         list_for_each_entry_safe(match, tmp, &hdev->uuids, list) {
2214                 if (memcmp(match->uuid, cp->uuid, 16) != 0)
2215                         continue;
2216
2217                 list_del(&match->list);
2218                 kfree(match);
2219                 found++;
2220         }
2221
2222         if (found == 0) {
2223                 err = cmd_status(sk, hdev->id, MGMT_OP_REMOVE_UUID,
2224                                  MGMT_STATUS_INVALID_PARAMS);
2225                 goto unlock;
2226         }
2227
2228 update_class:
2229         hci_req_init(&req, hdev);
2230
2231         update_class(&req);
2232         update_eir(&req);
2233
2234         err = hci_req_run(&req, remove_uuid_complete);
2235         if (err < 0) {
2236                 if (err != -ENODATA)
2237                         goto unlock;
2238
2239                 err = cmd_complete(sk, hdev->id, MGMT_OP_REMOVE_UUID, 0,
2240                                    hdev->dev_class, 3);
2241                 goto unlock;
2242         }
2243
2244         cmd = mgmt_pending_add(sk, MGMT_OP_REMOVE_UUID, hdev, data, len);
2245         if (!cmd) {
2246                 err = -ENOMEM;
2247                 goto unlock;
2248         }
2249
2250         err = 0;
2251
2252 unlock:
2253         hci_dev_unlock(hdev);
2254         return err;
2255 }
2256
2257 static void set_class_complete(struct hci_dev *hdev, u8 status)
2258 {
2259         BT_DBG("status 0x%02x", status);
2260
2261         mgmt_class_complete(hdev, MGMT_OP_SET_DEV_CLASS, status);
2262 }
2263
2264 static int set_dev_class(struct sock *sk, struct hci_dev *hdev, void *data,
2265                          u16 len)
2266 {
2267         struct mgmt_cp_set_dev_class *cp = data;
2268         struct pending_cmd *cmd;
2269         struct hci_request req;
2270         int err;
2271
2272         BT_DBG("request for %s", hdev->name);
2273
2274         if (!lmp_bredr_capable(hdev))
2275                 return cmd_status(sk, hdev->id, MGMT_OP_SET_DEV_CLASS,
2276                                   MGMT_STATUS_NOT_SUPPORTED);
2277
2278         hci_dev_lock(hdev);
2279
2280         if (pending_eir_or_class(hdev)) {
2281                 err = cmd_status(sk, hdev->id, MGMT_OP_SET_DEV_CLASS,
2282                                  MGMT_STATUS_BUSY);
2283                 goto unlock;
2284         }
2285
2286         if ((cp->minor & 0x03) != 0 || (cp->major & 0xe0) != 0) {
2287                 err = cmd_status(sk, hdev->id, MGMT_OP_SET_DEV_CLASS,
2288                                  MGMT_STATUS_INVALID_PARAMS);
2289                 goto unlock;
2290         }
2291
2292         hdev->major_class = cp->major;
2293         hdev->minor_class = cp->minor;
2294
2295         if (!hdev_is_powered(hdev)) {
2296                 err = cmd_complete(sk, hdev->id, MGMT_OP_SET_DEV_CLASS, 0,
2297                                    hdev->dev_class, 3);
2298                 goto unlock;
2299         }
2300
2301         hci_req_init(&req, hdev);
2302
2303         if (test_and_clear_bit(HCI_SERVICE_CACHE, &hdev->dev_flags)) {
2304                 hci_dev_unlock(hdev);
2305                 cancel_delayed_work_sync(&hdev->service_cache);
2306                 hci_dev_lock(hdev);
2307                 update_eir(&req);
2308         }
2309
2310         update_class(&req);
2311
2312         err = hci_req_run(&req, set_class_complete);
2313         if (err < 0) {
2314                 if (err != -ENODATA)
2315                         goto unlock;
2316
2317                 err = cmd_complete(sk, hdev->id, MGMT_OP_SET_DEV_CLASS, 0,
2318                                    hdev->dev_class, 3);
2319                 goto unlock;
2320         }
2321
2322         cmd = mgmt_pending_add(sk, MGMT_OP_SET_DEV_CLASS, hdev, data, len);
2323         if (!cmd) {
2324                 err = -ENOMEM;
2325                 goto unlock;
2326         }
2327
2328         err = 0;
2329
2330 unlock:
2331         hci_dev_unlock(hdev);
2332         return err;
2333 }
2334
2335 static int load_link_keys(struct sock *sk, struct hci_dev *hdev, void *data,
2336                           u16 len)
2337 {
2338         struct mgmt_cp_load_link_keys *cp = data;
2339         u16 key_count, expected_len;
2340         bool changed;
2341         int i;
2342
2343         BT_DBG("request for %s", hdev->name);
2344
2345         if (!lmp_bredr_capable(hdev))
2346                 return cmd_status(sk, hdev->id, MGMT_OP_LOAD_LINK_KEYS,
2347                                   MGMT_STATUS_NOT_SUPPORTED);
2348
2349         key_count = __le16_to_cpu(cp->key_count);
2350
2351         expected_len = sizeof(*cp) + key_count *
2352                                         sizeof(struct mgmt_link_key_info);
2353         if (expected_len != len) {
2354                 BT_ERR("load_link_keys: expected %u bytes, got %u bytes",
2355                        expected_len, len);
2356                 return cmd_status(sk, hdev->id, MGMT_OP_LOAD_LINK_KEYS,
2357                                   MGMT_STATUS_INVALID_PARAMS);
2358         }
2359
2360         if (cp->debug_keys != 0x00 && cp->debug_keys != 0x01)
2361                 return cmd_status(sk, hdev->id, MGMT_OP_LOAD_LINK_KEYS,
2362                                   MGMT_STATUS_INVALID_PARAMS);
2363
2364         BT_DBG("%s debug_keys %u key_count %u", hdev->name, cp->debug_keys,
2365                key_count);
2366
2367         for (i = 0; i < key_count; i++) {
2368                 struct mgmt_link_key_info *key = &cp->keys[i];
2369
2370                 if (key->addr.type != BDADDR_BREDR || key->type > 0x08)
2371                         return cmd_status(sk, hdev->id, MGMT_OP_LOAD_LINK_KEYS,
2372                                           MGMT_STATUS_INVALID_PARAMS);
2373         }
2374
2375         hci_dev_lock(hdev);
2376
2377         hci_link_keys_clear(hdev);
2378
2379         if (cp->debug_keys)
2380                 changed = !test_and_set_bit(HCI_DEBUG_KEYS, &hdev->dev_flags);
2381         else
2382                 changed = test_and_clear_bit(HCI_DEBUG_KEYS, &hdev->dev_flags);
2383
2384         if (changed)
2385                 new_settings(hdev, NULL);
2386
2387         for (i = 0; i < key_count; i++) {
2388                 struct mgmt_link_key_info *key = &cp->keys[i];
2389
2390                 hci_add_link_key(hdev, NULL, 0, &key->addr.bdaddr, key->val,
2391                                  key->type, key->pin_len);
2392         }
2393
2394         cmd_complete(sk, hdev->id, MGMT_OP_LOAD_LINK_KEYS, 0, NULL, 0);
2395
2396         hci_dev_unlock(hdev);
2397
2398         return 0;
2399 }
2400
2401 static int device_unpaired(struct hci_dev *hdev, bdaddr_t *bdaddr,
2402                            u8 addr_type, struct sock *skip_sk)
2403 {
2404         struct mgmt_ev_device_unpaired ev;
2405
2406         bacpy(&ev.addr.bdaddr, bdaddr);
2407         ev.addr.type = addr_type;
2408
2409         return mgmt_event(MGMT_EV_DEVICE_UNPAIRED, hdev, &ev, sizeof(ev),
2410                           skip_sk);
2411 }
2412
2413 static int unpair_device(struct sock *sk, struct hci_dev *hdev, void *data,
2414                          u16 len)
2415 {
2416         struct mgmt_cp_unpair_device *cp = data;
2417         struct mgmt_rp_unpair_device rp;
2418         struct hci_cp_disconnect dc;
2419         struct pending_cmd *cmd;
2420         struct hci_conn *conn;
2421         int err;
2422
2423         memset(&rp, 0, sizeof(rp));
2424         bacpy(&rp.addr.bdaddr, &cp->addr.bdaddr);
2425         rp.addr.type = cp->addr.type;
2426
2427         if (!bdaddr_type_is_valid(cp->addr.type))
2428                 return cmd_complete(sk, hdev->id, MGMT_OP_UNPAIR_DEVICE,
2429                                     MGMT_STATUS_INVALID_PARAMS,
2430                                     &rp, sizeof(rp));
2431
2432         if (cp->disconnect != 0x00 && cp->disconnect != 0x01)
2433                 return cmd_complete(sk, hdev->id, MGMT_OP_UNPAIR_DEVICE,
2434                                     MGMT_STATUS_INVALID_PARAMS,
2435                                     &rp, sizeof(rp));
2436
2437         hci_dev_lock(hdev);
2438
2439         if (!hdev_is_powered(hdev)) {
2440                 err = cmd_complete(sk, hdev->id, MGMT_OP_UNPAIR_DEVICE,
2441                                    MGMT_STATUS_NOT_POWERED, &rp, sizeof(rp));
2442                 goto unlock;
2443         }
2444
2445         if (cp->addr.type == BDADDR_BREDR) {
2446                 err = hci_remove_link_key(hdev, &cp->addr.bdaddr);
2447         } else {
2448                 u8 addr_type;
2449
2450                 if (cp->addr.type == BDADDR_LE_PUBLIC)
2451                         addr_type = ADDR_LE_DEV_PUBLIC;
2452                 else
2453                         addr_type = ADDR_LE_DEV_RANDOM;
2454
2455                 hci_remove_irk(hdev, &cp->addr.bdaddr, addr_type);
2456
2457                 hci_conn_params_del(hdev, &cp->addr.bdaddr, addr_type);
2458
2459                 err = hci_remove_ltk(hdev, &cp->addr.bdaddr, addr_type);
2460         }
2461
2462         if (err < 0) {
2463                 err = cmd_complete(sk, hdev->id, MGMT_OP_UNPAIR_DEVICE,
2464                                    MGMT_STATUS_NOT_PAIRED, &rp, sizeof(rp));
2465                 goto unlock;
2466         }
2467
2468         if (cp->disconnect) {
2469                 if (cp->addr.type == BDADDR_BREDR)
2470                         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK,
2471                                                        &cp->addr.bdaddr);
2472                 else
2473                         conn = hci_conn_hash_lookup_ba(hdev, LE_LINK,
2474                                                        &cp->addr.bdaddr);
2475         } else {
2476                 conn = NULL;
2477         }
2478
2479         if (!conn) {
2480                 err = cmd_complete(sk, hdev->id, MGMT_OP_UNPAIR_DEVICE, 0,
2481                                    &rp, sizeof(rp));
2482                 device_unpaired(hdev, &cp->addr.bdaddr, cp->addr.type, sk);
2483                 goto unlock;
2484         }
2485
2486         cmd = mgmt_pending_add(sk, MGMT_OP_UNPAIR_DEVICE, hdev, cp,
2487                                sizeof(*cp));
2488         if (!cmd) {
2489                 err = -ENOMEM;
2490                 goto unlock;
2491         }
2492
2493         dc.handle = cpu_to_le16(conn->handle);
2494         dc.reason = 0x13; /* Remote User Terminated Connection */
2495         err = hci_send_cmd(hdev, HCI_OP_DISCONNECT, sizeof(dc), &dc);
2496         if (err < 0)
2497                 mgmt_pending_remove(cmd);
2498
2499 unlock:
2500         hci_dev_unlock(hdev);
2501         return err;
2502 }
2503
2504 static int disconnect(struct sock *sk, struct hci_dev *hdev, void *data,
2505                       u16 len)
2506 {
2507         struct mgmt_cp_disconnect *cp = data;
2508         struct mgmt_rp_disconnect rp;
2509         struct hci_cp_disconnect dc;
2510         struct pending_cmd *cmd;
2511         struct hci_conn *conn;
2512         int err;
2513
2514         BT_DBG("");
2515
2516         memset(&rp, 0, sizeof(rp));
2517         bacpy(&rp.addr.bdaddr, &cp->addr.bdaddr);
2518         rp.addr.type = cp->addr.type;
2519
2520         if (!bdaddr_type_is_valid(cp->addr.type))
2521                 return cmd_complete(sk, hdev->id, MGMT_OP_DISCONNECT,
2522                                     MGMT_STATUS_INVALID_PARAMS,
2523                                     &rp, sizeof(rp));
2524
2525         hci_dev_lock(hdev);
2526
2527         if (!test_bit(HCI_UP, &hdev->flags)) {
2528                 err = cmd_complete(sk, hdev->id, MGMT_OP_DISCONNECT,
2529                                    MGMT_STATUS_NOT_POWERED, &rp, sizeof(rp));
2530                 goto failed;
2531         }
2532
2533         if (mgmt_pending_find(MGMT_OP_DISCONNECT, hdev)) {
2534                 err = cmd_complete(sk, hdev->id, MGMT_OP_DISCONNECT,
2535                                    MGMT_STATUS_BUSY, &rp, sizeof(rp));
2536                 goto failed;
2537         }
2538
2539         if (cp->addr.type == BDADDR_BREDR)
2540                 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK,
2541                                                &cp->addr.bdaddr);
2542         else
2543                 conn = hci_conn_hash_lookup_ba(hdev, LE_LINK, &cp->addr.bdaddr);
2544
2545         if (!conn || conn->state == BT_OPEN || conn->state == BT_CLOSED) {
2546                 err = cmd_complete(sk, hdev->id, MGMT_OP_DISCONNECT,
2547                                    MGMT_STATUS_NOT_CONNECTED, &rp, sizeof(rp));
2548                 goto failed;
2549         }
2550
2551         cmd = mgmt_pending_add(sk, MGMT_OP_DISCONNECT, hdev, data, len);
2552         if (!cmd) {
2553                 err = -ENOMEM;
2554                 goto failed;
2555         }
2556
2557         dc.handle = cpu_to_le16(conn->handle);
2558         dc.reason = HCI_ERROR_REMOTE_USER_TERM;
2559
2560         err = hci_send_cmd(hdev, HCI_OP_DISCONNECT, sizeof(dc), &dc);
2561         if (err < 0)
2562                 mgmt_pending_remove(cmd);
2563
2564 failed:
2565         hci_dev_unlock(hdev);
2566         return err;
2567 }
2568
2569 static u8 link_to_bdaddr(u8 link_type, u8 addr_type)
2570 {
2571         switch (link_type) {
2572         case LE_LINK:
2573                 switch (addr_type) {
2574                 case ADDR_LE_DEV_PUBLIC:
2575                         return BDADDR_LE_PUBLIC;
2576
2577                 default:
2578                         /* Fallback to LE Random address type */
2579                         return BDADDR_LE_RANDOM;
2580                 }
2581
2582         default:
2583                 /* Fallback to BR/EDR type */
2584                 return BDADDR_BREDR;
2585         }
2586 }
2587
2588 static int get_connections(struct sock *sk, struct hci_dev *hdev, void *data,
2589                            u16 data_len)
2590 {
2591         struct mgmt_rp_get_connections *rp;
2592         struct hci_conn *c;
2593         size_t rp_len;
2594         int err;
2595         u16 i;
2596
2597         BT_DBG("");
2598
2599         hci_dev_lock(hdev);
2600
2601         if (!hdev_is_powered(hdev)) {
2602                 err = cmd_status(sk, hdev->id, MGMT_OP_GET_CONNECTIONS,
2603                                  MGMT_STATUS_NOT_POWERED);
2604                 goto unlock;
2605         }
2606
2607         i = 0;
2608         list_for_each_entry(c, &hdev->conn_hash.list, list) {
2609                 if (test_bit(HCI_CONN_MGMT_CONNECTED, &c->flags))
2610                         i++;
2611         }
2612
2613         rp_len = sizeof(*rp) + (i * sizeof(struct mgmt_addr_info));
2614         rp = kmalloc(rp_len, GFP_KERNEL);
2615         if (!rp) {
2616                 err = -ENOMEM;
2617                 goto unlock;
2618         }
2619
2620         i = 0;
2621         list_for_each_entry(c, &hdev->conn_hash.list, list) {
2622                 if (!test_bit(HCI_CONN_MGMT_CONNECTED, &c->flags))
2623                         continue;
2624                 bacpy(&rp->addr[i].bdaddr, &c->dst);
2625                 rp->addr[i].type = link_to_bdaddr(c->type, c->dst_type);
2626                 if (c->type == SCO_LINK || c->type == ESCO_LINK)
2627                         continue;
2628                 i++;
2629         }
2630
2631         rp->conn_count = cpu_to_le16(i);
2632
2633         /* Recalculate length in case of filtered SCO connections, etc */
2634         rp_len = sizeof(*rp) + (i * sizeof(struct mgmt_addr_info));
2635
2636         err = cmd_complete(sk, hdev->id, MGMT_OP_GET_CONNECTIONS, 0, rp,
2637                            rp_len);
2638
2639         kfree(rp);
2640
2641 unlock:
2642         hci_dev_unlock(hdev);
2643         return err;
2644 }
2645
2646 static int send_pin_code_neg_reply(struct sock *sk, struct hci_dev *hdev,
2647                                    struct mgmt_cp_pin_code_neg_reply *cp)
2648 {
2649         struct pending_cmd *cmd;
2650         int err;
2651
2652         cmd = mgmt_pending_add(sk, MGMT_OP_PIN_CODE_NEG_REPLY, hdev, cp,
2653                                sizeof(*cp));
2654         if (!cmd)
2655                 return -ENOMEM;
2656
2657         err = hci_send_cmd(hdev, HCI_OP_PIN_CODE_NEG_REPLY,
2658                            sizeof(cp->addr.bdaddr), &cp->addr.bdaddr);
2659         if (err < 0)
2660                 mgmt_pending_remove(cmd);
2661
2662         return err;
2663 }
2664
2665 static int pin_code_reply(struct sock *sk, struct hci_dev *hdev, void *data,
2666                           u16 len)
2667 {
2668         struct hci_conn *conn;
2669         struct mgmt_cp_pin_code_reply *cp = data;
2670         struct hci_cp_pin_code_reply reply;
2671         struct pending_cmd *cmd;
2672         int err;
2673
2674         BT_DBG("");
2675
2676         hci_dev_lock(hdev);
2677
2678         if (!hdev_is_powered(hdev)) {
2679                 err = cmd_status(sk, hdev->id, MGMT_OP_PIN_CODE_REPLY,
2680                                  MGMT_STATUS_NOT_POWERED);
2681                 goto failed;
2682         }
2683
2684         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->addr.bdaddr);
2685         if (!conn) {
2686                 err = cmd_status(sk, hdev->id, MGMT_OP_PIN_CODE_REPLY,
2687                                  MGMT_STATUS_NOT_CONNECTED);
2688                 goto failed;
2689         }
2690
2691         if (conn->pending_sec_level == BT_SECURITY_HIGH && cp->pin_len != 16) {
2692                 struct mgmt_cp_pin_code_neg_reply ncp;
2693
2694                 memcpy(&ncp.addr, &cp->addr, sizeof(ncp.addr));
2695
2696                 BT_ERR("PIN code is not 16 bytes long");
2697
2698                 err = send_pin_code_neg_reply(sk, hdev, &ncp);
2699                 if (err >= 0)
2700                         err = cmd_status(sk, hdev->id, MGMT_OP_PIN_CODE_REPLY,
2701                                          MGMT_STATUS_INVALID_PARAMS);
2702
2703                 goto failed;
2704         }
2705
2706         cmd = mgmt_pending_add(sk, MGMT_OP_PIN_CODE_REPLY, hdev, data, len);
2707         if (!cmd) {
2708                 err = -ENOMEM;
2709                 goto failed;
2710         }
2711
2712         bacpy(&reply.bdaddr, &cp->addr.bdaddr);
2713         reply.pin_len = cp->pin_len;
2714         memcpy(reply.pin_code, cp->pin_code, sizeof(reply.pin_code));
2715
2716         err = hci_send_cmd(hdev, HCI_OP_PIN_CODE_REPLY, sizeof(reply), &reply);
2717         if (err < 0)
2718                 mgmt_pending_remove(cmd);
2719
2720 failed:
2721         hci_dev_unlock(hdev);
2722         return err;
2723 }
2724
2725 static int set_io_capability(struct sock *sk, struct hci_dev *hdev, void *data,
2726                              u16 len)
2727 {
2728         struct mgmt_cp_set_io_capability *cp = data;
2729
2730         BT_DBG("");
2731
2732         hci_dev_lock(hdev);
2733
2734         hdev->io_capability = cp->io_capability;
2735
2736         BT_DBG("%s IO capability set to 0x%02x", hdev->name,
2737                hdev->io_capability);
2738
2739         hci_dev_unlock(hdev);
2740
2741         return cmd_complete(sk, hdev->id, MGMT_OP_SET_IO_CAPABILITY, 0, NULL,
2742                             0);
2743 }
2744
2745 static struct pending_cmd *find_pairing(struct hci_conn *conn)
2746 {
2747         struct hci_dev *hdev = conn->hdev;
2748         struct pending_cmd *cmd;
2749
2750         list_for_each_entry(cmd, &hdev->mgmt_pending, list) {
2751                 if (cmd->opcode != MGMT_OP_PAIR_DEVICE)
2752                         continue;
2753
2754                 if (cmd->user_data != conn)
2755                         continue;
2756
2757                 return cmd;
2758         }
2759
2760         return NULL;
2761 }
2762
2763 static void pairing_complete(struct pending_cmd *cmd, u8 status)
2764 {
2765         struct mgmt_rp_pair_device rp;
2766         struct hci_conn *conn = cmd->user_data;
2767
2768         bacpy(&rp.addr.bdaddr, &conn->dst);
2769         rp.addr.type = link_to_bdaddr(conn->type, conn->dst_type);
2770
2771         cmd_complete(cmd->sk, cmd->index, MGMT_OP_PAIR_DEVICE, status,
2772                      &rp, sizeof(rp));
2773
2774         /* So we don't get further callbacks for this connection */
2775         conn->connect_cfm_cb = NULL;
2776         conn->security_cfm_cb = NULL;
2777         conn->disconn_cfm_cb = NULL;
2778
2779         hci_conn_drop(conn);
2780
2781         mgmt_pending_remove(cmd);
2782 }
2783
2784 void mgmt_smp_complete(struct hci_conn *conn, bool complete)
2785 {
2786         u8 status = complete ? MGMT_STATUS_SUCCESS : MGMT_STATUS_FAILED;
2787         struct pending_cmd *cmd;
2788
2789         cmd = find_pairing(conn);
2790         if (cmd)
2791                 pairing_complete(cmd, status);
2792 }
2793
2794 static void pairing_complete_cb(struct hci_conn *conn, u8 status)
2795 {
2796         struct pending_cmd *cmd;
2797
2798         BT_DBG("status %u", status);
2799
2800         cmd = find_pairing(conn);
2801         if (!cmd)
2802                 BT_DBG("Unable to find a pending command");
2803         else
2804                 pairing_complete(cmd, mgmt_status(status));
2805 }
2806
2807 static void le_pairing_complete_cb(struct hci_conn *conn, u8 status)
2808 {
2809         struct pending_cmd *cmd;
2810
2811         BT_DBG("status %u", status);
2812
2813         if (!status)
2814                 return;
2815
2816         cmd = find_pairing(conn);
2817         if (!cmd)
2818                 BT_DBG("Unable to find a pending command");
2819         else
2820                 pairing_complete(cmd, mgmt_status(status));
2821 }
2822
2823 static int pair_device(struct sock *sk, struct hci_dev *hdev, void *data,
2824                        u16 len)
2825 {
2826         struct mgmt_cp_pair_device *cp = data;
2827         struct mgmt_rp_pair_device rp;
2828         struct pending_cmd *cmd;
2829         u8 sec_level, auth_type;
2830         struct hci_conn *conn;
2831         int err;
2832
2833         BT_DBG("");
2834
2835         memset(&rp, 0, sizeof(rp));
2836         bacpy(&rp.addr.bdaddr, &cp->addr.bdaddr);
2837         rp.addr.type = cp->addr.type;
2838
2839         if (!bdaddr_type_is_valid(cp->addr.type))
2840                 return cmd_complete(sk, hdev->id, MGMT_OP_PAIR_DEVICE,
2841                                     MGMT_STATUS_INVALID_PARAMS,
2842                                     &rp, sizeof(rp));
2843
2844         hci_dev_lock(hdev);
2845
2846         if (!hdev_is_powered(hdev)) {
2847                 err = cmd_complete(sk, hdev->id, MGMT_OP_PAIR_DEVICE,
2848                                    MGMT_STATUS_NOT_POWERED, &rp, sizeof(rp));
2849                 goto unlock;
2850         }
2851
2852         sec_level = BT_SECURITY_MEDIUM;
2853         if (cp->io_cap == 0x03)
2854                 auth_type = HCI_AT_DEDICATED_BONDING;
2855         else
2856                 auth_type = HCI_AT_DEDICATED_BONDING_MITM;
2857
2858         if (cp->addr.type == BDADDR_BREDR) {
2859                 conn = hci_connect_acl(hdev, &cp->addr.bdaddr, sec_level,
2860                                        auth_type);
2861         } else {
2862                 u8 addr_type;
2863
2864                 /* Convert from L2CAP channel address type to HCI address type
2865                  */
2866                 if (cp->addr.type == BDADDR_LE_PUBLIC)
2867                         addr_type = ADDR_LE_DEV_PUBLIC;
2868                 else
2869                         addr_type = ADDR_LE_DEV_RANDOM;
2870
2871                 conn = hci_connect_le(hdev, &cp->addr.bdaddr, addr_type,
2872                                       sec_level, auth_type);
2873         }
2874
2875         if (IS_ERR(conn)) {
2876                 int status;
2877
2878                 if (PTR_ERR(conn) == -EBUSY)
2879                         status = MGMT_STATUS_BUSY;
2880                 else
2881                         status = MGMT_STATUS_CONNECT_FAILED;
2882
2883                 err = cmd_complete(sk, hdev->id, MGMT_OP_PAIR_DEVICE,
2884                                    status, &rp,
2885                                    sizeof(rp));
2886                 goto unlock;
2887         }
2888
2889         if (conn->connect_cfm_cb) {
2890                 hci_conn_drop(conn);
2891                 err = cmd_complete(sk, hdev->id, MGMT_OP_PAIR_DEVICE,
2892                                    MGMT_STATUS_BUSY, &rp, sizeof(rp));
2893                 goto unlock;
2894         }
2895
2896         cmd = mgmt_pending_add(sk, MGMT_OP_PAIR_DEVICE, hdev, data, len);
2897         if (!cmd) {
2898                 err = -ENOMEM;
2899                 hci_conn_drop(conn);
2900                 goto unlock;
2901         }
2902
2903         /* For LE, just connecting isn't a proof that the pairing finished */
2904         if (cp->addr.type == BDADDR_BREDR) {
2905                 conn->connect_cfm_cb = pairing_complete_cb;
2906                 conn->security_cfm_cb = pairing_complete_cb;
2907                 conn->disconn_cfm_cb = pairing_complete_cb;
2908         } else {
2909                 conn->connect_cfm_cb = le_pairing_complete_cb;
2910                 conn->security_cfm_cb = le_pairing_complete_cb;
2911                 conn->disconn_cfm_cb = le_pairing_complete_cb;
2912         }
2913
2914         conn->io_capability = cp->io_cap;
2915         cmd->user_data = conn;
2916
2917         if (conn->state == BT_CONNECTED &&
2918             hci_conn_security(conn, sec_level, auth_type))
2919                 pairing_complete(cmd, 0);
2920
2921         err = 0;
2922
2923 unlock:
2924         hci_dev_unlock(hdev);
2925         return err;
2926 }
2927
2928 static int cancel_pair_device(struct sock *sk, struct hci_dev *hdev, void *data,
2929                               u16 len)
2930 {
2931         struct mgmt_addr_info *addr = data;
2932         struct pending_cmd *cmd;
2933         struct hci_conn *conn;
2934         int err;
2935
2936         BT_DBG("");
2937
2938         hci_dev_lock(hdev);
2939
2940         if (!hdev_is_powered(hdev)) {
2941                 err = cmd_status(sk, hdev->id, MGMT_OP_CANCEL_PAIR_DEVICE,
2942                                  MGMT_STATUS_NOT_POWERED);
2943                 goto unlock;
2944         }
2945
2946         cmd = mgmt_pending_find(MGMT_OP_PAIR_DEVICE, hdev);
2947         if (!cmd) {
2948                 err = cmd_status(sk, hdev->id, MGMT_OP_CANCEL_PAIR_DEVICE,
2949                                  MGMT_STATUS_INVALID_PARAMS);
2950                 goto unlock;
2951         }
2952
2953         conn = cmd->user_data;
2954
2955         if (bacmp(&addr->bdaddr, &conn->dst) != 0) {
2956                 err = cmd_status(sk, hdev->id, MGMT_OP_CANCEL_PAIR_DEVICE,
2957                                  MGMT_STATUS_INVALID_PARAMS);
2958                 goto unlock;
2959         }
2960
2961         pairing_complete(cmd, MGMT_STATUS_CANCELLED);
2962
2963         err = cmd_complete(sk, hdev->id, MGMT_OP_CANCEL_PAIR_DEVICE, 0,
2964                            addr, sizeof(*addr));
2965 unlock:
2966         hci_dev_unlock(hdev);
2967         return err;
2968 }
2969
2970 static int user_pairing_resp(struct sock *sk, struct hci_dev *hdev,
2971                              struct mgmt_addr_info *addr, u16 mgmt_op,
2972                              u16 hci_op, __le32 passkey)
2973 {
2974         struct pending_cmd *cmd;
2975         struct hci_conn *conn;
2976         int err;
2977
2978         hci_dev_lock(hdev);
2979
2980         if (!hdev_is_powered(hdev)) {
2981                 err = cmd_complete(sk, hdev->id, mgmt_op,
2982                                    MGMT_STATUS_NOT_POWERED, addr,
2983                                    sizeof(*addr));
2984                 goto done;
2985         }
2986
2987         if (addr->type == BDADDR_BREDR)
2988                 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &addr->bdaddr);
2989         else
2990                 conn = hci_conn_hash_lookup_ba(hdev, LE_LINK, &addr->bdaddr);
2991
2992         if (!conn) {
2993                 err = cmd_complete(sk, hdev->id, mgmt_op,
2994                                    MGMT_STATUS_NOT_CONNECTED, addr,
2995                                    sizeof(*addr));
2996                 goto done;
2997         }
2998
2999         if (addr->type == BDADDR_LE_PUBLIC || addr->type == BDADDR_LE_RANDOM) {
3000                 /* Continue with pairing via SMP */
3001                 err = smp_user_confirm_reply(conn, mgmt_op, passkey);
3002
3003                 if (!err)
3004                         err = cmd_complete(sk, hdev->id, mgmt_op,
3005                                            MGMT_STATUS_SUCCESS, addr,
3006                                            sizeof(*addr));
3007                 else
3008                         err = cmd_complete(sk, hdev->id, mgmt_op,
3009                                            MGMT_STATUS_FAILED, addr,
3010                                            sizeof(*addr));
3011
3012                 goto done;
3013         }
3014
3015         cmd = mgmt_pending_add(sk, mgmt_op, hdev, addr, sizeof(*addr));
3016         if (!cmd) {
3017                 err = -ENOMEM;
3018                 goto done;
3019         }
3020
3021         /* Continue with pairing via HCI */
3022         if (hci_op == HCI_OP_USER_PASSKEY_REPLY) {
3023                 struct hci_cp_user_passkey_reply cp;
3024
3025                 bacpy(&cp.bdaddr, &addr->bdaddr);
3026                 cp.passkey = passkey;
3027                 err = hci_send_cmd(hdev, hci_op, sizeof(cp), &cp);
3028         } else
3029                 err = hci_send_cmd(hdev, hci_op, sizeof(addr->bdaddr),
3030                                    &addr->bdaddr);
3031
3032         if (err < 0)
3033                 mgmt_pending_remove(cmd);
3034
3035 done:
3036         hci_dev_unlock(hdev);
3037         return err;
3038 }
3039
3040 static int pin_code_neg_reply(struct sock *sk, struct hci_dev *hdev,
3041                               void *data, u16 len)
3042 {
3043         struct mgmt_cp_pin_code_neg_reply *cp = data;
3044
3045         BT_DBG("");
3046
3047         return user_pairing_resp(sk, hdev, &cp->addr,
3048                                 MGMT_OP_PIN_CODE_NEG_REPLY,
3049                                 HCI_OP_PIN_CODE_NEG_REPLY, 0);
3050 }
3051
3052 static int user_confirm_reply(struct sock *sk, struct hci_dev *hdev, void *data,
3053                               u16 len)
3054 {
3055         struct mgmt_cp_user_confirm_reply *cp = data;
3056
3057         BT_DBG("");
3058
3059         if (len != sizeof(*cp))
3060                 return cmd_status(sk, hdev->id, MGMT_OP_USER_CONFIRM_REPLY,
3061                                   MGMT_STATUS_INVALID_PARAMS);
3062
3063         return user_pairing_resp(sk, hdev, &cp->addr,
3064                                  MGMT_OP_USER_CONFIRM_REPLY,
3065                                  HCI_OP_USER_CONFIRM_REPLY, 0);
3066 }
3067
3068 static int user_confirm_neg_reply(struct sock *sk, struct hci_dev *hdev,
3069                                   void *data, u16 len)
3070 {
3071         struct mgmt_cp_user_confirm_neg_reply *cp = data;
3072
3073         BT_DBG("");
3074
3075         return user_pairing_resp(sk, hdev, &cp->addr,
3076                                  MGMT_OP_USER_CONFIRM_NEG_REPLY,
3077                                  HCI_OP_USER_CONFIRM_NEG_REPLY, 0);
3078 }
3079
3080 static int user_passkey_reply(struct sock *sk, struct hci_dev *hdev, void *data,
3081                               u16 len)
3082 {
3083         struct mgmt_cp_user_passkey_reply *cp = data;
3084
3085         BT_DBG("");
3086
3087         return user_pairing_resp(sk, hdev, &cp->addr,
3088                                  MGMT_OP_USER_PASSKEY_REPLY,
3089                                  HCI_OP_USER_PASSKEY_REPLY, cp->passkey);
3090 }
3091
3092 static int user_passkey_neg_reply(struct sock *sk, struct hci_dev *hdev,
3093                                   void *data, u16 len)
3094 {
3095         struct mgmt_cp_user_passkey_neg_reply *cp = data;
3096
3097         BT_DBG("");
3098
3099         return user_pairing_resp(sk, hdev, &cp->addr,
3100                                  MGMT_OP_USER_PASSKEY_NEG_REPLY,
3101                                  HCI_OP_USER_PASSKEY_NEG_REPLY, 0);
3102 }
3103
3104 static void update_name(struct hci_request *req)
3105 {
3106         struct hci_dev *hdev = req->hdev;
3107         struct hci_cp_write_local_name cp;
3108
3109         memcpy(cp.name, hdev->dev_name, sizeof(cp.name));
3110
3111         hci_req_add(req, HCI_OP_WRITE_LOCAL_NAME, sizeof(cp), &cp);
3112 }
3113
3114 static void set_name_complete(struct hci_dev *hdev, u8 status)
3115 {
3116         struct mgmt_cp_set_local_name *cp;
3117         struct pending_cmd *cmd;
3118
3119         BT_DBG("status 0x%02x", status);
3120
3121         hci_dev_lock(hdev);
3122
3123         cmd = mgmt_pending_find(MGMT_OP_SET_LOCAL_NAME, hdev);
3124         if (!cmd)
3125                 goto unlock;
3126
3127         cp = cmd->param;
3128
3129         if (status)
3130                 cmd_status(cmd->sk, hdev->id, MGMT_OP_SET_LOCAL_NAME,
3131                            mgmt_status(status));
3132         else
3133                 cmd_complete(cmd->sk, hdev->id, MGMT_OP_SET_LOCAL_NAME, 0,
3134                              cp, sizeof(*cp));
3135
3136         mgmt_pending_remove(cmd);
3137
3138 unlock:
3139         hci_dev_unlock(hdev);
3140 }
3141
3142 static int set_local_name(struct sock *sk, struct hci_dev *hdev, void *data,
3143                           u16 len)
3144 {
3145         struct mgmt_cp_set_local_name *cp = data;
3146         struct pending_cmd *cmd;
3147         struct hci_request req;
3148         int err;
3149
3150         BT_DBG("");
3151
3152         hci_dev_lock(hdev);
3153
3154         /* If the old values are the same as the new ones just return a
3155          * direct command complete event.
3156          */
3157         if (!memcmp(hdev->dev_name, cp->name, sizeof(hdev->dev_name)) &&
3158             !memcmp(hdev->short_name, cp->short_name,
3159                     sizeof(hdev->short_name))) {
3160                 err = cmd_complete(sk, hdev->id, MGMT_OP_SET_LOCAL_NAME, 0,
3161                                    data, len);
3162                 goto failed;
3163         }
3164
3165         memcpy(hdev->short_name, cp->short_name, sizeof(hdev->short_name));
3166
3167         if (!hdev_is_powered(hdev)) {
3168                 memcpy(hdev->dev_name, cp->name, sizeof(hdev->dev_name));
3169
3170                 err = cmd_complete(sk, hdev->id, MGMT_OP_SET_LOCAL_NAME, 0,
3171                                    data, len);
3172                 if (err < 0)
3173                         goto failed;
3174
3175                 err = mgmt_event(MGMT_EV_LOCAL_NAME_CHANGED, hdev, data, len,
3176                                  sk);
3177
3178                 goto failed;
3179         }
3180
3181         cmd = mgmt_pending_add(sk, MGMT_OP_SET_LOCAL_NAME, hdev, data, len);
3182         if (!cmd) {
3183                 err = -ENOMEM;
3184                 goto failed;
3185         }
3186
3187         memcpy(hdev->dev_name, cp->name, sizeof(hdev->dev_name));
3188
3189         hci_req_init(&req, hdev);
3190
3191         if (lmp_bredr_capable(hdev)) {
3192                 update_name(&req);
3193                 update_eir(&req);
3194         }
3195
3196         /* The name is stored in the scan response data and so
3197          * no need to udpate the advertising data here.
3198          */
3199         if (lmp_le_capable(hdev))
3200                 update_scan_rsp_data(&req);
3201
3202         err = hci_req_run(&req, set_name_complete);
3203         if (err < 0)
3204                 mgmt_pending_remove(cmd);
3205
3206 failed:
3207         hci_dev_unlock(hdev);
3208         return err;
3209 }
3210
3211 static int read_local_oob_data(struct sock *sk, struct hci_dev *hdev,
3212                                void *data, u16 data_len)
3213 {
3214         struct pending_cmd *cmd;
3215         int err;
3216
3217         BT_DBG("%s", hdev->name);
3218
3219         hci_dev_lock(hdev);
3220
3221         if (!hdev_is_powered(hdev)) {
3222                 err = cmd_status(sk, hdev->id, MGMT_OP_READ_LOCAL_OOB_DATA,
3223                                  MGMT_STATUS_NOT_POWERED);
3224                 goto unlock;
3225         }
3226
3227         if (!lmp_ssp_capable(hdev)) {
3228                 err = cmd_status(sk, hdev->id, MGMT_OP_READ_LOCAL_OOB_DATA,
3229                                  MGMT_STATUS_NOT_SUPPORTED);
3230                 goto unlock;
3231         }
3232
3233         if (mgmt_pending_find(MGMT_OP_READ_LOCAL_OOB_DATA, hdev)) {
3234                 err = cmd_status(sk, hdev->id, MGMT_OP_READ_LOCAL_OOB_DATA,
3235                                  MGMT_STATUS_BUSY);
3236                 goto unlock;
3237         }
3238
3239         cmd = mgmt_pending_add(sk, MGMT_OP_READ_LOCAL_OOB_DATA, hdev, NULL, 0);
3240         if (!cmd) {
3241                 err = -ENOMEM;
3242                 goto unlock;
3243         }
3244
3245         if (test_bit(HCI_SC_ENABLED, &hdev->dev_flags))
3246                 err = hci_send_cmd(hdev, HCI_OP_READ_LOCAL_OOB_EXT_DATA,
3247                                    0, NULL);
3248         else
3249                 err = hci_send_cmd(hdev, HCI_OP_READ_LOCAL_OOB_DATA, 0, NULL);
3250
3251         if (err < 0)
3252                 mgmt_pending_remove(cmd);
3253
3254 unlock:
3255         hci_dev_unlock(hdev);
3256         return err;
3257 }
3258
3259 static int add_remote_oob_data(struct sock *sk, struct hci_dev *hdev,
3260                                void *data, u16 len)
3261 {
3262         int err;
3263
3264         BT_DBG("%s ", hdev->name);
3265
3266         hci_dev_lock(hdev);
3267
3268         if (len == MGMT_ADD_REMOTE_OOB_DATA_SIZE) {
3269                 struct mgmt_cp_add_remote_oob_data *cp = data;
3270                 u8 status;
3271
3272                 err = hci_add_remote_oob_data(hdev, &cp->addr.bdaddr,
3273                                               cp->hash, cp->randomizer);
3274                 if (err < 0)
3275                         status = MGMT_STATUS_FAILED;
3276                 else
3277                         status = MGMT_STATUS_SUCCESS;
3278
3279                 err = cmd_complete(sk, hdev->id, MGMT_OP_ADD_REMOTE_OOB_DATA,
3280                                    status, &cp->addr, sizeof(cp->addr));
3281         } else if (len == MGMT_ADD_REMOTE_OOB_EXT_DATA_SIZE) {
3282                 struct mgmt_cp_add_remote_oob_ext_data *cp = data;
3283                 u8 status;
3284
3285                 err = hci_add_remote_oob_ext_data(hdev, &cp->addr.bdaddr,
3286                                                   cp->hash192,
3287                                                   cp->randomizer192,
3288                                                   cp->hash256,
3289                                                   cp->randomizer256);
3290                 if (err < 0)
3291                         status = MGMT_STATUS_FAILED;
3292                 else
3293                         status = MGMT_STATUS_SUCCESS;
3294
3295                 err = cmd_complete(sk, hdev->id, MGMT_OP_ADD_REMOTE_OOB_DATA,
3296                                    status, &cp->addr, sizeof(cp->addr));
3297         } else {
3298                 BT_ERR("add_remote_oob_data: invalid length of %u bytes", len);
3299                 err = cmd_status(sk, hdev->id, MGMT_OP_ADD_REMOTE_OOB_DATA,
3300                                  MGMT_STATUS_INVALID_PARAMS);
3301         }
3302
3303         hci_dev_unlock(hdev);
3304         return err;
3305 }
3306
3307 static int remove_remote_oob_data(struct sock *sk, struct hci_dev *hdev,
3308                                   void *data, u16 len)
3309 {
3310         struct mgmt_cp_remove_remote_oob_data *cp = data;
3311         u8 status;
3312         int err;
3313
3314         BT_DBG("%s", hdev->name);
3315
3316         hci_dev_lock(hdev);
3317
3318         err = hci_remove_remote_oob_data(hdev, &cp->addr.bdaddr);
3319         if (err < 0)
3320                 status = MGMT_STATUS_INVALID_PARAMS;
3321         else
3322                 status = MGMT_STATUS_SUCCESS;
3323
3324         err = cmd_complete(sk, hdev->id, MGMT_OP_REMOVE_REMOTE_OOB_DATA,
3325                            status, &cp->addr, sizeof(cp->addr));
3326
3327         hci_dev_unlock(hdev);
3328         return err;
3329 }
3330
3331 static int mgmt_start_discovery_failed(struct hci_dev *hdev, u8 status)
3332 {
3333         struct pending_cmd *cmd;
3334         u8 type;
3335         int err;
3336
3337         hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
3338
3339         cmd = mgmt_pending_find(MGMT_OP_START_DISCOVERY, hdev);
3340         if (!cmd)
3341                 return -ENOENT;
3342
3343         type = hdev->discovery.type;
3344
3345         err = cmd_complete(cmd->sk, hdev->id, cmd->opcode, mgmt_status(status),
3346                            &type, sizeof(type));
3347         mgmt_pending_remove(cmd);
3348
3349         return err;
3350 }
3351
3352 static void start_discovery_complete(struct hci_dev *hdev, u8 status)
3353 {
3354         BT_DBG("status %d", status);
3355
3356         if (status) {
3357                 hci_dev_lock(hdev);
3358                 mgmt_start_discovery_failed(hdev, status);
3359                 hci_dev_unlock(hdev);
3360                 return;
3361         }
3362
3363         hci_dev_lock(hdev);
3364         hci_discovery_set_state(hdev, DISCOVERY_FINDING);
3365         hci_dev_unlock(hdev);
3366
3367         switch (hdev->discovery.type) {
3368         case DISCOV_TYPE_LE:
3369                 queue_delayed_work(hdev->workqueue, &hdev->le_scan_disable,
3370                                    DISCOV_LE_TIMEOUT);
3371                 break;
3372
3373         case DISCOV_TYPE_INTERLEAVED:
3374                 queue_delayed_work(hdev->workqueue, &hdev->le_scan_disable,
3375                                    DISCOV_INTERLEAVED_TIMEOUT);
3376                 break;
3377
3378         case DISCOV_TYPE_BREDR:
3379                 break;
3380
3381         default:
3382                 BT_ERR("Invalid discovery type %d", hdev->discovery.type);
3383         }
3384 }
3385
3386 static int start_discovery(struct sock *sk, struct hci_dev *hdev,
3387                            void *data, u16 len)
3388 {
3389         struct mgmt_cp_start_discovery *cp = data;
3390         struct pending_cmd *cmd;
3391         struct hci_cp_le_set_scan_param param_cp;
3392         struct hci_cp_le_set_scan_enable enable_cp;
3393         struct hci_cp_inquiry inq_cp;
3394         struct hci_request req;
3395         /* General inquiry access code (GIAC) */
3396         u8 lap[3] = { 0x33, 0x8b, 0x9e };
3397         u8 status, own_addr_type;
3398         int err;
3399
3400         BT_DBG("%s", hdev->name);
3401
3402         hci_dev_lock(hdev);
3403
3404         if (!hdev_is_powered(hdev)) {
3405                 err = cmd_status(sk, hdev->id, MGMT_OP_START_DISCOVERY,
3406                                  MGMT_STATUS_NOT_POWERED);
3407                 goto failed;
3408         }
3409
3410         if (test_bit(HCI_PERIODIC_INQ, &hdev->dev_flags)) {
3411                 err = cmd_status(sk, hdev->id, MGMT_OP_START_DISCOVERY,
3412                                  MGMT_STATUS_BUSY);
3413                 goto failed;
3414         }
3415
3416         if (hdev->discovery.state != DISCOVERY_STOPPED) {
3417                 err = cmd_status(sk, hdev->id, MGMT_OP_START_DISCOVERY,
3418                                  MGMT_STATUS_BUSY);
3419                 goto failed;
3420         }
3421
3422         cmd = mgmt_pending_add(sk, MGMT_OP_START_DISCOVERY, hdev, NULL, 0);
3423         if (!cmd) {
3424                 err = -ENOMEM;
3425                 goto failed;
3426         }
3427
3428         hdev->discovery.type = cp->type;
3429
3430         hci_req_init(&req, hdev);
3431
3432         switch (hdev->discovery.type) {
3433         case DISCOV_TYPE_BREDR:
3434                 status = mgmt_bredr_support(hdev);
3435                 if (status) {
3436                         err = cmd_status(sk, hdev->id, MGMT_OP_START_DISCOVERY,
3437                                          status);
3438                         mgmt_pending_remove(cmd);
3439                         goto failed;
3440                 }
3441
3442                 if (test_bit(HCI_INQUIRY, &hdev->flags)) {
3443                         err = cmd_status(sk, hdev->id, MGMT_OP_START_DISCOVERY,
3444                                          MGMT_STATUS_BUSY);
3445                         mgmt_pending_remove(cmd);
3446                         goto failed;
3447                 }
3448
3449                 hci_inquiry_cache_flush(hdev);
3450
3451                 memset(&inq_cp, 0, sizeof(inq_cp));
3452                 memcpy(&inq_cp.lap, lap, sizeof(inq_cp.lap));
3453                 inq_cp.length = DISCOV_BREDR_INQUIRY_LEN;
3454                 hci_req_add(&req, HCI_OP_INQUIRY, sizeof(inq_cp), &inq_cp);
3455                 break;
3456
3457         case DISCOV_TYPE_LE:
3458         case DISCOV_TYPE_INTERLEAVED:
3459                 status = mgmt_le_support(hdev);
3460                 if (status) {
3461                         err = cmd_status(sk, hdev->id, MGMT_OP_START_DISCOVERY,
3462                                          status);
3463                         mgmt_pending_remove(cmd);
3464                         goto failed;
3465                 }
3466
3467                 if (hdev->discovery.type == DISCOV_TYPE_INTERLEAVED &&
3468                     !test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags)) {
3469                         err = cmd_status(sk, hdev->id, MGMT_OP_START_DISCOVERY,
3470                                          MGMT_STATUS_NOT_SUPPORTED);
3471                         mgmt_pending_remove(cmd);
3472                         goto failed;
3473                 }
3474
3475                 if (test_bit(HCI_ADVERTISING, &hdev->dev_flags)) {
3476                         err = cmd_status(sk, hdev->id, MGMT_OP_START_DISCOVERY,
3477                                          MGMT_STATUS_REJECTED);
3478                         mgmt_pending_remove(cmd);
3479                         goto failed;
3480                 }
3481
3482                 /* If controller is scanning, it means the background scanning
3483                  * is running. Thus, we should temporarily stop it in order to
3484                  * set the discovery scanning parameters.
3485                  */
3486                 if (test_bit(HCI_LE_SCAN, &hdev->dev_flags))
3487                         hci_req_add_le_scan_disable(&req);
3488
3489                 memset(&param_cp, 0, sizeof(param_cp));
3490
3491                 /* All active scans will be done with either a resolvable
3492                  * private address (when privacy feature has been enabled)
3493                  * or unresolvable private address.
3494                  */
3495                 err = hci_update_random_address(&req, true, &own_addr_type);
3496                 if (err < 0) {
3497                         err = cmd_status(sk, hdev->id, MGMT_OP_START_DISCOVERY,
3498                                          MGMT_STATUS_FAILED);
3499                         mgmt_pending_remove(cmd);
3500                         goto failed;
3501                 }
3502
3503                 param_cp.type = LE_SCAN_ACTIVE;
3504                 param_cp.interval = cpu_to_le16(DISCOV_LE_SCAN_INT);
3505                 param_cp.window = cpu_to_le16(DISCOV_LE_SCAN_WIN);
3506                 param_cp.own_address_type = own_addr_type;
3507                 hci_req_add(&req, HCI_OP_LE_SET_SCAN_PARAM, sizeof(param_cp),
3508                             &param_cp);
3509
3510                 memset(&enable_cp, 0, sizeof(enable_cp));
3511                 enable_cp.enable = LE_SCAN_ENABLE;
3512                 enable_cp.filter_dup = LE_SCAN_FILTER_DUP_ENABLE;
3513                 hci_req_add(&req, HCI_OP_LE_SET_SCAN_ENABLE, sizeof(enable_cp),
3514                             &enable_cp);
3515                 break;
3516
3517         default:
3518                 err = cmd_status(sk, hdev->id, MGMT_OP_START_DISCOVERY,
3519                                  MGMT_STATUS_INVALID_PARAMS);
3520                 mgmt_pending_remove(cmd);
3521                 goto failed;
3522         }
3523
3524         err = hci_req_run(&req, start_discovery_complete);
3525         if (err < 0)
3526                 mgmt_pending_remove(cmd);
3527         else
3528                 hci_discovery_set_state(hdev, DISCOVERY_STARTING);
3529
3530 failed:
3531         hci_dev_unlock(hdev);
3532         return err;
3533 }
3534
3535 static int mgmt_stop_discovery_failed(struct hci_dev *hdev, u8 status)
3536 {
3537         struct pending_cmd *cmd;
3538         int err;
3539
3540         cmd = mgmt_pending_find(MGMT_OP_STOP_DISCOVERY, hdev);
3541         if (!cmd)
3542                 return -ENOENT;
3543
3544         err = cmd_complete(cmd->sk, hdev->id, cmd->opcode, mgmt_status(status),
3545                            &hdev->discovery.type, sizeof(hdev->discovery.type));
3546         mgmt_pending_remove(cmd);
3547
3548         return err;
3549 }
3550
3551 static void stop_discovery_complete(struct hci_dev *hdev, u8 status)
3552 {
3553         BT_DBG("status %d", status);
3554
3555         hci_dev_lock(hdev);
3556
3557         if (status) {
3558                 mgmt_stop_discovery_failed(hdev, status);
3559                 goto unlock;
3560         }
3561
3562         hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
3563
3564 unlock:
3565         hci_dev_unlock(hdev);
3566 }
3567
3568 static int stop_discovery(struct sock *sk, struct hci_dev *hdev, void *data,
3569                           u16 len)
3570 {
3571         struct mgmt_cp_stop_discovery *mgmt_cp = data;
3572         struct pending_cmd *cmd;
3573         struct hci_cp_remote_name_req_cancel cp;
3574         struct inquiry_entry *e;
3575         struct hci_request req;
3576         int err;
3577
3578         BT_DBG("%s", hdev->name);
3579
3580         hci_dev_lock(hdev);
3581
3582         if (!hci_discovery_active(hdev)) {
3583                 err = cmd_complete(sk, hdev->id, MGMT_OP_STOP_DISCOVERY,
3584                                    MGMT_STATUS_REJECTED, &mgmt_cp->type,
3585                                    sizeof(mgmt_cp->type));
3586                 goto unlock;
3587         }
3588
3589         if (hdev->discovery.type != mgmt_cp->type) {
3590                 err = cmd_complete(sk, hdev->id, MGMT_OP_STOP_DISCOVERY,
3591                                    MGMT_STATUS_INVALID_PARAMS, &mgmt_cp->type,
3592                                    sizeof(mgmt_cp->type));
3593                 goto unlock;
3594         }
3595
3596         cmd = mgmt_pending_add(sk, MGMT_OP_STOP_DISCOVERY, hdev, NULL, 0);
3597         if (!cmd) {
3598                 err = -ENOMEM;
3599                 goto unlock;
3600         }
3601
3602         hci_req_init(&req, hdev);
3603
3604         switch (hdev->discovery.state) {
3605         case DISCOVERY_FINDING:
3606                 if (test_bit(HCI_INQUIRY, &hdev->flags)) {
3607                         hci_req_add(&req, HCI_OP_INQUIRY_CANCEL, 0, NULL);
3608                 } else {
3609                         cancel_delayed_work(&hdev->le_scan_disable);
3610
3611                         hci_req_add_le_scan_disable(&req);
3612                 }
3613
3614                 break;
3615
3616         case DISCOVERY_RESOLVING:
3617                 e = hci_inquiry_cache_lookup_resolve(hdev, BDADDR_ANY,
3618                                                      NAME_PENDING);
3619                 if (!e) {
3620                         mgmt_pending_remove(cmd);
3621                         err = cmd_complete(sk, hdev->id,
3622                                            MGMT_OP_STOP_DISCOVERY, 0,
3623                                            &mgmt_cp->type,
3624                                            sizeof(mgmt_cp->type));
3625                         hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
3626                         goto unlock;
3627                 }
3628
3629                 bacpy(&cp.bdaddr, &e->data.bdaddr);
3630                 hci_req_add(&req, HCI_OP_REMOTE_NAME_REQ_CANCEL, sizeof(cp),
3631                             &cp);
3632
3633                 break;
3634
3635         default:
3636                 BT_DBG("unknown discovery state %u", hdev->discovery.state);
3637
3638                 mgmt_pending_remove(cmd);
3639                 err = cmd_complete(sk, hdev->id, MGMT_OP_STOP_DISCOVERY,
3640                                    MGMT_STATUS_FAILED, &mgmt_cp->type,
3641                                    sizeof(mgmt_cp->type));
3642                 goto unlock;
3643         }
3644
3645         err = hci_req_run(&req, stop_discovery_complete);
3646         if (err < 0)
3647                 mgmt_pending_remove(cmd);
3648         else
3649                 hci_discovery_set_state(hdev, DISCOVERY_STOPPING);
3650
3651 unlock:
3652         hci_dev_unlock(hdev);
3653         return err;
3654 }
3655
3656 static int confirm_name(struct sock *sk, struct hci_dev *hdev, void *data,
3657                         u16 len)
3658 {
3659         struct mgmt_cp_confirm_name *cp = data;
3660         struct inquiry_entry *e;
3661         int err;
3662
3663         BT_DBG("%s", hdev->name);
3664
3665         hci_dev_lock(hdev);
3666
3667         if (!hci_discovery_active(hdev)) {
3668                 err = cmd_complete(sk, hdev->id, MGMT_OP_CONFIRM_NAME,
3669                                    MGMT_STATUS_FAILED, &cp->addr,
3670                                    sizeof(cp->addr));
3671                 goto failed;
3672         }
3673
3674         e = hci_inquiry_cache_lookup_unknown(hdev, &cp->addr.bdaddr);
3675         if (!e) {
3676                 err = cmd_complete(sk, hdev->id, MGMT_OP_CONFIRM_NAME,
3677                                    MGMT_STATUS_INVALID_PARAMS, &cp->addr,
3678                                    sizeof(cp->addr));
3679                 goto failed;
3680         }
3681
3682         if (cp->name_known) {
3683                 e->name_state = NAME_KNOWN;
3684                 list_del(&e->list);
3685         } else {
3686                 e->name_state = NAME_NEEDED;
3687                 hci_inquiry_cache_update_resolve(hdev, e);
3688         }
3689
3690         err = cmd_complete(sk, hdev->id, MGMT_OP_CONFIRM_NAME, 0, &cp->addr,
3691                            sizeof(cp->addr));
3692
3693 failed:
3694         hci_dev_unlock(hdev);
3695         return err;
3696 }
3697
3698 static int block_device(struct sock *sk, struct hci_dev *hdev, void *data,
3699                         u16 len)
3700 {
3701         struct mgmt_cp_block_device *cp = data;
3702         u8 status;
3703         int err;
3704
3705         BT_DBG("%s", hdev->name);
3706
3707         if (!bdaddr_type_is_valid(cp->addr.type))
3708                 return cmd_complete(sk, hdev->id, MGMT_OP_BLOCK_DEVICE,
3709                                     MGMT_STATUS_INVALID_PARAMS,
3710                                     &cp->addr, sizeof(cp->addr));
3711
3712         hci_dev_lock(hdev);
3713
3714         err = hci_blacklist_add(hdev, &cp->addr.bdaddr, cp->addr.type);
3715         if (err < 0)
3716                 status = MGMT_STATUS_FAILED;
3717         else
3718                 status = MGMT_STATUS_SUCCESS;
3719
3720         err = cmd_complete(sk, hdev->id, MGMT_OP_BLOCK_DEVICE, status,
3721                            &cp->addr, sizeof(cp->addr));
3722
3723         hci_dev_unlock(hdev);
3724
3725         return err;
3726 }
3727
3728 static int unblock_device(struct sock *sk, struct hci_dev *hdev, void *data,
3729                           u16 len)
3730 {
3731         struct mgmt_cp_unblock_device *cp = data;
3732         u8 status;
3733         int err;
3734
3735         BT_DBG("%s", hdev->name);
3736
3737         if (!bdaddr_type_is_valid(cp->addr.type))
3738                 return cmd_complete(sk, hdev->id, MGMT_OP_UNBLOCK_DEVICE,
3739                                     MGMT_STATUS_INVALID_PARAMS,
3740                                     &cp->addr, sizeof(cp->addr));
3741
3742         hci_dev_lock(hdev);
3743
3744         err = hci_blacklist_del(hdev, &cp->addr.bdaddr, cp->addr.type);
3745         if (err < 0)
3746                 status = MGMT_STATUS_INVALID_PARAMS;
3747         else
3748                 status = MGMT_STATUS_SUCCESS;
3749
3750         err = cmd_complete(sk, hdev->id, MGMT_OP_UNBLOCK_DEVICE, status,
3751                            &cp->addr, sizeof(cp->addr));
3752
3753         hci_dev_unlock(hdev);
3754
3755         return err;
3756 }
3757
3758 static int set_device_id(struct sock *sk, struct hci_dev *hdev, void *data,
3759                          u16 len)
3760 {
3761         struct mgmt_cp_set_device_id *cp = data;
3762         struct hci_request req;
3763         int err;
3764         __u16 source;
3765
3766         BT_DBG("%s", hdev->name);
3767
3768         source = __le16_to_cpu(cp->source);
3769
3770         if (source > 0x0002)
3771                 return cmd_status(sk, hdev->id, MGMT_OP_SET_DEVICE_ID,
3772                                   MGMT_STATUS_INVALID_PARAMS);
3773
3774         hci_dev_lock(hdev);
3775
3776         hdev->devid_source = source;
3777         hdev->devid_vendor = __le16_to_cpu(cp->vendor);
3778         hdev->devid_product = __le16_to_cpu(cp->product);
3779         hdev->devid_version = __le16_to_cpu(cp->version);
3780
3781         err = cmd_complete(sk, hdev->id, MGMT_OP_SET_DEVICE_ID, 0, NULL, 0);
3782
3783         hci_req_init(&req, hdev);
3784         update_eir(&req);
3785         hci_req_run(&req, NULL);
3786
3787         hci_dev_unlock(hdev);
3788
3789         return err;
3790 }
3791
3792 static void set_advertising_complete(struct hci_dev *hdev, u8 status)
3793 {
3794         struct cmd_lookup match = { NULL, hdev };
3795
3796         if (status) {
3797                 u8 mgmt_err = mgmt_status(status);
3798
3799                 mgmt_pending_foreach(MGMT_OP_SET_ADVERTISING, hdev,
3800                                      cmd_status_rsp, &mgmt_err);
3801                 return;
3802         }
3803
3804         mgmt_pending_foreach(MGMT_OP_SET_ADVERTISING, hdev, settings_rsp,
3805                              &match);
3806
3807         new_settings(hdev, match.sk);
3808
3809         if (match.sk)
3810                 sock_put(match.sk);
3811 }
3812
3813 static int set_advertising(struct sock *sk, struct hci_dev *hdev, void *data,
3814                            u16 len)
3815 {
3816         struct mgmt_mode *cp = data;
3817         struct pending_cmd *cmd;
3818         struct hci_request req;
3819         u8 val, enabled, status;
3820         int err;
3821
3822         BT_DBG("request for %s", hdev->name);
3823
3824         status = mgmt_le_support(hdev);
3825         if (status)
3826                 return cmd_status(sk, hdev->id, MGMT_OP_SET_ADVERTISING,
3827                                   status);
3828
3829         if (cp->val != 0x00 && cp->val != 0x01)
3830                 return cmd_status(sk, hdev->id, MGMT_OP_SET_ADVERTISING,
3831                                   MGMT_STATUS_INVALID_PARAMS);
3832
3833         hci_dev_lock(hdev);
3834
3835         val = !!cp->val;
3836         enabled = test_bit(HCI_ADVERTISING, &hdev->dev_flags);
3837
3838         /* The following conditions are ones which mean that we should
3839          * not do any HCI communication but directly send a mgmt
3840          * response to user space (after toggling the flag if
3841          * necessary).
3842          */
3843         if (!hdev_is_powered(hdev) || val == enabled ||
3844             hci_conn_num(hdev, LE_LINK) > 0) {
3845                 bool changed = false;
3846
3847                 if (val != test_bit(HCI_ADVERTISING, &hdev->dev_flags)) {
3848                         change_bit(HCI_ADVERTISING, &hdev->dev_flags);
3849                         changed = true;
3850                 }
3851
3852                 err = send_settings_rsp(sk, MGMT_OP_SET_ADVERTISING, hdev);
3853                 if (err < 0)
3854                         goto unlock;
3855
3856                 if (changed)
3857                         err = new_settings(hdev, sk);
3858
3859                 goto unlock;
3860         }
3861
3862         if (mgmt_pending_find(MGMT_OP_SET_ADVERTISING, hdev) ||
3863             mgmt_pending_find(MGMT_OP_SET_LE, hdev)) {
3864                 err = cmd_status(sk, hdev->id, MGMT_OP_SET_ADVERTISING,
3865                                  MGMT_STATUS_BUSY);
3866                 goto unlock;
3867         }
3868
3869         cmd = mgmt_pending_add(sk, MGMT_OP_SET_ADVERTISING, hdev, data, len);
3870         if (!cmd) {
3871                 err = -ENOMEM;
3872                 goto unlock;
3873         }
3874
3875         hci_req_init(&req, hdev);
3876
3877         if (val)
3878                 enable_advertising(&req);
3879         else
3880                 disable_advertising(&req);
3881
3882         err = hci_req_run(&req, set_advertising_complete);
3883         if (err < 0)
3884                 mgmt_pending_remove(cmd);
3885
3886 unlock:
3887         hci_dev_unlock(hdev);
3888         return err;
3889 }
3890
3891 static int set_static_address(struct sock *sk, struct hci_dev *hdev,
3892                               void *data, u16 len)
3893 {
3894         struct mgmt_cp_set_static_address *cp = data;
3895         int err;
3896
3897         BT_DBG("%s", hdev->name);
3898
3899         if (!lmp_le_capable(hdev))
3900                 return cmd_status(sk, hdev->id, MGMT_OP_SET_STATIC_ADDRESS,
3901                                   MGMT_STATUS_NOT_SUPPORTED);
3902
3903         if (hdev_is_powered(hdev))
3904                 return cmd_status(sk, hdev->id, MGMT_OP_SET_STATIC_ADDRESS,
3905                                   MGMT_STATUS_REJECTED);
3906
3907         if (bacmp(&cp->bdaddr, BDADDR_ANY)) {
3908                 if (!bacmp(&cp->bdaddr, BDADDR_NONE))
3909                         return cmd_status(sk, hdev->id,
3910                                           MGMT_OP_SET_STATIC_ADDRESS,
3911                                           MGMT_STATUS_INVALID_PARAMS);
3912
3913                 /* Two most significant bits shall be set */
3914                 if ((cp->bdaddr.b[5] & 0xc0) != 0xc0)
3915                         return cmd_status(sk, hdev->id,
3916                                           MGMT_OP_SET_STATIC_ADDRESS,
3917                                           MGMT_STATUS_INVALID_PARAMS);
3918         }
3919
3920         hci_dev_lock(hdev);
3921
3922         bacpy(&hdev->static_addr, &cp->bdaddr);
3923
3924         err = cmd_complete(sk, hdev->id, MGMT_OP_SET_STATIC_ADDRESS, 0, NULL, 0);
3925
3926         hci_dev_unlock(hdev);
3927
3928         return err;
3929 }
3930
3931 static int set_scan_params(struct sock *sk, struct hci_dev *hdev,
3932                            void *data, u16 len)
3933 {
3934         struct mgmt_cp_set_scan_params *cp = data;
3935         __u16 interval, window;
3936         int err;
3937
3938         BT_DBG("%s", hdev->name);
3939
3940         if (!lmp_le_capable(hdev))
3941                 return cmd_status(sk, hdev->id, MGMT_OP_SET_SCAN_PARAMS,
3942                                   MGMT_STATUS_NOT_SUPPORTED);
3943
3944         interval = __le16_to_cpu(cp->interval);
3945
3946         if (interval < 0x0004 || interval > 0x4000)
3947                 return cmd_status(sk, hdev->id, MGMT_OP_SET_SCAN_PARAMS,
3948                                   MGMT_STATUS_INVALID_PARAMS);
3949
3950         window = __le16_to_cpu(cp->window);
3951
3952         if (window < 0x0004 || window > 0x4000)
3953                 return cmd_status(sk, hdev->id, MGMT_OP_SET_SCAN_PARAMS,
3954                                   MGMT_STATUS_INVALID_PARAMS);
3955
3956         if (window > interval)
3957                 return cmd_status(sk, hdev->id, MGMT_OP_SET_SCAN_PARAMS,
3958                                   MGMT_STATUS_INVALID_PARAMS);
3959
3960         hci_dev_lock(hdev);
3961
3962         hdev->le_scan_interval = interval;
3963         hdev->le_scan_window = window;
3964
3965         err = cmd_complete(sk, hdev->id, MGMT_OP_SET_SCAN_PARAMS, 0, NULL, 0);
3966
3967         /* If background scan is running, restart it so new parameters are
3968          * loaded.
3969          */
3970         if (test_bit(HCI_LE_SCAN, &hdev->dev_flags) &&
3971             hdev->discovery.state == DISCOVERY_STOPPED) {
3972                 struct hci_request req;
3973
3974                 hci_req_init(&req, hdev);
3975
3976                 hci_req_add_le_scan_disable(&req);
3977                 hci_req_add_le_passive_scan(&req);
3978
3979                 hci_req_run(&req, NULL);
3980         }
3981
3982         hci_dev_unlock(hdev);
3983
3984         return err;
3985 }
3986
3987 static void fast_connectable_complete(struct hci_dev *hdev, u8 status)
3988 {
3989         struct pending_cmd *cmd;
3990
3991         BT_DBG("status 0x%02x", status);
3992
3993         hci_dev_lock(hdev);
3994
3995         cmd = mgmt_pending_find(MGMT_OP_SET_FAST_CONNECTABLE, hdev);
3996         if (!cmd)
3997                 goto unlock;
3998
3999         if (status) {
4000                 cmd_status(cmd->sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE,
4001                            mgmt_status(status));
4002         } else {
4003                 struct mgmt_mode *cp = cmd->param;
4004
4005                 if (cp->val)
4006                         set_bit(HCI_FAST_CONNECTABLE, &hdev->dev_flags);
4007                 else
4008                         clear_bit(HCI_FAST_CONNECTABLE, &hdev->dev_flags);
4009
4010                 send_settings_rsp(cmd->sk, MGMT_OP_SET_FAST_CONNECTABLE, hdev);
4011                 new_settings(hdev, cmd->sk);
4012         }
4013
4014         mgmt_pending_remove(cmd);
4015
4016 unlock:
4017         hci_dev_unlock(hdev);
4018 }
4019
4020 static int set_fast_connectable(struct sock *sk, struct hci_dev *hdev,
4021                                 void *data, u16 len)
4022 {
4023         struct mgmt_mode *cp = data;
4024         struct pending_cmd *cmd;
4025         struct hci_request req;
4026         int err;
4027
4028         BT_DBG("%s", hdev->name);
4029
4030         if (!test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags) ||
4031             hdev->hci_ver < BLUETOOTH_VER_1_2)
4032                 return cmd_status(sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE,
4033                                   MGMT_STATUS_NOT_SUPPORTED);
4034
4035         if (cp->val != 0x00 && cp->val != 0x01)
4036                 return cmd_status(sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE,
4037                                   MGMT_STATUS_INVALID_PARAMS);
4038
4039         if (!hdev_is_powered(hdev))
4040                 return cmd_status(sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE,
4041                                   MGMT_STATUS_NOT_POWERED);
4042
4043         if (!test_bit(HCI_CONNECTABLE, &hdev->dev_flags))
4044                 return cmd_status(sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE,
4045                                   MGMT_STATUS_REJECTED);
4046
4047         hci_dev_lock(hdev);
4048
4049         if (mgmt_pending_find(MGMT_OP_SET_FAST_CONNECTABLE, hdev)) {
4050                 err = cmd_status(sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE,
4051                                  MGMT_STATUS_BUSY);
4052                 goto unlock;
4053         }
4054
4055         if (!!cp->val == test_bit(HCI_FAST_CONNECTABLE, &hdev->dev_flags)) {
4056                 err = send_settings_rsp(sk, MGMT_OP_SET_FAST_CONNECTABLE,
4057                                         hdev);
4058                 goto unlock;
4059         }
4060
4061         cmd = mgmt_pending_add(sk, MGMT_OP_SET_FAST_CONNECTABLE, hdev,
4062                                data, len);
4063         if (!cmd) {
4064                 err = -ENOMEM;
4065                 goto unlock;
4066         }
4067
4068         hci_req_init(&req, hdev);
4069
4070         write_fast_connectable(&req, cp->val);
4071
4072         err = hci_req_run(&req, fast_connectable_complete);
4073         if (err < 0) {
4074                 err = cmd_status(sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE,
4075                                  MGMT_STATUS_FAILED);
4076                 mgmt_pending_remove(cmd);
4077         }
4078
4079 unlock:
4080         hci_dev_unlock(hdev);
4081
4082         return err;
4083 }
4084
4085 static void set_bredr_scan(struct hci_request *req)
4086 {
4087         struct hci_dev *hdev = req->hdev;
4088         u8 scan = 0;
4089
4090         /* Ensure that fast connectable is disabled. This function will
4091          * not do anything if the page scan parameters are already what
4092          * they should be.
4093          */
4094         write_fast_connectable(req, false);
4095
4096         if (test_bit(HCI_CONNECTABLE, &hdev->dev_flags))
4097                 scan |= SCAN_PAGE;
4098         if (test_bit(HCI_DISCOVERABLE, &hdev->dev_flags))
4099                 scan |= SCAN_INQUIRY;
4100
4101         if (scan)
4102                 hci_req_add(req, HCI_OP_WRITE_SCAN_ENABLE, 1, &scan);
4103 }
4104
4105 static void set_bredr_complete(struct hci_dev *hdev, u8 status)
4106 {
4107         struct pending_cmd *cmd;
4108
4109         BT_DBG("status 0x%02x", status);
4110
4111         hci_dev_lock(hdev);
4112
4113         cmd = mgmt_pending_find(MGMT_OP_SET_BREDR, hdev);
4114         if (!cmd)
4115                 goto unlock;
4116
4117         if (status) {
4118                 u8 mgmt_err = mgmt_status(status);
4119
4120                 /* We need to restore the flag if related HCI commands
4121                  * failed.
4122                  */
4123                 clear_bit(HCI_BREDR_ENABLED, &hdev->dev_flags);
4124
4125                 cmd_status(cmd->sk, cmd->index, cmd->opcode, mgmt_err);
4126         } else {
4127                 send_settings_rsp(cmd->sk, MGMT_OP_SET_BREDR, hdev);
4128                 new_settings(hdev, cmd->sk);
4129         }
4130
4131         mgmt_pending_remove(cmd);
4132
4133 unlock:
4134         hci_dev_unlock(hdev);
4135 }
4136
4137 static int set_bredr(struct sock *sk, struct hci_dev *hdev, void *data, u16 len)
4138 {
4139         struct mgmt_mode *cp = data;
4140         struct pending_cmd *cmd;
4141         struct hci_request req;
4142         int err;
4143
4144         BT_DBG("request for %s", hdev->name);
4145
4146         if (!lmp_bredr_capable(hdev) || !lmp_le_capable(hdev))
4147                 return cmd_status(sk, hdev->id, MGMT_OP_SET_BREDR,
4148                                   MGMT_STATUS_NOT_SUPPORTED);
4149
4150         if (!test_bit(HCI_LE_ENABLED, &hdev->dev_flags))
4151                 return cmd_status(sk, hdev->id, MGMT_OP_SET_BREDR,
4152                                   MGMT_STATUS_REJECTED);
4153
4154         if (cp->val != 0x00 && cp->val != 0x01)
4155                 return cmd_status(sk, hdev->id, MGMT_OP_SET_BREDR,
4156                                   MGMT_STATUS_INVALID_PARAMS);
4157
4158         hci_dev_lock(hdev);
4159
4160         if (cp->val == test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags)) {
4161                 err = send_settings_rsp(sk, MGMT_OP_SET_BREDR, hdev);
4162                 goto unlock;
4163         }
4164
4165         if (!hdev_is_powered(hdev)) {
4166                 if (!cp->val) {
4167                         clear_bit(HCI_DISCOVERABLE, &hdev->dev_flags);
4168                         clear_bit(HCI_SSP_ENABLED, &hdev->dev_flags);
4169                         clear_bit(HCI_LINK_SECURITY, &hdev->dev_flags);
4170                         clear_bit(HCI_FAST_CONNECTABLE, &hdev->dev_flags);
4171                         clear_bit(HCI_HS_ENABLED, &hdev->dev_flags);
4172                 }
4173
4174                 change_bit(HCI_BREDR_ENABLED, &hdev->dev_flags);
4175
4176                 err = send_settings_rsp(sk, MGMT_OP_SET_BREDR, hdev);
4177                 if (err < 0)
4178                         goto unlock;
4179
4180                 err = new_settings(hdev, sk);
4181                 goto unlock;
4182         }
4183
4184         /* Reject disabling when powered on */
4185         if (!cp->val) {
4186                 err = cmd_status(sk, hdev->id, MGMT_OP_SET_BREDR,
4187                                  MGMT_STATUS_REJECTED);
4188                 goto unlock;
4189         }
4190
4191         if (mgmt_pending_find(MGMT_OP_SET_BREDR, hdev)) {
4192                 err = cmd_status(sk, hdev->id, MGMT_OP_SET_BREDR,
4193                                  MGMT_STATUS_BUSY);
4194                 goto unlock;
4195         }
4196
4197         cmd = mgmt_pending_add(sk, MGMT_OP_SET_BREDR, hdev, data, len);
4198         if (!cmd) {
4199                 err = -ENOMEM;
4200                 goto unlock;
4201         }
4202
4203         /* We need to flip the bit already here so that update_adv_data
4204          * generates the correct flags.
4205          */
4206         set_bit(HCI_BREDR_ENABLED, &hdev->dev_flags);
4207
4208         hci_req_init(&req, hdev);
4209
4210         if (test_bit(HCI_CONNECTABLE, &hdev->dev_flags))
4211                 set_bredr_scan(&req);
4212
4213         /* Since only the advertising data flags will change, there
4214          * is no need to update the scan response data.
4215          */
4216         update_adv_data(&req);
4217
4218         err = hci_req_run(&req, set_bredr_complete);
4219         if (err < 0)
4220                 mgmt_pending_remove(cmd);
4221
4222 unlock:
4223         hci_dev_unlock(hdev);
4224         return err;
4225 }
4226
4227 static int set_secure_conn(struct sock *sk, struct hci_dev *hdev,
4228                            void *data, u16 len)
4229 {
4230         struct mgmt_mode *cp = data;
4231         struct pending_cmd *cmd;
4232         u8 val, status;
4233         int err;
4234
4235         BT_DBG("request for %s", hdev->name);
4236
4237         status = mgmt_bredr_support(hdev);
4238         if (status)
4239                 return cmd_status(sk, hdev->id, MGMT_OP_SET_SECURE_CONN,
4240                                   status);
4241
4242         if (!lmp_sc_capable(hdev) &&
4243             !test_bit(HCI_FORCE_SC, &hdev->dev_flags))
4244                 return cmd_status(sk, hdev->id, MGMT_OP_SET_SECURE_CONN,
4245                                   MGMT_STATUS_NOT_SUPPORTED);
4246
4247         if (cp->val != 0x00 && cp->val != 0x01 && cp->val != 0x02)
4248                 return cmd_status(sk, hdev->id, MGMT_OP_SET_SECURE_CONN,
4249                                   MGMT_STATUS_INVALID_PARAMS);
4250
4251         hci_dev_lock(hdev);
4252
4253         if (!hdev_is_powered(hdev)) {
4254                 bool changed;
4255
4256                 if (cp->val) {
4257                         changed = !test_and_set_bit(HCI_SC_ENABLED,
4258                                                     &hdev->dev_flags);
4259                         if (cp->val == 0x02)
4260                                 set_bit(HCI_SC_ONLY, &hdev->dev_flags);
4261                         else
4262                                 clear_bit(HCI_SC_ONLY, &hdev->dev_flags);
4263                 } else {
4264                         changed = test_and_clear_bit(HCI_SC_ENABLED,
4265                                                      &hdev->dev_flags);
4266                         clear_bit(HCI_SC_ONLY, &hdev->dev_flags);
4267                 }
4268
4269                 err = send_settings_rsp(sk, MGMT_OP_SET_SECURE_CONN, hdev);
4270                 if (err < 0)
4271                         goto failed;
4272
4273                 if (changed)
4274                         err = new_settings(hdev, sk);
4275
4276                 goto failed;
4277         }
4278
4279         if (mgmt_pending_find(MGMT_OP_SET_SECURE_CONN, hdev)) {
4280                 err = cmd_status(sk, hdev->id, MGMT_OP_SET_SECURE_CONN,
4281                                  MGMT_STATUS_BUSY);
4282                 goto failed;
4283         }
4284
4285         val = !!cp->val;
4286
4287         if (val == test_bit(HCI_SC_ENABLED, &hdev->dev_flags) &&
4288             (cp->val == 0x02) == test_bit(HCI_SC_ONLY, &hdev->dev_flags)) {
4289                 err = send_settings_rsp(sk, MGMT_OP_SET_SECURE_CONN, hdev);
4290                 goto failed;
4291         }
4292
4293         cmd = mgmt_pending_add(sk, MGMT_OP_SET_SECURE_CONN, hdev, data, len);
4294         if (!cmd) {
4295                 err = -ENOMEM;
4296                 goto failed;
4297         }
4298
4299         err = hci_send_cmd(hdev, HCI_OP_WRITE_SC_SUPPORT, 1, &val);
4300         if (err < 0) {
4301                 mgmt_pending_remove(cmd);
4302                 goto failed;
4303         }
4304
4305         if (cp->val == 0x02)
4306                 set_bit(HCI_SC_ONLY, &hdev->dev_flags);
4307         else
4308                 clear_bit(HCI_SC_ONLY, &hdev->dev_flags);
4309
4310 failed:
4311         hci_dev_unlock(hdev);
4312         return err;
4313 }
4314
4315 static int set_debug_keys(struct sock *sk, struct hci_dev *hdev,
4316                           void *data, u16 len)
4317 {
4318         struct mgmt_mode *cp = data;
4319         bool changed;
4320         int err;
4321
4322         BT_DBG("request for %s", hdev->name);
4323
4324         if (cp->val != 0x00 && cp->val != 0x01)
4325                 return cmd_status(sk, hdev->id, MGMT_OP_SET_DEBUG_KEYS,
4326                                   MGMT_STATUS_INVALID_PARAMS);
4327
4328         hci_dev_lock(hdev);
4329
4330         if (cp->val)
4331                 changed = !test_and_set_bit(HCI_DEBUG_KEYS, &hdev->dev_flags);
4332         else
4333                 changed = test_and_clear_bit(HCI_DEBUG_KEYS, &hdev->dev_flags);
4334
4335         err = send_settings_rsp(sk, MGMT_OP_SET_DEBUG_KEYS, hdev);
4336         if (err < 0)
4337                 goto unlock;
4338
4339         if (changed)
4340                 err = new_settings(hdev, sk);
4341
4342 unlock:
4343         hci_dev_unlock(hdev);
4344         return err;
4345 }
4346
4347 static int set_privacy(struct sock *sk, struct hci_dev *hdev, void *cp_data,
4348                        u16 len)
4349 {
4350         struct mgmt_cp_set_privacy *cp = cp_data;
4351         bool changed;
4352         int err;
4353
4354         BT_DBG("request for %s", hdev->name);
4355
4356         if (!lmp_le_capable(hdev))
4357                 return cmd_status(sk, hdev->id, MGMT_OP_SET_PRIVACY,
4358                                   MGMT_STATUS_NOT_SUPPORTED);
4359
4360         if (cp->privacy != 0x00 && cp->privacy != 0x01)
4361                 return cmd_status(sk, hdev->id, MGMT_OP_SET_PRIVACY,
4362                                   MGMT_STATUS_INVALID_PARAMS);
4363
4364         if (hdev_is_powered(hdev))
4365                 return cmd_status(sk, hdev->id, MGMT_OP_SET_PRIVACY,
4366                                   MGMT_STATUS_REJECTED);
4367
4368         hci_dev_lock(hdev);
4369
4370         /* If user space supports this command it is also expected to
4371          * handle IRKs. Therefore, set the HCI_RPA_RESOLVING flag.
4372          */
4373         set_bit(HCI_RPA_RESOLVING, &hdev->dev_flags);
4374
4375         if (cp->privacy) {
4376                 changed = !test_and_set_bit(HCI_PRIVACY, &hdev->dev_flags);
4377                 memcpy(hdev->irk, cp->irk, sizeof(hdev->irk));
4378                 set_bit(HCI_RPA_EXPIRED, &hdev->dev_flags);
4379         } else {
4380                 changed = test_and_clear_bit(HCI_PRIVACY, &hdev->dev_flags);
4381                 memset(hdev->irk, 0, sizeof(hdev->irk));
4382                 clear_bit(HCI_RPA_EXPIRED, &hdev->dev_flags);
4383         }
4384
4385         err = send_settings_rsp(sk, MGMT_OP_SET_PRIVACY, hdev);
4386         if (err < 0)
4387                 goto unlock;
4388
4389         if (changed)
4390                 err = new_settings(hdev, sk);
4391
4392 unlock:
4393         hci_dev_unlock(hdev);
4394         return err;
4395 }
4396
4397 static bool irk_is_valid(struct mgmt_irk_info *irk)
4398 {
4399         switch (irk->addr.type) {
4400         case BDADDR_LE_PUBLIC:
4401                 return true;
4402
4403         case BDADDR_LE_RANDOM:
4404                 /* Two most significant bits shall be set */
4405                 if ((irk->addr.bdaddr.b[5] & 0xc0) != 0xc0)
4406                         return false;
4407                 return true;
4408         }
4409
4410         return false;
4411 }
4412
4413 static int load_irks(struct sock *sk, struct hci_dev *hdev, void *cp_data,
4414                      u16 len)
4415 {
4416         struct mgmt_cp_load_irks *cp = cp_data;
4417         u16 irk_count, expected_len;
4418         int i, err;
4419
4420         BT_DBG("request for %s", hdev->name);
4421
4422         if (!lmp_le_capable(hdev))
4423                 return cmd_status(sk, hdev->id, MGMT_OP_LOAD_IRKS,
4424                                   MGMT_STATUS_NOT_SUPPORTED);
4425
4426         irk_count = __le16_to_cpu(cp->irk_count);
4427
4428         expected_len = sizeof(*cp) + irk_count * sizeof(struct mgmt_irk_info);
4429         if (expected_len != len) {
4430                 BT_ERR("load_irks: expected %u bytes, got %u bytes",
4431                        expected_len, len);
4432                 return cmd_status(sk, hdev->id, MGMT_OP_LOAD_IRKS,
4433                                   MGMT_STATUS_INVALID_PARAMS);
4434         }
4435
4436         BT_DBG("%s irk_count %u", hdev->name, irk_count);
4437
4438         for (i = 0; i < irk_count; i++) {
4439                 struct mgmt_irk_info *key = &cp->irks[i];
4440
4441                 if (!irk_is_valid(key))
4442                         return cmd_status(sk, hdev->id,
4443                                           MGMT_OP_LOAD_IRKS,
4444                                           MGMT_STATUS_INVALID_PARAMS);
4445         }
4446
4447         hci_dev_lock(hdev);
4448
4449         hci_smp_irks_clear(hdev);
4450
4451         for (i = 0; i < irk_count; i++) {
4452                 struct mgmt_irk_info *irk = &cp->irks[i];
4453                 u8 addr_type;
4454
4455                 if (irk->addr.type == BDADDR_LE_PUBLIC)
4456                         addr_type = ADDR_LE_DEV_PUBLIC;
4457                 else
4458                         addr_type = ADDR_LE_DEV_RANDOM;
4459
4460                 hci_add_irk(hdev, &irk->addr.bdaddr, addr_type, irk->val,
4461                             BDADDR_ANY);
4462         }
4463
4464         set_bit(HCI_RPA_RESOLVING, &hdev->dev_flags);
4465
4466         err = cmd_complete(sk, hdev->id, MGMT_OP_LOAD_IRKS, 0, NULL, 0);
4467
4468         hci_dev_unlock(hdev);
4469
4470         return err;
4471 }
4472
4473 static bool ltk_is_valid(struct mgmt_ltk_info *key)
4474 {
4475         if (key->master != 0x00 && key->master != 0x01)
4476                 return false;
4477
4478         switch (key->addr.type) {
4479         case BDADDR_LE_PUBLIC:
4480                 return true;
4481
4482         case BDADDR_LE_RANDOM:
4483                 /* Two most significant bits shall be set */
4484                 if ((key->addr.bdaddr.b[5] & 0xc0) != 0xc0)
4485                         return false;
4486                 return true;
4487         }
4488
4489         return false;
4490 }
4491
4492 static int load_long_term_keys(struct sock *sk, struct hci_dev *hdev,
4493                                void *cp_data, u16 len)
4494 {
4495         struct mgmt_cp_load_long_term_keys *cp = cp_data;
4496         u16 key_count, expected_len;
4497         int i, err;
4498
4499         BT_DBG("request for %s", hdev->name);
4500
4501         if (!lmp_le_capable(hdev))
4502                 return cmd_status(sk, hdev->id, MGMT_OP_LOAD_LONG_TERM_KEYS,
4503                                   MGMT_STATUS_NOT_SUPPORTED);
4504
4505         key_count = __le16_to_cpu(cp->key_count);
4506
4507         expected_len = sizeof(*cp) + key_count *
4508                                         sizeof(struct mgmt_ltk_info);
4509         if (expected_len != len) {
4510                 BT_ERR("load_keys: expected %u bytes, got %u bytes",
4511                        expected_len, len);
4512                 return cmd_status(sk, hdev->id, MGMT_OP_LOAD_LONG_TERM_KEYS,
4513                                   MGMT_STATUS_INVALID_PARAMS);
4514         }
4515
4516         BT_DBG("%s key_count %u", hdev->name, key_count);
4517
4518         for (i = 0; i < key_count; i++) {
4519                 struct mgmt_ltk_info *key = &cp->keys[i];
4520
4521                 if (!ltk_is_valid(key))
4522                         return cmd_status(sk, hdev->id,
4523                                           MGMT_OP_LOAD_LONG_TERM_KEYS,
4524                                           MGMT_STATUS_INVALID_PARAMS);
4525         }
4526
4527         hci_dev_lock(hdev);
4528
4529         hci_smp_ltks_clear(hdev);
4530
4531         for (i = 0; i < key_count; i++) {
4532                 struct mgmt_ltk_info *key = &cp->keys[i];
4533                 u8 type, addr_type;
4534
4535                 if (key->addr.type == BDADDR_LE_PUBLIC)
4536                         addr_type = ADDR_LE_DEV_PUBLIC;
4537                 else
4538                         addr_type = ADDR_LE_DEV_RANDOM;
4539
4540                 if (key->master)
4541                         type = HCI_SMP_LTK;
4542                 else
4543                         type = HCI_SMP_LTK_SLAVE;
4544
4545                 hci_add_ltk(hdev, &key->addr.bdaddr, addr_type, type,
4546                             key->type, key->val, key->enc_size, key->ediv,
4547                             key->rand);
4548         }
4549
4550         err = cmd_complete(sk, hdev->id, MGMT_OP_LOAD_LONG_TERM_KEYS, 0,
4551                            NULL, 0);
4552
4553         hci_dev_unlock(hdev);
4554
4555         return err;
4556 }
4557
4558 static const struct mgmt_handler {
4559         int (*func) (struct sock *sk, struct hci_dev *hdev, void *data,
4560                      u16 data_len);
4561         bool var_len;
4562         size_t data_len;
4563 } mgmt_handlers[] = {
4564         { NULL }, /* 0x0000 (no command) */
4565         { read_version,           false, MGMT_READ_VERSION_SIZE },
4566         { read_commands,          false, MGMT_READ_COMMANDS_SIZE },
4567         { read_index_list,        false, MGMT_READ_INDEX_LIST_SIZE },
4568         { read_controller_info,   false, MGMT_READ_INFO_SIZE },
4569         { set_powered,            false, MGMT_SETTING_SIZE },
4570         { set_discoverable,       false, MGMT_SET_DISCOVERABLE_SIZE },
4571         { set_connectable,        false, MGMT_SETTING_SIZE },
4572         { set_fast_connectable,   false, MGMT_SETTING_SIZE },
4573         { set_pairable,           false, MGMT_SETTING_SIZE },
4574         { set_link_security,      false, MGMT_SETTING_SIZE },
4575         { set_ssp,                false, MGMT_SETTING_SIZE },
4576         { set_hs,                 false, MGMT_SETTING_SIZE },
4577         { set_le,                 false, MGMT_SETTING_SIZE },
4578         { set_dev_class,          false, MGMT_SET_DEV_CLASS_SIZE },
4579         { set_local_name,         false, MGMT_SET_LOCAL_NAME_SIZE },
4580         { add_uuid,               false, MGMT_ADD_UUID_SIZE },
4581         { remove_uuid,            false, MGMT_REMOVE_UUID_SIZE },
4582         { load_link_keys,         true,  MGMT_LOAD_LINK_KEYS_SIZE },
4583         { load_long_term_keys,    true,  MGMT_LOAD_LONG_TERM_KEYS_SIZE },
4584         { disconnect,             false, MGMT_DISCONNECT_SIZE },
4585         { get_connections,        false, MGMT_GET_CONNECTIONS_SIZE },
4586         { pin_code_reply,         false, MGMT_PIN_CODE_REPLY_SIZE },
4587         { pin_code_neg_reply,     false, MGMT_PIN_CODE_NEG_REPLY_SIZE },
4588         { set_io_capability,      false, MGMT_SET_IO_CAPABILITY_SIZE },
4589         { pair_device,            false, MGMT_PAIR_DEVICE_SIZE },
4590         { cancel_pair_device,     false, MGMT_CANCEL_PAIR_DEVICE_SIZE },
4591         { unpair_device,          false, MGMT_UNPAIR_DEVICE_SIZE },
4592         { user_confirm_reply,     false, MGMT_USER_CONFIRM_REPLY_SIZE },
4593         { user_confirm_neg_reply, false, MGMT_USER_CONFIRM_NEG_REPLY_SIZE },
4594         { user_passkey_reply,     false, MGMT_USER_PASSKEY_REPLY_SIZE },
4595         { user_passkey_neg_reply, false, MGMT_USER_PASSKEY_NEG_REPLY_SIZE },
4596         { read_local_oob_data,    false, MGMT_READ_LOCAL_OOB_DATA_SIZE },
4597         { add_remote_oob_data,    true,  MGMT_ADD_REMOTE_OOB_DATA_SIZE },
4598         { remove_remote_oob_data, false, MGMT_REMOVE_REMOTE_OOB_DATA_SIZE },
4599         { start_discovery,        false, MGMT_START_DISCOVERY_SIZE },
4600         { stop_discovery,         false, MGMT_STOP_DISCOVERY_SIZE },
4601         { confirm_name,           false, MGMT_CONFIRM_NAME_SIZE },
4602         { block_device,           false, MGMT_BLOCK_DEVICE_SIZE },
4603         { unblock_device,         false, MGMT_UNBLOCK_DEVICE_SIZE },
4604         { set_device_id,          false, MGMT_SET_DEVICE_ID_SIZE },
4605         { set_advertising,        false, MGMT_SETTING_SIZE },
4606         { set_bredr,              false, MGMT_SETTING_SIZE },
4607         { set_static_address,     false, MGMT_SET_STATIC_ADDRESS_SIZE },
4608         { set_scan_params,        false, MGMT_SET_SCAN_PARAMS_SIZE },
4609         { set_secure_conn,        false, MGMT_SETTING_SIZE },
4610         { set_debug_keys,         false, MGMT_SETTING_SIZE },
4611         { set_privacy,            false, MGMT_SET_PRIVACY_SIZE },
4612         { load_irks,              true,  MGMT_LOAD_IRKS_SIZE },
4613 };
4614
4615
4616 int mgmt_control(struct sock *sk, struct msghdr *msg, size_t msglen)
4617 {
4618         void *buf;
4619         u8 *cp;
4620         struct mgmt_hdr *hdr;
4621         u16 opcode, index, len;
4622         struct hci_dev *hdev = NULL;
4623         const struct mgmt_handler *handler;
4624         int err;
4625
4626         BT_DBG("got %zu bytes", msglen);
4627
4628         if (msglen < sizeof(*hdr))
4629                 return -EINVAL;
4630
4631         buf = kmalloc(msglen, GFP_KERNEL);
4632         if (!buf)
4633                 return -ENOMEM;
4634
4635         if (memcpy_fromiovec(buf, msg->msg_iov, msglen)) {
4636                 err = -EFAULT;
4637                 goto done;
4638         }
4639
4640         hdr = buf;
4641         opcode = __le16_to_cpu(hdr->opcode);
4642         index = __le16_to_cpu(hdr->index);
4643         len = __le16_to_cpu(hdr->len);
4644
4645         if (len != msglen - sizeof(*hdr)) {
4646                 err = -EINVAL;
4647                 goto done;
4648         }
4649
4650         if (index != MGMT_INDEX_NONE) {
4651                 hdev = hci_dev_get(index);
4652                 if (!hdev) {
4653                         err = cmd_status(sk, index, opcode,
4654                                          MGMT_STATUS_INVALID_INDEX);
4655                         goto done;
4656                 }
4657
4658                 if (test_bit(HCI_SETUP, &hdev->dev_flags) ||
4659                     test_bit(HCI_USER_CHANNEL, &hdev->dev_flags)) {
4660                         err = cmd_status(sk, index, opcode,
4661                                          MGMT_STATUS_INVALID_INDEX);
4662                         goto done;
4663                 }
4664         }
4665
4666         if (opcode >= ARRAY_SIZE(mgmt_handlers) ||
4667             mgmt_handlers[opcode].func == NULL) {
4668                 BT_DBG("Unknown op %u", opcode);
4669                 err = cmd_status(sk, index, opcode,
4670                                  MGMT_STATUS_UNKNOWN_COMMAND);
4671                 goto done;
4672         }
4673
4674         if ((hdev && opcode < MGMT_OP_READ_INFO) ||
4675             (!hdev && opcode >= MGMT_OP_READ_INFO)) {
4676                 err = cmd_status(sk, index, opcode,
4677                                  MGMT_STATUS_INVALID_INDEX);
4678                 goto done;
4679         }
4680
4681         handler = &mgmt_handlers[opcode];
4682
4683         if ((handler->var_len && len < handler->data_len) ||
4684             (!handler->var_len && len != handler->data_len)) {
4685                 err = cmd_status(sk, index, opcode,
4686                                  MGMT_STATUS_INVALID_PARAMS);
4687                 goto done;
4688         }
4689
4690         if (hdev)
4691                 mgmt_init_hdev(sk, hdev);
4692
4693         cp = buf + sizeof(*hdr);
4694
4695         err = handler->func(sk, hdev, cp, len);
4696         if (err < 0)
4697                 goto done;
4698
4699         err = msglen;
4700
4701 done:
4702         if (hdev)
4703                 hci_dev_put(hdev);
4704
4705         kfree(buf);
4706         return err;
4707 }
4708
4709 void mgmt_index_added(struct hci_dev *hdev)
4710 {
4711         if (hdev->dev_type != HCI_BREDR)
4712                 return;
4713
4714         mgmt_event(MGMT_EV_INDEX_ADDED, hdev, NULL, 0, NULL);
4715 }
4716
4717 void mgmt_index_removed(struct hci_dev *hdev)
4718 {
4719         u8 status = MGMT_STATUS_INVALID_INDEX;
4720
4721         if (hdev->dev_type != HCI_BREDR)
4722                 return;
4723
4724         mgmt_pending_foreach(0, hdev, cmd_status_rsp, &status);
4725
4726         mgmt_event(MGMT_EV_INDEX_REMOVED, hdev, NULL, 0, NULL);
4727 }
4728
4729 /* This function requires the caller holds hdev->lock */
4730 static void restart_le_auto_conns(struct hci_dev *hdev)
4731 {
4732         struct hci_conn_params *p;
4733
4734         list_for_each_entry(p, &hdev->le_conn_params, list) {
4735                 if (p->auto_connect == HCI_AUTO_CONN_ALWAYS)
4736                         hci_pend_le_conn_add(hdev, &p->addr, p->addr_type);
4737         }
4738 }
4739
4740 static void powered_complete(struct hci_dev *hdev, u8 status)
4741 {
4742         struct cmd_lookup match = { NULL, hdev };
4743
4744         BT_DBG("status 0x%02x", status);
4745
4746         hci_dev_lock(hdev);
4747
4748         restart_le_auto_conns(hdev);
4749
4750         mgmt_pending_foreach(MGMT_OP_SET_POWERED, hdev, settings_rsp, &match);
4751
4752         new_settings(hdev, match.sk);
4753
4754         hci_dev_unlock(hdev);
4755
4756         if (match.sk)
4757                 sock_put(match.sk);
4758 }
4759
4760 static int powered_update_hci(struct hci_dev *hdev)
4761 {
4762         struct hci_request req;
4763         u8 link_sec;
4764
4765         hci_req_init(&req, hdev);
4766
4767         if (test_bit(HCI_SSP_ENABLED, &hdev->dev_flags) &&
4768             !lmp_host_ssp_capable(hdev)) {
4769                 u8 ssp = 1;
4770
4771                 hci_req_add(&req, HCI_OP_WRITE_SSP_MODE, 1, &ssp);
4772         }
4773
4774         if (test_bit(HCI_LE_ENABLED, &hdev->dev_flags) &&
4775             lmp_bredr_capable(hdev)) {
4776                 struct hci_cp_write_le_host_supported cp;
4777
4778                 cp.le = 1;
4779                 cp.simul = lmp_le_br_capable(hdev);
4780
4781                 /* Check first if we already have the right
4782                  * host state (host features set)
4783                  */
4784                 if (cp.le != lmp_host_le_capable(hdev) ||
4785                     cp.simul != lmp_host_le_br_capable(hdev))
4786                         hci_req_add(&req, HCI_OP_WRITE_LE_HOST_SUPPORTED,
4787                                     sizeof(cp), &cp);
4788         }
4789
4790         if (lmp_le_capable(hdev)) {
4791                 /* Make sure the controller has a good default for
4792                  * advertising data. This also applies to the case
4793                  * where BR/EDR was toggled during the AUTO_OFF phase.
4794                  */
4795                 if (test_bit(HCI_LE_ENABLED, &hdev->dev_flags)) {
4796                         update_adv_data(&req);
4797                         update_scan_rsp_data(&req);
4798                 }
4799
4800                 if (test_bit(HCI_ADVERTISING, &hdev->dev_flags))
4801                         enable_advertising(&req);
4802         }
4803
4804         link_sec = test_bit(HCI_LINK_SECURITY, &hdev->dev_flags);
4805         if (link_sec != test_bit(HCI_AUTH, &hdev->flags))
4806                 hci_req_add(&req, HCI_OP_WRITE_AUTH_ENABLE,
4807                             sizeof(link_sec), &link_sec);
4808
4809         if (lmp_bredr_capable(hdev)) {
4810                 if (test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags))
4811                         set_bredr_scan(&req);
4812                 update_class(&req);
4813                 update_name(&req);
4814                 update_eir(&req);
4815         }
4816
4817         return hci_req_run(&req, powered_complete);
4818 }
4819
4820 int mgmt_powered(struct hci_dev *hdev, u8 powered)
4821 {
4822         struct cmd_lookup match = { NULL, hdev };
4823         u8 status_not_powered = MGMT_STATUS_NOT_POWERED;
4824         u8 zero_cod[] = { 0, 0, 0 };
4825         int err;
4826
4827         if (!test_bit(HCI_MGMT, &hdev->dev_flags))
4828                 return 0;
4829
4830         if (powered) {
4831                 if (powered_update_hci(hdev) == 0)
4832                         return 0;
4833
4834                 mgmt_pending_foreach(MGMT_OP_SET_POWERED, hdev, settings_rsp,
4835                                      &match);
4836                 goto new_settings;
4837         }
4838
4839         mgmt_pending_foreach(MGMT_OP_SET_POWERED, hdev, settings_rsp, &match);
4840         mgmt_pending_foreach(0, hdev, cmd_status_rsp, &status_not_powered);
4841
4842         if (memcmp(hdev->dev_class, zero_cod, sizeof(zero_cod)) != 0)
4843                 mgmt_event(MGMT_EV_CLASS_OF_DEV_CHANGED, hdev,
4844                            zero_cod, sizeof(zero_cod), NULL);
4845
4846 new_settings:
4847         err = new_settings(hdev, match.sk);
4848
4849         if (match.sk)
4850                 sock_put(match.sk);
4851
4852         return err;
4853 }
4854
4855 void mgmt_set_powered_failed(struct hci_dev *hdev, int err)
4856 {
4857         struct pending_cmd *cmd;
4858         u8 status;
4859
4860         cmd = mgmt_pending_find(MGMT_OP_SET_POWERED, hdev);
4861         if (!cmd)
4862                 return;
4863
4864         if (err == -ERFKILL)
4865                 status = MGMT_STATUS_RFKILLED;
4866         else
4867                 status = MGMT_STATUS_FAILED;
4868
4869         cmd_status(cmd->sk, hdev->id, MGMT_OP_SET_POWERED, status);
4870
4871         mgmt_pending_remove(cmd);
4872 }
4873
4874 void mgmt_discoverable_timeout(struct hci_dev *hdev)
4875 {
4876         struct hci_request req;
4877
4878         hci_dev_lock(hdev);
4879
4880         /* When discoverable timeout triggers, then just make sure
4881          * the limited discoverable flag is cleared. Even in the case
4882          * of a timeout triggered from general discoverable, it is
4883          * safe to unconditionally clear the flag.
4884          */
4885         clear_bit(HCI_LIMITED_DISCOVERABLE, &hdev->dev_flags);
4886         clear_bit(HCI_DISCOVERABLE, &hdev->dev_flags);
4887
4888         hci_req_init(&req, hdev);
4889         if (test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags)) {
4890                 u8 scan = SCAN_PAGE;
4891                 hci_req_add(&req, HCI_OP_WRITE_SCAN_ENABLE,
4892                             sizeof(scan), &scan);
4893         }
4894         update_class(&req);
4895         update_adv_data(&req);
4896         hci_req_run(&req, NULL);
4897
4898         hdev->discov_timeout = 0;
4899
4900         new_settings(hdev, NULL);
4901
4902         hci_dev_unlock(hdev);
4903 }
4904
4905 void mgmt_discoverable(struct hci_dev *hdev, u8 discoverable)
4906 {
4907         bool changed;
4908
4909         /* Nothing needed here if there's a pending command since that
4910          * commands request completion callback takes care of everything
4911          * necessary.
4912          */
4913         if (mgmt_pending_find(MGMT_OP_SET_DISCOVERABLE, hdev))
4914                 return;
4915
4916         /* Powering off may clear the scan mode - don't let that interfere */
4917         if (!discoverable && mgmt_pending_find(MGMT_OP_SET_POWERED, hdev))
4918                 return;
4919
4920         if (discoverable) {
4921                 changed = !test_and_set_bit(HCI_DISCOVERABLE, &hdev->dev_flags);
4922         } else {
4923                 clear_bit(HCI_LIMITED_DISCOVERABLE, &hdev->dev_flags);
4924                 changed = test_and_clear_bit(HCI_DISCOVERABLE, &hdev->dev_flags);
4925         }
4926
4927         if (changed) {
4928                 struct hci_request req;
4929
4930                 /* In case this change in discoverable was triggered by
4931                  * a disabling of connectable there could be a need to
4932                  * update the advertising flags.
4933                  */
4934                 hci_req_init(&req, hdev);
4935                 update_adv_data(&req);
4936                 hci_req_run(&req, NULL);
4937
4938                 new_settings(hdev, NULL);
4939         }
4940 }
4941
4942 void mgmt_connectable(struct hci_dev *hdev, u8 connectable)
4943 {
4944         bool changed;
4945
4946         /* Nothing needed here if there's a pending command since that
4947          * commands request completion callback takes care of everything
4948          * necessary.
4949          */
4950         if (mgmt_pending_find(MGMT_OP_SET_CONNECTABLE, hdev))
4951                 return;
4952
4953         /* Powering off may clear the scan mode - don't let that interfere */
4954         if (!connectable && mgmt_pending_find(MGMT_OP_SET_POWERED, hdev))
4955                 return;
4956
4957         if (connectable)
4958                 changed = !test_and_set_bit(HCI_CONNECTABLE, &hdev->dev_flags);
4959         else
4960                 changed = test_and_clear_bit(HCI_CONNECTABLE, &hdev->dev_flags);
4961
4962         if (changed)
4963                 new_settings(hdev, NULL);
4964 }
4965
4966 void mgmt_advertising(struct hci_dev *hdev, u8 advertising)
4967 {
4968         /* Powering off may stop advertising - don't let that interfere */
4969         if (!advertising && mgmt_pending_find(MGMT_OP_SET_POWERED, hdev))
4970                 return;
4971
4972         if (advertising)
4973                 set_bit(HCI_ADVERTISING, &hdev->dev_flags);
4974         else
4975                 clear_bit(HCI_ADVERTISING, &hdev->dev_flags);
4976 }
4977
4978 void mgmt_write_scan_failed(struct hci_dev *hdev, u8 scan, u8 status)
4979 {
4980         u8 mgmt_err = mgmt_status(status);
4981
4982         if (scan & SCAN_PAGE)
4983                 mgmt_pending_foreach(MGMT_OP_SET_CONNECTABLE, hdev,
4984                                      cmd_status_rsp, &mgmt_err);
4985
4986         if (scan & SCAN_INQUIRY)
4987                 mgmt_pending_foreach(MGMT_OP_SET_DISCOVERABLE, hdev,
4988                                      cmd_status_rsp, &mgmt_err);
4989 }
4990
4991 void mgmt_new_link_key(struct hci_dev *hdev, struct link_key *key,
4992                        bool persistent)
4993 {
4994         struct mgmt_ev_new_link_key ev;
4995
4996         memset(&ev, 0, sizeof(ev));
4997
4998         ev.store_hint = persistent;
4999         bacpy(&ev.key.addr.bdaddr, &key->bdaddr);
5000         ev.key.addr.type = BDADDR_BREDR;
5001         ev.key.type = key->type;
5002         memcpy(ev.key.val, key->val, HCI_LINK_KEY_SIZE);
5003         ev.key.pin_len = key->pin_len;
5004
5005         mgmt_event(MGMT_EV_NEW_LINK_KEY, hdev, &ev, sizeof(ev), NULL);
5006 }
5007
5008 void mgmt_new_ltk(struct hci_dev *hdev, struct smp_ltk *key, bool persistent)
5009 {
5010         struct mgmt_ev_new_long_term_key ev;
5011
5012         memset(&ev, 0, sizeof(ev));
5013
5014         /* Devices using resolvable or non-resolvable random addresses
5015          * without providing an indentity resolving key don't require
5016          * to store long term keys. Their addresses will change the
5017          * next time around.
5018          *
5019          * Only when a remote device provides an identity address
5020          * make sure the long term key is stored. If the remote
5021          * identity is known, the long term keys are internally
5022          * mapped to the identity address. So allow static random
5023          * and public addresses here.
5024          */
5025         if (key->bdaddr_type == ADDR_LE_DEV_RANDOM &&
5026             (key->bdaddr.b[5] & 0xc0) != 0xc0)
5027                 ev.store_hint = 0x00;
5028         else
5029                 ev.store_hint = persistent;
5030
5031         bacpy(&ev.key.addr.bdaddr, &key->bdaddr);
5032         ev.key.addr.type = link_to_bdaddr(LE_LINK, key->bdaddr_type);
5033         ev.key.type = key->authenticated;
5034         ev.key.enc_size = key->enc_size;
5035         ev.key.ediv = key->ediv;
5036         ev.key.rand = key->rand;
5037
5038         if (key->type == HCI_SMP_LTK)
5039                 ev.key.master = 1;
5040
5041         memcpy(ev.key.val, key->val, sizeof(key->val));
5042
5043         mgmt_event(MGMT_EV_NEW_LONG_TERM_KEY, hdev, &ev, sizeof(ev), NULL);
5044 }
5045
5046 void mgmt_new_irk(struct hci_dev *hdev, struct smp_irk *irk)
5047 {
5048         struct mgmt_ev_new_irk ev;
5049
5050         memset(&ev, 0, sizeof(ev));
5051
5052         /* For identity resolving keys from devices that are already
5053          * using a public address or static random address, do not
5054          * ask for storing this key. The identity resolving key really
5055          * is only mandatory for devices using resovlable random
5056          * addresses.
5057          *
5058          * Storing all identity resolving keys has the downside that
5059          * they will be also loaded on next boot of they system. More
5060          * identity resolving keys, means more time during scanning is
5061          * needed to actually resolve these addresses.
5062          */
5063         if (bacmp(&irk->rpa, BDADDR_ANY))
5064                 ev.store_hint = 0x01;
5065         else
5066                 ev.store_hint = 0x00;
5067
5068         bacpy(&ev.rpa, &irk->rpa);
5069         bacpy(&ev.irk.addr.bdaddr, &irk->bdaddr);
5070         ev.irk.addr.type = link_to_bdaddr(LE_LINK, irk->addr_type);
5071         memcpy(ev.irk.val, irk->val, sizeof(irk->val));
5072
5073         mgmt_event(MGMT_EV_NEW_IRK, hdev, &ev, sizeof(ev), NULL);
5074 }
5075
5076 void mgmt_new_csrk(struct hci_dev *hdev, struct smp_csrk *csrk,
5077                    bool persistent)
5078 {
5079         struct mgmt_ev_new_csrk ev;
5080
5081         memset(&ev, 0, sizeof(ev));
5082
5083         /* Devices using resolvable or non-resolvable random addresses
5084          * without providing an indentity resolving key don't require
5085          * to store signature resolving keys. Their addresses will change
5086          * the next time around.
5087          *
5088          * Only when a remote device provides an identity address
5089          * make sure the signature resolving key is stored. So allow
5090          * static random and public addresses here.
5091          */
5092         if (csrk->bdaddr_type == ADDR_LE_DEV_RANDOM &&
5093             (csrk->bdaddr.b[5] & 0xc0) != 0xc0)
5094                 ev.store_hint = 0x00;
5095         else
5096                 ev.store_hint = persistent;
5097
5098         bacpy(&ev.key.addr.bdaddr, &csrk->bdaddr);
5099         ev.key.addr.type = link_to_bdaddr(LE_LINK, csrk->bdaddr_type);
5100         ev.key.master = csrk->master;
5101         memcpy(ev.key.val, csrk->val, sizeof(csrk->val));
5102
5103         mgmt_event(MGMT_EV_NEW_CSRK, hdev, &ev, sizeof(ev), NULL);
5104 }
5105
5106 static inline u16 eir_append_data(u8 *eir, u16 eir_len, u8 type, u8 *data,
5107                                   u8 data_len)
5108 {
5109         eir[eir_len++] = sizeof(type) + data_len;
5110         eir[eir_len++] = type;
5111         memcpy(&eir[eir_len], data, data_len);
5112         eir_len += data_len;
5113
5114         return eir_len;
5115 }
5116
5117 void mgmt_device_connected(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
5118                            u8 addr_type, u32 flags, u8 *name, u8 name_len,
5119                            u8 *dev_class)
5120 {
5121         char buf[512];
5122         struct mgmt_ev_device_connected *ev = (void *) buf;
5123         u16 eir_len = 0;
5124
5125         bacpy(&ev->addr.bdaddr, bdaddr);
5126         ev->addr.type = link_to_bdaddr(link_type, addr_type);
5127
5128         ev->flags = __cpu_to_le32(flags);
5129
5130         if (name_len > 0)
5131                 eir_len = eir_append_data(ev->eir, 0, EIR_NAME_COMPLETE,
5132                                           name, name_len);
5133
5134         if (dev_class && memcmp(dev_class, "\0\0\0", 3) != 0)
5135                 eir_len = eir_append_data(ev->eir, eir_len,
5136                                           EIR_CLASS_OF_DEV, dev_class, 3);
5137
5138         ev->eir_len = cpu_to_le16(eir_len);
5139
5140         mgmt_event(MGMT_EV_DEVICE_CONNECTED, hdev, buf,
5141                     sizeof(*ev) + eir_len, NULL);
5142 }
5143
5144 static void disconnect_rsp(struct pending_cmd *cmd, void *data)
5145 {
5146         struct mgmt_cp_disconnect *cp = cmd->param;
5147         struct sock **sk = data;
5148         struct mgmt_rp_disconnect rp;
5149
5150         bacpy(&rp.addr.bdaddr, &cp->addr.bdaddr);
5151         rp.addr.type = cp->addr.type;
5152
5153         cmd_complete(cmd->sk, cmd->index, MGMT_OP_DISCONNECT, 0, &rp,
5154                      sizeof(rp));
5155
5156         *sk = cmd->sk;
5157         sock_hold(*sk);
5158
5159         mgmt_pending_remove(cmd);
5160 }
5161
5162 static void unpair_device_rsp(struct pending_cmd *cmd, void *data)
5163 {
5164         struct hci_dev *hdev = data;
5165         struct mgmt_cp_unpair_device *cp = cmd->param;
5166         struct mgmt_rp_unpair_device rp;
5167
5168         memset(&rp, 0, sizeof(rp));
5169         bacpy(&rp.addr.bdaddr, &cp->addr.bdaddr);
5170         rp.addr.type = cp->addr.type;
5171
5172         device_unpaired(hdev, &cp->addr.bdaddr, cp->addr.type, cmd->sk);
5173
5174         cmd_complete(cmd->sk, cmd->index, cmd->opcode, 0, &rp, sizeof(rp));
5175
5176         mgmt_pending_remove(cmd);
5177 }
5178
5179 void mgmt_device_disconnected(struct hci_dev *hdev, bdaddr_t *bdaddr,
5180                               u8 link_type, u8 addr_type, u8 reason,
5181                               bool mgmt_connected)
5182 {
5183         struct mgmt_ev_device_disconnected ev;
5184         struct pending_cmd *power_off;
5185         struct sock *sk = NULL;
5186
5187         power_off = mgmt_pending_find(MGMT_OP_SET_POWERED, hdev);
5188         if (power_off) {
5189                 struct mgmt_mode *cp = power_off->param;
5190
5191                 /* The connection is still in hci_conn_hash so test for 1
5192                  * instead of 0 to know if this is the last one.
5193                  */
5194                 if (!cp->val && hci_conn_count(hdev) == 1) {
5195                         cancel_delayed_work(&hdev->power_off);
5196                         queue_work(hdev->req_workqueue, &hdev->power_off.work);
5197                 }
5198         }
5199
5200         if (!mgmt_connected)
5201                 return;
5202
5203         if (link_type != ACL_LINK && link_type != LE_LINK)
5204                 return;
5205
5206         mgmt_pending_foreach(MGMT_OP_DISCONNECT, hdev, disconnect_rsp, &sk);
5207
5208         bacpy(&ev.addr.bdaddr, bdaddr);
5209         ev.addr.type = link_to_bdaddr(link_type, addr_type);
5210         ev.reason = reason;
5211
5212         mgmt_event(MGMT_EV_DEVICE_DISCONNECTED, hdev, &ev, sizeof(ev), sk);
5213
5214         if (sk)
5215                 sock_put(sk);
5216
5217         mgmt_pending_foreach(MGMT_OP_UNPAIR_DEVICE, hdev, unpair_device_rsp,
5218                              hdev);
5219 }
5220
5221 void mgmt_disconnect_failed(struct hci_dev *hdev, bdaddr_t *bdaddr,
5222                             u8 link_type, u8 addr_type, u8 status)
5223 {
5224         u8 bdaddr_type = link_to_bdaddr(link_type, addr_type);
5225         struct mgmt_cp_disconnect *cp;
5226         struct mgmt_rp_disconnect rp;
5227         struct pending_cmd *cmd;
5228
5229         mgmt_pending_foreach(MGMT_OP_UNPAIR_DEVICE, hdev, unpair_device_rsp,
5230                              hdev);
5231
5232         cmd = mgmt_pending_find(MGMT_OP_DISCONNECT, hdev);
5233         if (!cmd)
5234                 return;
5235
5236         cp = cmd->param;
5237
5238         if (bacmp(bdaddr, &cp->addr.bdaddr))
5239                 return;
5240
5241         if (cp->addr.type != bdaddr_type)
5242                 return;
5243
5244         bacpy(&rp.addr.bdaddr, bdaddr);
5245         rp.addr.type = bdaddr_type;
5246
5247         cmd_complete(cmd->sk, cmd->index, MGMT_OP_DISCONNECT,
5248                      mgmt_status(status), &rp, sizeof(rp));
5249
5250         mgmt_pending_remove(cmd);
5251 }
5252
5253 void mgmt_connect_failed(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
5254                          u8 addr_type, u8 status)
5255 {
5256         struct mgmt_ev_connect_failed ev;
5257         struct pending_cmd *power_off;
5258
5259         power_off = mgmt_pending_find(MGMT_OP_SET_POWERED, hdev);
5260         if (power_off) {
5261                 struct mgmt_mode *cp = power_off->param;
5262
5263                 /* The connection is still in hci_conn_hash so test for 1
5264                  * instead of 0 to know if this is the last one.
5265                  */
5266                 if (!cp->val && hci_conn_count(hdev) == 1) {
5267                         cancel_delayed_work(&hdev->power_off);
5268                         queue_work(hdev->req_workqueue, &hdev->power_off.work);
5269                 }
5270         }
5271
5272         bacpy(&ev.addr.bdaddr, bdaddr);
5273         ev.addr.type = link_to_bdaddr(link_type, addr_type);
5274         ev.status = mgmt_status(status);
5275
5276         mgmt_event(MGMT_EV_CONNECT_FAILED, hdev, &ev, sizeof(ev), NULL);
5277 }
5278
5279 void mgmt_pin_code_request(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 secure)
5280 {
5281         struct mgmt_ev_pin_code_request ev;
5282
5283         bacpy(&ev.addr.bdaddr, bdaddr);
5284         ev.addr.type = BDADDR_BREDR;
5285         ev.secure = secure;
5286
5287         mgmt_event(MGMT_EV_PIN_CODE_REQUEST, hdev, &ev, sizeof(ev), NULL);
5288 }
5289
5290 void mgmt_pin_code_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
5291                                   u8 status)
5292 {
5293         struct pending_cmd *cmd;
5294         struct mgmt_rp_pin_code_reply rp;
5295
5296         cmd = mgmt_pending_find(MGMT_OP_PIN_CODE_REPLY, hdev);
5297         if (!cmd)
5298                 return;
5299
5300         bacpy(&rp.addr.bdaddr, bdaddr);
5301         rp.addr.type = BDADDR_BREDR;
5302
5303         cmd_complete(cmd->sk, hdev->id, MGMT_OP_PIN_CODE_REPLY,
5304                      mgmt_status(status), &rp, sizeof(rp));
5305
5306         mgmt_pending_remove(cmd);
5307 }
5308
5309 void mgmt_pin_code_neg_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
5310                                       u8 status)
5311 {
5312         struct pending_cmd *cmd;
5313         struct mgmt_rp_pin_code_reply rp;
5314
5315         cmd = mgmt_pending_find(MGMT_OP_PIN_CODE_NEG_REPLY, hdev);
5316         if (!cmd)
5317                 return;
5318
5319         bacpy(&rp.addr.bdaddr, bdaddr);
5320         rp.addr.type = BDADDR_BREDR;
5321
5322         cmd_complete(cmd->sk, hdev->id, MGMT_OP_PIN_CODE_NEG_REPLY,
5323                      mgmt_status(status), &rp, sizeof(rp));
5324
5325         mgmt_pending_remove(cmd);
5326 }
5327
5328 int mgmt_user_confirm_request(struct hci_dev *hdev, bdaddr_t *bdaddr,
5329                               u8 link_type, u8 addr_type, u32 value,
5330                               u8 confirm_hint)
5331 {
5332         struct mgmt_ev_user_confirm_request ev;
5333
5334         BT_DBG("%s", hdev->name);
5335
5336         bacpy(&ev.addr.bdaddr, bdaddr);
5337         ev.addr.type = link_to_bdaddr(link_type, addr_type);
5338         ev.confirm_hint = confirm_hint;
5339         ev.value = cpu_to_le32(value);
5340
5341         return mgmt_event(MGMT_EV_USER_CONFIRM_REQUEST, hdev, &ev, sizeof(ev),
5342                           NULL);
5343 }
5344
5345 int mgmt_user_passkey_request(struct hci_dev *hdev, bdaddr_t *bdaddr,
5346                               u8 link_type, u8 addr_type)
5347 {
5348         struct mgmt_ev_user_passkey_request ev;
5349
5350         BT_DBG("%s", hdev->name);
5351
5352         bacpy(&ev.addr.bdaddr, bdaddr);
5353         ev.addr.type = link_to_bdaddr(link_type, addr_type);
5354
5355         return mgmt_event(MGMT_EV_USER_PASSKEY_REQUEST, hdev, &ev, sizeof(ev),
5356                           NULL);
5357 }
5358
5359 static int user_pairing_resp_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
5360                                       u8 link_type, u8 addr_type, u8 status,
5361                                       u8 opcode)
5362 {
5363         struct pending_cmd *cmd;
5364         struct mgmt_rp_user_confirm_reply rp;
5365         int err;
5366
5367         cmd = mgmt_pending_find(opcode, hdev);
5368         if (!cmd)
5369                 return -ENOENT;
5370
5371         bacpy(&rp.addr.bdaddr, bdaddr);
5372         rp.addr.type = link_to_bdaddr(link_type, addr_type);
5373         err = cmd_complete(cmd->sk, hdev->id, opcode, mgmt_status(status),
5374                            &rp, sizeof(rp));
5375
5376         mgmt_pending_remove(cmd);
5377
5378         return err;
5379 }
5380
5381 int mgmt_user_confirm_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
5382                                      u8 link_type, u8 addr_type, u8 status)
5383 {
5384         return user_pairing_resp_complete(hdev, bdaddr, link_type, addr_type,
5385                                           status, MGMT_OP_USER_CONFIRM_REPLY);
5386 }
5387
5388 int mgmt_user_confirm_neg_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
5389                                          u8 link_type, u8 addr_type, u8 status)
5390 {
5391         return user_pairing_resp_complete(hdev, bdaddr, link_type, addr_type,
5392                                           status,
5393                                           MGMT_OP_USER_CONFIRM_NEG_REPLY);
5394 }
5395
5396 int mgmt_user_passkey_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
5397                                      u8 link_type, u8 addr_type, u8 status)
5398 {
5399         return user_pairing_resp_complete(hdev, bdaddr, link_type, addr_type,
5400                                           status, MGMT_OP_USER_PASSKEY_REPLY);
5401 }
5402
5403 int mgmt_user_passkey_neg_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
5404                                          u8 link_type, u8 addr_type, u8 status)
5405 {
5406         return user_pairing_resp_complete(hdev, bdaddr, link_type, addr_type,
5407                                           status,
5408                                           MGMT_OP_USER_PASSKEY_NEG_REPLY);
5409 }
5410
5411 int mgmt_user_passkey_notify(struct hci_dev *hdev, bdaddr_t *bdaddr,
5412                              u8 link_type, u8 addr_type, u32 passkey,
5413                              u8 entered)
5414 {
5415         struct mgmt_ev_passkey_notify ev;
5416
5417         BT_DBG("%s", hdev->name);
5418
5419         bacpy(&ev.addr.bdaddr, bdaddr);
5420         ev.addr.type = link_to_bdaddr(link_type, addr_type);
5421         ev.passkey = __cpu_to_le32(passkey);
5422         ev.entered = entered;
5423
5424         return mgmt_event(MGMT_EV_PASSKEY_NOTIFY, hdev, &ev, sizeof(ev), NULL);
5425 }
5426
5427 void mgmt_auth_failed(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
5428                       u8 addr_type, u8 status)
5429 {
5430         struct mgmt_ev_auth_failed ev;
5431
5432         bacpy(&ev.addr.bdaddr, bdaddr);
5433         ev.addr.type = link_to_bdaddr(link_type, addr_type);
5434         ev.status = mgmt_status(status);
5435
5436         mgmt_event(MGMT_EV_AUTH_FAILED, hdev, &ev, sizeof(ev), NULL);
5437 }
5438
5439 void mgmt_auth_enable_complete(struct hci_dev *hdev, u8 status)
5440 {
5441         struct cmd_lookup match = { NULL, hdev };
5442         bool changed;
5443
5444         if (status) {
5445                 u8 mgmt_err = mgmt_status(status);
5446                 mgmt_pending_foreach(MGMT_OP_SET_LINK_SECURITY, hdev,
5447                                      cmd_status_rsp, &mgmt_err);
5448                 return;
5449         }
5450
5451         if (test_bit(HCI_AUTH, &hdev->flags))
5452                 changed = !test_and_set_bit(HCI_LINK_SECURITY,
5453                                             &hdev->dev_flags);
5454         else
5455                 changed = test_and_clear_bit(HCI_LINK_SECURITY,
5456                                              &hdev->dev_flags);
5457
5458         mgmt_pending_foreach(MGMT_OP_SET_LINK_SECURITY, hdev, settings_rsp,
5459                              &match);
5460
5461         if (changed)
5462                 new_settings(hdev, match.sk);
5463
5464         if (match.sk)
5465                 sock_put(match.sk);
5466 }
5467
5468 static void clear_eir(struct hci_request *req)
5469 {
5470         struct hci_dev *hdev = req->hdev;
5471         struct hci_cp_write_eir cp;
5472
5473         if (!lmp_ext_inq_capable(hdev))
5474                 return;
5475
5476         memset(hdev->eir, 0, sizeof(hdev->eir));
5477
5478         memset(&cp, 0, sizeof(cp));
5479
5480         hci_req_add(req, HCI_OP_WRITE_EIR, sizeof(cp), &cp);
5481 }
5482
5483 void mgmt_ssp_enable_complete(struct hci_dev *hdev, u8 enable, u8 status)
5484 {
5485         struct cmd_lookup match = { NULL, hdev };
5486         struct hci_request req;
5487         bool changed = false;
5488
5489         if (status) {
5490                 u8 mgmt_err = mgmt_status(status);
5491
5492                 if (enable && test_and_clear_bit(HCI_SSP_ENABLED,
5493                                                  &hdev->dev_flags)) {
5494                         clear_bit(HCI_HS_ENABLED, &hdev->dev_flags);
5495                         new_settings(hdev, NULL);
5496                 }
5497
5498                 mgmt_pending_foreach(MGMT_OP_SET_SSP, hdev, cmd_status_rsp,
5499                                      &mgmt_err);
5500                 return;
5501         }
5502
5503         if (enable) {
5504                 changed = !test_and_set_bit(HCI_SSP_ENABLED, &hdev->dev_flags);
5505         } else {
5506                 changed = test_and_clear_bit(HCI_SSP_ENABLED, &hdev->dev_flags);
5507                 if (!changed)
5508                         changed = test_and_clear_bit(HCI_HS_ENABLED,
5509                                                      &hdev->dev_flags);
5510                 else
5511                         clear_bit(HCI_HS_ENABLED, &hdev->dev_flags);
5512         }
5513
5514         mgmt_pending_foreach(MGMT_OP_SET_SSP, hdev, settings_rsp, &match);
5515
5516         if (changed)
5517                 new_settings(hdev, match.sk);
5518
5519         if (match.sk)
5520                 sock_put(match.sk);
5521
5522         hci_req_init(&req, hdev);
5523
5524         if (test_bit(HCI_SSP_ENABLED, &hdev->dev_flags))
5525                 update_eir(&req);
5526         else
5527                 clear_eir(&req);
5528
5529         hci_req_run(&req, NULL);
5530 }
5531
5532 void mgmt_sc_enable_complete(struct hci_dev *hdev, u8 enable, u8 status)
5533 {
5534         struct cmd_lookup match = { NULL, hdev };
5535         bool changed = false;
5536
5537         if (status) {
5538                 u8 mgmt_err = mgmt_status(status);
5539
5540                 if (enable) {
5541                         if (test_and_clear_bit(HCI_SC_ENABLED,
5542                                                &hdev->dev_flags))
5543                                 new_settings(hdev, NULL);
5544                         clear_bit(HCI_SC_ONLY, &hdev->dev_flags);
5545                 }
5546
5547                 mgmt_pending_foreach(MGMT_OP_SET_SECURE_CONN, hdev,
5548                                      cmd_status_rsp, &mgmt_err);
5549                 return;
5550         }
5551
5552         if (enable) {
5553                 changed = !test_and_set_bit(HCI_SC_ENABLED, &hdev->dev_flags);
5554         } else {
5555                 changed = test_and_clear_bit(HCI_SC_ENABLED, &hdev->dev_flags);
5556                 clear_bit(HCI_SC_ONLY, &hdev->dev_flags);
5557         }
5558
5559         mgmt_pending_foreach(MGMT_OP_SET_SECURE_CONN, hdev,
5560                              settings_rsp, &match);
5561
5562         if (changed)
5563                 new_settings(hdev, match.sk);
5564
5565         if (match.sk)
5566                 sock_put(match.sk);
5567 }
5568
5569 static void sk_lookup(struct pending_cmd *cmd, void *data)
5570 {
5571         struct cmd_lookup *match = data;
5572
5573         if (match->sk == NULL) {
5574                 match->sk = cmd->sk;
5575                 sock_hold(match->sk);
5576         }
5577 }
5578
5579 void mgmt_set_class_of_dev_complete(struct hci_dev *hdev, u8 *dev_class,
5580                                     u8 status)
5581 {
5582         struct cmd_lookup match = { NULL, hdev, mgmt_status(status) };
5583
5584         mgmt_pending_foreach(MGMT_OP_SET_DEV_CLASS, hdev, sk_lookup, &match);
5585         mgmt_pending_foreach(MGMT_OP_ADD_UUID, hdev, sk_lookup, &match);
5586         mgmt_pending_foreach(MGMT_OP_REMOVE_UUID, hdev, sk_lookup, &match);
5587
5588         if (!status)
5589                 mgmt_event(MGMT_EV_CLASS_OF_DEV_CHANGED, hdev, dev_class, 3,
5590                            NULL);
5591
5592         if (match.sk)
5593                 sock_put(match.sk);
5594 }
5595
5596 void mgmt_set_local_name_complete(struct hci_dev *hdev, u8 *name, u8 status)
5597 {
5598         struct mgmt_cp_set_local_name ev;
5599         struct pending_cmd *cmd;
5600
5601         if (status)
5602                 return;
5603
5604         memset(&ev, 0, sizeof(ev));
5605         memcpy(ev.name, name, HCI_MAX_NAME_LENGTH);
5606         memcpy(ev.short_name, hdev->short_name, HCI_MAX_SHORT_NAME_LENGTH);
5607
5608         cmd = mgmt_pending_find(MGMT_OP_SET_LOCAL_NAME, hdev);
5609         if (!cmd) {
5610                 memcpy(hdev->dev_name, name, sizeof(hdev->dev_name));
5611
5612                 /* If this is a HCI command related to powering on the
5613                  * HCI dev don't send any mgmt signals.
5614                  */
5615                 if (mgmt_pending_find(MGMT_OP_SET_POWERED, hdev))
5616                         return;
5617         }
5618
5619         mgmt_event(MGMT_EV_LOCAL_NAME_CHANGED, hdev, &ev, sizeof(ev),
5620                    cmd ? cmd->sk : NULL);
5621 }
5622
5623 void mgmt_read_local_oob_data_complete(struct hci_dev *hdev, u8 *hash192,
5624                                        u8 *randomizer192, u8 *hash256,
5625                                        u8 *randomizer256, u8 status)
5626 {
5627         struct pending_cmd *cmd;
5628
5629         BT_DBG("%s status %u", hdev->name, status);
5630
5631         cmd = mgmt_pending_find(MGMT_OP_READ_LOCAL_OOB_DATA, hdev);
5632         if (!cmd)
5633                 return;
5634
5635         if (status) {
5636                 cmd_status(cmd->sk, hdev->id, MGMT_OP_READ_LOCAL_OOB_DATA,
5637                            mgmt_status(status));
5638         } else {
5639                 if (test_bit(HCI_SC_ENABLED, &hdev->dev_flags) &&
5640                     hash256 && randomizer256) {
5641                         struct mgmt_rp_read_local_oob_ext_data rp;
5642
5643                         memcpy(rp.hash192, hash192, sizeof(rp.hash192));
5644                         memcpy(rp.randomizer192, randomizer192,
5645                                sizeof(rp.randomizer192));
5646
5647                         memcpy(rp.hash256, hash256, sizeof(rp.hash256));
5648                         memcpy(rp.randomizer256, randomizer256,
5649                                sizeof(rp.randomizer256));
5650
5651                         cmd_complete(cmd->sk, hdev->id,
5652                                      MGMT_OP_READ_LOCAL_OOB_DATA, 0,
5653                                      &rp, sizeof(rp));
5654                 } else {
5655                         struct mgmt_rp_read_local_oob_data rp;
5656
5657                         memcpy(rp.hash, hash192, sizeof(rp.hash));
5658                         memcpy(rp.randomizer, randomizer192,
5659                                sizeof(rp.randomizer));
5660
5661                         cmd_complete(cmd->sk, hdev->id,
5662                                      MGMT_OP_READ_LOCAL_OOB_DATA, 0,
5663                                      &rp, sizeof(rp));
5664                 }
5665         }
5666
5667         mgmt_pending_remove(cmd);
5668 }
5669
5670 void mgmt_device_found(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
5671                        u8 addr_type, u8 *dev_class, s8 rssi, u8 cfm_name, u8
5672                        ssp, u8 *eir, u16 eir_len)
5673 {
5674         char buf[512];
5675         struct mgmt_ev_device_found *ev = (void *) buf;
5676         struct smp_irk *irk;
5677         size_t ev_size;
5678
5679         if (!hci_discovery_active(hdev))
5680                 return;
5681
5682         /* Leave 5 bytes for a potential CoD field */
5683         if (sizeof(*ev) + eir_len + 5 > sizeof(buf))
5684                 return;
5685
5686         memset(buf, 0, sizeof(buf));
5687
5688         irk = hci_get_irk(hdev, bdaddr, addr_type);
5689         if (irk) {
5690                 bacpy(&ev->addr.bdaddr, &irk->bdaddr);
5691                 ev->addr.type = link_to_bdaddr(link_type, irk->addr_type);
5692         } else {
5693                 bacpy(&ev->addr.bdaddr, bdaddr);
5694                 ev->addr.type = link_to_bdaddr(link_type, addr_type);
5695         }
5696
5697         ev->rssi = rssi;
5698         if (cfm_name)
5699                 ev->flags |= cpu_to_le32(MGMT_DEV_FOUND_CONFIRM_NAME);
5700         if (!ssp)
5701                 ev->flags |= cpu_to_le32(MGMT_DEV_FOUND_LEGACY_PAIRING);
5702
5703         if (eir_len > 0)
5704                 memcpy(ev->eir, eir, eir_len);
5705
5706         if (dev_class && !eir_has_data_type(ev->eir, eir_len, EIR_CLASS_OF_DEV))
5707                 eir_len = eir_append_data(ev->eir, eir_len, EIR_CLASS_OF_DEV,
5708                                           dev_class, 3);
5709
5710         ev->eir_len = cpu_to_le16(eir_len);
5711         ev_size = sizeof(*ev) + eir_len;
5712
5713         mgmt_event(MGMT_EV_DEVICE_FOUND, hdev, ev, ev_size, NULL);
5714 }
5715
5716 void mgmt_remote_name(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
5717                       u8 addr_type, s8 rssi, u8 *name, u8 name_len)
5718 {
5719         struct mgmt_ev_device_found *ev;
5720         char buf[sizeof(*ev) + HCI_MAX_NAME_LENGTH + 2];
5721         u16 eir_len;
5722
5723         ev = (struct mgmt_ev_device_found *) buf;
5724
5725         memset(buf, 0, sizeof(buf));
5726
5727         bacpy(&ev->addr.bdaddr, bdaddr);
5728         ev->addr.type = link_to_bdaddr(link_type, addr_type);
5729         ev->rssi = rssi;
5730
5731         eir_len = eir_append_data(ev->eir, 0, EIR_NAME_COMPLETE, name,
5732                                   name_len);
5733
5734         ev->eir_len = cpu_to_le16(eir_len);
5735
5736         mgmt_event(MGMT_EV_DEVICE_FOUND, hdev, ev, sizeof(*ev) + eir_len, NULL);
5737 }
5738
5739 void mgmt_discovering(struct hci_dev *hdev, u8 discovering)
5740 {
5741         struct mgmt_ev_discovering ev;
5742         struct pending_cmd *cmd;
5743
5744         BT_DBG("%s discovering %u", hdev->name, discovering);
5745
5746         if (discovering)
5747                 cmd = mgmt_pending_find(MGMT_OP_START_DISCOVERY, hdev);
5748         else
5749                 cmd = mgmt_pending_find(MGMT_OP_STOP_DISCOVERY, hdev);
5750
5751         if (cmd != NULL) {
5752                 u8 type = hdev->discovery.type;
5753
5754                 cmd_complete(cmd->sk, hdev->id, cmd->opcode, 0, &type,
5755                              sizeof(type));
5756                 mgmt_pending_remove(cmd);
5757         }
5758
5759         memset(&ev, 0, sizeof(ev));
5760         ev.type = hdev->discovery.type;
5761         ev.discovering = discovering;
5762
5763         mgmt_event(MGMT_EV_DISCOVERING, hdev, &ev, sizeof(ev), NULL);
5764 }
5765
5766 int mgmt_device_blocked(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 type)
5767 {
5768         struct pending_cmd *cmd;
5769         struct mgmt_ev_device_blocked ev;
5770
5771         cmd = mgmt_pending_find(MGMT_OP_BLOCK_DEVICE, hdev);
5772
5773         bacpy(&ev.addr.bdaddr, bdaddr);
5774         ev.addr.type = type;
5775
5776         return mgmt_event(MGMT_EV_DEVICE_BLOCKED, hdev, &ev, sizeof(ev),
5777                           cmd ? cmd->sk : NULL);
5778 }
5779
5780 int mgmt_device_unblocked(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 type)
5781 {
5782         struct pending_cmd *cmd;
5783         struct mgmt_ev_device_unblocked ev;
5784
5785         cmd = mgmt_pending_find(MGMT_OP_UNBLOCK_DEVICE, hdev);
5786
5787         bacpy(&ev.addr.bdaddr, bdaddr);
5788         ev.addr.type = type;
5789
5790         return mgmt_event(MGMT_EV_DEVICE_UNBLOCKED, hdev, &ev, sizeof(ev),
5791                           cmd ? cmd->sk : NULL);
5792 }
5793
5794 static void adv_enable_complete(struct hci_dev *hdev, u8 status)
5795 {
5796         BT_DBG("%s status %u", hdev->name, status);
5797
5798         /* Clear the advertising mgmt setting if we failed to re-enable it */
5799         if (status) {
5800                 clear_bit(HCI_ADVERTISING, &hdev->dev_flags);
5801                 new_settings(hdev, NULL);
5802         }
5803 }
5804
5805 void mgmt_reenable_advertising(struct hci_dev *hdev)
5806 {
5807         struct hci_request req;
5808
5809         if (hci_conn_num(hdev, LE_LINK) > 0)
5810                 return;
5811
5812         if (!test_bit(HCI_ADVERTISING, &hdev->dev_flags))
5813                 return;
5814
5815         hci_req_init(&req, hdev);
5816         enable_advertising(&req);
5817
5818         /* If this fails we have no option but to let user space know
5819          * that we've disabled advertising.
5820          */
5821         if (hci_req_run(&req, adv_enable_complete) < 0) {
5822                 clear_bit(HCI_ADVERTISING, &hdev->dev_flags);
5823                 new_settings(hdev, NULL);
5824         }
5825 }