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