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