ath10k: prevent using invalid ringbuffer indexes
[cascardo/linux.git] / net / bluetooth / mgmt.c
1 /*
2    BlueZ - Bluetooth protocol stack for Linux
3
4    Copyright (C) 2010  Nokia Corporation
5    Copyright (C) 2011-2012 Intel Corporation
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License version 2 as
9    published by the Free Software Foundation;
10
11    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
12    OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
13    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
14    IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
15    CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
16    WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17    ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
18    OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19
20    ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
21    COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
22    SOFTWARE IS DISCLAIMED.
23 */
24
25 /* Bluetooth HCI Management interface */
26
27 #include <linux/module.h>
28 #include <asm/unaligned.h>
29
30 #include <net/bluetooth/bluetooth.h>
31 #include <net/bluetooth/hci_core.h>
32 #include <net/bluetooth/mgmt.h>
33 #include <net/bluetooth/smp.h>
34
35 bool enable_hs;
36
37 #define MGMT_VERSION    1
38 #define MGMT_REVISION   3
39
40 static const u16 mgmt_commands[] = {
41         MGMT_OP_READ_INDEX_LIST,
42         MGMT_OP_READ_INFO,
43         MGMT_OP_SET_POWERED,
44         MGMT_OP_SET_DISCOVERABLE,
45         MGMT_OP_SET_CONNECTABLE,
46         MGMT_OP_SET_FAST_CONNECTABLE,
47         MGMT_OP_SET_PAIRABLE,
48         MGMT_OP_SET_LINK_SECURITY,
49         MGMT_OP_SET_SSP,
50         MGMT_OP_SET_HS,
51         MGMT_OP_SET_LE,
52         MGMT_OP_SET_DEV_CLASS,
53         MGMT_OP_SET_LOCAL_NAME,
54         MGMT_OP_ADD_UUID,
55         MGMT_OP_REMOVE_UUID,
56         MGMT_OP_LOAD_LINK_KEYS,
57         MGMT_OP_LOAD_LONG_TERM_KEYS,
58         MGMT_OP_DISCONNECT,
59         MGMT_OP_GET_CONNECTIONS,
60         MGMT_OP_PIN_CODE_REPLY,
61         MGMT_OP_PIN_CODE_NEG_REPLY,
62         MGMT_OP_SET_IO_CAPABILITY,
63         MGMT_OP_PAIR_DEVICE,
64         MGMT_OP_CANCEL_PAIR_DEVICE,
65         MGMT_OP_UNPAIR_DEVICE,
66         MGMT_OP_USER_CONFIRM_REPLY,
67         MGMT_OP_USER_CONFIRM_NEG_REPLY,
68         MGMT_OP_USER_PASSKEY_REPLY,
69         MGMT_OP_USER_PASSKEY_NEG_REPLY,
70         MGMT_OP_READ_LOCAL_OOB_DATA,
71         MGMT_OP_ADD_REMOTE_OOB_DATA,
72         MGMT_OP_REMOVE_REMOTE_OOB_DATA,
73         MGMT_OP_START_DISCOVERY,
74         MGMT_OP_STOP_DISCOVERY,
75         MGMT_OP_CONFIRM_NAME,
76         MGMT_OP_BLOCK_DEVICE,
77         MGMT_OP_UNBLOCK_DEVICE,
78         MGMT_OP_SET_DEVICE_ID,
79 };
80
81 static const u16 mgmt_events[] = {
82         MGMT_EV_CONTROLLER_ERROR,
83         MGMT_EV_INDEX_ADDED,
84         MGMT_EV_INDEX_REMOVED,
85         MGMT_EV_NEW_SETTINGS,
86         MGMT_EV_CLASS_OF_DEV_CHANGED,
87         MGMT_EV_LOCAL_NAME_CHANGED,
88         MGMT_EV_NEW_LINK_KEY,
89         MGMT_EV_NEW_LONG_TERM_KEY,
90         MGMT_EV_DEVICE_CONNECTED,
91         MGMT_EV_DEVICE_DISCONNECTED,
92         MGMT_EV_CONNECT_FAILED,
93         MGMT_EV_PIN_CODE_REQUEST,
94         MGMT_EV_USER_CONFIRM_REQUEST,
95         MGMT_EV_USER_PASSKEY_REQUEST,
96         MGMT_EV_AUTH_FAILED,
97         MGMT_EV_DEVICE_FOUND,
98         MGMT_EV_DISCOVERING,
99         MGMT_EV_DEVICE_BLOCKED,
100         MGMT_EV_DEVICE_UNBLOCKED,
101         MGMT_EV_DEVICE_UNPAIRED,
102         MGMT_EV_PASSKEY_NOTIFY,
103 };
104
105 #define CACHE_TIMEOUT   msecs_to_jiffies(2 * 1000)
106
107 #define hdev_is_powered(hdev) (test_bit(HCI_UP, &hdev->flags) && \
108                                 !test_bit(HCI_AUTO_OFF, &hdev->dev_flags))
109
110 struct pending_cmd {
111         struct list_head list;
112         u16 opcode;
113         int index;
114         void *param;
115         struct sock *sk;
116         void *user_data;
117 };
118
119 /* HCI to MGMT error code conversion table */
120 static u8 mgmt_status_table[] = {
121         MGMT_STATUS_SUCCESS,
122         MGMT_STATUS_UNKNOWN_COMMAND,    /* Unknown Command */
123         MGMT_STATUS_NOT_CONNECTED,      /* No Connection */
124         MGMT_STATUS_FAILED,             /* Hardware Failure */
125         MGMT_STATUS_CONNECT_FAILED,     /* Page Timeout */
126         MGMT_STATUS_AUTH_FAILED,        /* Authentication Failed */
127         MGMT_STATUS_NOT_PAIRED,         /* PIN or Key Missing */
128         MGMT_STATUS_NO_RESOURCES,       /* Memory Full */
129         MGMT_STATUS_TIMEOUT,            /* Connection Timeout */
130         MGMT_STATUS_NO_RESOURCES,       /* Max Number of Connections */
131         MGMT_STATUS_NO_RESOURCES,       /* Max Number of SCO Connections */
132         MGMT_STATUS_ALREADY_CONNECTED,  /* ACL Connection Exists */
133         MGMT_STATUS_BUSY,               /* Command Disallowed */
134         MGMT_STATUS_NO_RESOURCES,       /* Rejected Limited Resources */
135         MGMT_STATUS_REJECTED,           /* Rejected Security */
136         MGMT_STATUS_REJECTED,           /* Rejected Personal */
137         MGMT_STATUS_TIMEOUT,            /* Host Timeout */
138         MGMT_STATUS_NOT_SUPPORTED,      /* Unsupported Feature */
139         MGMT_STATUS_INVALID_PARAMS,     /* Invalid Parameters */
140         MGMT_STATUS_DISCONNECTED,       /* OE User Ended Connection */
141         MGMT_STATUS_NO_RESOURCES,       /* OE Low Resources */
142         MGMT_STATUS_DISCONNECTED,       /* OE Power Off */
143         MGMT_STATUS_DISCONNECTED,       /* Connection Terminated */
144         MGMT_STATUS_BUSY,               /* Repeated Attempts */
145         MGMT_STATUS_REJECTED,           /* Pairing Not Allowed */
146         MGMT_STATUS_FAILED,             /* Unknown LMP PDU */
147         MGMT_STATUS_NOT_SUPPORTED,      /* Unsupported Remote Feature */
148         MGMT_STATUS_REJECTED,           /* SCO Offset Rejected */
149         MGMT_STATUS_REJECTED,           /* SCO Interval Rejected */
150         MGMT_STATUS_REJECTED,           /* Air Mode Rejected */
151         MGMT_STATUS_INVALID_PARAMS,     /* Invalid LMP Parameters */
152         MGMT_STATUS_FAILED,             /* Unspecified Error */
153         MGMT_STATUS_NOT_SUPPORTED,      /* Unsupported LMP Parameter Value */
154         MGMT_STATUS_FAILED,             /* Role Change Not Allowed */
155         MGMT_STATUS_TIMEOUT,            /* LMP Response Timeout */
156         MGMT_STATUS_FAILED,             /* LMP Error Transaction Collision */
157         MGMT_STATUS_FAILED,             /* LMP PDU Not Allowed */
158         MGMT_STATUS_REJECTED,           /* Encryption Mode Not Accepted */
159         MGMT_STATUS_FAILED,             /* Unit Link Key Used */
160         MGMT_STATUS_NOT_SUPPORTED,      /* QoS Not Supported */
161         MGMT_STATUS_TIMEOUT,            /* Instant Passed */
162         MGMT_STATUS_NOT_SUPPORTED,      /* Pairing Not Supported */
163         MGMT_STATUS_FAILED,             /* Transaction Collision */
164         MGMT_STATUS_INVALID_PARAMS,     /* Unacceptable Parameter */
165         MGMT_STATUS_REJECTED,           /* QoS Rejected */
166         MGMT_STATUS_NOT_SUPPORTED,      /* Classification Not Supported */
167         MGMT_STATUS_REJECTED,           /* Insufficient Security */
168         MGMT_STATUS_INVALID_PARAMS,     /* Parameter Out Of Range */
169         MGMT_STATUS_BUSY,               /* Role Switch Pending */
170         MGMT_STATUS_FAILED,             /* Slot Violation */
171         MGMT_STATUS_FAILED,             /* Role Switch Failed */
172         MGMT_STATUS_INVALID_PARAMS,     /* EIR Too Large */
173         MGMT_STATUS_NOT_SUPPORTED,      /* Simple Pairing Not Supported */
174         MGMT_STATUS_BUSY,               /* Host Busy Pairing */
175         MGMT_STATUS_REJECTED,           /* Rejected, No Suitable Channel */
176         MGMT_STATUS_BUSY,               /* Controller Busy */
177         MGMT_STATUS_INVALID_PARAMS,     /* Unsuitable Connection Interval */
178         MGMT_STATUS_TIMEOUT,            /* Directed Advertising Timeout */
179         MGMT_STATUS_AUTH_FAILED,        /* Terminated Due to MIC Failure */
180         MGMT_STATUS_CONNECT_FAILED,     /* Connection Establishment Failed */
181         MGMT_STATUS_CONNECT_FAILED,     /* MAC Connection Failed */
182 };
183
184 bool mgmt_valid_hdev(struct hci_dev *hdev)
185 {
186         return hdev->dev_type == HCI_BREDR;
187 }
188
189 static u8 mgmt_status(u8 hci_status)
190 {
191         if (hci_status < ARRAY_SIZE(mgmt_status_table))
192                 return mgmt_status_table[hci_status];
193
194         return MGMT_STATUS_FAILED;
195 }
196
197 static int cmd_status(struct sock *sk, u16 index, u16 cmd, u8 status)
198 {
199         struct sk_buff *skb;
200         struct mgmt_hdr *hdr;
201         struct mgmt_ev_cmd_status *ev;
202         int err;
203
204         BT_DBG("sock %p, index %u, cmd %u, status %u", sk, index, cmd, status);
205
206         skb = alloc_skb(sizeof(*hdr) + sizeof(*ev), GFP_KERNEL);
207         if (!skb)
208                 return -ENOMEM;
209
210         hdr = (void *) skb_put(skb, sizeof(*hdr));
211
212         hdr->opcode = __constant_cpu_to_le16(MGMT_EV_CMD_STATUS);
213         hdr->index = cpu_to_le16(index);
214         hdr->len = cpu_to_le16(sizeof(*ev));
215
216         ev = (void *) skb_put(skb, sizeof(*ev));
217         ev->status = status;
218         ev->opcode = cpu_to_le16(cmd);
219
220         err = sock_queue_rcv_skb(sk, skb);
221         if (err < 0)
222                 kfree_skb(skb);
223
224         return err;
225 }
226
227 static int cmd_complete(struct sock *sk, u16 index, u16 cmd, u8 status,
228                         void *rp, size_t rp_len)
229 {
230         struct sk_buff *skb;
231         struct mgmt_hdr *hdr;
232         struct mgmt_ev_cmd_complete *ev;
233         int err;
234
235         BT_DBG("sock %p", sk);
236
237         skb = alloc_skb(sizeof(*hdr) + sizeof(*ev) + rp_len, GFP_KERNEL);
238         if (!skb)
239                 return -ENOMEM;
240
241         hdr = (void *) skb_put(skb, sizeof(*hdr));
242
243         hdr->opcode = __constant_cpu_to_le16(MGMT_EV_CMD_COMPLETE);
244         hdr->index = cpu_to_le16(index);
245         hdr->len = cpu_to_le16(sizeof(*ev) + rp_len);
246
247         ev = (void *) skb_put(skb, sizeof(*ev) + rp_len);
248         ev->opcode = cpu_to_le16(cmd);
249         ev->status = status;
250
251         if (rp)
252                 memcpy(ev->data, rp, rp_len);
253
254         err = sock_queue_rcv_skb(sk, skb);
255         if (err < 0)
256                 kfree_skb(skb);
257
258         return err;
259 }
260
261 static int read_version(struct sock *sk, struct hci_dev *hdev, void *data,
262                         u16 data_len)
263 {
264         struct mgmt_rp_read_version rp;
265
266         BT_DBG("sock %p", sk);
267
268         rp.version = MGMT_VERSION;
269         rp.revision = __constant_cpu_to_le16(MGMT_REVISION);
270
271         return cmd_complete(sk, MGMT_INDEX_NONE, MGMT_OP_READ_VERSION, 0, &rp,
272                             sizeof(rp));
273 }
274
275 static int read_commands(struct sock *sk, struct hci_dev *hdev, void *data,
276                          u16 data_len)
277 {
278         struct mgmt_rp_read_commands *rp;
279         const u16 num_commands = ARRAY_SIZE(mgmt_commands);
280         const u16 num_events = ARRAY_SIZE(mgmt_events);
281         __le16 *opcode;
282         size_t rp_size;
283         int i, err;
284
285         BT_DBG("sock %p", sk);
286
287         rp_size = sizeof(*rp) + ((num_commands + num_events) * sizeof(u16));
288
289         rp = kmalloc(rp_size, GFP_KERNEL);
290         if (!rp)
291                 return -ENOMEM;
292
293         rp->num_commands = __constant_cpu_to_le16(num_commands);
294         rp->num_events = __constant_cpu_to_le16(num_events);
295
296         for (i = 0, opcode = rp->opcodes; i < num_commands; i++, opcode++)
297                 put_unaligned_le16(mgmt_commands[i], opcode);
298
299         for (i = 0; i < num_events; i++, opcode++)
300                 put_unaligned_le16(mgmt_events[i], opcode);
301
302         err = cmd_complete(sk, MGMT_INDEX_NONE, MGMT_OP_READ_COMMANDS, 0, rp,
303                            rp_size);
304         kfree(rp);
305
306         return err;
307 }
308
309 static int read_index_list(struct sock *sk, struct hci_dev *hdev, void *data,
310                            u16 data_len)
311 {
312         struct mgmt_rp_read_index_list *rp;
313         struct hci_dev *d;
314         size_t rp_len;
315         u16 count;
316         int err;
317
318         BT_DBG("sock %p", sk);
319
320         read_lock(&hci_dev_list_lock);
321
322         count = 0;
323         list_for_each_entry(d, &hci_dev_list, list) {
324                 if (!mgmt_valid_hdev(d))
325                         continue;
326
327                 count++;
328         }
329
330         rp_len = sizeof(*rp) + (2 * count);
331         rp = kmalloc(rp_len, GFP_ATOMIC);
332         if (!rp) {
333                 read_unlock(&hci_dev_list_lock);
334                 return -ENOMEM;
335         }
336
337         count = 0;
338         list_for_each_entry(d, &hci_dev_list, list) {
339                 if (test_bit(HCI_SETUP, &d->dev_flags))
340                         continue;
341
342                 if (!mgmt_valid_hdev(d))
343                         continue;
344
345                 rp->index[count++] = cpu_to_le16(d->id);
346                 BT_DBG("Added hci%u", d->id);
347         }
348
349         rp->num_controllers = cpu_to_le16(count);
350         rp_len = sizeof(*rp) + (2 * count);
351
352         read_unlock(&hci_dev_list_lock);
353
354         err = cmd_complete(sk, MGMT_INDEX_NONE, MGMT_OP_READ_INDEX_LIST, 0, rp,
355                            rp_len);
356
357         kfree(rp);
358
359         return err;
360 }
361
362 static u32 get_supported_settings(struct hci_dev *hdev)
363 {
364         u32 settings = 0;
365
366         settings |= MGMT_SETTING_POWERED;
367         settings |= MGMT_SETTING_PAIRABLE;
368
369         if (lmp_ssp_capable(hdev))
370                 settings |= MGMT_SETTING_SSP;
371
372         if (lmp_bredr_capable(hdev)) {
373                 settings |= MGMT_SETTING_CONNECTABLE;
374                 if (hdev->hci_ver >= BLUETOOTH_VER_1_2)
375                         settings |= MGMT_SETTING_FAST_CONNECTABLE;
376                 settings |= MGMT_SETTING_DISCOVERABLE;
377                 settings |= MGMT_SETTING_BREDR;
378                 settings |= MGMT_SETTING_LINK_SECURITY;
379         }
380
381         if (enable_hs)
382                 settings |= MGMT_SETTING_HS;
383
384         if (lmp_le_capable(hdev))
385                 settings |= MGMT_SETTING_LE;
386
387         return settings;
388 }
389
390 static u32 get_current_settings(struct hci_dev *hdev)
391 {
392         u32 settings = 0;
393
394         if (hdev_is_powered(hdev))
395                 settings |= MGMT_SETTING_POWERED;
396
397         if (test_bit(HCI_CONNECTABLE, &hdev->dev_flags))
398                 settings |= MGMT_SETTING_CONNECTABLE;
399
400         if (test_bit(HCI_FAST_CONNECTABLE, &hdev->dev_flags))
401                 settings |= MGMT_SETTING_FAST_CONNECTABLE;
402
403         if (test_bit(HCI_DISCOVERABLE, &hdev->dev_flags))
404                 settings |= MGMT_SETTING_DISCOVERABLE;
405
406         if (test_bit(HCI_PAIRABLE, &hdev->dev_flags))
407                 settings |= MGMT_SETTING_PAIRABLE;
408
409         if (lmp_bredr_capable(hdev))
410                 settings |= MGMT_SETTING_BREDR;
411
412         if (test_bit(HCI_LE_ENABLED, &hdev->dev_flags))
413                 settings |= MGMT_SETTING_LE;
414
415         if (test_bit(HCI_LINK_SECURITY, &hdev->dev_flags))
416                 settings |= MGMT_SETTING_LINK_SECURITY;
417
418         if (test_bit(HCI_SSP_ENABLED, &hdev->dev_flags))
419                 settings |= MGMT_SETTING_SSP;
420
421         if (test_bit(HCI_HS_ENABLED, &hdev->dev_flags))
422                 settings |= MGMT_SETTING_HS;
423
424         return settings;
425 }
426
427 #define PNP_INFO_SVCLASS_ID             0x1200
428
429 static u8 *create_uuid16_list(struct hci_dev *hdev, u8 *data, ptrdiff_t len)
430 {
431         u8 *ptr = data, *uuids_start = NULL;
432         struct bt_uuid *uuid;
433
434         if (len < 4)
435                 return ptr;
436
437         list_for_each_entry(uuid, &hdev->uuids, list) {
438                 u16 uuid16;
439
440                 if (uuid->size != 16)
441                         continue;
442
443                 uuid16 = get_unaligned_le16(&uuid->uuid[12]);
444                 if (uuid16 < 0x1100)
445                         continue;
446
447                 if (uuid16 == PNP_INFO_SVCLASS_ID)
448                         continue;
449
450                 if (!uuids_start) {
451                         uuids_start = ptr;
452                         uuids_start[0] = 1;
453                         uuids_start[1] = EIR_UUID16_ALL;
454                         ptr += 2;
455                 }
456
457                 /* Stop if not enough space to put next UUID */
458                 if ((ptr - data) + sizeof(u16) > len) {
459                         uuids_start[1] = EIR_UUID16_SOME;
460                         break;
461                 }
462
463                 *ptr++ = (uuid16 & 0x00ff);
464                 *ptr++ = (uuid16 & 0xff00) >> 8;
465                 uuids_start[0] += sizeof(uuid16);
466         }
467
468         return ptr;
469 }
470
471 static u8 *create_uuid32_list(struct hci_dev *hdev, u8 *data, ptrdiff_t len)
472 {
473         u8 *ptr = data, *uuids_start = NULL;
474         struct bt_uuid *uuid;
475
476         if (len < 6)
477                 return ptr;
478
479         list_for_each_entry(uuid, &hdev->uuids, list) {
480                 if (uuid->size != 32)
481                         continue;
482
483                 if (!uuids_start) {
484                         uuids_start = ptr;
485                         uuids_start[0] = 1;
486                         uuids_start[1] = EIR_UUID32_ALL;
487                         ptr += 2;
488                 }
489
490                 /* Stop if not enough space to put next UUID */
491                 if ((ptr - data) + sizeof(u32) > len) {
492                         uuids_start[1] = EIR_UUID32_SOME;
493                         break;
494                 }
495
496                 memcpy(ptr, &uuid->uuid[12], sizeof(u32));
497                 ptr += sizeof(u32);
498                 uuids_start[0] += sizeof(u32);
499         }
500
501         return ptr;
502 }
503
504 static u8 *create_uuid128_list(struct hci_dev *hdev, u8 *data, ptrdiff_t len)
505 {
506         u8 *ptr = data, *uuids_start = NULL;
507         struct bt_uuid *uuid;
508
509         if (len < 18)
510                 return ptr;
511
512         list_for_each_entry(uuid, &hdev->uuids, list) {
513                 if (uuid->size != 128)
514                         continue;
515
516                 if (!uuids_start) {
517                         uuids_start = ptr;
518                         uuids_start[0] = 1;
519                         uuids_start[1] = EIR_UUID128_ALL;
520                         ptr += 2;
521                 }
522
523                 /* Stop if not enough space to put next UUID */
524                 if ((ptr - data) + 16 > len) {
525                         uuids_start[1] = EIR_UUID128_SOME;
526                         break;
527                 }
528
529                 memcpy(ptr, uuid->uuid, 16);
530                 ptr += 16;
531                 uuids_start[0] += 16;
532         }
533
534         return ptr;
535 }
536
537 static void create_eir(struct hci_dev *hdev, u8 *data)
538 {
539         u8 *ptr = data;
540         size_t name_len;
541
542         name_len = strlen(hdev->dev_name);
543
544         if (name_len > 0) {
545                 /* EIR Data type */
546                 if (name_len > 48) {
547                         name_len = 48;
548                         ptr[1] = EIR_NAME_SHORT;
549                 } else
550                         ptr[1] = EIR_NAME_COMPLETE;
551
552                 /* EIR Data length */
553                 ptr[0] = name_len + 1;
554
555                 memcpy(ptr + 2, hdev->dev_name, name_len);
556
557                 ptr += (name_len + 2);
558         }
559
560         if (hdev->inq_tx_power != HCI_TX_POWER_INVALID) {
561                 ptr[0] = 2;
562                 ptr[1] = EIR_TX_POWER;
563                 ptr[2] = (u8) hdev->inq_tx_power;
564
565                 ptr += 3;
566         }
567
568         if (hdev->devid_source > 0) {
569                 ptr[0] = 9;
570                 ptr[1] = EIR_DEVICE_ID;
571
572                 put_unaligned_le16(hdev->devid_source, ptr + 2);
573                 put_unaligned_le16(hdev->devid_vendor, ptr + 4);
574                 put_unaligned_le16(hdev->devid_product, ptr + 6);
575                 put_unaligned_le16(hdev->devid_version, ptr + 8);
576
577                 ptr += 10;
578         }
579
580         ptr = create_uuid16_list(hdev, ptr, HCI_MAX_EIR_LENGTH - (ptr - data));
581         ptr = create_uuid32_list(hdev, ptr, HCI_MAX_EIR_LENGTH - (ptr - data));
582         ptr = create_uuid128_list(hdev, ptr, HCI_MAX_EIR_LENGTH - (ptr - data));
583 }
584
585 static void update_eir(struct hci_request *req)
586 {
587         struct hci_dev *hdev = req->hdev;
588         struct hci_cp_write_eir cp;
589
590         if (!hdev_is_powered(hdev))
591                 return;
592
593         if (!lmp_ext_inq_capable(hdev))
594                 return;
595
596         if (!test_bit(HCI_SSP_ENABLED, &hdev->dev_flags))
597                 return;
598
599         if (test_bit(HCI_SERVICE_CACHE, &hdev->dev_flags))
600                 return;
601
602         memset(&cp, 0, sizeof(cp));
603
604         create_eir(hdev, cp.data);
605
606         if (memcmp(cp.data, hdev->eir, sizeof(cp.data)) == 0)
607                 return;
608
609         memcpy(hdev->eir, cp.data, sizeof(cp.data));
610
611         hci_req_add(req, HCI_OP_WRITE_EIR, sizeof(cp), &cp);
612 }
613
614 static u8 get_service_classes(struct hci_dev *hdev)
615 {
616         struct bt_uuid *uuid;
617         u8 val = 0;
618
619         list_for_each_entry(uuid, &hdev->uuids, list)
620                 val |= uuid->svc_hint;
621
622         return val;
623 }
624
625 static void update_class(struct hci_request *req)
626 {
627         struct hci_dev *hdev = req->hdev;
628         u8 cod[3];
629
630         BT_DBG("%s", hdev->name);
631
632         if (!hdev_is_powered(hdev))
633                 return;
634
635         if (test_bit(HCI_SERVICE_CACHE, &hdev->dev_flags))
636                 return;
637
638         cod[0] = hdev->minor_class;
639         cod[1] = hdev->major_class;
640         cod[2] = get_service_classes(hdev);
641
642         if (memcmp(cod, hdev->dev_class, 3) == 0)
643                 return;
644
645         hci_req_add(req, HCI_OP_WRITE_CLASS_OF_DEV, sizeof(cod), cod);
646 }
647
648 static void service_cache_off(struct work_struct *work)
649 {
650         struct hci_dev *hdev = container_of(work, struct hci_dev,
651                                             service_cache.work);
652         struct hci_request req;
653
654         if (!test_and_clear_bit(HCI_SERVICE_CACHE, &hdev->dev_flags))
655                 return;
656
657         hci_req_init(&req, hdev);
658
659         hci_dev_lock(hdev);
660
661         update_eir(&req);
662         update_class(&req);
663
664         hci_dev_unlock(hdev);
665
666         hci_req_run(&req, NULL);
667 }
668
669 static void mgmt_init_hdev(struct sock *sk, struct hci_dev *hdev)
670 {
671         if (test_and_set_bit(HCI_MGMT, &hdev->dev_flags))
672                 return;
673
674         INIT_DELAYED_WORK(&hdev->service_cache, service_cache_off);
675
676         /* Non-mgmt controlled devices get this bit set
677          * implicitly so that pairing works for them, however
678          * for mgmt we require user-space to explicitly enable
679          * it
680          */
681         clear_bit(HCI_PAIRABLE, &hdev->dev_flags);
682 }
683
684 static int read_controller_info(struct sock *sk, struct hci_dev *hdev,
685                                 void *data, u16 data_len)
686 {
687         struct mgmt_rp_read_info rp;
688
689         BT_DBG("sock %p %s", sk, hdev->name);
690
691         hci_dev_lock(hdev);
692
693         memset(&rp, 0, sizeof(rp));
694
695         bacpy(&rp.bdaddr, &hdev->bdaddr);
696
697         rp.version = hdev->hci_ver;
698         rp.manufacturer = cpu_to_le16(hdev->manufacturer);
699
700         rp.supported_settings = cpu_to_le32(get_supported_settings(hdev));
701         rp.current_settings = cpu_to_le32(get_current_settings(hdev));
702
703         memcpy(rp.dev_class, hdev->dev_class, 3);
704
705         memcpy(rp.name, hdev->dev_name, sizeof(hdev->dev_name));
706         memcpy(rp.short_name, hdev->short_name, sizeof(hdev->short_name));
707
708         hci_dev_unlock(hdev);
709
710         return cmd_complete(sk, hdev->id, MGMT_OP_READ_INFO, 0, &rp,
711                             sizeof(rp));
712 }
713
714 static void mgmt_pending_free(struct pending_cmd *cmd)
715 {
716         sock_put(cmd->sk);
717         kfree(cmd->param);
718         kfree(cmd);
719 }
720
721 static struct pending_cmd *mgmt_pending_add(struct sock *sk, u16 opcode,
722                                             struct hci_dev *hdev, void *data,
723                                             u16 len)
724 {
725         struct pending_cmd *cmd;
726
727         cmd = kmalloc(sizeof(*cmd), GFP_KERNEL);
728         if (!cmd)
729                 return NULL;
730
731         cmd->opcode = opcode;
732         cmd->index = hdev->id;
733
734         cmd->param = kmalloc(len, GFP_KERNEL);
735         if (!cmd->param) {
736                 kfree(cmd);
737                 return NULL;
738         }
739
740         if (data)
741                 memcpy(cmd->param, data, len);
742
743         cmd->sk = sk;
744         sock_hold(sk);
745
746         list_add(&cmd->list, &hdev->mgmt_pending);
747
748         return cmd;
749 }
750
751 static void mgmt_pending_foreach(u16 opcode, struct hci_dev *hdev,
752                                  void (*cb)(struct pending_cmd *cmd,
753                                             void *data),
754                                  void *data)
755 {
756         struct pending_cmd *cmd, *tmp;
757
758         list_for_each_entry_safe(cmd, tmp, &hdev->mgmt_pending, list) {
759                 if (opcode > 0 && cmd->opcode != opcode)
760                         continue;
761
762                 cb(cmd, data);
763         }
764 }
765
766 static struct pending_cmd *mgmt_pending_find(u16 opcode, struct hci_dev *hdev)
767 {
768         struct pending_cmd *cmd;
769
770         list_for_each_entry(cmd, &hdev->mgmt_pending, list) {
771                 if (cmd->opcode == opcode)
772                         return cmd;
773         }
774
775         return NULL;
776 }
777
778 static void mgmt_pending_remove(struct pending_cmd *cmd)
779 {
780         list_del(&cmd->list);
781         mgmt_pending_free(cmd);
782 }
783
784 static int send_settings_rsp(struct sock *sk, u16 opcode, struct hci_dev *hdev)
785 {
786         __le32 settings = cpu_to_le32(get_current_settings(hdev));
787
788         return cmd_complete(sk, hdev->id, opcode, 0, &settings,
789                             sizeof(settings));
790 }
791
792 static int set_powered(struct sock *sk, struct hci_dev *hdev, void *data,
793                        u16 len)
794 {
795         struct mgmt_mode *cp = data;
796         struct pending_cmd *cmd;
797         int err;
798
799         BT_DBG("request for %s", hdev->name);
800
801         if (cp->val != 0x00 && cp->val != 0x01)
802                 return cmd_status(sk, hdev->id, MGMT_OP_SET_POWERED,
803                                   MGMT_STATUS_INVALID_PARAMS);
804
805         hci_dev_lock(hdev);
806
807         if (test_and_clear_bit(HCI_AUTO_OFF, &hdev->dev_flags)) {
808                 cancel_delayed_work(&hdev->power_off);
809
810                 if (cp->val) {
811                         mgmt_pending_add(sk, MGMT_OP_SET_POWERED, hdev,
812                                          data, len);
813                         err = mgmt_powered(hdev, 1);
814                         goto failed;
815                 }
816         }
817
818         if (!!cp->val == hdev_is_powered(hdev)) {
819                 err = send_settings_rsp(sk, MGMT_OP_SET_POWERED, hdev);
820                 goto failed;
821         }
822
823         if (mgmt_pending_find(MGMT_OP_SET_POWERED, hdev)) {
824                 err = cmd_status(sk, hdev->id, MGMT_OP_SET_POWERED,
825                                  MGMT_STATUS_BUSY);
826                 goto failed;
827         }
828
829         cmd = mgmt_pending_add(sk, MGMT_OP_SET_POWERED, hdev, data, len);
830         if (!cmd) {
831                 err = -ENOMEM;
832                 goto failed;
833         }
834
835         if (cp->val)
836                 queue_work(hdev->req_workqueue, &hdev->power_on);
837         else
838                 queue_work(hdev->req_workqueue, &hdev->power_off.work);
839
840         err = 0;
841
842 failed:
843         hci_dev_unlock(hdev);
844         return err;
845 }
846
847 static int mgmt_event(u16 event, struct hci_dev *hdev, void *data, u16 data_len,
848                       struct sock *skip_sk)
849 {
850         struct sk_buff *skb;
851         struct mgmt_hdr *hdr;
852
853         skb = alloc_skb(sizeof(*hdr) + data_len, GFP_KERNEL);
854         if (!skb)
855                 return -ENOMEM;
856
857         hdr = (void *) skb_put(skb, sizeof(*hdr));
858         hdr->opcode = cpu_to_le16(event);
859         if (hdev)
860                 hdr->index = cpu_to_le16(hdev->id);
861         else
862                 hdr->index = __constant_cpu_to_le16(MGMT_INDEX_NONE);
863         hdr->len = cpu_to_le16(data_len);
864
865         if (data)
866                 memcpy(skb_put(skb, data_len), data, data_len);
867
868         /* Time stamp */
869         __net_timestamp(skb);
870
871         hci_send_to_control(skb, skip_sk);
872         kfree_skb(skb);
873
874         return 0;
875 }
876
877 static int new_settings(struct hci_dev *hdev, struct sock *skip)
878 {
879         __le32 ev;
880
881         ev = cpu_to_le32(get_current_settings(hdev));
882
883         return mgmt_event(MGMT_EV_NEW_SETTINGS, hdev, &ev, sizeof(ev), skip);
884 }
885
886 static int set_discoverable(struct sock *sk, struct hci_dev *hdev, void *data,
887                             u16 len)
888 {
889         struct mgmt_cp_set_discoverable *cp = data;
890         struct pending_cmd *cmd;
891         u16 timeout;
892         u8 scan;
893         int err;
894
895         BT_DBG("request for %s", hdev->name);
896
897         if (!lmp_bredr_capable(hdev))
898                 return cmd_status(sk, hdev->id, MGMT_OP_SET_DISCOVERABLE,
899                                  MGMT_STATUS_NOT_SUPPORTED);
900
901         if (cp->val != 0x00 && cp->val != 0x01)
902                 return cmd_status(sk, hdev->id, MGMT_OP_SET_DISCOVERABLE,
903                                   MGMT_STATUS_INVALID_PARAMS);
904
905         timeout = __le16_to_cpu(cp->timeout);
906         if (!cp->val && timeout > 0)
907                 return cmd_status(sk, hdev->id, MGMT_OP_SET_DISCOVERABLE,
908                                   MGMT_STATUS_INVALID_PARAMS);
909
910         hci_dev_lock(hdev);
911
912         if (!hdev_is_powered(hdev) && timeout > 0) {
913                 err = cmd_status(sk, hdev->id, MGMT_OP_SET_DISCOVERABLE,
914                                  MGMT_STATUS_NOT_POWERED);
915                 goto failed;
916         }
917
918         if (mgmt_pending_find(MGMT_OP_SET_DISCOVERABLE, hdev) ||
919             mgmt_pending_find(MGMT_OP_SET_CONNECTABLE, hdev)) {
920                 err = cmd_status(sk, hdev->id, MGMT_OP_SET_DISCOVERABLE,
921                                  MGMT_STATUS_BUSY);
922                 goto failed;
923         }
924
925         if (!test_bit(HCI_CONNECTABLE, &hdev->dev_flags)) {
926                 err = cmd_status(sk, hdev->id, MGMT_OP_SET_DISCOVERABLE,
927                                  MGMT_STATUS_REJECTED);
928                 goto failed;
929         }
930
931         if (!hdev_is_powered(hdev)) {
932                 bool changed = false;
933
934                 if (!!cp->val != test_bit(HCI_DISCOVERABLE, &hdev->dev_flags)) {
935                         change_bit(HCI_DISCOVERABLE, &hdev->dev_flags);
936                         changed = true;
937                 }
938
939                 err = send_settings_rsp(sk, MGMT_OP_SET_DISCOVERABLE, hdev);
940                 if (err < 0)
941                         goto failed;
942
943                 if (changed)
944                         err = new_settings(hdev, sk);
945
946                 goto failed;
947         }
948
949         if (!!cp->val == test_bit(HCI_DISCOVERABLE, &hdev->dev_flags)) {
950                 if (hdev->discov_timeout > 0) {
951                         cancel_delayed_work(&hdev->discov_off);
952                         hdev->discov_timeout = 0;
953                 }
954
955                 if (cp->val && timeout > 0) {
956                         hdev->discov_timeout = timeout;
957                         queue_delayed_work(hdev->workqueue, &hdev->discov_off,
958                                 msecs_to_jiffies(hdev->discov_timeout * 1000));
959                 }
960
961                 err = send_settings_rsp(sk, MGMT_OP_SET_DISCOVERABLE, hdev);
962                 goto failed;
963         }
964
965         cmd = mgmt_pending_add(sk, MGMT_OP_SET_DISCOVERABLE, hdev, data, len);
966         if (!cmd) {
967                 err = -ENOMEM;
968                 goto failed;
969         }
970
971         scan = SCAN_PAGE;
972
973         if (cp->val)
974                 scan |= SCAN_INQUIRY;
975         else
976                 cancel_delayed_work(&hdev->discov_off);
977
978         err = hci_send_cmd(hdev, HCI_OP_WRITE_SCAN_ENABLE, 1, &scan);
979         if (err < 0)
980                 mgmt_pending_remove(cmd);
981
982         if (cp->val)
983                 hdev->discov_timeout = timeout;
984
985 failed:
986         hci_dev_unlock(hdev);
987         return err;
988 }
989
990 static void write_fast_connectable(struct hci_request *req, bool enable)
991 {
992         struct hci_dev *hdev = req->hdev;
993         struct hci_cp_write_page_scan_activity acp;
994         u8 type;
995
996         if (hdev->hci_ver < BLUETOOTH_VER_1_2)
997                 return;
998
999         if (enable) {
1000                 type = PAGE_SCAN_TYPE_INTERLACED;
1001
1002                 /* 160 msec page scan interval */
1003                 acp.interval = __constant_cpu_to_le16(0x0100);
1004         } else {
1005                 type = PAGE_SCAN_TYPE_STANDARD; /* default */
1006
1007                 /* default 1.28 sec page scan */
1008                 acp.interval = __constant_cpu_to_le16(0x0800);
1009         }
1010
1011         acp.window = __constant_cpu_to_le16(0x0012);
1012
1013         if (__cpu_to_le16(hdev->page_scan_interval) != acp.interval ||
1014             __cpu_to_le16(hdev->page_scan_window) != acp.window)
1015                 hci_req_add(req, HCI_OP_WRITE_PAGE_SCAN_ACTIVITY,
1016                             sizeof(acp), &acp);
1017
1018         if (hdev->page_scan_type != type)
1019                 hci_req_add(req, HCI_OP_WRITE_PAGE_SCAN_TYPE, 1, &type);
1020 }
1021
1022 static void set_connectable_complete(struct hci_dev *hdev, u8 status)
1023 {
1024         struct pending_cmd *cmd;
1025
1026         BT_DBG("status 0x%02x", status);
1027
1028         hci_dev_lock(hdev);
1029
1030         cmd = mgmt_pending_find(MGMT_OP_SET_CONNECTABLE, hdev);
1031         if (!cmd)
1032                 goto unlock;
1033
1034         send_settings_rsp(cmd->sk, MGMT_OP_SET_CONNECTABLE, hdev);
1035
1036         mgmt_pending_remove(cmd);
1037
1038 unlock:
1039         hci_dev_unlock(hdev);
1040 }
1041
1042 static int set_connectable(struct sock *sk, struct hci_dev *hdev, void *data,
1043                            u16 len)
1044 {
1045         struct mgmt_mode *cp = data;
1046         struct pending_cmd *cmd;
1047         struct hci_request req;
1048         u8 scan;
1049         int err;
1050
1051         BT_DBG("request for %s", hdev->name);
1052
1053         if (!lmp_bredr_capable(hdev))
1054                 return cmd_status(sk, hdev->id, MGMT_OP_SET_CONNECTABLE,
1055                                   MGMT_STATUS_NOT_SUPPORTED);
1056
1057         if (cp->val != 0x00 && cp->val != 0x01)
1058                 return cmd_status(sk, hdev->id, MGMT_OP_SET_CONNECTABLE,
1059                                   MGMT_STATUS_INVALID_PARAMS);
1060
1061         hci_dev_lock(hdev);
1062
1063         if (!hdev_is_powered(hdev)) {
1064                 bool changed = false;
1065
1066                 if (!!cp->val != test_bit(HCI_CONNECTABLE, &hdev->dev_flags))
1067                         changed = true;
1068
1069                 if (cp->val) {
1070                         set_bit(HCI_CONNECTABLE, &hdev->dev_flags);
1071                 } else {
1072                         clear_bit(HCI_CONNECTABLE, &hdev->dev_flags);
1073                         clear_bit(HCI_DISCOVERABLE, &hdev->dev_flags);
1074                 }
1075
1076                 err = send_settings_rsp(sk, MGMT_OP_SET_CONNECTABLE, hdev);
1077                 if (err < 0)
1078                         goto failed;
1079
1080                 if (changed)
1081                         err = new_settings(hdev, sk);
1082
1083                 goto failed;
1084         }
1085
1086         if (mgmt_pending_find(MGMT_OP_SET_DISCOVERABLE, hdev) ||
1087             mgmt_pending_find(MGMT_OP_SET_CONNECTABLE, hdev)) {
1088                 err = cmd_status(sk, hdev->id, MGMT_OP_SET_CONNECTABLE,
1089                                  MGMT_STATUS_BUSY);
1090                 goto failed;
1091         }
1092
1093         if (!!cp->val == test_bit(HCI_PSCAN, &hdev->flags)) {
1094                 err = send_settings_rsp(sk, MGMT_OP_SET_CONNECTABLE, hdev);
1095                 goto failed;
1096         }
1097
1098         cmd = mgmt_pending_add(sk, MGMT_OP_SET_CONNECTABLE, hdev, data, len);
1099         if (!cmd) {
1100                 err = -ENOMEM;
1101                 goto failed;
1102         }
1103
1104         if (cp->val) {
1105                 scan = SCAN_PAGE;
1106         } else {
1107                 scan = 0;
1108
1109                 if (test_bit(HCI_ISCAN, &hdev->flags) &&
1110                     hdev->discov_timeout > 0)
1111                         cancel_delayed_work(&hdev->discov_off);
1112         }
1113
1114         hci_req_init(&req, hdev);
1115
1116         hci_req_add(&req, HCI_OP_WRITE_SCAN_ENABLE, 1, &scan);
1117
1118         /* If we're going from non-connectable to connectable or
1119          * vice-versa when fast connectable is enabled ensure that fast
1120          * connectable gets disabled. write_fast_connectable won't do
1121          * anything if the page scan parameters are already what they
1122          * should be.
1123          */
1124         if (cp->val || test_bit(HCI_FAST_CONNECTABLE, &hdev->dev_flags))
1125                 write_fast_connectable(&req, false);
1126
1127         err = hci_req_run(&req, set_connectable_complete);
1128         if (err < 0)
1129                 mgmt_pending_remove(cmd);
1130
1131 failed:
1132         hci_dev_unlock(hdev);
1133         return err;
1134 }
1135
1136 static int set_pairable(struct sock *sk, struct hci_dev *hdev, void *data,
1137                         u16 len)
1138 {
1139         struct mgmt_mode *cp = data;
1140         int err;
1141
1142         BT_DBG("request for %s", hdev->name);
1143
1144         if (cp->val != 0x00 && cp->val != 0x01)
1145                 return cmd_status(sk, hdev->id, MGMT_OP_SET_PAIRABLE,
1146                                   MGMT_STATUS_INVALID_PARAMS);
1147
1148         hci_dev_lock(hdev);
1149
1150         if (cp->val)
1151                 set_bit(HCI_PAIRABLE, &hdev->dev_flags);
1152         else
1153                 clear_bit(HCI_PAIRABLE, &hdev->dev_flags);
1154
1155         err = send_settings_rsp(sk, MGMT_OP_SET_PAIRABLE, hdev);
1156         if (err < 0)
1157                 goto failed;
1158
1159         err = new_settings(hdev, sk);
1160
1161 failed:
1162         hci_dev_unlock(hdev);
1163         return err;
1164 }
1165
1166 static int set_link_security(struct sock *sk, struct hci_dev *hdev, void *data,
1167                              u16 len)
1168 {
1169         struct mgmt_mode *cp = data;
1170         struct pending_cmd *cmd;
1171         u8 val;
1172         int err;
1173
1174         BT_DBG("request for %s", hdev->name);
1175
1176         if (!lmp_bredr_capable(hdev))
1177                 return cmd_status(sk, hdev->id, MGMT_OP_SET_LINK_SECURITY,
1178                                   MGMT_STATUS_NOT_SUPPORTED);
1179
1180         if (cp->val != 0x00 && cp->val != 0x01)
1181                 return cmd_status(sk, hdev->id, MGMT_OP_SET_LINK_SECURITY,
1182                                   MGMT_STATUS_INVALID_PARAMS);
1183
1184         hci_dev_lock(hdev);
1185
1186         if (!hdev_is_powered(hdev)) {
1187                 bool changed = false;
1188
1189                 if (!!cp->val != test_bit(HCI_LINK_SECURITY,
1190                                           &hdev->dev_flags)) {
1191                         change_bit(HCI_LINK_SECURITY, &hdev->dev_flags);
1192                         changed = true;
1193                 }
1194
1195                 err = send_settings_rsp(sk, MGMT_OP_SET_LINK_SECURITY, hdev);
1196                 if (err < 0)
1197                         goto failed;
1198
1199                 if (changed)
1200                         err = new_settings(hdev, sk);
1201
1202                 goto failed;
1203         }
1204
1205         if (mgmt_pending_find(MGMT_OP_SET_LINK_SECURITY, hdev)) {
1206                 err = cmd_status(sk, hdev->id, MGMT_OP_SET_LINK_SECURITY,
1207                                  MGMT_STATUS_BUSY);
1208                 goto failed;
1209         }
1210
1211         val = !!cp->val;
1212
1213         if (test_bit(HCI_AUTH, &hdev->flags) == val) {
1214                 err = send_settings_rsp(sk, MGMT_OP_SET_LINK_SECURITY, hdev);
1215                 goto failed;
1216         }
1217
1218         cmd = mgmt_pending_add(sk, MGMT_OP_SET_LINK_SECURITY, hdev, data, len);
1219         if (!cmd) {
1220                 err = -ENOMEM;
1221                 goto failed;
1222         }
1223
1224         err = hci_send_cmd(hdev, HCI_OP_WRITE_AUTH_ENABLE, sizeof(val), &val);
1225         if (err < 0) {
1226                 mgmt_pending_remove(cmd);
1227                 goto failed;
1228         }
1229
1230 failed:
1231         hci_dev_unlock(hdev);
1232         return err;
1233 }
1234
1235 static int set_ssp(struct sock *sk, struct hci_dev *hdev, void *data, u16 len)
1236 {
1237         struct mgmt_mode *cp = data;
1238         struct pending_cmd *cmd;
1239         u8 val;
1240         int err;
1241
1242         BT_DBG("request for %s", hdev->name);
1243
1244         if (!lmp_ssp_capable(hdev))
1245                 return cmd_status(sk, hdev->id, MGMT_OP_SET_SSP,
1246                                   MGMT_STATUS_NOT_SUPPORTED);
1247
1248         if (cp->val != 0x00 && cp->val != 0x01)
1249                 return cmd_status(sk, hdev->id, MGMT_OP_SET_SSP,
1250                                   MGMT_STATUS_INVALID_PARAMS);
1251
1252         hci_dev_lock(hdev);
1253
1254         val = !!cp->val;
1255
1256         if (!hdev_is_powered(hdev)) {
1257                 bool changed = false;
1258
1259                 if (val != test_bit(HCI_SSP_ENABLED, &hdev->dev_flags)) {
1260                         change_bit(HCI_SSP_ENABLED, &hdev->dev_flags);
1261                         changed = true;
1262                 }
1263
1264                 err = send_settings_rsp(sk, MGMT_OP_SET_SSP, hdev);
1265                 if (err < 0)
1266                         goto failed;
1267
1268                 if (changed)
1269                         err = new_settings(hdev, sk);
1270
1271                 goto failed;
1272         }
1273
1274         if (mgmt_pending_find(MGMT_OP_SET_SSP, hdev)) {
1275                 err = cmd_status(sk, hdev->id, MGMT_OP_SET_SSP,
1276                                  MGMT_STATUS_BUSY);
1277                 goto failed;
1278         }
1279
1280         if (test_bit(HCI_SSP_ENABLED, &hdev->dev_flags) == val) {
1281                 err = send_settings_rsp(sk, MGMT_OP_SET_SSP, hdev);
1282                 goto failed;
1283         }
1284
1285         cmd = mgmt_pending_add(sk, MGMT_OP_SET_SSP, hdev, data, len);
1286         if (!cmd) {
1287                 err = -ENOMEM;
1288                 goto failed;
1289         }
1290
1291         err = hci_send_cmd(hdev, HCI_OP_WRITE_SSP_MODE, sizeof(val), &val);
1292         if (err < 0) {
1293                 mgmt_pending_remove(cmd);
1294                 goto failed;
1295         }
1296
1297 failed:
1298         hci_dev_unlock(hdev);
1299         return err;
1300 }
1301
1302 static int set_hs(struct sock *sk, struct hci_dev *hdev, void *data, u16 len)
1303 {
1304         struct mgmt_mode *cp = data;
1305
1306         BT_DBG("request for %s", hdev->name);
1307
1308         if (!enable_hs)
1309                 return cmd_status(sk, hdev->id, MGMT_OP_SET_HS,
1310                                   MGMT_STATUS_NOT_SUPPORTED);
1311
1312         if (cp->val != 0x00 && cp->val != 0x01)
1313                 return cmd_status(sk, hdev->id, MGMT_OP_SET_HS,
1314                                   MGMT_STATUS_INVALID_PARAMS);
1315
1316         if (cp->val)
1317                 set_bit(HCI_HS_ENABLED, &hdev->dev_flags);
1318         else
1319                 clear_bit(HCI_HS_ENABLED, &hdev->dev_flags);
1320
1321         return send_settings_rsp(sk, MGMT_OP_SET_HS, hdev);
1322 }
1323
1324 static int set_le(struct sock *sk, struct hci_dev *hdev, void *data, u16 len)
1325 {
1326         struct mgmt_mode *cp = data;
1327         struct hci_cp_write_le_host_supported hci_cp;
1328         struct pending_cmd *cmd;
1329         int err;
1330         u8 val, enabled;
1331
1332         BT_DBG("request for %s", hdev->name);
1333
1334         if (!lmp_le_capable(hdev))
1335                 return cmd_status(sk, hdev->id, MGMT_OP_SET_LE,
1336                                   MGMT_STATUS_NOT_SUPPORTED);
1337
1338         if (cp->val != 0x00 && cp->val != 0x01)
1339                 return cmd_status(sk, hdev->id, MGMT_OP_SET_LE,
1340                                   MGMT_STATUS_INVALID_PARAMS);
1341
1342         /* LE-only devices do not allow toggling LE on/off */
1343         if (!lmp_bredr_capable(hdev))
1344                 return cmd_status(sk, hdev->id, MGMT_OP_SET_LE,
1345                                   MGMT_STATUS_REJECTED);
1346
1347         hci_dev_lock(hdev);
1348
1349         val = !!cp->val;
1350         enabled = lmp_host_le_capable(hdev);
1351
1352         if (!hdev_is_powered(hdev) || val == enabled) {
1353                 bool changed = false;
1354
1355                 if (val != test_bit(HCI_LE_ENABLED, &hdev->dev_flags)) {
1356                         change_bit(HCI_LE_ENABLED, &hdev->dev_flags);
1357                         changed = true;
1358                 }
1359
1360                 err = send_settings_rsp(sk, MGMT_OP_SET_LE, hdev);
1361                 if (err < 0)
1362                         goto unlock;
1363
1364                 if (changed)
1365                         err = new_settings(hdev, sk);
1366
1367                 goto unlock;
1368         }
1369
1370         if (mgmt_pending_find(MGMT_OP_SET_LE, hdev)) {
1371                 err = cmd_status(sk, hdev->id, MGMT_OP_SET_LE,
1372                                  MGMT_STATUS_BUSY);
1373                 goto unlock;
1374         }
1375
1376         cmd = mgmt_pending_add(sk, MGMT_OP_SET_LE, hdev, data, len);
1377         if (!cmd) {
1378                 err = -ENOMEM;
1379                 goto unlock;
1380         }
1381
1382         memset(&hci_cp, 0, sizeof(hci_cp));
1383
1384         if (val) {
1385                 hci_cp.le = val;
1386                 hci_cp.simul = lmp_le_br_capable(hdev);
1387         }
1388
1389         err = hci_send_cmd(hdev, HCI_OP_WRITE_LE_HOST_SUPPORTED, sizeof(hci_cp),
1390                            &hci_cp);
1391         if (err < 0)
1392                 mgmt_pending_remove(cmd);
1393
1394 unlock:
1395         hci_dev_unlock(hdev);
1396         return err;
1397 }
1398
1399 /* This is a helper function to test for pending mgmt commands that can
1400  * cause CoD or EIR HCI commands. We can only allow one such pending
1401  * mgmt command at a time since otherwise we cannot easily track what
1402  * the current values are, will be, and based on that calculate if a new
1403  * HCI command needs to be sent and if yes with what value.
1404  */
1405 static bool pending_eir_or_class(struct hci_dev *hdev)
1406 {
1407         struct pending_cmd *cmd;
1408
1409         list_for_each_entry(cmd, &hdev->mgmt_pending, list) {
1410                 switch (cmd->opcode) {
1411                 case MGMT_OP_ADD_UUID:
1412                 case MGMT_OP_REMOVE_UUID:
1413                 case MGMT_OP_SET_DEV_CLASS:
1414                 case MGMT_OP_SET_POWERED:
1415                         return true;
1416                 }
1417         }
1418
1419         return false;
1420 }
1421
1422 static const u8 bluetooth_base_uuid[] = {
1423                         0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80,
1424                         0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1425 };
1426
1427 static u8 get_uuid_size(const u8 *uuid)
1428 {
1429         u32 val;
1430
1431         if (memcmp(uuid, bluetooth_base_uuid, 12))
1432                 return 128;
1433
1434         val = get_unaligned_le32(&uuid[12]);
1435         if (val > 0xffff)
1436                 return 32;
1437
1438         return 16;
1439 }
1440
1441 static void mgmt_class_complete(struct hci_dev *hdev, u16 mgmt_op, u8 status)
1442 {
1443         struct pending_cmd *cmd;
1444
1445         hci_dev_lock(hdev);
1446
1447         cmd = mgmt_pending_find(mgmt_op, hdev);
1448         if (!cmd)
1449                 goto unlock;
1450
1451         cmd_complete(cmd->sk, cmd->index, cmd->opcode, mgmt_status(status),
1452                      hdev->dev_class, 3);
1453
1454         mgmt_pending_remove(cmd);
1455
1456 unlock:
1457         hci_dev_unlock(hdev);
1458 }
1459
1460 static void add_uuid_complete(struct hci_dev *hdev, u8 status)
1461 {
1462         BT_DBG("status 0x%02x", status);
1463
1464         mgmt_class_complete(hdev, MGMT_OP_ADD_UUID, status);
1465 }
1466
1467 static int add_uuid(struct sock *sk, struct hci_dev *hdev, void *data, u16 len)
1468 {
1469         struct mgmt_cp_add_uuid *cp = data;
1470         struct pending_cmd *cmd;
1471         struct hci_request req;
1472         struct bt_uuid *uuid;
1473         int err;
1474
1475         BT_DBG("request for %s", hdev->name);
1476
1477         hci_dev_lock(hdev);
1478
1479         if (pending_eir_or_class(hdev)) {
1480                 err = cmd_status(sk, hdev->id, MGMT_OP_ADD_UUID,
1481                                  MGMT_STATUS_BUSY);
1482                 goto failed;
1483         }
1484
1485         uuid = kmalloc(sizeof(*uuid), GFP_KERNEL);
1486         if (!uuid) {
1487                 err = -ENOMEM;
1488                 goto failed;
1489         }
1490
1491         memcpy(uuid->uuid, cp->uuid, 16);
1492         uuid->svc_hint = cp->svc_hint;
1493         uuid->size = get_uuid_size(cp->uuid);
1494
1495         list_add_tail(&uuid->list, &hdev->uuids);
1496
1497         hci_req_init(&req, hdev);
1498
1499         update_class(&req);
1500         update_eir(&req);
1501
1502         err = hci_req_run(&req, add_uuid_complete);
1503         if (err < 0) {
1504                 if (err != -ENODATA)
1505                         goto failed;
1506
1507                 err = cmd_complete(sk, hdev->id, MGMT_OP_ADD_UUID, 0,
1508                                    hdev->dev_class, 3);
1509                 goto failed;
1510         }
1511
1512         cmd = mgmt_pending_add(sk, MGMT_OP_ADD_UUID, hdev, data, len);
1513         if (!cmd) {
1514                 err = -ENOMEM;
1515                 goto failed;
1516         }
1517
1518         err = 0;
1519
1520 failed:
1521         hci_dev_unlock(hdev);
1522         return err;
1523 }
1524
1525 static bool enable_service_cache(struct hci_dev *hdev)
1526 {
1527         if (!hdev_is_powered(hdev))
1528                 return false;
1529
1530         if (!test_and_set_bit(HCI_SERVICE_CACHE, &hdev->dev_flags)) {
1531                 queue_delayed_work(hdev->workqueue, &hdev->service_cache,
1532                                    CACHE_TIMEOUT);
1533                 return true;
1534         }
1535
1536         return false;
1537 }
1538
1539 static void remove_uuid_complete(struct hci_dev *hdev, u8 status)
1540 {
1541         BT_DBG("status 0x%02x", status);
1542
1543         mgmt_class_complete(hdev, MGMT_OP_REMOVE_UUID, status);
1544 }
1545
1546 static int remove_uuid(struct sock *sk, struct hci_dev *hdev, void *data,
1547                        u16 len)
1548 {
1549         struct mgmt_cp_remove_uuid *cp = data;
1550         struct pending_cmd *cmd;
1551         struct bt_uuid *match, *tmp;
1552         u8 bt_uuid_any[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
1553         struct hci_request req;
1554         int err, found;
1555
1556         BT_DBG("request for %s", hdev->name);
1557
1558         hci_dev_lock(hdev);
1559
1560         if (pending_eir_or_class(hdev)) {
1561                 err = cmd_status(sk, hdev->id, MGMT_OP_REMOVE_UUID,
1562                                  MGMT_STATUS_BUSY);
1563                 goto unlock;
1564         }
1565
1566         if (memcmp(cp->uuid, bt_uuid_any, 16) == 0) {
1567                 err = hci_uuids_clear(hdev);
1568
1569                 if (enable_service_cache(hdev)) {
1570                         err = cmd_complete(sk, hdev->id, MGMT_OP_REMOVE_UUID,
1571                                            0, hdev->dev_class, 3);
1572                         goto unlock;
1573                 }
1574
1575                 goto update_class;
1576         }
1577
1578         found = 0;
1579
1580         list_for_each_entry_safe(match, tmp, &hdev->uuids, list) {
1581                 if (memcmp(match->uuid, cp->uuid, 16) != 0)
1582                         continue;
1583
1584                 list_del(&match->list);
1585                 kfree(match);
1586                 found++;
1587         }
1588
1589         if (found == 0) {
1590                 err = cmd_status(sk, hdev->id, MGMT_OP_REMOVE_UUID,
1591                                  MGMT_STATUS_INVALID_PARAMS);
1592                 goto unlock;
1593         }
1594
1595 update_class:
1596         hci_req_init(&req, hdev);
1597
1598         update_class(&req);
1599         update_eir(&req);
1600
1601         err = hci_req_run(&req, remove_uuid_complete);
1602         if (err < 0) {
1603                 if (err != -ENODATA)
1604                         goto unlock;
1605
1606                 err = cmd_complete(sk, hdev->id, MGMT_OP_REMOVE_UUID, 0,
1607                                    hdev->dev_class, 3);
1608                 goto unlock;
1609         }
1610
1611         cmd = mgmt_pending_add(sk, MGMT_OP_REMOVE_UUID, hdev, data, len);
1612         if (!cmd) {
1613                 err = -ENOMEM;
1614                 goto unlock;
1615         }
1616
1617         err = 0;
1618
1619 unlock:
1620         hci_dev_unlock(hdev);
1621         return err;
1622 }
1623
1624 static void set_class_complete(struct hci_dev *hdev, u8 status)
1625 {
1626         BT_DBG("status 0x%02x", status);
1627
1628         mgmt_class_complete(hdev, MGMT_OP_SET_DEV_CLASS, status);
1629 }
1630
1631 static int set_dev_class(struct sock *sk, struct hci_dev *hdev, void *data,
1632                          u16 len)
1633 {
1634         struct mgmt_cp_set_dev_class *cp = data;
1635         struct pending_cmd *cmd;
1636         struct hci_request req;
1637         int err;
1638
1639         BT_DBG("request for %s", hdev->name);
1640
1641         if (!lmp_bredr_capable(hdev))
1642                 return cmd_status(sk, hdev->id, MGMT_OP_SET_DEV_CLASS,
1643                                   MGMT_STATUS_NOT_SUPPORTED);
1644
1645         hci_dev_lock(hdev);
1646
1647         if (pending_eir_or_class(hdev)) {
1648                 err = cmd_status(sk, hdev->id, MGMT_OP_SET_DEV_CLASS,
1649                                  MGMT_STATUS_BUSY);
1650                 goto unlock;
1651         }
1652
1653         if ((cp->minor & 0x03) != 0 || (cp->major & 0xe0) != 0) {
1654                 err = cmd_status(sk, hdev->id, MGMT_OP_SET_DEV_CLASS,
1655                                  MGMT_STATUS_INVALID_PARAMS);
1656                 goto unlock;
1657         }
1658
1659         hdev->major_class = cp->major;
1660         hdev->minor_class = cp->minor;
1661
1662         if (!hdev_is_powered(hdev)) {
1663                 err = cmd_complete(sk, hdev->id, MGMT_OP_SET_DEV_CLASS, 0,
1664                                    hdev->dev_class, 3);
1665                 goto unlock;
1666         }
1667
1668         hci_req_init(&req, hdev);
1669
1670         if (test_and_clear_bit(HCI_SERVICE_CACHE, &hdev->dev_flags)) {
1671                 hci_dev_unlock(hdev);
1672                 cancel_delayed_work_sync(&hdev->service_cache);
1673                 hci_dev_lock(hdev);
1674                 update_eir(&req);
1675         }
1676
1677         update_class(&req);
1678
1679         err = hci_req_run(&req, set_class_complete);
1680         if (err < 0) {
1681                 if (err != -ENODATA)
1682                         goto unlock;
1683
1684                 err = cmd_complete(sk, hdev->id, MGMT_OP_SET_DEV_CLASS, 0,
1685                                    hdev->dev_class, 3);
1686                 goto unlock;
1687         }
1688
1689         cmd = mgmt_pending_add(sk, MGMT_OP_SET_DEV_CLASS, hdev, data, len);
1690         if (!cmd) {
1691                 err = -ENOMEM;
1692                 goto unlock;
1693         }
1694
1695         err = 0;
1696
1697 unlock:
1698         hci_dev_unlock(hdev);
1699         return err;
1700 }
1701
1702 static int load_link_keys(struct sock *sk, struct hci_dev *hdev, void *data,
1703                           u16 len)
1704 {
1705         struct mgmt_cp_load_link_keys *cp = data;
1706         u16 key_count, expected_len;
1707         int i;
1708
1709         key_count = __le16_to_cpu(cp->key_count);
1710
1711         expected_len = sizeof(*cp) + key_count *
1712                                         sizeof(struct mgmt_link_key_info);
1713         if (expected_len != len) {
1714                 BT_ERR("load_link_keys: expected %u bytes, got %u bytes",
1715                        len, expected_len);
1716                 return cmd_status(sk, hdev->id, MGMT_OP_LOAD_LINK_KEYS,
1717                                   MGMT_STATUS_INVALID_PARAMS);
1718         }
1719
1720         if (cp->debug_keys != 0x00 && cp->debug_keys != 0x01)
1721                 return cmd_status(sk, hdev->id, MGMT_OP_LOAD_LINK_KEYS,
1722                                   MGMT_STATUS_INVALID_PARAMS);
1723
1724         BT_DBG("%s debug_keys %u key_count %u", hdev->name, cp->debug_keys,
1725                key_count);
1726
1727         for (i = 0; i < key_count; i++) {
1728                 struct mgmt_link_key_info *key = &cp->keys[i];
1729
1730                 if (key->addr.type != BDADDR_BREDR)
1731                         return cmd_status(sk, hdev->id, MGMT_OP_LOAD_LINK_KEYS,
1732                                           MGMT_STATUS_INVALID_PARAMS);
1733         }
1734
1735         hci_dev_lock(hdev);
1736
1737         hci_link_keys_clear(hdev);
1738
1739         if (cp->debug_keys)
1740                 set_bit(HCI_DEBUG_KEYS, &hdev->dev_flags);
1741         else
1742                 clear_bit(HCI_DEBUG_KEYS, &hdev->dev_flags);
1743
1744         for (i = 0; i < key_count; i++) {
1745                 struct mgmt_link_key_info *key = &cp->keys[i];
1746
1747                 hci_add_link_key(hdev, NULL, 0, &key->addr.bdaddr, key->val,
1748                                  key->type, key->pin_len);
1749         }
1750
1751         cmd_complete(sk, hdev->id, MGMT_OP_LOAD_LINK_KEYS, 0, NULL, 0);
1752
1753         hci_dev_unlock(hdev);
1754
1755         return 0;
1756 }
1757
1758 static int device_unpaired(struct hci_dev *hdev, bdaddr_t *bdaddr,
1759                            u8 addr_type, struct sock *skip_sk)
1760 {
1761         struct mgmt_ev_device_unpaired ev;
1762
1763         bacpy(&ev.addr.bdaddr, bdaddr);
1764         ev.addr.type = addr_type;
1765
1766         return mgmt_event(MGMT_EV_DEVICE_UNPAIRED, hdev, &ev, sizeof(ev),
1767                           skip_sk);
1768 }
1769
1770 static int unpair_device(struct sock *sk, struct hci_dev *hdev, void *data,
1771                          u16 len)
1772 {
1773         struct mgmt_cp_unpair_device *cp = data;
1774         struct mgmt_rp_unpair_device rp;
1775         struct hci_cp_disconnect dc;
1776         struct pending_cmd *cmd;
1777         struct hci_conn *conn;
1778         int err;
1779
1780         memset(&rp, 0, sizeof(rp));
1781         bacpy(&rp.addr.bdaddr, &cp->addr.bdaddr);
1782         rp.addr.type = cp->addr.type;
1783
1784         if (!bdaddr_type_is_valid(cp->addr.type))
1785                 return cmd_complete(sk, hdev->id, MGMT_OP_UNPAIR_DEVICE,
1786                                     MGMT_STATUS_INVALID_PARAMS,
1787                                     &rp, sizeof(rp));
1788
1789         if (cp->disconnect != 0x00 && cp->disconnect != 0x01)
1790                 return cmd_complete(sk, hdev->id, MGMT_OP_UNPAIR_DEVICE,
1791                                     MGMT_STATUS_INVALID_PARAMS,
1792                                     &rp, sizeof(rp));
1793
1794         hci_dev_lock(hdev);
1795
1796         if (!hdev_is_powered(hdev)) {
1797                 err = cmd_complete(sk, hdev->id, MGMT_OP_UNPAIR_DEVICE,
1798                                    MGMT_STATUS_NOT_POWERED, &rp, sizeof(rp));
1799                 goto unlock;
1800         }
1801
1802         if (cp->addr.type == BDADDR_BREDR)
1803                 err = hci_remove_link_key(hdev, &cp->addr.bdaddr);
1804         else
1805                 err = hci_remove_ltk(hdev, &cp->addr.bdaddr);
1806
1807         if (err < 0) {
1808                 err = cmd_complete(sk, hdev->id, MGMT_OP_UNPAIR_DEVICE,
1809                                    MGMT_STATUS_NOT_PAIRED, &rp, sizeof(rp));
1810                 goto unlock;
1811         }
1812
1813         if (cp->disconnect) {
1814                 if (cp->addr.type == BDADDR_BREDR)
1815                         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK,
1816                                                        &cp->addr.bdaddr);
1817                 else
1818                         conn = hci_conn_hash_lookup_ba(hdev, LE_LINK,
1819                                                        &cp->addr.bdaddr);
1820         } else {
1821                 conn = NULL;
1822         }
1823
1824         if (!conn) {
1825                 err = cmd_complete(sk, hdev->id, MGMT_OP_UNPAIR_DEVICE, 0,
1826                                    &rp, sizeof(rp));
1827                 device_unpaired(hdev, &cp->addr.bdaddr, cp->addr.type, sk);
1828                 goto unlock;
1829         }
1830
1831         cmd = mgmt_pending_add(sk, MGMT_OP_UNPAIR_DEVICE, hdev, cp,
1832                                sizeof(*cp));
1833         if (!cmd) {
1834                 err = -ENOMEM;
1835                 goto unlock;
1836         }
1837
1838         dc.handle = cpu_to_le16(conn->handle);
1839         dc.reason = 0x13; /* Remote User Terminated Connection */
1840         err = hci_send_cmd(hdev, HCI_OP_DISCONNECT, sizeof(dc), &dc);
1841         if (err < 0)
1842                 mgmt_pending_remove(cmd);
1843
1844 unlock:
1845         hci_dev_unlock(hdev);
1846         return err;
1847 }
1848
1849 static int disconnect(struct sock *sk, struct hci_dev *hdev, void *data,
1850                       u16 len)
1851 {
1852         struct mgmt_cp_disconnect *cp = data;
1853         struct mgmt_rp_disconnect rp;
1854         struct hci_cp_disconnect dc;
1855         struct pending_cmd *cmd;
1856         struct hci_conn *conn;
1857         int err;
1858
1859         BT_DBG("");
1860
1861         memset(&rp, 0, sizeof(rp));
1862         bacpy(&rp.addr.bdaddr, &cp->addr.bdaddr);
1863         rp.addr.type = cp->addr.type;
1864
1865         if (!bdaddr_type_is_valid(cp->addr.type))
1866                 return cmd_complete(sk, hdev->id, MGMT_OP_DISCONNECT,
1867                                     MGMT_STATUS_INVALID_PARAMS,
1868                                     &rp, sizeof(rp));
1869
1870         hci_dev_lock(hdev);
1871
1872         if (!test_bit(HCI_UP, &hdev->flags)) {
1873                 err = cmd_complete(sk, hdev->id, MGMT_OP_DISCONNECT,
1874                                    MGMT_STATUS_NOT_POWERED, &rp, sizeof(rp));
1875                 goto failed;
1876         }
1877
1878         if (mgmt_pending_find(MGMT_OP_DISCONNECT, hdev)) {
1879                 err = cmd_complete(sk, hdev->id, MGMT_OP_DISCONNECT,
1880                                    MGMT_STATUS_BUSY, &rp, sizeof(rp));
1881                 goto failed;
1882         }
1883
1884         if (cp->addr.type == BDADDR_BREDR)
1885                 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK,
1886                                                &cp->addr.bdaddr);
1887         else
1888                 conn = hci_conn_hash_lookup_ba(hdev, LE_LINK, &cp->addr.bdaddr);
1889
1890         if (!conn || conn->state == BT_OPEN || conn->state == BT_CLOSED) {
1891                 err = cmd_complete(sk, hdev->id, MGMT_OP_DISCONNECT,
1892                                    MGMT_STATUS_NOT_CONNECTED, &rp, sizeof(rp));
1893                 goto failed;
1894         }
1895
1896         cmd = mgmt_pending_add(sk, MGMT_OP_DISCONNECT, hdev, data, len);
1897         if (!cmd) {
1898                 err = -ENOMEM;
1899                 goto failed;
1900         }
1901
1902         dc.handle = cpu_to_le16(conn->handle);
1903         dc.reason = HCI_ERROR_REMOTE_USER_TERM;
1904
1905         err = hci_send_cmd(hdev, HCI_OP_DISCONNECT, sizeof(dc), &dc);
1906         if (err < 0)
1907                 mgmt_pending_remove(cmd);
1908
1909 failed:
1910         hci_dev_unlock(hdev);
1911         return err;
1912 }
1913
1914 static u8 link_to_bdaddr(u8 link_type, u8 addr_type)
1915 {
1916         switch (link_type) {
1917         case LE_LINK:
1918                 switch (addr_type) {
1919                 case ADDR_LE_DEV_PUBLIC:
1920                         return BDADDR_LE_PUBLIC;
1921
1922                 default:
1923                         /* Fallback to LE Random address type */
1924                         return BDADDR_LE_RANDOM;
1925                 }
1926
1927         default:
1928                 /* Fallback to BR/EDR type */
1929                 return BDADDR_BREDR;
1930         }
1931 }
1932
1933 static int get_connections(struct sock *sk, struct hci_dev *hdev, void *data,
1934                            u16 data_len)
1935 {
1936         struct mgmt_rp_get_connections *rp;
1937         struct hci_conn *c;
1938         size_t rp_len;
1939         int err;
1940         u16 i;
1941
1942         BT_DBG("");
1943
1944         hci_dev_lock(hdev);
1945
1946         if (!hdev_is_powered(hdev)) {
1947                 err = cmd_status(sk, hdev->id, MGMT_OP_GET_CONNECTIONS,
1948                                  MGMT_STATUS_NOT_POWERED);
1949                 goto unlock;
1950         }
1951
1952         i = 0;
1953         list_for_each_entry(c, &hdev->conn_hash.list, list) {
1954                 if (test_bit(HCI_CONN_MGMT_CONNECTED, &c->flags))
1955                         i++;
1956         }
1957
1958         rp_len = sizeof(*rp) + (i * sizeof(struct mgmt_addr_info));
1959         rp = kmalloc(rp_len, GFP_KERNEL);
1960         if (!rp) {
1961                 err = -ENOMEM;
1962                 goto unlock;
1963         }
1964
1965         i = 0;
1966         list_for_each_entry(c, &hdev->conn_hash.list, list) {
1967                 if (!test_bit(HCI_CONN_MGMT_CONNECTED, &c->flags))
1968                         continue;
1969                 bacpy(&rp->addr[i].bdaddr, &c->dst);
1970                 rp->addr[i].type = link_to_bdaddr(c->type, c->dst_type);
1971                 if (c->type == SCO_LINK || c->type == ESCO_LINK)
1972                         continue;
1973                 i++;
1974         }
1975
1976         rp->conn_count = cpu_to_le16(i);
1977
1978         /* Recalculate length in case of filtered SCO connections, etc */
1979         rp_len = sizeof(*rp) + (i * sizeof(struct mgmt_addr_info));
1980
1981         err = cmd_complete(sk, hdev->id, MGMT_OP_GET_CONNECTIONS, 0, rp,
1982                            rp_len);
1983
1984         kfree(rp);
1985
1986 unlock:
1987         hci_dev_unlock(hdev);
1988         return err;
1989 }
1990
1991 static int send_pin_code_neg_reply(struct sock *sk, struct hci_dev *hdev,
1992                                    struct mgmt_cp_pin_code_neg_reply *cp)
1993 {
1994         struct pending_cmd *cmd;
1995         int err;
1996
1997         cmd = mgmt_pending_add(sk, MGMT_OP_PIN_CODE_NEG_REPLY, hdev, cp,
1998                                sizeof(*cp));
1999         if (!cmd)
2000                 return -ENOMEM;
2001
2002         err = hci_send_cmd(hdev, HCI_OP_PIN_CODE_NEG_REPLY,
2003                            sizeof(cp->addr.bdaddr), &cp->addr.bdaddr);
2004         if (err < 0)
2005                 mgmt_pending_remove(cmd);
2006
2007         return err;
2008 }
2009
2010 static int pin_code_reply(struct sock *sk, struct hci_dev *hdev, void *data,
2011                           u16 len)
2012 {
2013         struct hci_conn *conn;
2014         struct mgmt_cp_pin_code_reply *cp = data;
2015         struct hci_cp_pin_code_reply reply;
2016         struct pending_cmd *cmd;
2017         int err;
2018
2019         BT_DBG("");
2020
2021         hci_dev_lock(hdev);
2022
2023         if (!hdev_is_powered(hdev)) {
2024                 err = cmd_status(sk, hdev->id, MGMT_OP_PIN_CODE_REPLY,
2025                                  MGMT_STATUS_NOT_POWERED);
2026                 goto failed;
2027         }
2028
2029         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->addr.bdaddr);
2030         if (!conn) {
2031                 err = cmd_status(sk, hdev->id, MGMT_OP_PIN_CODE_REPLY,
2032                                  MGMT_STATUS_NOT_CONNECTED);
2033                 goto failed;
2034         }
2035
2036         if (conn->pending_sec_level == BT_SECURITY_HIGH && cp->pin_len != 16) {
2037                 struct mgmt_cp_pin_code_neg_reply ncp;
2038
2039                 memcpy(&ncp.addr, &cp->addr, sizeof(ncp.addr));
2040
2041                 BT_ERR("PIN code is not 16 bytes long");
2042
2043                 err = send_pin_code_neg_reply(sk, hdev, &ncp);
2044                 if (err >= 0)
2045                         err = cmd_status(sk, hdev->id, MGMT_OP_PIN_CODE_REPLY,
2046                                          MGMT_STATUS_INVALID_PARAMS);
2047
2048                 goto failed;
2049         }
2050
2051         cmd = mgmt_pending_add(sk, MGMT_OP_PIN_CODE_REPLY, hdev, data, len);
2052         if (!cmd) {
2053                 err = -ENOMEM;
2054                 goto failed;
2055         }
2056
2057         bacpy(&reply.bdaddr, &cp->addr.bdaddr);
2058         reply.pin_len = cp->pin_len;
2059         memcpy(reply.pin_code, cp->pin_code, sizeof(reply.pin_code));
2060
2061         err = hci_send_cmd(hdev, HCI_OP_PIN_CODE_REPLY, sizeof(reply), &reply);
2062         if (err < 0)
2063                 mgmt_pending_remove(cmd);
2064
2065 failed:
2066         hci_dev_unlock(hdev);
2067         return err;
2068 }
2069
2070 static int set_io_capability(struct sock *sk, struct hci_dev *hdev, void *data,
2071                              u16 len)
2072 {
2073         struct mgmt_cp_set_io_capability *cp = data;
2074
2075         BT_DBG("");
2076
2077         hci_dev_lock(hdev);
2078
2079         hdev->io_capability = cp->io_capability;
2080
2081         BT_DBG("%s IO capability set to 0x%02x", hdev->name,
2082                hdev->io_capability);
2083
2084         hci_dev_unlock(hdev);
2085
2086         return cmd_complete(sk, hdev->id, MGMT_OP_SET_IO_CAPABILITY, 0, NULL,
2087                             0);
2088 }
2089
2090 static struct pending_cmd *find_pairing(struct hci_conn *conn)
2091 {
2092         struct hci_dev *hdev = conn->hdev;
2093         struct pending_cmd *cmd;
2094
2095         list_for_each_entry(cmd, &hdev->mgmt_pending, list) {
2096                 if (cmd->opcode != MGMT_OP_PAIR_DEVICE)
2097                         continue;
2098
2099                 if (cmd->user_data != conn)
2100                         continue;
2101
2102                 return cmd;
2103         }
2104
2105         return NULL;
2106 }
2107
2108 static void pairing_complete(struct pending_cmd *cmd, u8 status)
2109 {
2110         struct mgmt_rp_pair_device rp;
2111         struct hci_conn *conn = cmd->user_data;
2112
2113         bacpy(&rp.addr.bdaddr, &conn->dst);
2114         rp.addr.type = link_to_bdaddr(conn->type, conn->dst_type);
2115
2116         cmd_complete(cmd->sk, cmd->index, MGMT_OP_PAIR_DEVICE, status,
2117                      &rp, sizeof(rp));
2118
2119         /* So we don't get further callbacks for this connection */
2120         conn->connect_cfm_cb = NULL;
2121         conn->security_cfm_cb = NULL;
2122         conn->disconn_cfm_cb = NULL;
2123
2124         hci_conn_drop(conn);
2125
2126         mgmt_pending_remove(cmd);
2127 }
2128
2129 static void pairing_complete_cb(struct hci_conn *conn, u8 status)
2130 {
2131         struct pending_cmd *cmd;
2132
2133         BT_DBG("status %u", status);
2134
2135         cmd = find_pairing(conn);
2136         if (!cmd)
2137                 BT_DBG("Unable to find a pending command");
2138         else
2139                 pairing_complete(cmd, mgmt_status(status));
2140 }
2141
2142 static void le_connect_complete_cb(struct hci_conn *conn, u8 status)
2143 {
2144         struct pending_cmd *cmd;
2145
2146         BT_DBG("status %u", status);
2147
2148         if (!status)
2149                 return;
2150
2151         cmd = find_pairing(conn);
2152         if (!cmd)
2153                 BT_DBG("Unable to find a pending command");
2154         else
2155                 pairing_complete(cmd, mgmt_status(status));
2156 }
2157
2158 static int pair_device(struct sock *sk, struct hci_dev *hdev, void *data,
2159                        u16 len)
2160 {
2161         struct mgmt_cp_pair_device *cp = data;
2162         struct mgmt_rp_pair_device rp;
2163         struct pending_cmd *cmd;
2164         u8 sec_level, auth_type;
2165         struct hci_conn *conn;
2166         int err;
2167
2168         BT_DBG("");
2169
2170         memset(&rp, 0, sizeof(rp));
2171         bacpy(&rp.addr.bdaddr, &cp->addr.bdaddr);
2172         rp.addr.type = cp->addr.type;
2173
2174         if (!bdaddr_type_is_valid(cp->addr.type))
2175                 return cmd_complete(sk, hdev->id, MGMT_OP_PAIR_DEVICE,
2176                                     MGMT_STATUS_INVALID_PARAMS,
2177                                     &rp, sizeof(rp));
2178
2179         hci_dev_lock(hdev);
2180
2181         if (!hdev_is_powered(hdev)) {
2182                 err = cmd_complete(sk, hdev->id, MGMT_OP_PAIR_DEVICE,
2183                                    MGMT_STATUS_NOT_POWERED, &rp, sizeof(rp));
2184                 goto unlock;
2185         }
2186
2187         sec_level = BT_SECURITY_MEDIUM;
2188         if (cp->io_cap == 0x03)
2189                 auth_type = HCI_AT_DEDICATED_BONDING;
2190         else
2191                 auth_type = HCI_AT_DEDICATED_BONDING_MITM;
2192
2193         if (cp->addr.type == BDADDR_BREDR)
2194                 conn = hci_connect(hdev, ACL_LINK, &cp->addr.bdaddr,
2195                                    cp->addr.type, sec_level, auth_type);
2196         else
2197                 conn = hci_connect(hdev, LE_LINK, &cp->addr.bdaddr,
2198                                    cp->addr.type, sec_level, auth_type);
2199
2200         if (IS_ERR(conn)) {
2201                 int status;
2202
2203                 if (PTR_ERR(conn) == -EBUSY)
2204                         status = MGMT_STATUS_BUSY;
2205                 else
2206                         status = MGMT_STATUS_CONNECT_FAILED;
2207
2208                 err = cmd_complete(sk, hdev->id, MGMT_OP_PAIR_DEVICE,
2209                                    status, &rp,
2210                                    sizeof(rp));
2211                 goto unlock;
2212         }
2213
2214         if (conn->connect_cfm_cb) {
2215                 hci_conn_drop(conn);
2216                 err = cmd_complete(sk, hdev->id, MGMT_OP_PAIR_DEVICE,
2217                                    MGMT_STATUS_BUSY, &rp, sizeof(rp));
2218                 goto unlock;
2219         }
2220
2221         cmd = mgmt_pending_add(sk, MGMT_OP_PAIR_DEVICE, hdev, data, len);
2222         if (!cmd) {
2223                 err = -ENOMEM;
2224                 hci_conn_drop(conn);
2225                 goto unlock;
2226         }
2227
2228         /* For LE, just connecting isn't a proof that the pairing finished */
2229         if (cp->addr.type == BDADDR_BREDR)
2230                 conn->connect_cfm_cb = pairing_complete_cb;
2231         else
2232                 conn->connect_cfm_cb = le_connect_complete_cb;
2233
2234         conn->security_cfm_cb = pairing_complete_cb;
2235         conn->disconn_cfm_cb = pairing_complete_cb;
2236         conn->io_capability = cp->io_cap;
2237         cmd->user_data = conn;
2238
2239         if (conn->state == BT_CONNECTED &&
2240             hci_conn_security(conn, sec_level, auth_type))
2241                 pairing_complete(cmd, 0);
2242
2243         err = 0;
2244
2245 unlock:
2246         hci_dev_unlock(hdev);
2247         return err;
2248 }
2249
2250 static int cancel_pair_device(struct sock *sk, struct hci_dev *hdev, void *data,
2251                               u16 len)
2252 {
2253         struct mgmt_addr_info *addr = data;
2254         struct pending_cmd *cmd;
2255         struct hci_conn *conn;
2256         int err;
2257
2258         BT_DBG("");
2259
2260         hci_dev_lock(hdev);
2261
2262         if (!hdev_is_powered(hdev)) {
2263                 err = cmd_status(sk, hdev->id, MGMT_OP_CANCEL_PAIR_DEVICE,
2264                                  MGMT_STATUS_NOT_POWERED);
2265                 goto unlock;
2266         }
2267
2268         cmd = mgmt_pending_find(MGMT_OP_PAIR_DEVICE, hdev);
2269         if (!cmd) {
2270                 err = cmd_status(sk, hdev->id, MGMT_OP_CANCEL_PAIR_DEVICE,
2271                                  MGMT_STATUS_INVALID_PARAMS);
2272                 goto unlock;
2273         }
2274
2275         conn = cmd->user_data;
2276
2277         if (bacmp(&addr->bdaddr, &conn->dst) != 0) {
2278                 err = cmd_status(sk, hdev->id, MGMT_OP_CANCEL_PAIR_DEVICE,
2279                                  MGMT_STATUS_INVALID_PARAMS);
2280                 goto unlock;
2281         }
2282
2283         pairing_complete(cmd, MGMT_STATUS_CANCELLED);
2284
2285         err = cmd_complete(sk, hdev->id, MGMT_OP_CANCEL_PAIR_DEVICE, 0,
2286                            addr, sizeof(*addr));
2287 unlock:
2288         hci_dev_unlock(hdev);
2289         return err;
2290 }
2291
2292 static int user_pairing_resp(struct sock *sk, struct hci_dev *hdev,
2293                              struct mgmt_addr_info *addr, u16 mgmt_op,
2294                              u16 hci_op, __le32 passkey)
2295 {
2296         struct pending_cmd *cmd;
2297         struct hci_conn *conn;
2298         int err;
2299
2300         hci_dev_lock(hdev);
2301
2302         if (!hdev_is_powered(hdev)) {
2303                 err = cmd_complete(sk, hdev->id, mgmt_op,
2304                                    MGMT_STATUS_NOT_POWERED, addr,
2305                                    sizeof(*addr));
2306                 goto done;
2307         }
2308
2309         if (addr->type == BDADDR_BREDR)
2310                 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &addr->bdaddr);
2311         else
2312                 conn = hci_conn_hash_lookup_ba(hdev, LE_LINK, &addr->bdaddr);
2313
2314         if (!conn) {
2315                 err = cmd_complete(sk, hdev->id, mgmt_op,
2316                                    MGMT_STATUS_NOT_CONNECTED, addr,
2317                                    sizeof(*addr));
2318                 goto done;
2319         }
2320
2321         if (addr->type == BDADDR_LE_PUBLIC || addr->type == BDADDR_LE_RANDOM) {
2322                 /* Continue with pairing via SMP */
2323                 err = smp_user_confirm_reply(conn, mgmt_op, passkey);
2324
2325                 if (!err)
2326                         err = cmd_complete(sk, hdev->id, mgmt_op,
2327                                            MGMT_STATUS_SUCCESS, addr,
2328                                            sizeof(*addr));
2329                 else
2330                         err = cmd_complete(sk, hdev->id, mgmt_op,
2331                                            MGMT_STATUS_FAILED, addr,
2332                                            sizeof(*addr));
2333
2334                 goto done;
2335         }
2336
2337         cmd = mgmt_pending_add(sk, mgmt_op, hdev, addr, sizeof(*addr));
2338         if (!cmd) {
2339                 err = -ENOMEM;
2340                 goto done;
2341         }
2342
2343         /* Continue with pairing via HCI */
2344         if (hci_op == HCI_OP_USER_PASSKEY_REPLY) {
2345                 struct hci_cp_user_passkey_reply cp;
2346
2347                 bacpy(&cp.bdaddr, &addr->bdaddr);
2348                 cp.passkey = passkey;
2349                 err = hci_send_cmd(hdev, hci_op, sizeof(cp), &cp);
2350         } else
2351                 err = hci_send_cmd(hdev, hci_op, sizeof(addr->bdaddr),
2352                                    &addr->bdaddr);
2353
2354         if (err < 0)
2355                 mgmt_pending_remove(cmd);
2356
2357 done:
2358         hci_dev_unlock(hdev);
2359         return err;
2360 }
2361
2362 static int pin_code_neg_reply(struct sock *sk, struct hci_dev *hdev,
2363                               void *data, u16 len)
2364 {
2365         struct mgmt_cp_pin_code_neg_reply *cp = data;
2366
2367         BT_DBG("");
2368
2369         return user_pairing_resp(sk, hdev, &cp->addr,
2370                                 MGMT_OP_PIN_CODE_NEG_REPLY,
2371                                 HCI_OP_PIN_CODE_NEG_REPLY, 0);
2372 }
2373
2374 static int user_confirm_reply(struct sock *sk, struct hci_dev *hdev, void *data,
2375                               u16 len)
2376 {
2377         struct mgmt_cp_user_confirm_reply *cp = data;
2378
2379         BT_DBG("");
2380
2381         if (len != sizeof(*cp))
2382                 return cmd_status(sk, hdev->id, MGMT_OP_USER_CONFIRM_REPLY,
2383                                   MGMT_STATUS_INVALID_PARAMS);
2384
2385         return user_pairing_resp(sk, hdev, &cp->addr,
2386                                  MGMT_OP_USER_CONFIRM_REPLY,
2387                                  HCI_OP_USER_CONFIRM_REPLY, 0);
2388 }
2389
2390 static int user_confirm_neg_reply(struct sock *sk, struct hci_dev *hdev,
2391                                   void *data, u16 len)
2392 {
2393         struct mgmt_cp_user_confirm_neg_reply *cp = data;
2394
2395         BT_DBG("");
2396
2397         return user_pairing_resp(sk, hdev, &cp->addr,
2398                                  MGMT_OP_USER_CONFIRM_NEG_REPLY,
2399                                  HCI_OP_USER_CONFIRM_NEG_REPLY, 0);
2400 }
2401
2402 static int user_passkey_reply(struct sock *sk, struct hci_dev *hdev, void *data,
2403                               u16 len)
2404 {
2405         struct mgmt_cp_user_passkey_reply *cp = data;
2406
2407         BT_DBG("");
2408
2409         return user_pairing_resp(sk, hdev, &cp->addr,
2410                                  MGMT_OP_USER_PASSKEY_REPLY,
2411                                  HCI_OP_USER_PASSKEY_REPLY, cp->passkey);
2412 }
2413
2414 static int user_passkey_neg_reply(struct sock *sk, struct hci_dev *hdev,
2415                                   void *data, u16 len)
2416 {
2417         struct mgmt_cp_user_passkey_neg_reply *cp = data;
2418
2419         BT_DBG("");
2420
2421         return user_pairing_resp(sk, hdev, &cp->addr,
2422                                  MGMT_OP_USER_PASSKEY_NEG_REPLY,
2423                                  HCI_OP_USER_PASSKEY_NEG_REPLY, 0);
2424 }
2425
2426 static void update_name(struct hci_request *req)
2427 {
2428         struct hci_dev *hdev = req->hdev;
2429         struct hci_cp_write_local_name cp;
2430
2431         memcpy(cp.name, hdev->dev_name, sizeof(cp.name));
2432
2433         hci_req_add(req, HCI_OP_WRITE_LOCAL_NAME, sizeof(cp), &cp);
2434 }
2435
2436 static void set_name_complete(struct hci_dev *hdev, u8 status)
2437 {
2438         struct mgmt_cp_set_local_name *cp;
2439         struct pending_cmd *cmd;
2440
2441         BT_DBG("status 0x%02x", status);
2442
2443         hci_dev_lock(hdev);
2444
2445         cmd = mgmt_pending_find(MGMT_OP_SET_LOCAL_NAME, hdev);
2446         if (!cmd)
2447                 goto unlock;
2448
2449         cp = cmd->param;
2450
2451         if (status)
2452                 cmd_status(cmd->sk, hdev->id, MGMT_OP_SET_LOCAL_NAME,
2453                            mgmt_status(status));
2454         else
2455                 cmd_complete(cmd->sk, hdev->id, MGMT_OP_SET_LOCAL_NAME, 0,
2456                              cp, sizeof(*cp));
2457
2458         mgmt_pending_remove(cmd);
2459
2460 unlock:
2461         hci_dev_unlock(hdev);
2462 }
2463
2464 static int set_local_name(struct sock *sk, struct hci_dev *hdev, void *data,
2465                           u16 len)
2466 {
2467         struct mgmt_cp_set_local_name *cp = data;
2468         struct pending_cmd *cmd;
2469         struct hci_request req;
2470         int err;
2471
2472         BT_DBG("");
2473
2474         hci_dev_lock(hdev);
2475
2476         /* If the old values are the same as the new ones just return a
2477          * direct command complete event.
2478          */
2479         if (!memcmp(hdev->dev_name, cp->name, sizeof(hdev->dev_name)) &&
2480             !memcmp(hdev->short_name, cp->short_name,
2481                     sizeof(hdev->short_name))) {
2482                 err = cmd_complete(sk, hdev->id, MGMT_OP_SET_LOCAL_NAME, 0,
2483                                    data, len);
2484                 goto failed;
2485         }
2486
2487         memcpy(hdev->short_name, cp->short_name, sizeof(hdev->short_name));
2488
2489         if (!hdev_is_powered(hdev)) {
2490                 memcpy(hdev->dev_name, cp->name, sizeof(hdev->dev_name));
2491
2492                 err = cmd_complete(sk, hdev->id, MGMT_OP_SET_LOCAL_NAME, 0,
2493                                    data, len);
2494                 if (err < 0)
2495                         goto failed;
2496
2497                 err = mgmt_event(MGMT_EV_LOCAL_NAME_CHANGED, hdev, data, len,
2498                                  sk);
2499
2500                 goto failed;
2501         }
2502
2503         cmd = mgmt_pending_add(sk, MGMT_OP_SET_LOCAL_NAME, hdev, data, len);
2504         if (!cmd) {
2505                 err = -ENOMEM;
2506                 goto failed;
2507         }
2508
2509         memcpy(hdev->dev_name, cp->name, sizeof(hdev->dev_name));
2510
2511         hci_req_init(&req, hdev);
2512
2513         if (lmp_bredr_capable(hdev)) {
2514                 update_name(&req);
2515                 update_eir(&req);
2516         }
2517
2518         if (lmp_le_capable(hdev))
2519                 hci_update_ad(&req);
2520
2521         err = hci_req_run(&req, set_name_complete);
2522         if (err < 0)
2523                 mgmt_pending_remove(cmd);
2524
2525 failed:
2526         hci_dev_unlock(hdev);
2527         return err;
2528 }
2529
2530 static int read_local_oob_data(struct sock *sk, struct hci_dev *hdev,
2531                                void *data, u16 data_len)
2532 {
2533         struct pending_cmd *cmd;
2534         int err;
2535
2536         BT_DBG("%s", hdev->name);
2537
2538         hci_dev_lock(hdev);
2539
2540         if (!hdev_is_powered(hdev)) {
2541                 err = cmd_status(sk, hdev->id, MGMT_OP_READ_LOCAL_OOB_DATA,
2542                                  MGMT_STATUS_NOT_POWERED);
2543                 goto unlock;
2544         }
2545
2546         if (!lmp_ssp_capable(hdev)) {
2547                 err = cmd_status(sk, hdev->id, MGMT_OP_READ_LOCAL_OOB_DATA,
2548                                  MGMT_STATUS_NOT_SUPPORTED);
2549                 goto unlock;
2550         }
2551
2552         if (mgmt_pending_find(MGMT_OP_READ_LOCAL_OOB_DATA, hdev)) {
2553                 err = cmd_status(sk, hdev->id, MGMT_OP_READ_LOCAL_OOB_DATA,
2554                                  MGMT_STATUS_BUSY);
2555                 goto unlock;
2556         }
2557
2558         cmd = mgmt_pending_add(sk, MGMT_OP_READ_LOCAL_OOB_DATA, hdev, NULL, 0);
2559         if (!cmd) {
2560                 err = -ENOMEM;
2561                 goto unlock;
2562         }
2563
2564         err = hci_send_cmd(hdev, HCI_OP_READ_LOCAL_OOB_DATA, 0, NULL);
2565         if (err < 0)
2566                 mgmt_pending_remove(cmd);
2567
2568 unlock:
2569         hci_dev_unlock(hdev);
2570         return err;
2571 }
2572
2573 static int add_remote_oob_data(struct sock *sk, struct hci_dev *hdev,
2574                                void *data, u16 len)
2575 {
2576         struct mgmt_cp_add_remote_oob_data *cp = data;
2577         u8 status;
2578         int err;
2579
2580         BT_DBG("%s ", hdev->name);
2581
2582         hci_dev_lock(hdev);
2583
2584         err = hci_add_remote_oob_data(hdev, &cp->addr.bdaddr, cp->hash,
2585                                       cp->randomizer);
2586         if (err < 0)
2587                 status = MGMT_STATUS_FAILED;
2588         else
2589                 status = MGMT_STATUS_SUCCESS;
2590
2591         err = cmd_complete(sk, hdev->id, MGMT_OP_ADD_REMOTE_OOB_DATA, status,
2592                            &cp->addr, sizeof(cp->addr));
2593
2594         hci_dev_unlock(hdev);
2595         return err;
2596 }
2597
2598 static int remove_remote_oob_data(struct sock *sk, struct hci_dev *hdev,
2599                                   void *data, u16 len)
2600 {
2601         struct mgmt_cp_remove_remote_oob_data *cp = data;
2602         u8 status;
2603         int err;
2604
2605         BT_DBG("%s", hdev->name);
2606
2607         hci_dev_lock(hdev);
2608
2609         err = hci_remove_remote_oob_data(hdev, &cp->addr.bdaddr);
2610         if (err < 0)
2611                 status = MGMT_STATUS_INVALID_PARAMS;
2612         else
2613                 status = MGMT_STATUS_SUCCESS;
2614
2615         err = cmd_complete(sk, hdev->id, MGMT_OP_REMOVE_REMOTE_OOB_DATA,
2616                            status, &cp->addr, sizeof(cp->addr));
2617
2618         hci_dev_unlock(hdev);
2619         return err;
2620 }
2621
2622 static int mgmt_start_discovery_failed(struct hci_dev *hdev, u8 status)
2623 {
2624         struct pending_cmd *cmd;
2625         u8 type;
2626         int err;
2627
2628         hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
2629
2630         cmd = mgmt_pending_find(MGMT_OP_START_DISCOVERY, hdev);
2631         if (!cmd)
2632                 return -ENOENT;
2633
2634         type = hdev->discovery.type;
2635
2636         err = cmd_complete(cmd->sk, hdev->id, cmd->opcode, mgmt_status(status),
2637                            &type, sizeof(type));
2638         mgmt_pending_remove(cmd);
2639
2640         return err;
2641 }
2642
2643 static void start_discovery_complete(struct hci_dev *hdev, u8 status)
2644 {
2645         BT_DBG("status %d", status);
2646
2647         if (status) {
2648                 hci_dev_lock(hdev);
2649                 mgmt_start_discovery_failed(hdev, status);
2650                 hci_dev_unlock(hdev);
2651                 return;
2652         }
2653
2654         hci_dev_lock(hdev);
2655         hci_discovery_set_state(hdev, DISCOVERY_FINDING);
2656         hci_dev_unlock(hdev);
2657
2658         switch (hdev->discovery.type) {
2659         case DISCOV_TYPE_LE:
2660                 queue_delayed_work(hdev->workqueue, &hdev->le_scan_disable,
2661                                    DISCOV_LE_TIMEOUT);
2662                 break;
2663
2664         case DISCOV_TYPE_INTERLEAVED:
2665                 queue_delayed_work(hdev->workqueue, &hdev->le_scan_disable,
2666                                    DISCOV_INTERLEAVED_TIMEOUT);
2667                 break;
2668
2669         case DISCOV_TYPE_BREDR:
2670                 break;
2671
2672         default:
2673                 BT_ERR("Invalid discovery type %d", hdev->discovery.type);
2674         }
2675 }
2676
2677 static int start_discovery(struct sock *sk, struct hci_dev *hdev,
2678                            void *data, u16 len)
2679 {
2680         struct mgmt_cp_start_discovery *cp = data;
2681         struct pending_cmd *cmd;
2682         struct hci_cp_le_set_scan_param param_cp;
2683         struct hci_cp_le_set_scan_enable enable_cp;
2684         struct hci_cp_inquiry inq_cp;
2685         struct hci_request req;
2686         /* General inquiry access code (GIAC) */
2687         u8 lap[3] = { 0x33, 0x8b, 0x9e };
2688         int err;
2689
2690         BT_DBG("%s", hdev->name);
2691
2692         hci_dev_lock(hdev);
2693
2694         if (!hdev_is_powered(hdev)) {
2695                 err = cmd_status(sk, hdev->id, MGMT_OP_START_DISCOVERY,
2696                                  MGMT_STATUS_NOT_POWERED);
2697                 goto failed;
2698         }
2699
2700         if (test_bit(HCI_PERIODIC_INQ, &hdev->dev_flags)) {
2701                 err = cmd_status(sk, hdev->id, MGMT_OP_START_DISCOVERY,
2702                                  MGMT_STATUS_BUSY);
2703                 goto failed;
2704         }
2705
2706         if (hdev->discovery.state != DISCOVERY_STOPPED) {
2707                 err = cmd_status(sk, hdev->id, MGMT_OP_START_DISCOVERY,
2708                                  MGMT_STATUS_BUSY);
2709                 goto failed;
2710         }
2711
2712         cmd = mgmt_pending_add(sk, MGMT_OP_START_DISCOVERY, hdev, NULL, 0);
2713         if (!cmd) {
2714                 err = -ENOMEM;
2715                 goto failed;
2716         }
2717
2718         hdev->discovery.type = cp->type;
2719
2720         hci_req_init(&req, hdev);
2721
2722         switch (hdev->discovery.type) {
2723         case DISCOV_TYPE_BREDR:
2724                 if (!lmp_bredr_capable(hdev)) {
2725                         err = cmd_status(sk, hdev->id, MGMT_OP_START_DISCOVERY,
2726                                          MGMT_STATUS_NOT_SUPPORTED);
2727                         mgmt_pending_remove(cmd);
2728                         goto failed;
2729                 }
2730
2731                 if (test_bit(HCI_INQUIRY, &hdev->flags)) {
2732                         err = cmd_status(sk, hdev->id, MGMT_OP_START_DISCOVERY,
2733                                          MGMT_STATUS_BUSY);
2734                         mgmt_pending_remove(cmd);
2735                         goto failed;
2736                 }
2737
2738                 hci_inquiry_cache_flush(hdev);
2739
2740                 memset(&inq_cp, 0, sizeof(inq_cp));
2741                 memcpy(&inq_cp.lap, lap, sizeof(inq_cp.lap));
2742                 inq_cp.length = DISCOV_BREDR_INQUIRY_LEN;
2743                 hci_req_add(&req, HCI_OP_INQUIRY, sizeof(inq_cp), &inq_cp);
2744                 break;
2745
2746         case DISCOV_TYPE_LE:
2747         case DISCOV_TYPE_INTERLEAVED:
2748                 if (!test_bit(HCI_LE_ENABLED, &hdev->dev_flags)) {
2749                         err = cmd_status(sk, hdev->id, MGMT_OP_START_DISCOVERY,
2750                                          MGMT_STATUS_NOT_SUPPORTED);
2751                         mgmt_pending_remove(cmd);
2752                         goto failed;
2753                 }
2754
2755                 if (hdev->discovery.type == DISCOV_TYPE_INTERLEAVED &&
2756                     !lmp_bredr_capable(hdev)) {
2757                         err = cmd_status(sk, hdev->id, MGMT_OP_START_DISCOVERY,
2758                                          MGMT_STATUS_NOT_SUPPORTED);
2759                         mgmt_pending_remove(cmd);
2760                         goto failed;
2761                 }
2762
2763                 if (test_bit(HCI_LE_PERIPHERAL, &hdev->dev_flags)) {
2764                         err = cmd_status(sk, hdev->id, MGMT_OP_START_DISCOVERY,
2765                                          MGMT_STATUS_REJECTED);
2766                         mgmt_pending_remove(cmd);
2767                         goto failed;
2768                 }
2769
2770                 if (test_bit(HCI_LE_SCAN, &hdev->dev_flags)) {
2771                         err = cmd_status(sk, hdev->id, MGMT_OP_START_DISCOVERY,
2772                                          MGMT_STATUS_BUSY);
2773                         mgmt_pending_remove(cmd);
2774                         goto failed;
2775                 }
2776
2777                 memset(&param_cp, 0, sizeof(param_cp));
2778                 param_cp.type = LE_SCAN_ACTIVE;
2779                 param_cp.interval = cpu_to_le16(DISCOV_LE_SCAN_INT);
2780                 param_cp.window = cpu_to_le16(DISCOV_LE_SCAN_WIN);
2781                 hci_req_add(&req, HCI_OP_LE_SET_SCAN_PARAM, sizeof(param_cp),
2782                             &param_cp);
2783
2784                 memset(&enable_cp, 0, sizeof(enable_cp));
2785                 enable_cp.enable = LE_SCAN_ENABLE;
2786                 enable_cp.filter_dup = LE_SCAN_FILTER_DUP_ENABLE;
2787                 hci_req_add(&req, HCI_OP_LE_SET_SCAN_ENABLE, sizeof(enable_cp),
2788                             &enable_cp);
2789                 break;
2790
2791         default:
2792                 err = cmd_status(sk, hdev->id, MGMT_OP_START_DISCOVERY,
2793                                  MGMT_STATUS_INVALID_PARAMS);
2794                 mgmt_pending_remove(cmd);
2795                 goto failed;
2796         }
2797
2798         err = hci_req_run(&req, start_discovery_complete);
2799         if (err < 0)
2800                 mgmt_pending_remove(cmd);
2801         else
2802                 hci_discovery_set_state(hdev, DISCOVERY_STARTING);
2803
2804 failed:
2805         hci_dev_unlock(hdev);
2806         return err;
2807 }
2808
2809 static int mgmt_stop_discovery_failed(struct hci_dev *hdev, u8 status)
2810 {
2811         struct pending_cmd *cmd;
2812         int err;
2813
2814         cmd = mgmt_pending_find(MGMT_OP_STOP_DISCOVERY, hdev);
2815         if (!cmd)
2816                 return -ENOENT;
2817
2818         err = cmd_complete(cmd->sk, hdev->id, cmd->opcode, mgmt_status(status),
2819                            &hdev->discovery.type, sizeof(hdev->discovery.type));
2820         mgmt_pending_remove(cmd);
2821
2822         return err;
2823 }
2824
2825 static void stop_discovery_complete(struct hci_dev *hdev, u8 status)
2826 {
2827         BT_DBG("status %d", status);
2828
2829         hci_dev_lock(hdev);
2830
2831         if (status) {
2832                 mgmt_stop_discovery_failed(hdev, status);
2833                 goto unlock;
2834         }
2835
2836         hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
2837
2838 unlock:
2839         hci_dev_unlock(hdev);
2840 }
2841
2842 static int stop_discovery(struct sock *sk, struct hci_dev *hdev, void *data,
2843                           u16 len)
2844 {
2845         struct mgmt_cp_stop_discovery *mgmt_cp = data;
2846         struct pending_cmd *cmd;
2847         struct hci_cp_remote_name_req_cancel cp;
2848         struct inquiry_entry *e;
2849         struct hci_request req;
2850         struct hci_cp_le_set_scan_enable enable_cp;
2851         int err;
2852
2853         BT_DBG("%s", hdev->name);
2854
2855         hci_dev_lock(hdev);
2856
2857         if (!hci_discovery_active(hdev)) {
2858                 err = cmd_complete(sk, hdev->id, MGMT_OP_STOP_DISCOVERY,
2859                                    MGMT_STATUS_REJECTED, &mgmt_cp->type,
2860                                    sizeof(mgmt_cp->type));
2861                 goto unlock;
2862         }
2863
2864         if (hdev->discovery.type != mgmt_cp->type) {
2865                 err = cmd_complete(sk, hdev->id, MGMT_OP_STOP_DISCOVERY,
2866                                    MGMT_STATUS_INVALID_PARAMS, &mgmt_cp->type,
2867                                    sizeof(mgmt_cp->type));
2868                 goto unlock;
2869         }
2870
2871         cmd = mgmt_pending_add(sk, MGMT_OP_STOP_DISCOVERY, hdev, NULL, 0);
2872         if (!cmd) {
2873                 err = -ENOMEM;
2874                 goto unlock;
2875         }
2876
2877         hci_req_init(&req, hdev);
2878
2879         switch (hdev->discovery.state) {
2880         case DISCOVERY_FINDING:
2881                 if (test_bit(HCI_INQUIRY, &hdev->flags)) {
2882                         hci_req_add(&req, HCI_OP_INQUIRY_CANCEL, 0, NULL);
2883                 } else {
2884                         cancel_delayed_work(&hdev->le_scan_disable);
2885
2886                         memset(&enable_cp, 0, sizeof(enable_cp));
2887                         enable_cp.enable = LE_SCAN_DISABLE;
2888                         hci_req_add(&req, HCI_OP_LE_SET_SCAN_ENABLE,
2889                                     sizeof(enable_cp), &enable_cp);
2890                 }
2891
2892                 break;
2893
2894         case DISCOVERY_RESOLVING:
2895                 e = hci_inquiry_cache_lookup_resolve(hdev, BDADDR_ANY,
2896                                                      NAME_PENDING);
2897                 if (!e) {
2898                         mgmt_pending_remove(cmd);
2899                         err = cmd_complete(sk, hdev->id,
2900                                            MGMT_OP_STOP_DISCOVERY, 0,
2901                                            &mgmt_cp->type,
2902                                            sizeof(mgmt_cp->type));
2903                         hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
2904                         goto unlock;
2905                 }
2906
2907                 bacpy(&cp.bdaddr, &e->data.bdaddr);
2908                 hci_req_add(&req, HCI_OP_REMOTE_NAME_REQ_CANCEL, sizeof(cp),
2909                             &cp);
2910
2911                 break;
2912
2913         default:
2914                 BT_DBG("unknown discovery state %u", hdev->discovery.state);
2915
2916                 mgmt_pending_remove(cmd);
2917                 err = cmd_complete(sk, hdev->id, MGMT_OP_STOP_DISCOVERY,
2918                                    MGMT_STATUS_FAILED, &mgmt_cp->type,
2919                                    sizeof(mgmt_cp->type));
2920                 goto unlock;
2921         }
2922
2923         err = hci_req_run(&req, stop_discovery_complete);
2924         if (err < 0)
2925                 mgmt_pending_remove(cmd);
2926         else
2927                 hci_discovery_set_state(hdev, DISCOVERY_STOPPING);
2928
2929 unlock:
2930         hci_dev_unlock(hdev);
2931         return err;
2932 }
2933
2934 static int confirm_name(struct sock *sk, struct hci_dev *hdev, void *data,
2935                         u16 len)
2936 {
2937         struct mgmt_cp_confirm_name *cp = data;
2938         struct inquiry_entry *e;
2939         int err;
2940
2941         BT_DBG("%s", hdev->name);
2942
2943         hci_dev_lock(hdev);
2944
2945         if (!hci_discovery_active(hdev)) {
2946                 err = cmd_status(sk, hdev->id, MGMT_OP_CONFIRM_NAME,
2947                                  MGMT_STATUS_FAILED);
2948                 goto failed;
2949         }
2950
2951         e = hci_inquiry_cache_lookup_unknown(hdev, &cp->addr.bdaddr);
2952         if (!e) {
2953                 err = cmd_status(sk, hdev->id, MGMT_OP_CONFIRM_NAME,
2954                                  MGMT_STATUS_INVALID_PARAMS);
2955                 goto failed;
2956         }
2957
2958         if (cp->name_known) {
2959                 e->name_state = NAME_KNOWN;
2960                 list_del(&e->list);
2961         } else {
2962                 e->name_state = NAME_NEEDED;
2963                 hci_inquiry_cache_update_resolve(hdev, e);
2964         }
2965
2966         err = cmd_complete(sk, hdev->id, MGMT_OP_CONFIRM_NAME, 0, &cp->addr,
2967                            sizeof(cp->addr));
2968
2969 failed:
2970         hci_dev_unlock(hdev);
2971         return err;
2972 }
2973
2974 static int block_device(struct sock *sk, struct hci_dev *hdev, void *data,
2975                         u16 len)
2976 {
2977         struct mgmt_cp_block_device *cp = data;
2978         u8 status;
2979         int err;
2980
2981         BT_DBG("%s", hdev->name);
2982
2983         if (!bdaddr_type_is_valid(cp->addr.type))
2984                 return cmd_complete(sk, hdev->id, MGMT_OP_BLOCK_DEVICE,
2985                                     MGMT_STATUS_INVALID_PARAMS,
2986                                     &cp->addr, sizeof(cp->addr));
2987
2988         hci_dev_lock(hdev);
2989
2990         err = hci_blacklist_add(hdev, &cp->addr.bdaddr, cp->addr.type);
2991         if (err < 0)
2992                 status = MGMT_STATUS_FAILED;
2993         else
2994                 status = MGMT_STATUS_SUCCESS;
2995
2996         err = cmd_complete(sk, hdev->id, MGMT_OP_BLOCK_DEVICE, status,
2997                            &cp->addr, sizeof(cp->addr));
2998
2999         hci_dev_unlock(hdev);
3000
3001         return err;
3002 }
3003
3004 static int unblock_device(struct sock *sk, struct hci_dev *hdev, void *data,
3005                           u16 len)
3006 {
3007         struct mgmt_cp_unblock_device *cp = data;
3008         u8 status;
3009         int err;
3010
3011         BT_DBG("%s", hdev->name);
3012
3013         if (!bdaddr_type_is_valid(cp->addr.type))
3014                 return cmd_complete(sk, hdev->id, MGMT_OP_UNBLOCK_DEVICE,
3015                                     MGMT_STATUS_INVALID_PARAMS,
3016                                     &cp->addr, sizeof(cp->addr));
3017
3018         hci_dev_lock(hdev);
3019
3020         err = hci_blacklist_del(hdev, &cp->addr.bdaddr, cp->addr.type);
3021         if (err < 0)
3022                 status = MGMT_STATUS_INVALID_PARAMS;
3023         else
3024                 status = MGMT_STATUS_SUCCESS;
3025
3026         err = cmd_complete(sk, hdev->id, MGMT_OP_UNBLOCK_DEVICE, status,
3027                            &cp->addr, sizeof(cp->addr));
3028
3029         hci_dev_unlock(hdev);
3030
3031         return err;
3032 }
3033
3034 static int set_device_id(struct sock *sk, struct hci_dev *hdev, void *data,
3035                          u16 len)
3036 {
3037         struct mgmt_cp_set_device_id *cp = data;
3038         struct hci_request req;
3039         int err;
3040         __u16 source;
3041
3042         BT_DBG("%s", hdev->name);
3043
3044         source = __le16_to_cpu(cp->source);
3045
3046         if (source > 0x0002)
3047                 return cmd_status(sk, hdev->id, MGMT_OP_SET_DEVICE_ID,
3048                                   MGMT_STATUS_INVALID_PARAMS);
3049
3050         hci_dev_lock(hdev);
3051
3052         hdev->devid_source = source;
3053         hdev->devid_vendor = __le16_to_cpu(cp->vendor);
3054         hdev->devid_product = __le16_to_cpu(cp->product);
3055         hdev->devid_version = __le16_to_cpu(cp->version);
3056
3057         err = cmd_complete(sk, hdev->id, MGMT_OP_SET_DEVICE_ID, 0, NULL, 0);
3058
3059         hci_req_init(&req, hdev);
3060         update_eir(&req);
3061         hci_req_run(&req, NULL);
3062
3063         hci_dev_unlock(hdev);
3064
3065         return err;
3066 }
3067
3068 static void fast_connectable_complete(struct hci_dev *hdev, u8 status)
3069 {
3070         struct pending_cmd *cmd;
3071
3072         BT_DBG("status 0x%02x", status);
3073
3074         hci_dev_lock(hdev);
3075
3076         cmd = mgmt_pending_find(MGMT_OP_SET_FAST_CONNECTABLE, hdev);
3077         if (!cmd)
3078                 goto unlock;
3079
3080         if (status) {
3081                 cmd_status(cmd->sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE,
3082                            mgmt_status(status));
3083         } else {
3084                 struct mgmt_mode *cp = cmd->param;
3085
3086                 if (cp->val)
3087                         set_bit(HCI_FAST_CONNECTABLE, &hdev->dev_flags);
3088                 else
3089                         clear_bit(HCI_FAST_CONNECTABLE, &hdev->dev_flags);
3090
3091                 send_settings_rsp(cmd->sk, MGMT_OP_SET_FAST_CONNECTABLE, hdev);
3092                 new_settings(hdev, cmd->sk);
3093         }
3094
3095         mgmt_pending_remove(cmd);
3096
3097 unlock:
3098         hci_dev_unlock(hdev);
3099 }
3100
3101 static int set_fast_connectable(struct sock *sk, struct hci_dev *hdev,
3102                                 void *data, u16 len)
3103 {
3104         struct mgmt_mode *cp = data;
3105         struct pending_cmd *cmd;
3106         struct hci_request req;
3107         int err;
3108
3109         BT_DBG("%s", hdev->name);
3110
3111         if (!lmp_bredr_capable(hdev) || hdev->hci_ver < BLUETOOTH_VER_1_2)
3112                 return cmd_status(sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE,
3113                                   MGMT_STATUS_NOT_SUPPORTED);
3114
3115         if (cp->val != 0x00 && cp->val != 0x01)
3116                 return cmd_status(sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE,
3117                                   MGMT_STATUS_INVALID_PARAMS);
3118
3119         if (!hdev_is_powered(hdev))
3120                 return cmd_status(sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE,
3121                                   MGMT_STATUS_NOT_POWERED);
3122
3123         if (!test_bit(HCI_CONNECTABLE, &hdev->dev_flags))
3124                 return cmd_status(sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE,
3125                                   MGMT_STATUS_REJECTED);
3126
3127         hci_dev_lock(hdev);
3128
3129         if (mgmt_pending_find(MGMT_OP_SET_FAST_CONNECTABLE, hdev)) {
3130                 err = cmd_status(sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE,
3131                                  MGMT_STATUS_BUSY);
3132                 goto unlock;
3133         }
3134
3135         if (!!cp->val == test_bit(HCI_FAST_CONNECTABLE, &hdev->dev_flags)) {
3136                 err = send_settings_rsp(sk, MGMT_OP_SET_FAST_CONNECTABLE,
3137                                         hdev);
3138                 goto unlock;
3139         }
3140
3141         cmd = mgmt_pending_add(sk, MGMT_OP_SET_FAST_CONNECTABLE, hdev,
3142                                data, len);
3143         if (!cmd) {
3144                 err = -ENOMEM;
3145                 goto unlock;
3146         }
3147
3148         hci_req_init(&req, hdev);
3149
3150         write_fast_connectable(&req, cp->val);
3151
3152         err = hci_req_run(&req, fast_connectable_complete);
3153         if (err < 0) {
3154                 err = cmd_status(sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE,
3155                                  MGMT_STATUS_FAILED);
3156                 mgmt_pending_remove(cmd);
3157         }
3158
3159 unlock:
3160         hci_dev_unlock(hdev);
3161
3162         return err;
3163 }
3164
3165 static bool ltk_is_valid(struct mgmt_ltk_info *key)
3166 {
3167         if (key->authenticated != 0x00 && key->authenticated != 0x01)
3168                 return false;
3169         if (key->master != 0x00 && key->master != 0x01)
3170                 return false;
3171         if (!bdaddr_type_is_le(key->addr.type))
3172                 return false;
3173         return true;
3174 }
3175
3176 static int load_long_term_keys(struct sock *sk, struct hci_dev *hdev,
3177                                void *cp_data, u16 len)
3178 {
3179         struct mgmt_cp_load_long_term_keys *cp = cp_data;
3180         u16 key_count, expected_len;
3181         int i, err;
3182
3183         key_count = __le16_to_cpu(cp->key_count);
3184
3185         expected_len = sizeof(*cp) + key_count *
3186                                         sizeof(struct mgmt_ltk_info);
3187         if (expected_len != len) {
3188                 BT_ERR("load_keys: expected %u bytes, got %u bytes",
3189                        len, expected_len);
3190                 return cmd_status(sk, hdev->id, MGMT_OP_LOAD_LONG_TERM_KEYS,
3191                                   MGMT_STATUS_INVALID_PARAMS);
3192         }
3193
3194         BT_DBG("%s key_count %u", hdev->name, key_count);
3195
3196         for (i = 0; i < key_count; i++) {
3197                 struct mgmt_ltk_info *key = &cp->keys[i];
3198
3199                 if (!ltk_is_valid(key))
3200                         return cmd_status(sk, hdev->id,
3201                                           MGMT_OP_LOAD_LONG_TERM_KEYS,
3202                                           MGMT_STATUS_INVALID_PARAMS);
3203         }
3204
3205         hci_dev_lock(hdev);
3206
3207         hci_smp_ltks_clear(hdev);
3208
3209         for (i = 0; i < key_count; i++) {
3210                 struct mgmt_ltk_info *key = &cp->keys[i];
3211                 u8 type;
3212
3213                 if (key->master)
3214                         type = HCI_SMP_LTK;
3215                 else
3216                         type = HCI_SMP_LTK_SLAVE;
3217
3218                 hci_add_ltk(hdev, &key->addr.bdaddr,
3219                             bdaddr_to_le(key->addr.type),
3220                             type, 0, key->authenticated, key->val,
3221                             key->enc_size, key->ediv, key->rand);
3222         }
3223
3224         err = cmd_complete(sk, hdev->id, MGMT_OP_LOAD_LONG_TERM_KEYS, 0,
3225                            NULL, 0);
3226
3227         hci_dev_unlock(hdev);
3228
3229         return err;
3230 }
3231
3232 static const struct mgmt_handler {
3233         int (*func) (struct sock *sk, struct hci_dev *hdev, void *data,
3234                      u16 data_len);
3235         bool var_len;
3236         size_t data_len;
3237 } mgmt_handlers[] = {
3238         { NULL }, /* 0x0000 (no command) */
3239         { read_version,           false, MGMT_READ_VERSION_SIZE },
3240         { read_commands,          false, MGMT_READ_COMMANDS_SIZE },
3241         { read_index_list,        false, MGMT_READ_INDEX_LIST_SIZE },
3242         { read_controller_info,   false, MGMT_READ_INFO_SIZE },
3243         { set_powered,            false, MGMT_SETTING_SIZE },
3244         { set_discoverable,       false, MGMT_SET_DISCOVERABLE_SIZE },
3245         { set_connectable,        false, MGMT_SETTING_SIZE },
3246         { set_fast_connectable,   false, MGMT_SETTING_SIZE },
3247         { set_pairable,           false, MGMT_SETTING_SIZE },
3248         { set_link_security,      false, MGMT_SETTING_SIZE },
3249         { set_ssp,                false, MGMT_SETTING_SIZE },
3250         { set_hs,                 false, MGMT_SETTING_SIZE },
3251         { set_le,                 false, MGMT_SETTING_SIZE },
3252         { set_dev_class,          false, MGMT_SET_DEV_CLASS_SIZE },
3253         { set_local_name,         false, MGMT_SET_LOCAL_NAME_SIZE },
3254         { add_uuid,               false, MGMT_ADD_UUID_SIZE },
3255         { remove_uuid,            false, MGMT_REMOVE_UUID_SIZE },
3256         { load_link_keys,         true,  MGMT_LOAD_LINK_KEYS_SIZE },
3257         { load_long_term_keys,    true,  MGMT_LOAD_LONG_TERM_KEYS_SIZE },
3258         { disconnect,             false, MGMT_DISCONNECT_SIZE },
3259         { get_connections,        false, MGMT_GET_CONNECTIONS_SIZE },
3260         { pin_code_reply,         false, MGMT_PIN_CODE_REPLY_SIZE },
3261         { pin_code_neg_reply,     false, MGMT_PIN_CODE_NEG_REPLY_SIZE },
3262         { set_io_capability,      false, MGMT_SET_IO_CAPABILITY_SIZE },
3263         { pair_device,            false, MGMT_PAIR_DEVICE_SIZE },
3264         { cancel_pair_device,     false, MGMT_CANCEL_PAIR_DEVICE_SIZE },
3265         { unpair_device,          false, MGMT_UNPAIR_DEVICE_SIZE },
3266         { user_confirm_reply,     false, MGMT_USER_CONFIRM_REPLY_SIZE },
3267         { user_confirm_neg_reply, false, MGMT_USER_CONFIRM_NEG_REPLY_SIZE },
3268         { user_passkey_reply,     false, MGMT_USER_PASSKEY_REPLY_SIZE },
3269         { user_passkey_neg_reply, false, MGMT_USER_PASSKEY_NEG_REPLY_SIZE },
3270         { read_local_oob_data,    false, MGMT_READ_LOCAL_OOB_DATA_SIZE },
3271         { add_remote_oob_data,    false, MGMT_ADD_REMOTE_OOB_DATA_SIZE },
3272         { remove_remote_oob_data, false, MGMT_REMOVE_REMOTE_OOB_DATA_SIZE },
3273         { start_discovery,        false, MGMT_START_DISCOVERY_SIZE },
3274         { stop_discovery,         false, MGMT_STOP_DISCOVERY_SIZE },
3275         { confirm_name,           false, MGMT_CONFIRM_NAME_SIZE },
3276         { block_device,           false, MGMT_BLOCK_DEVICE_SIZE },
3277         { unblock_device,         false, MGMT_UNBLOCK_DEVICE_SIZE },
3278         { set_device_id,          false, MGMT_SET_DEVICE_ID_SIZE },
3279 };
3280
3281
3282 int mgmt_control(struct sock *sk, struct msghdr *msg, size_t msglen)
3283 {
3284         void *buf;
3285         u8 *cp;
3286         struct mgmt_hdr *hdr;
3287         u16 opcode, index, len;
3288         struct hci_dev *hdev = NULL;
3289         const struct mgmt_handler *handler;
3290         int err;
3291
3292         BT_DBG("got %zu bytes", msglen);
3293
3294         if (msglen < sizeof(*hdr))
3295                 return -EINVAL;
3296
3297         buf = kmalloc(msglen, GFP_KERNEL);
3298         if (!buf)
3299                 return -ENOMEM;
3300
3301         if (memcpy_fromiovec(buf, msg->msg_iov, msglen)) {
3302                 err = -EFAULT;
3303                 goto done;
3304         }
3305
3306         hdr = buf;
3307         opcode = __le16_to_cpu(hdr->opcode);
3308         index = __le16_to_cpu(hdr->index);
3309         len = __le16_to_cpu(hdr->len);
3310
3311         if (len != msglen - sizeof(*hdr)) {
3312                 err = -EINVAL;
3313                 goto done;
3314         }
3315
3316         if (index != MGMT_INDEX_NONE) {
3317                 hdev = hci_dev_get(index);
3318                 if (!hdev) {
3319                         err = cmd_status(sk, index, opcode,
3320                                          MGMT_STATUS_INVALID_INDEX);
3321                         goto done;
3322                 }
3323         }
3324
3325         if (opcode >= ARRAY_SIZE(mgmt_handlers) ||
3326             mgmt_handlers[opcode].func == NULL) {
3327                 BT_DBG("Unknown op %u", opcode);
3328                 err = cmd_status(sk, index, opcode,
3329                                  MGMT_STATUS_UNKNOWN_COMMAND);
3330                 goto done;
3331         }
3332
3333         if ((hdev && opcode < MGMT_OP_READ_INFO) ||
3334             (!hdev && opcode >= MGMT_OP_READ_INFO)) {
3335                 err = cmd_status(sk, index, opcode,
3336                                  MGMT_STATUS_INVALID_INDEX);
3337                 goto done;
3338         }
3339
3340         handler = &mgmt_handlers[opcode];
3341
3342         if ((handler->var_len && len < handler->data_len) ||
3343             (!handler->var_len && len != handler->data_len)) {
3344                 err = cmd_status(sk, index, opcode,
3345                                  MGMT_STATUS_INVALID_PARAMS);
3346                 goto done;
3347         }
3348
3349         if (hdev)
3350                 mgmt_init_hdev(sk, hdev);
3351
3352         cp = buf + sizeof(*hdr);
3353
3354         err = handler->func(sk, hdev, cp, len);
3355         if (err < 0)
3356                 goto done;
3357
3358         err = msglen;
3359
3360 done:
3361         if (hdev)
3362                 hci_dev_put(hdev);
3363
3364         kfree(buf);
3365         return err;
3366 }
3367
3368 static void cmd_status_rsp(struct pending_cmd *cmd, void *data)
3369 {
3370         u8 *status = data;
3371
3372         cmd_status(cmd->sk, cmd->index, cmd->opcode, *status);
3373         mgmt_pending_remove(cmd);
3374 }
3375
3376 int mgmt_index_added(struct hci_dev *hdev)
3377 {
3378         if (!mgmt_valid_hdev(hdev))
3379                 return -ENOTSUPP;
3380
3381         return mgmt_event(MGMT_EV_INDEX_ADDED, hdev, NULL, 0, NULL);
3382 }
3383
3384 int mgmt_index_removed(struct hci_dev *hdev)
3385 {
3386         u8 status = MGMT_STATUS_INVALID_INDEX;
3387
3388         if (!mgmt_valid_hdev(hdev))
3389                 return -ENOTSUPP;
3390
3391         mgmt_pending_foreach(0, hdev, cmd_status_rsp, &status);
3392
3393         return mgmt_event(MGMT_EV_INDEX_REMOVED, hdev, NULL, 0, NULL);
3394 }
3395
3396 struct cmd_lookup {
3397         struct sock *sk;
3398         struct hci_dev *hdev;
3399         u8 mgmt_status;
3400 };
3401
3402 static void settings_rsp(struct pending_cmd *cmd, void *data)
3403 {
3404         struct cmd_lookup *match = data;
3405
3406         send_settings_rsp(cmd->sk, cmd->opcode, match->hdev);
3407
3408         list_del(&cmd->list);
3409
3410         if (match->sk == NULL) {
3411                 match->sk = cmd->sk;
3412                 sock_hold(match->sk);
3413         }
3414
3415         mgmt_pending_free(cmd);
3416 }
3417
3418 static void set_bredr_scan(struct hci_request *req)
3419 {
3420         struct hci_dev *hdev = req->hdev;
3421         u8 scan = 0;
3422
3423         /* Ensure that fast connectable is disabled. This function will
3424          * not do anything if the page scan parameters are already what
3425          * they should be.
3426          */
3427         write_fast_connectable(req, false);
3428
3429         if (test_bit(HCI_CONNECTABLE, &hdev->dev_flags))
3430                 scan |= SCAN_PAGE;
3431         if (test_bit(HCI_DISCOVERABLE, &hdev->dev_flags))
3432                 scan |= SCAN_INQUIRY;
3433
3434         if (scan)
3435                 hci_req_add(req, HCI_OP_WRITE_SCAN_ENABLE, 1, &scan);
3436 }
3437
3438 static void powered_complete(struct hci_dev *hdev, u8 status)
3439 {
3440         struct cmd_lookup match = { NULL, hdev };
3441
3442         BT_DBG("status 0x%02x", status);
3443
3444         hci_dev_lock(hdev);
3445
3446         mgmt_pending_foreach(MGMT_OP_SET_POWERED, hdev, settings_rsp, &match);
3447
3448         new_settings(hdev, match.sk);
3449
3450         hci_dev_unlock(hdev);
3451
3452         if (match.sk)
3453                 sock_put(match.sk);
3454 }
3455
3456 static int powered_update_hci(struct hci_dev *hdev)
3457 {
3458         struct hci_request req;
3459         u8 link_sec;
3460
3461         hci_req_init(&req, hdev);
3462
3463         if (test_bit(HCI_SSP_ENABLED, &hdev->dev_flags) &&
3464             !lmp_host_ssp_capable(hdev)) {
3465                 u8 ssp = 1;
3466
3467                 hci_req_add(&req, HCI_OP_WRITE_SSP_MODE, 1, &ssp);
3468         }
3469
3470         if (test_bit(HCI_LE_ENABLED, &hdev->dev_flags) &&
3471             lmp_bredr_capable(hdev)) {
3472                 struct hci_cp_write_le_host_supported cp;
3473
3474                 cp.le = 1;
3475                 cp.simul = lmp_le_br_capable(hdev);
3476
3477                 /* Check first if we already have the right
3478                  * host state (host features set)
3479                  */
3480                 if (cp.le != lmp_host_le_capable(hdev) ||
3481                     cp.simul != lmp_host_le_br_capable(hdev))
3482                         hci_req_add(&req, HCI_OP_WRITE_LE_HOST_SUPPORTED,
3483                                     sizeof(cp), &cp);
3484         }
3485
3486         link_sec = test_bit(HCI_LINK_SECURITY, &hdev->dev_flags);
3487         if (link_sec != test_bit(HCI_AUTH, &hdev->flags))
3488                 hci_req_add(&req, HCI_OP_WRITE_AUTH_ENABLE,
3489                             sizeof(link_sec), &link_sec);
3490
3491         if (lmp_bredr_capable(hdev)) {
3492                 set_bredr_scan(&req);
3493                 update_class(&req);
3494                 update_name(&req);
3495                 update_eir(&req);
3496         }
3497
3498         return hci_req_run(&req, powered_complete);
3499 }
3500
3501 int mgmt_powered(struct hci_dev *hdev, u8 powered)
3502 {
3503         struct cmd_lookup match = { NULL, hdev };
3504         u8 status_not_powered = MGMT_STATUS_NOT_POWERED;
3505         u8 zero_cod[] = { 0, 0, 0 };
3506         int err;
3507
3508         if (!test_bit(HCI_MGMT, &hdev->dev_flags))
3509                 return 0;
3510
3511         if (powered) {
3512                 if (powered_update_hci(hdev) == 0)
3513                         return 0;
3514
3515                 mgmt_pending_foreach(MGMT_OP_SET_POWERED, hdev, settings_rsp,
3516                                      &match);
3517                 goto new_settings;
3518         }
3519
3520         mgmt_pending_foreach(MGMT_OP_SET_POWERED, hdev, settings_rsp, &match);
3521         mgmt_pending_foreach(0, hdev, cmd_status_rsp, &status_not_powered);
3522
3523         if (memcmp(hdev->dev_class, zero_cod, sizeof(zero_cod)) != 0)
3524                 mgmt_event(MGMT_EV_CLASS_OF_DEV_CHANGED, hdev,
3525                            zero_cod, sizeof(zero_cod), NULL);
3526
3527 new_settings:
3528         err = new_settings(hdev, match.sk);
3529
3530         if (match.sk)
3531                 sock_put(match.sk);
3532
3533         return err;
3534 }
3535
3536 int mgmt_set_powered_failed(struct hci_dev *hdev, int err)
3537 {
3538         struct pending_cmd *cmd;
3539         u8 status;
3540
3541         cmd = mgmt_pending_find(MGMT_OP_SET_POWERED, hdev);
3542         if (!cmd)
3543                 return -ENOENT;
3544
3545         if (err == -ERFKILL)
3546                 status = MGMT_STATUS_RFKILLED;
3547         else
3548                 status = MGMT_STATUS_FAILED;
3549
3550         err = cmd_status(cmd->sk, hdev->id, MGMT_OP_SET_POWERED, status);
3551
3552         mgmt_pending_remove(cmd);
3553
3554         return err;
3555 }
3556
3557 int mgmt_discoverable(struct hci_dev *hdev, u8 discoverable)
3558 {
3559         struct cmd_lookup match = { NULL, hdev };
3560         bool changed = false;
3561         int err = 0;
3562
3563         if (discoverable) {
3564                 if (!test_and_set_bit(HCI_DISCOVERABLE, &hdev->dev_flags))
3565                         changed = true;
3566         } else {
3567                 if (test_and_clear_bit(HCI_DISCOVERABLE, &hdev->dev_flags))
3568                         changed = true;
3569         }
3570
3571         mgmt_pending_foreach(MGMT_OP_SET_DISCOVERABLE, hdev, settings_rsp,
3572                              &match);
3573
3574         if (changed)
3575                 err = new_settings(hdev, match.sk);
3576
3577         if (match.sk)
3578                 sock_put(match.sk);
3579
3580         return err;
3581 }
3582
3583 int mgmt_connectable(struct hci_dev *hdev, u8 connectable)
3584 {
3585         struct pending_cmd *cmd;
3586         bool changed = false;
3587         int err = 0;
3588
3589         if (connectable) {
3590                 if (!test_and_set_bit(HCI_CONNECTABLE, &hdev->dev_flags))
3591                         changed = true;
3592         } else {
3593                 if (test_and_clear_bit(HCI_CONNECTABLE, &hdev->dev_flags))
3594                         changed = true;
3595         }
3596
3597         cmd = mgmt_pending_find(MGMT_OP_SET_CONNECTABLE, hdev);
3598
3599         if (changed)
3600                 err = new_settings(hdev, cmd ? cmd->sk : NULL);
3601
3602         return err;
3603 }
3604
3605 int mgmt_write_scan_failed(struct hci_dev *hdev, u8 scan, u8 status)
3606 {
3607         u8 mgmt_err = mgmt_status(status);
3608
3609         if (scan & SCAN_PAGE)
3610                 mgmt_pending_foreach(MGMT_OP_SET_CONNECTABLE, hdev,
3611                                      cmd_status_rsp, &mgmt_err);
3612
3613         if (scan & SCAN_INQUIRY)
3614                 mgmt_pending_foreach(MGMT_OP_SET_DISCOVERABLE, hdev,
3615                                      cmd_status_rsp, &mgmt_err);
3616
3617         return 0;
3618 }
3619
3620 int mgmt_new_link_key(struct hci_dev *hdev, struct link_key *key,
3621                       bool persistent)
3622 {
3623         struct mgmt_ev_new_link_key ev;
3624
3625         memset(&ev, 0, sizeof(ev));
3626
3627         ev.store_hint = persistent;
3628         bacpy(&ev.key.addr.bdaddr, &key->bdaddr);
3629         ev.key.addr.type = BDADDR_BREDR;
3630         ev.key.type = key->type;
3631         memcpy(ev.key.val, key->val, HCI_LINK_KEY_SIZE);
3632         ev.key.pin_len = key->pin_len;
3633
3634         return mgmt_event(MGMT_EV_NEW_LINK_KEY, hdev, &ev, sizeof(ev), NULL);
3635 }
3636
3637 int mgmt_new_ltk(struct hci_dev *hdev, struct smp_ltk *key, u8 persistent)
3638 {
3639         struct mgmt_ev_new_long_term_key ev;
3640
3641         memset(&ev, 0, sizeof(ev));
3642
3643         ev.store_hint = persistent;
3644         bacpy(&ev.key.addr.bdaddr, &key->bdaddr);
3645         ev.key.addr.type = link_to_bdaddr(LE_LINK, key->bdaddr_type);
3646         ev.key.authenticated = key->authenticated;
3647         ev.key.enc_size = key->enc_size;
3648         ev.key.ediv = key->ediv;
3649
3650         if (key->type == HCI_SMP_LTK)
3651                 ev.key.master = 1;
3652
3653         memcpy(ev.key.rand, key->rand, sizeof(key->rand));
3654         memcpy(ev.key.val, key->val, sizeof(key->val));
3655
3656         return mgmt_event(MGMT_EV_NEW_LONG_TERM_KEY, hdev, &ev, sizeof(ev),
3657                           NULL);
3658 }
3659
3660 int mgmt_device_connected(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
3661                           u8 addr_type, u32 flags, u8 *name, u8 name_len,
3662                           u8 *dev_class)
3663 {
3664         char buf[512];
3665         struct mgmt_ev_device_connected *ev = (void *) buf;
3666         u16 eir_len = 0;
3667
3668         bacpy(&ev->addr.bdaddr, bdaddr);
3669         ev->addr.type = link_to_bdaddr(link_type, addr_type);
3670
3671         ev->flags = __cpu_to_le32(flags);
3672
3673         if (name_len > 0)
3674                 eir_len = eir_append_data(ev->eir, 0, EIR_NAME_COMPLETE,
3675                                           name, name_len);
3676
3677         if (dev_class && memcmp(dev_class, "\0\0\0", 3) != 0)
3678                 eir_len = eir_append_data(ev->eir, eir_len,
3679                                           EIR_CLASS_OF_DEV, dev_class, 3);
3680
3681         ev->eir_len = cpu_to_le16(eir_len);
3682
3683         return mgmt_event(MGMT_EV_DEVICE_CONNECTED, hdev, buf,
3684                           sizeof(*ev) + eir_len, NULL);
3685 }
3686
3687 static void disconnect_rsp(struct pending_cmd *cmd, void *data)
3688 {
3689         struct mgmt_cp_disconnect *cp = cmd->param;
3690         struct sock **sk = data;
3691         struct mgmt_rp_disconnect rp;
3692
3693         bacpy(&rp.addr.bdaddr, &cp->addr.bdaddr);
3694         rp.addr.type = cp->addr.type;
3695
3696         cmd_complete(cmd->sk, cmd->index, MGMT_OP_DISCONNECT, 0, &rp,
3697                      sizeof(rp));
3698
3699         *sk = cmd->sk;
3700         sock_hold(*sk);
3701
3702         mgmt_pending_remove(cmd);
3703 }
3704
3705 static void unpair_device_rsp(struct pending_cmd *cmd, void *data)
3706 {
3707         struct hci_dev *hdev = data;
3708         struct mgmt_cp_unpair_device *cp = cmd->param;
3709         struct mgmt_rp_unpair_device rp;
3710
3711         memset(&rp, 0, sizeof(rp));
3712         bacpy(&rp.addr.bdaddr, &cp->addr.bdaddr);
3713         rp.addr.type = cp->addr.type;
3714
3715         device_unpaired(hdev, &cp->addr.bdaddr, cp->addr.type, cmd->sk);
3716
3717         cmd_complete(cmd->sk, cmd->index, cmd->opcode, 0, &rp, sizeof(rp));
3718
3719         mgmt_pending_remove(cmd);
3720 }
3721
3722 int mgmt_device_disconnected(struct hci_dev *hdev, bdaddr_t *bdaddr,
3723                              u8 link_type, u8 addr_type, u8 reason)
3724 {
3725         struct mgmt_ev_device_disconnected ev;
3726         struct sock *sk = NULL;
3727         int err;
3728
3729         mgmt_pending_foreach(MGMT_OP_DISCONNECT, hdev, disconnect_rsp, &sk);
3730
3731         bacpy(&ev.addr.bdaddr, bdaddr);
3732         ev.addr.type = link_to_bdaddr(link_type, addr_type);
3733         ev.reason = reason;
3734
3735         err = mgmt_event(MGMT_EV_DEVICE_DISCONNECTED, hdev, &ev, sizeof(ev),
3736                          sk);
3737
3738         if (sk)
3739                 sock_put(sk);
3740
3741         mgmt_pending_foreach(MGMT_OP_UNPAIR_DEVICE, hdev, unpair_device_rsp,
3742                              hdev);
3743
3744         return err;
3745 }
3746
3747 int mgmt_disconnect_failed(struct hci_dev *hdev, bdaddr_t *bdaddr,
3748                            u8 link_type, u8 addr_type, u8 status)
3749 {
3750         struct mgmt_rp_disconnect rp;
3751         struct pending_cmd *cmd;
3752         int err;
3753
3754         mgmt_pending_foreach(MGMT_OP_UNPAIR_DEVICE, hdev, unpair_device_rsp,
3755                              hdev);
3756
3757         cmd = mgmt_pending_find(MGMT_OP_DISCONNECT, hdev);
3758         if (!cmd)
3759                 return -ENOENT;
3760
3761         bacpy(&rp.addr.bdaddr, bdaddr);
3762         rp.addr.type = link_to_bdaddr(link_type, addr_type);
3763
3764         err = cmd_complete(cmd->sk, cmd->index, MGMT_OP_DISCONNECT,
3765                            mgmt_status(status), &rp, sizeof(rp));
3766
3767         mgmt_pending_remove(cmd);
3768
3769         return err;
3770 }
3771
3772 int mgmt_connect_failed(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
3773                         u8 addr_type, u8 status)
3774 {
3775         struct mgmt_ev_connect_failed ev;
3776
3777         bacpy(&ev.addr.bdaddr, bdaddr);
3778         ev.addr.type = link_to_bdaddr(link_type, addr_type);
3779         ev.status = mgmt_status(status);
3780
3781         return mgmt_event(MGMT_EV_CONNECT_FAILED, hdev, &ev, sizeof(ev), NULL);
3782 }
3783
3784 int mgmt_pin_code_request(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 secure)
3785 {
3786         struct mgmt_ev_pin_code_request ev;
3787
3788         bacpy(&ev.addr.bdaddr, bdaddr);
3789         ev.addr.type = BDADDR_BREDR;
3790         ev.secure = secure;
3791
3792         return mgmt_event(MGMT_EV_PIN_CODE_REQUEST, hdev, &ev, sizeof(ev),
3793                           NULL);
3794 }
3795
3796 int mgmt_pin_code_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
3797                                  u8 status)
3798 {
3799         struct pending_cmd *cmd;
3800         struct mgmt_rp_pin_code_reply rp;
3801         int err;
3802
3803         cmd = mgmt_pending_find(MGMT_OP_PIN_CODE_REPLY, hdev);
3804         if (!cmd)
3805                 return -ENOENT;
3806
3807         bacpy(&rp.addr.bdaddr, bdaddr);
3808         rp.addr.type = BDADDR_BREDR;
3809
3810         err = cmd_complete(cmd->sk, hdev->id, MGMT_OP_PIN_CODE_REPLY,
3811                            mgmt_status(status), &rp, sizeof(rp));
3812
3813         mgmt_pending_remove(cmd);
3814
3815         return err;
3816 }
3817
3818 int mgmt_pin_code_neg_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
3819                                      u8 status)
3820 {
3821         struct pending_cmd *cmd;
3822         struct mgmt_rp_pin_code_reply rp;
3823         int err;
3824
3825         cmd = mgmt_pending_find(MGMT_OP_PIN_CODE_NEG_REPLY, hdev);
3826         if (!cmd)
3827                 return -ENOENT;
3828
3829         bacpy(&rp.addr.bdaddr, bdaddr);
3830         rp.addr.type = BDADDR_BREDR;
3831
3832         err = cmd_complete(cmd->sk, hdev->id, MGMT_OP_PIN_CODE_NEG_REPLY,
3833                            mgmt_status(status), &rp, sizeof(rp));
3834
3835         mgmt_pending_remove(cmd);
3836
3837         return err;
3838 }
3839
3840 int mgmt_user_confirm_request(struct hci_dev *hdev, bdaddr_t *bdaddr,
3841                               u8 link_type, u8 addr_type, __le32 value,
3842                               u8 confirm_hint)
3843 {
3844         struct mgmt_ev_user_confirm_request ev;
3845
3846         BT_DBG("%s", hdev->name);
3847
3848         bacpy(&ev.addr.bdaddr, bdaddr);
3849         ev.addr.type = link_to_bdaddr(link_type, addr_type);
3850         ev.confirm_hint = confirm_hint;
3851         ev.value = value;
3852
3853         return mgmt_event(MGMT_EV_USER_CONFIRM_REQUEST, hdev, &ev, sizeof(ev),
3854                           NULL);
3855 }
3856
3857 int mgmt_user_passkey_request(struct hci_dev *hdev, bdaddr_t *bdaddr,
3858                               u8 link_type, u8 addr_type)
3859 {
3860         struct mgmt_ev_user_passkey_request ev;
3861
3862         BT_DBG("%s", hdev->name);
3863
3864         bacpy(&ev.addr.bdaddr, bdaddr);
3865         ev.addr.type = link_to_bdaddr(link_type, addr_type);
3866
3867         return mgmt_event(MGMT_EV_USER_PASSKEY_REQUEST, hdev, &ev, sizeof(ev),
3868                           NULL);
3869 }
3870
3871 static int user_pairing_resp_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
3872                                       u8 link_type, u8 addr_type, u8 status,
3873                                       u8 opcode)
3874 {
3875         struct pending_cmd *cmd;
3876         struct mgmt_rp_user_confirm_reply rp;
3877         int err;
3878
3879         cmd = mgmt_pending_find(opcode, hdev);
3880         if (!cmd)
3881                 return -ENOENT;
3882
3883         bacpy(&rp.addr.bdaddr, bdaddr);
3884         rp.addr.type = link_to_bdaddr(link_type, addr_type);
3885         err = cmd_complete(cmd->sk, hdev->id, opcode, mgmt_status(status),
3886                            &rp, sizeof(rp));
3887
3888         mgmt_pending_remove(cmd);
3889
3890         return err;
3891 }
3892
3893 int mgmt_user_confirm_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
3894                                      u8 link_type, u8 addr_type, u8 status)
3895 {
3896         return user_pairing_resp_complete(hdev, bdaddr, link_type, addr_type,
3897                                           status, MGMT_OP_USER_CONFIRM_REPLY);
3898 }
3899
3900 int mgmt_user_confirm_neg_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
3901                                          u8 link_type, u8 addr_type, u8 status)
3902 {
3903         return user_pairing_resp_complete(hdev, bdaddr, link_type, addr_type,
3904                                           status,
3905                                           MGMT_OP_USER_CONFIRM_NEG_REPLY);
3906 }
3907
3908 int mgmt_user_passkey_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
3909                                      u8 link_type, u8 addr_type, u8 status)
3910 {
3911         return user_pairing_resp_complete(hdev, bdaddr, link_type, addr_type,
3912                                           status, MGMT_OP_USER_PASSKEY_REPLY);
3913 }
3914
3915 int mgmt_user_passkey_neg_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
3916                                          u8 link_type, u8 addr_type, u8 status)
3917 {
3918         return user_pairing_resp_complete(hdev, bdaddr, link_type, addr_type,
3919                                           status,
3920                                           MGMT_OP_USER_PASSKEY_NEG_REPLY);
3921 }
3922
3923 int mgmt_user_passkey_notify(struct hci_dev *hdev, bdaddr_t *bdaddr,
3924                              u8 link_type, u8 addr_type, u32 passkey,
3925                              u8 entered)
3926 {
3927         struct mgmt_ev_passkey_notify ev;
3928
3929         BT_DBG("%s", hdev->name);
3930
3931         bacpy(&ev.addr.bdaddr, bdaddr);
3932         ev.addr.type = link_to_bdaddr(link_type, addr_type);
3933         ev.passkey = __cpu_to_le32(passkey);
3934         ev.entered = entered;
3935
3936         return mgmt_event(MGMT_EV_PASSKEY_NOTIFY, hdev, &ev, sizeof(ev), NULL);
3937 }
3938
3939 int mgmt_auth_failed(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
3940                      u8 addr_type, u8 status)
3941 {
3942         struct mgmt_ev_auth_failed ev;
3943
3944         bacpy(&ev.addr.bdaddr, bdaddr);
3945         ev.addr.type = link_to_bdaddr(link_type, addr_type);
3946         ev.status = mgmt_status(status);
3947
3948         return mgmt_event(MGMT_EV_AUTH_FAILED, hdev, &ev, sizeof(ev), NULL);
3949 }
3950
3951 int mgmt_auth_enable_complete(struct hci_dev *hdev, u8 status)
3952 {
3953         struct cmd_lookup match = { NULL, hdev };
3954         bool changed = false;
3955         int err = 0;
3956
3957         if (status) {
3958                 u8 mgmt_err = mgmt_status(status);
3959                 mgmt_pending_foreach(MGMT_OP_SET_LINK_SECURITY, hdev,
3960                                      cmd_status_rsp, &mgmt_err);
3961                 return 0;
3962         }
3963
3964         if (test_bit(HCI_AUTH, &hdev->flags)) {
3965                 if (!test_and_set_bit(HCI_LINK_SECURITY, &hdev->dev_flags))
3966                         changed = true;
3967         } else {
3968                 if (test_and_clear_bit(HCI_LINK_SECURITY, &hdev->dev_flags))
3969                         changed = true;
3970         }
3971
3972         mgmt_pending_foreach(MGMT_OP_SET_LINK_SECURITY, hdev, settings_rsp,
3973                              &match);
3974
3975         if (changed)
3976                 err = new_settings(hdev, match.sk);
3977
3978         if (match.sk)
3979                 sock_put(match.sk);
3980
3981         return err;
3982 }
3983
3984 static void clear_eir(struct hci_request *req)
3985 {
3986         struct hci_dev *hdev = req->hdev;
3987         struct hci_cp_write_eir cp;
3988
3989         if (!lmp_ext_inq_capable(hdev))
3990                 return;
3991
3992         memset(hdev->eir, 0, sizeof(hdev->eir));
3993
3994         memset(&cp, 0, sizeof(cp));
3995
3996         hci_req_add(req, HCI_OP_WRITE_EIR, sizeof(cp), &cp);
3997 }
3998
3999 int mgmt_ssp_enable_complete(struct hci_dev *hdev, u8 enable, u8 status)
4000 {
4001         struct cmd_lookup match = { NULL, hdev };
4002         struct hci_request req;
4003         bool changed = false;
4004         int err = 0;
4005
4006         if (status) {
4007                 u8 mgmt_err = mgmt_status(status);
4008
4009                 if (enable && test_and_clear_bit(HCI_SSP_ENABLED,
4010                                                  &hdev->dev_flags))
4011                         err = new_settings(hdev, NULL);
4012
4013                 mgmt_pending_foreach(MGMT_OP_SET_SSP, hdev, cmd_status_rsp,
4014                                      &mgmt_err);
4015
4016                 return err;
4017         }
4018
4019         if (enable) {
4020                 if (!test_and_set_bit(HCI_SSP_ENABLED, &hdev->dev_flags))
4021                         changed = true;
4022         } else {
4023                 if (test_and_clear_bit(HCI_SSP_ENABLED, &hdev->dev_flags))
4024                         changed = true;
4025         }
4026
4027         mgmt_pending_foreach(MGMT_OP_SET_SSP, hdev, settings_rsp, &match);
4028
4029         if (changed)
4030                 err = new_settings(hdev, match.sk);
4031
4032         if (match.sk)
4033                 sock_put(match.sk);
4034
4035         hci_req_init(&req, hdev);
4036
4037         if (test_bit(HCI_SSP_ENABLED, &hdev->dev_flags))
4038                 update_eir(&req);
4039         else
4040                 clear_eir(&req);
4041
4042         hci_req_run(&req, NULL);
4043
4044         return err;
4045 }
4046
4047 static void sk_lookup(struct pending_cmd *cmd, void *data)
4048 {
4049         struct cmd_lookup *match = data;
4050
4051         if (match->sk == NULL) {
4052                 match->sk = cmd->sk;
4053                 sock_hold(match->sk);
4054         }
4055 }
4056
4057 int mgmt_set_class_of_dev_complete(struct hci_dev *hdev, u8 *dev_class,
4058                                    u8 status)
4059 {
4060         struct cmd_lookup match = { NULL, hdev, mgmt_status(status) };
4061         int err = 0;
4062
4063         mgmt_pending_foreach(MGMT_OP_SET_DEV_CLASS, hdev, sk_lookup, &match);
4064         mgmt_pending_foreach(MGMT_OP_ADD_UUID, hdev, sk_lookup, &match);
4065         mgmt_pending_foreach(MGMT_OP_REMOVE_UUID, hdev, sk_lookup, &match);
4066
4067         if (!status)
4068                 err = mgmt_event(MGMT_EV_CLASS_OF_DEV_CHANGED, hdev, dev_class,
4069                                  3, NULL);
4070
4071         if (match.sk)
4072                 sock_put(match.sk);
4073
4074         return err;
4075 }
4076
4077 int mgmt_set_local_name_complete(struct hci_dev *hdev, u8 *name, u8 status)
4078 {
4079         struct mgmt_cp_set_local_name ev;
4080         struct pending_cmd *cmd;
4081
4082         if (status)
4083                 return 0;
4084
4085         memset(&ev, 0, sizeof(ev));
4086         memcpy(ev.name, name, HCI_MAX_NAME_LENGTH);
4087         memcpy(ev.short_name, hdev->short_name, HCI_MAX_SHORT_NAME_LENGTH);
4088
4089         cmd = mgmt_pending_find(MGMT_OP_SET_LOCAL_NAME, hdev);
4090         if (!cmd) {
4091                 memcpy(hdev->dev_name, name, sizeof(hdev->dev_name));
4092
4093                 /* If this is a HCI command related to powering on the
4094                  * HCI dev don't send any mgmt signals.
4095                  */
4096                 if (mgmt_pending_find(MGMT_OP_SET_POWERED, hdev))
4097                         return 0;
4098         }
4099
4100         return mgmt_event(MGMT_EV_LOCAL_NAME_CHANGED, hdev, &ev, sizeof(ev),
4101                           cmd ? cmd->sk : NULL);
4102 }
4103
4104 int mgmt_read_local_oob_data_reply_complete(struct hci_dev *hdev, u8 *hash,
4105                                             u8 *randomizer, u8 status)
4106 {
4107         struct pending_cmd *cmd;
4108         int err;
4109
4110         BT_DBG("%s status %u", hdev->name, status);
4111
4112         cmd = mgmt_pending_find(MGMT_OP_READ_LOCAL_OOB_DATA, hdev);
4113         if (!cmd)
4114                 return -ENOENT;
4115
4116         if (status) {
4117                 err = cmd_status(cmd->sk, hdev->id, MGMT_OP_READ_LOCAL_OOB_DATA,
4118                                  mgmt_status(status));
4119         } else {
4120                 struct mgmt_rp_read_local_oob_data rp;
4121
4122                 memcpy(rp.hash, hash, sizeof(rp.hash));
4123                 memcpy(rp.randomizer, randomizer, sizeof(rp.randomizer));
4124
4125                 err = cmd_complete(cmd->sk, hdev->id,
4126                                    MGMT_OP_READ_LOCAL_OOB_DATA, 0, &rp,
4127                                    sizeof(rp));
4128         }
4129
4130         mgmt_pending_remove(cmd);
4131
4132         return err;
4133 }
4134
4135 int mgmt_le_enable_complete(struct hci_dev *hdev, u8 enable, u8 status)
4136 {
4137         struct cmd_lookup match = { NULL, hdev };
4138         bool changed = false;
4139         int err = 0;
4140
4141         if (status) {
4142                 u8 mgmt_err = mgmt_status(status);
4143
4144                 if (enable && test_and_clear_bit(HCI_LE_ENABLED,
4145                                                  &hdev->dev_flags))
4146                         err = new_settings(hdev, NULL);
4147
4148                 mgmt_pending_foreach(MGMT_OP_SET_LE, hdev, cmd_status_rsp,
4149                                      &mgmt_err);
4150
4151                 return err;
4152         }
4153
4154         if (enable) {
4155                 if (!test_and_set_bit(HCI_LE_ENABLED, &hdev->dev_flags))
4156                         changed = true;
4157         } else {
4158                 if (test_and_clear_bit(HCI_LE_ENABLED, &hdev->dev_flags))
4159                         changed = true;
4160         }
4161
4162         mgmt_pending_foreach(MGMT_OP_SET_LE, hdev, settings_rsp, &match);
4163
4164         if (changed)
4165                 err = new_settings(hdev, match.sk);
4166
4167         if (match.sk)
4168                 sock_put(match.sk);
4169
4170         return err;
4171 }
4172
4173 int mgmt_device_found(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
4174                       u8 addr_type, u8 *dev_class, s8 rssi, u8 cfm_name, u8
4175                       ssp, u8 *eir, u16 eir_len)
4176 {
4177         char buf[512];
4178         struct mgmt_ev_device_found *ev = (void *) buf;
4179         size_t ev_size;
4180
4181         if (!hci_discovery_active(hdev))
4182                 return -EPERM;
4183
4184         /* Leave 5 bytes for a potential CoD field */
4185         if (sizeof(*ev) + eir_len + 5 > sizeof(buf))
4186                 return -EINVAL;
4187
4188         memset(buf, 0, sizeof(buf));
4189
4190         bacpy(&ev->addr.bdaddr, bdaddr);
4191         ev->addr.type = link_to_bdaddr(link_type, addr_type);
4192         ev->rssi = rssi;
4193         if (cfm_name)
4194                 ev->flags |= __constant_cpu_to_le32(MGMT_DEV_FOUND_CONFIRM_NAME);
4195         if (!ssp)
4196                 ev->flags |= __constant_cpu_to_le32(MGMT_DEV_FOUND_LEGACY_PAIRING);
4197
4198         if (eir_len > 0)
4199                 memcpy(ev->eir, eir, eir_len);
4200
4201         if (dev_class && !eir_has_data_type(ev->eir, eir_len, EIR_CLASS_OF_DEV))
4202                 eir_len = eir_append_data(ev->eir, eir_len, EIR_CLASS_OF_DEV,
4203                                           dev_class, 3);
4204
4205         ev->eir_len = cpu_to_le16(eir_len);
4206         ev_size = sizeof(*ev) + eir_len;
4207
4208         return mgmt_event(MGMT_EV_DEVICE_FOUND, hdev, ev, ev_size, NULL);
4209 }
4210
4211 int mgmt_remote_name(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
4212                      u8 addr_type, s8 rssi, u8 *name, u8 name_len)
4213 {
4214         struct mgmt_ev_device_found *ev;
4215         char buf[sizeof(*ev) + HCI_MAX_NAME_LENGTH + 2];
4216         u16 eir_len;
4217
4218         ev = (struct mgmt_ev_device_found *) buf;
4219
4220         memset(buf, 0, sizeof(buf));
4221
4222         bacpy(&ev->addr.bdaddr, bdaddr);
4223         ev->addr.type = link_to_bdaddr(link_type, addr_type);
4224         ev->rssi = rssi;
4225
4226         eir_len = eir_append_data(ev->eir, 0, EIR_NAME_COMPLETE, name,
4227                                   name_len);
4228
4229         ev->eir_len = cpu_to_le16(eir_len);
4230
4231         return mgmt_event(MGMT_EV_DEVICE_FOUND, hdev, ev,
4232                           sizeof(*ev) + eir_len, NULL);
4233 }
4234
4235 int mgmt_discovering(struct hci_dev *hdev, u8 discovering)
4236 {
4237         struct mgmt_ev_discovering ev;
4238         struct pending_cmd *cmd;
4239
4240         BT_DBG("%s discovering %u", hdev->name, discovering);
4241
4242         if (discovering)
4243                 cmd = mgmt_pending_find(MGMT_OP_START_DISCOVERY, hdev);
4244         else
4245                 cmd = mgmt_pending_find(MGMT_OP_STOP_DISCOVERY, hdev);
4246
4247         if (cmd != NULL) {
4248                 u8 type = hdev->discovery.type;
4249
4250                 cmd_complete(cmd->sk, hdev->id, cmd->opcode, 0, &type,
4251                              sizeof(type));
4252                 mgmt_pending_remove(cmd);
4253         }
4254
4255         memset(&ev, 0, sizeof(ev));
4256         ev.type = hdev->discovery.type;
4257         ev.discovering = discovering;
4258
4259         return mgmt_event(MGMT_EV_DISCOVERING, hdev, &ev, sizeof(ev), NULL);
4260 }
4261
4262 int mgmt_device_blocked(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 type)
4263 {
4264         struct pending_cmd *cmd;
4265         struct mgmt_ev_device_blocked ev;
4266
4267         cmd = mgmt_pending_find(MGMT_OP_BLOCK_DEVICE, hdev);
4268
4269         bacpy(&ev.addr.bdaddr, bdaddr);
4270         ev.addr.type = type;
4271
4272         return mgmt_event(MGMT_EV_DEVICE_BLOCKED, hdev, &ev, sizeof(ev),
4273                           cmd ? cmd->sk : NULL);
4274 }
4275
4276 int mgmt_device_unblocked(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 type)
4277 {
4278         struct pending_cmd *cmd;
4279         struct mgmt_ev_device_unblocked ev;
4280
4281         cmd = mgmt_pending_find(MGMT_OP_UNBLOCK_DEVICE, hdev);
4282
4283         bacpy(&ev.addr.bdaddr, bdaddr);
4284         ev.addr.type = type;
4285
4286         return mgmt_event(MGMT_EV_DEVICE_UNBLOCKED, hdev, &ev, sizeof(ev),
4287                           cmd ? cmd->sk : NULL);
4288 }
4289
4290 module_param(enable_hs, bool, 0644);
4291 MODULE_PARM_DESC(enable_hs, "Enable High Speed support");