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