xref: /openbmc/linux/net/bluetooth/mgmt.c (revision d2ba09c1)
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/hci_sock.h>
33 #include <net/bluetooth/l2cap.h>
34 #include <net/bluetooth/mgmt.h>
35 
36 #include "hci_request.h"
37 #include "smp.h"
38 #include "mgmt_util.h"
39 
40 #define MGMT_VERSION	1
41 #define MGMT_REVISION	14
42 
43 static const u16 mgmt_commands[] = {
44 	MGMT_OP_READ_INDEX_LIST,
45 	MGMT_OP_READ_INFO,
46 	MGMT_OP_SET_POWERED,
47 	MGMT_OP_SET_DISCOVERABLE,
48 	MGMT_OP_SET_CONNECTABLE,
49 	MGMT_OP_SET_FAST_CONNECTABLE,
50 	MGMT_OP_SET_BONDABLE,
51 	MGMT_OP_SET_LINK_SECURITY,
52 	MGMT_OP_SET_SSP,
53 	MGMT_OP_SET_HS,
54 	MGMT_OP_SET_LE,
55 	MGMT_OP_SET_DEV_CLASS,
56 	MGMT_OP_SET_LOCAL_NAME,
57 	MGMT_OP_ADD_UUID,
58 	MGMT_OP_REMOVE_UUID,
59 	MGMT_OP_LOAD_LINK_KEYS,
60 	MGMT_OP_LOAD_LONG_TERM_KEYS,
61 	MGMT_OP_DISCONNECT,
62 	MGMT_OP_GET_CONNECTIONS,
63 	MGMT_OP_PIN_CODE_REPLY,
64 	MGMT_OP_PIN_CODE_NEG_REPLY,
65 	MGMT_OP_SET_IO_CAPABILITY,
66 	MGMT_OP_PAIR_DEVICE,
67 	MGMT_OP_CANCEL_PAIR_DEVICE,
68 	MGMT_OP_UNPAIR_DEVICE,
69 	MGMT_OP_USER_CONFIRM_REPLY,
70 	MGMT_OP_USER_CONFIRM_NEG_REPLY,
71 	MGMT_OP_USER_PASSKEY_REPLY,
72 	MGMT_OP_USER_PASSKEY_NEG_REPLY,
73 	MGMT_OP_READ_LOCAL_OOB_DATA,
74 	MGMT_OP_ADD_REMOTE_OOB_DATA,
75 	MGMT_OP_REMOVE_REMOTE_OOB_DATA,
76 	MGMT_OP_START_DISCOVERY,
77 	MGMT_OP_STOP_DISCOVERY,
78 	MGMT_OP_CONFIRM_NAME,
79 	MGMT_OP_BLOCK_DEVICE,
80 	MGMT_OP_UNBLOCK_DEVICE,
81 	MGMT_OP_SET_DEVICE_ID,
82 	MGMT_OP_SET_ADVERTISING,
83 	MGMT_OP_SET_BREDR,
84 	MGMT_OP_SET_STATIC_ADDRESS,
85 	MGMT_OP_SET_SCAN_PARAMS,
86 	MGMT_OP_SET_SECURE_CONN,
87 	MGMT_OP_SET_DEBUG_KEYS,
88 	MGMT_OP_SET_PRIVACY,
89 	MGMT_OP_LOAD_IRKS,
90 	MGMT_OP_GET_CONN_INFO,
91 	MGMT_OP_GET_CLOCK_INFO,
92 	MGMT_OP_ADD_DEVICE,
93 	MGMT_OP_REMOVE_DEVICE,
94 	MGMT_OP_LOAD_CONN_PARAM,
95 	MGMT_OP_READ_UNCONF_INDEX_LIST,
96 	MGMT_OP_READ_CONFIG_INFO,
97 	MGMT_OP_SET_EXTERNAL_CONFIG,
98 	MGMT_OP_SET_PUBLIC_ADDRESS,
99 	MGMT_OP_START_SERVICE_DISCOVERY,
100 	MGMT_OP_READ_LOCAL_OOB_EXT_DATA,
101 	MGMT_OP_READ_EXT_INDEX_LIST,
102 	MGMT_OP_READ_ADV_FEATURES,
103 	MGMT_OP_ADD_ADVERTISING,
104 	MGMT_OP_REMOVE_ADVERTISING,
105 	MGMT_OP_GET_ADV_SIZE_INFO,
106 	MGMT_OP_START_LIMITED_DISCOVERY,
107 	MGMT_OP_READ_EXT_INFO,
108 	MGMT_OP_SET_APPEARANCE,
109 };
110 
111 static const u16 mgmt_events[] = {
112 	MGMT_EV_CONTROLLER_ERROR,
113 	MGMT_EV_INDEX_ADDED,
114 	MGMT_EV_INDEX_REMOVED,
115 	MGMT_EV_NEW_SETTINGS,
116 	MGMT_EV_CLASS_OF_DEV_CHANGED,
117 	MGMT_EV_LOCAL_NAME_CHANGED,
118 	MGMT_EV_NEW_LINK_KEY,
119 	MGMT_EV_NEW_LONG_TERM_KEY,
120 	MGMT_EV_DEVICE_CONNECTED,
121 	MGMT_EV_DEVICE_DISCONNECTED,
122 	MGMT_EV_CONNECT_FAILED,
123 	MGMT_EV_PIN_CODE_REQUEST,
124 	MGMT_EV_USER_CONFIRM_REQUEST,
125 	MGMT_EV_USER_PASSKEY_REQUEST,
126 	MGMT_EV_AUTH_FAILED,
127 	MGMT_EV_DEVICE_FOUND,
128 	MGMT_EV_DISCOVERING,
129 	MGMT_EV_DEVICE_BLOCKED,
130 	MGMT_EV_DEVICE_UNBLOCKED,
131 	MGMT_EV_DEVICE_UNPAIRED,
132 	MGMT_EV_PASSKEY_NOTIFY,
133 	MGMT_EV_NEW_IRK,
134 	MGMT_EV_NEW_CSRK,
135 	MGMT_EV_DEVICE_ADDED,
136 	MGMT_EV_DEVICE_REMOVED,
137 	MGMT_EV_NEW_CONN_PARAM,
138 	MGMT_EV_UNCONF_INDEX_ADDED,
139 	MGMT_EV_UNCONF_INDEX_REMOVED,
140 	MGMT_EV_NEW_CONFIG_OPTIONS,
141 	MGMT_EV_EXT_INDEX_ADDED,
142 	MGMT_EV_EXT_INDEX_REMOVED,
143 	MGMT_EV_LOCAL_OOB_DATA_UPDATED,
144 	MGMT_EV_ADVERTISING_ADDED,
145 	MGMT_EV_ADVERTISING_REMOVED,
146 	MGMT_EV_EXT_INFO_CHANGED,
147 };
148 
149 static const u16 mgmt_untrusted_commands[] = {
150 	MGMT_OP_READ_INDEX_LIST,
151 	MGMT_OP_READ_INFO,
152 	MGMT_OP_READ_UNCONF_INDEX_LIST,
153 	MGMT_OP_READ_CONFIG_INFO,
154 	MGMT_OP_READ_EXT_INDEX_LIST,
155 	MGMT_OP_READ_EXT_INFO,
156 };
157 
158 static const u16 mgmt_untrusted_events[] = {
159 	MGMT_EV_INDEX_ADDED,
160 	MGMT_EV_INDEX_REMOVED,
161 	MGMT_EV_NEW_SETTINGS,
162 	MGMT_EV_CLASS_OF_DEV_CHANGED,
163 	MGMT_EV_LOCAL_NAME_CHANGED,
164 	MGMT_EV_UNCONF_INDEX_ADDED,
165 	MGMT_EV_UNCONF_INDEX_REMOVED,
166 	MGMT_EV_NEW_CONFIG_OPTIONS,
167 	MGMT_EV_EXT_INDEX_ADDED,
168 	MGMT_EV_EXT_INDEX_REMOVED,
169 	MGMT_EV_EXT_INFO_CHANGED,
170 };
171 
172 #define CACHE_TIMEOUT	msecs_to_jiffies(2 * 1000)
173 
174 #define ZERO_KEY "\x00\x00\x00\x00\x00\x00\x00\x00" \
175 		 "\x00\x00\x00\x00\x00\x00\x00\x00"
176 
177 /* HCI to MGMT error code conversion table */
178 static u8 mgmt_status_table[] = {
179 	MGMT_STATUS_SUCCESS,
180 	MGMT_STATUS_UNKNOWN_COMMAND,	/* Unknown Command */
181 	MGMT_STATUS_NOT_CONNECTED,	/* No Connection */
182 	MGMT_STATUS_FAILED,		/* Hardware Failure */
183 	MGMT_STATUS_CONNECT_FAILED,	/* Page Timeout */
184 	MGMT_STATUS_AUTH_FAILED,	/* Authentication Failed */
185 	MGMT_STATUS_AUTH_FAILED,	/* PIN or Key Missing */
186 	MGMT_STATUS_NO_RESOURCES,	/* Memory Full */
187 	MGMT_STATUS_TIMEOUT,		/* Connection Timeout */
188 	MGMT_STATUS_NO_RESOURCES,	/* Max Number of Connections */
189 	MGMT_STATUS_NO_RESOURCES,	/* Max Number of SCO Connections */
190 	MGMT_STATUS_ALREADY_CONNECTED,	/* ACL Connection Exists */
191 	MGMT_STATUS_BUSY,		/* Command Disallowed */
192 	MGMT_STATUS_NO_RESOURCES,	/* Rejected Limited Resources */
193 	MGMT_STATUS_REJECTED,		/* Rejected Security */
194 	MGMT_STATUS_REJECTED,		/* Rejected Personal */
195 	MGMT_STATUS_TIMEOUT,		/* Host Timeout */
196 	MGMT_STATUS_NOT_SUPPORTED,	/* Unsupported Feature */
197 	MGMT_STATUS_INVALID_PARAMS,	/* Invalid Parameters */
198 	MGMT_STATUS_DISCONNECTED,	/* OE User Ended Connection */
199 	MGMT_STATUS_NO_RESOURCES,	/* OE Low Resources */
200 	MGMT_STATUS_DISCONNECTED,	/* OE Power Off */
201 	MGMT_STATUS_DISCONNECTED,	/* Connection Terminated */
202 	MGMT_STATUS_BUSY,		/* Repeated Attempts */
203 	MGMT_STATUS_REJECTED,		/* Pairing Not Allowed */
204 	MGMT_STATUS_FAILED,		/* Unknown LMP PDU */
205 	MGMT_STATUS_NOT_SUPPORTED,	/* Unsupported Remote Feature */
206 	MGMT_STATUS_REJECTED,		/* SCO Offset Rejected */
207 	MGMT_STATUS_REJECTED,		/* SCO Interval Rejected */
208 	MGMT_STATUS_REJECTED,		/* Air Mode Rejected */
209 	MGMT_STATUS_INVALID_PARAMS,	/* Invalid LMP Parameters */
210 	MGMT_STATUS_FAILED,		/* Unspecified Error */
211 	MGMT_STATUS_NOT_SUPPORTED,	/* Unsupported LMP Parameter Value */
212 	MGMT_STATUS_FAILED,		/* Role Change Not Allowed */
213 	MGMT_STATUS_TIMEOUT,		/* LMP Response Timeout */
214 	MGMT_STATUS_FAILED,		/* LMP Error Transaction Collision */
215 	MGMT_STATUS_FAILED,		/* LMP PDU Not Allowed */
216 	MGMT_STATUS_REJECTED,		/* Encryption Mode Not Accepted */
217 	MGMT_STATUS_FAILED,		/* Unit Link Key Used */
218 	MGMT_STATUS_NOT_SUPPORTED,	/* QoS Not Supported */
219 	MGMT_STATUS_TIMEOUT,		/* Instant Passed */
220 	MGMT_STATUS_NOT_SUPPORTED,	/* Pairing Not Supported */
221 	MGMT_STATUS_FAILED,		/* Transaction Collision */
222 	MGMT_STATUS_INVALID_PARAMS,	/* Unacceptable Parameter */
223 	MGMT_STATUS_REJECTED,		/* QoS Rejected */
224 	MGMT_STATUS_NOT_SUPPORTED,	/* Classification Not Supported */
225 	MGMT_STATUS_REJECTED,		/* Insufficient Security */
226 	MGMT_STATUS_INVALID_PARAMS,	/* Parameter Out Of Range */
227 	MGMT_STATUS_BUSY,		/* Role Switch Pending */
228 	MGMT_STATUS_FAILED,		/* Slot Violation */
229 	MGMT_STATUS_FAILED,		/* Role Switch Failed */
230 	MGMT_STATUS_INVALID_PARAMS,	/* EIR Too Large */
231 	MGMT_STATUS_NOT_SUPPORTED,	/* Simple Pairing Not Supported */
232 	MGMT_STATUS_BUSY,		/* Host Busy Pairing */
233 	MGMT_STATUS_REJECTED,		/* Rejected, No Suitable Channel */
234 	MGMT_STATUS_BUSY,		/* Controller Busy */
235 	MGMT_STATUS_INVALID_PARAMS,	/* Unsuitable Connection Interval */
236 	MGMT_STATUS_TIMEOUT,		/* Directed Advertising Timeout */
237 	MGMT_STATUS_AUTH_FAILED,	/* Terminated Due to MIC Failure */
238 	MGMT_STATUS_CONNECT_FAILED,	/* Connection Establishment Failed */
239 	MGMT_STATUS_CONNECT_FAILED,	/* MAC Connection Failed */
240 };
241 
242 static u8 mgmt_status(u8 hci_status)
243 {
244 	if (hci_status < ARRAY_SIZE(mgmt_status_table))
245 		return mgmt_status_table[hci_status];
246 
247 	return MGMT_STATUS_FAILED;
248 }
249 
250 static int mgmt_index_event(u16 event, struct hci_dev *hdev, void *data,
251 			    u16 len, int flag)
252 {
253 	return mgmt_send_event(event, hdev, HCI_CHANNEL_CONTROL, data, len,
254 			       flag, NULL);
255 }
256 
257 static int mgmt_limited_event(u16 event, struct hci_dev *hdev, void *data,
258 			      u16 len, int flag, struct sock *skip_sk)
259 {
260 	return mgmt_send_event(event, hdev, HCI_CHANNEL_CONTROL, data, len,
261 			       flag, skip_sk);
262 }
263 
264 static int mgmt_event(u16 event, struct hci_dev *hdev, void *data, u16 len,
265 		      struct sock *skip_sk)
266 {
267 	return mgmt_send_event(event, hdev, HCI_CHANNEL_CONTROL, data, len,
268 			       HCI_SOCK_TRUSTED, skip_sk);
269 }
270 
271 static u8 le_addr_type(u8 mgmt_addr_type)
272 {
273 	if (mgmt_addr_type == BDADDR_LE_PUBLIC)
274 		return ADDR_LE_DEV_PUBLIC;
275 	else
276 		return ADDR_LE_DEV_RANDOM;
277 }
278 
279 void mgmt_fill_version_info(void *ver)
280 {
281 	struct mgmt_rp_read_version *rp = ver;
282 
283 	rp->version = MGMT_VERSION;
284 	rp->revision = cpu_to_le16(MGMT_REVISION);
285 }
286 
287 static int read_version(struct sock *sk, struct hci_dev *hdev, void *data,
288 			u16 data_len)
289 {
290 	struct mgmt_rp_read_version rp;
291 
292 	BT_DBG("sock %p", sk);
293 
294 	mgmt_fill_version_info(&rp);
295 
296 	return mgmt_cmd_complete(sk, MGMT_INDEX_NONE, MGMT_OP_READ_VERSION, 0,
297 				 &rp, sizeof(rp));
298 }
299 
300 static int read_commands(struct sock *sk, struct hci_dev *hdev, void *data,
301 			 u16 data_len)
302 {
303 	struct mgmt_rp_read_commands *rp;
304 	u16 num_commands, num_events;
305 	size_t rp_size;
306 	int i, err;
307 
308 	BT_DBG("sock %p", sk);
309 
310 	if (hci_sock_test_flag(sk, HCI_SOCK_TRUSTED)) {
311 		num_commands = ARRAY_SIZE(mgmt_commands);
312 		num_events = ARRAY_SIZE(mgmt_events);
313 	} else {
314 		num_commands = ARRAY_SIZE(mgmt_untrusted_commands);
315 		num_events = ARRAY_SIZE(mgmt_untrusted_events);
316 	}
317 
318 	rp_size = sizeof(*rp) + ((num_commands + num_events) * sizeof(u16));
319 
320 	rp = kmalloc(rp_size, GFP_KERNEL);
321 	if (!rp)
322 		return -ENOMEM;
323 
324 	rp->num_commands = cpu_to_le16(num_commands);
325 	rp->num_events = cpu_to_le16(num_events);
326 
327 	if (hci_sock_test_flag(sk, HCI_SOCK_TRUSTED)) {
328 		__le16 *opcode = rp->opcodes;
329 
330 		for (i = 0; i < num_commands; i++, opcode++)
331 			put_unaligned_le16(mgmt_commands[i], opcode);
332 
333 		for (i = 0; i < num_events; i++, opcode++)
334 			put_unaligned_le16(mgmt_events[i], opcode);
335 	} else {
336 		__le16 *opcode = rp->opcodes;
337 
338 		for (i = 0; i < num_commands; i++, opcode++)
339 			put_unaligned_le16(mgmt_untrusted_commands[i], opcode);
340 
341 		for (i = 0; i < num_events; i++, opcode++)
342 			put_unaligned_le16(mgmt_untrusted_events[i], opcode);
343 	}
344 
345 	err = mgmt_cmd_complete(sk, MGMT_INDEX_NONE, MGMT_OP_READ_COMMANDS, 0,
346 				rp, rp_size);
347 	kfree(rp);
348 
349 	return err;
350 }
351 
352 static int read_index_list(struct sock *sk, struct hci_dev *hdev, void *data,
353 			   u16 data_len)
354 {
355 	struct mgmt_rp_read_index_list *rp;
356 	struct hci_dev *d;
357 	size_t rp_len;
358 	u16 count;
359 	int err;
360 
361 	BT_DBG("sock %p", sk);
362 
363 	read_lock(&hci_dev_list_lock);
364 
365 	count = 0;
366 	list_for_each_entry(d, &hci_dev_list, list) {
367 		if (d->dev_type == HCI_PRIMARY &&
368 		    !hci_dev_test_flag(d, HCI_UNCONFIGURED))
369 			count++;
370 	}
371 
372 	rp_len = sizeof(*rp) + (2 * count);
373 	rp = kmalloc(rp_len, GFP_ATOMIC);
374 	if (!rp) {
375 		read_unlock(&hci_dev_list_lock);
376 		return -ENOMEM;
377 	}
378 
379 	count = 0;
380 	list_for_each_entry(d, &hci_dev_list, list) {
381 		if (hci_dev_test_flag(d, HCI_SETUP) ||
382 		    hci_dev_test_flag(d, HCI_CONFIG) ||
383 		    hci_dev_test_flag(d, HCI_USER_CHANNEL))
384 			continue;
385 
386 		/* Devices marked as raw-only are neither configured
387 		 * nor unconfigured controllers.
388 		 */
389 		if (test_bit(HCI_QUIRK_RAW_DEVICE, &d->quirks))
390 			continue;
391 
392 		if (d->dev_type == HCI_PRIMARY &&
393 		    !hci_dev_test_flag(d, HCI_UNCONFIGURED)) {
394 			rp->index[count++] = cpu_to_le16(d->id);
395 			BT_DBG("Added hci%u", d->id);
396 		}
397 	}
398 
399 	rp->num_controllers = cpu_to_le16(count);
400 	rp_len = sizeof(*rp) + (2 * count);
401 
402 	read_unlock(&hci_dev_list_lock);
403 
404 	err = mgmt_cmd_complete(sk, MGMT_INDEX_NONE, MGMT_OP_READ_INDEX_LIST,
405 				0, rp, rp_len);
406 
407 	kfree(rp);
408 
409 	return err;
410 }
411 
412 static int read_unconf_index_list(struct sock *sk, struct hci_dev *hdev,
413 				  void *data, u16 data_len)
414 {
415 	struct mgmt_rp_read_unconf_index_list *rp;
416 	struct hci_dev *d;
417 	size_t rp_len;
418 	u16 count;
419 	int err;
420 
421 	BT_DBG("sock %p", sk);
422 
423 	read_lock(&hci_dev_list_lock);
424 
425 	count = 0;
426 	list_for_each_entry(d, &hci_dev_list, list) {
427 		if (d->dev_type == HCI_PRIMARY &&
428 		    hci_dev_test_flag(d, HCI_UNCONFIGURED))
429 			count++;
430 	}
431 
432 	rp_len = sizeof(*rp) + (2 * count);
433 	rp = kmalloc(rp_len, GFP_ATOMIC);
434 	if (!rp) {
435 		read_unlock(&hci_dev_list_lock);
436 		return -ENOMEM;
437 	}
438 
439 	count = 0;
440 	list_for_each_entry(d, &hci_dev_list, list) {
441 		if (hci_dev_test_flag(d, HCI_SETUP) ||
442 		    hci_dev_test_flag(d, HCI_CONFIG) ||
443 		    hci_dev_test_flag(d, HCI_USER_CHANNEL))
444 			continue;
445 
446 		/* Devices marked as raw-only are neither configured
447 		 * nor unconfigured controllers.
448 		 */
449 		if (test_bit(HCI_QUIRK_RAW_DEVICE, &d->quirks))
450 			continue;
451 
452 		if (d->dev_type == HCI_PRIMARY &&
453 		    hci_dev_test_flag(d, HCI_UNCONFIGURED)) {
454 			rp->index[count++] = cpu_to_le16(d->id);
455 			BT_DBG("Added hci%u", d->id);
456 		}
457 	}
458 
459 	rp->num_controllers = cpu_to_le16(count);
460 	rp_len = sizeof(*rp) + (2 * count);
461 
462 	read_unlock(&hci_dev_list_lock);
463 
464 	err = mgmt_cmd_complete(sk, MGMT_INDEX_NONE,
465 				MGMT_OP_READ_UNCONF_INDEX_LIST, 0, rp, rp_len);
466 
467 	kfree(rp);
468 
469 	return err;
470 }
471 
472 static int read_ext_index_list(struct sock *sk, struct hci_dev *hdev,
473 			       void *data, u16 data_len)
474 {
475 	struct mgmt_rp_read_ext_index_list *rp;
476 	struct hci_dev *d;
477 	size_t rp_len;
478 	u16 count;
479 	int err;
480 
481 	BT_DBG("sock %p", sk);
482 
483 	read_lock(&hci_dev_list_lock);
484 
485 	count = 0;
486 	list_for_each_entry(d, &hci_dev_list, list) {
487 		if (d->dev_type == HCI_PRIMARY || d->dev_type == HCI_AMP)
488 			count++;
489 	}
490 
491 	rp_len = sizeof(*rp) + (sizeof(rp->entry[0]) * count);
492 	rp = kmalloc(rp_len, GFP_ATOMIC);
493 	if (!rp) {
494 		read_unlock(&hci_dev_list_lock);
495 		return -ENOMEM;
496 	}
497 
498 	count = 0;
499 	list_for_each_entry(d, &hci_dev_list, list) {
500 		if (hci_dev_test_flag(d, HCI_SETUP) ||
501 		    hci_dev_test_flag(d, HCI_CONFIG) ||
502 		    hci_dev_test_flag(d, HCI_USER_CHANNEL))
503 			continue;
504 
505 		/* Devices marked as raw-only are neither configured
506 		 * nor unconfigured controllers.
507 		 */
508 		if (test_bit(HCI_QUIRK_RAW_DEVICE, &d->quirks))
509 			continue;
510 
511 		if (d->dev_type == HCI_PRIMARY) {
512 			if (hci_dev_test_flag(d, HCI_UNCONFIGURED))
513 				rp->entry[count].type = 0x01;
514 			else
515 				rp->entry[count].type = 0x00;
516 		} else if (d->dev_type == HCI_AMP) {
517 			rp->entry[count].type = 0x02;
518 		} else {
519 			continue;
520 		}
521 
522 		rp->entry[count].bus = d->bus;
523 		rp->entry[count++].index = cpu_to_le16(d->id);
524 		BT_DBG("Added hci%u", d->id);
525 	}
526 
527 	rp->num_controllers = cpu_to_le16(count);
528 	rp_len = sizeof(*rp) + (sizeof(rp->entry[0]) * count);
529 
530 	read_unlock(&hci_dev_list_lock);
531 
532 	/* If this command is called at least once, then all the
533 	 * default index and unconfigured index events are disabled
534 	 * and from now on only extended index events are used.
535 	 */
536 	hci_sock_set_flag(sk, HCI_MGMT_EXT_INDEX_EVENTS);
537 	hci_sock_clear_flag(sk, HCI_MGMT_INDEX_EVENTS);
538 	hci_sock_clear_flag(sk, HCI_MGMT_UNCONF_INDEX_EVENTS);
539 
540 	err = mgmt_cmd_complete(sk, MGMT_INDEX_NONE,
541 				MGMT_OP_READ_EXT_INDEX_LIST, 0, rp, rp_len);
542 
543 	kfree(rp);
544 
545 	return err;
546 }
547 
548 static bool is_configured(struct hci_dev *hdev)
549 {
550 	if (test_bit(HCI_QUIRK_EXTERNAL_CONFIG, &hdev->quirks) &&
551 	    !hci_dev_test_flag(hdev, HCI_EXT_CONFIGURED))
552 		return false;
553 
554 	if (test_bit(HCI_QUIRK_INVALID_BDADDR, &hdev->quirks) &&
555 	    !bacmp(&hdev->public_addr, BDADDR_ANY))
556 		return false;
557 
558 	return true;
559 }
560 
561 static __le32 get_missing_options(struct hci_dev *hdev)
562 {
563 	u32 options = 0;
564 
565 	if (test_bit(HCI_QUIRK_EXTERNAL_CONFIG, &hdev->quirks) &&
566 	    !hci_dev_test_flag(hdev, HCI_EXT_CONFIGURED))
567 		options |= MGMT_OPTION_EXTERNAL_CONFIG;
568 
569 	if (test_bit(HCI_QUIRK_INVALID_BDADDR, &hdev->quirks) &&
570 	    !bacmp(&hdev->public_addr, BDADDR_ANY))
571 		options |= MGMT_OPTION_PUBLIC_ADDRESS;
572 
573 	return cpu_to_le32(options);
574 }
575 
576 static int new_options(struct hci_dev *hdev, struct sock *skip)
577 {
578 	__le32 options = get_missing_options(hdev);
579 
580 	return mgmt_limited_event(MGMT_EV_NEW_CONFIG_OPTIONS, hdev, &options,
581 				  sizeof(options), HCI_MGMT_OPTION_EVENTS, skip);
582 }
583 
584 static int send_options_rsp(struct sock *sk, u16 opcode, struct hci_dev *hdev)
585 {
586 	__le32 options = get_missing_options(hdev);
587 
588 	return mgmt_cmd_complete(sk, hdev->id, opcode, 0, &options,
589 				 sizeof(options));
590 }
591 
592 static int read_config_info(struct sock *sk, struct hci_dev *hdev,
593 			    void *data, u16 data_len)
594 {
595 	struct mgmt_rp_read_config_info rp;
596 	u32 options = 0;
597 
598 	BT_DBG("sock %p %s", sk, hdev->name);
599 
600 	hci_dev_lock(hdev);
601 
602 	memset(&rp, 0, sizeof(rp));
603 	rp.manufacturer = cpu_to_le16(hdev->manufacturer);
604 
605 	if (test_bit(HCI_QUIRK_EXTERNAL_CONFIG, &hdev->quirks))
606 		options |= MGMT_OPTION_EXTERNAL_CONFIG;
607 
608 	if (hdev->set_bdaddr)
609 		options |= MGMT_OPTION_PUBLIC_ADDRESS;
610 
611 	rp.supported_options = cpu_to_le32(options);
612 	rp.missing_options = get_missing_options(hdev);
613 
614 	hci_dev_unlock(hdev);
615 
616 	return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_READ_CONFIG_INFO, 0,
617 				 &rp, sizeof(rp));
618 }
619 
620 static u32 get_supported_settings(struct hci_dev *hdev)
621 {
622 	u32 settings = 0;
623 
624 	settings |= MGMT_SETTING_POWERED;
625 	settings |= MGMT_SETTING_BONDABLE;
626 	settings |= MGMT_SETTING_DEBUG_KEYS;
627 	settings |= MGMT_SETTING_CONNECTABLE;
628 	settings |= MGMT_SETTING_DISCOVERABLE;
629 
630 	if (lmp_bredr_capable(hdev)) {
631 		if (hdev->hci_ver >= BLUETOOTH_VER_1_2)
632 			settings |= MGMT_SETTING_FAST_CONNECTABLE;
633 		settings |= MGMT_SETTING_BREDR;
634 		settings |= MGMT_SETTING_LINK_SECURITY;
635 
636 		if (lmp_ssp_capable(hdev)) {
637 			settings |= MGMT_SETTING_SSP;
638 			settings |= MGMT_SETTING_HS;
639 		}
640 
641 		if (lmp_sc_capable(hdev))
642 			settings |= MGMT_SETTING_SECURE_CONN;
643 	}
644 
645 	if (lmp_le_capable(hdev)) {
646 		settings |= MGMT_SETTING_LE;
647 		settings |= MGMT_SETTING_ADVERTISING;
648 		settings |= MGMT_SETTING_SECURE_CONN;
649 		settings |= MGMT_SETTING_PRIVACY;
650 		settings |= MGMT_SETTING_STATIC_ADDRESS;
651 	}
652 
653 	if (test_bit(HCI_QUIRK_EXTERNAL_CONFIG, &hdev->quirks) ||
654 	    hdev->set_bdaddr)
655 		settings |= MGMT_SETTING_CONFIGURATION;
656 
657 	return settings;
658 }
659 
660 static u32 get_current_settings(struct hci_dev *hdev)
661 {
662 	u32 settings = 0;
663 
664 	if (hdev_is_powered(hdev))
665 		settings |= MGMT_SETTING_POWERED;
666 
667 	if (hci_dev_test_flag(hdev, HCI_CONNECTABLE))
668 		settings |= MGMT_SETTING_CONNECTABLE;
669 
670 	if (hci_dev_test_flag(hdev, HCI_FAST_CONNECTABLE))
671 		settings |= MGMT_SETTING_FAST_CONNECTABLE;
672 
673 	if (hci_dev_test_flag(hdev, HCI_DISCOVERABLE))
674 		settings |= MGMT_SETTING_DISCOVERABLE;
675 
676 	if (hci_dev_test_flag(hdev, HCI_BONDABLE))
677 		settings |= MGMT_SETTING_BONDABLE;
678 
679 	if (hci_dev_test_flag(hdev, HCI_BREDR_ENABLED))
680 		settings |= MGMT_SETTING_BREDR;
681 
682 	if (hci_dev_test_flag(hdev, HCI_LE_ENABLED))
683 		settings |= MGMT_SETTING_LE;
684 
685 	if (hci_dev_test_flag(hdev, HCI_LINK_SECURITY))
686 		settings |= MGMT_SETTING_LINK_SECURITY;
687 
688 	if (hci_dev_test_flag(hdev, HCI_SSP_ENABLED))
689 		settings |= MGMT_SETTING_SSP;
690 
691 	if (hci_dev_test_flag(hdev, HCI_HS_ENABLED))
692 		settings |= MGMT_SETTING_HS;
693 
694 	if (hci_dev_test_flag(hdev, HCI_ADVERTISING))
695 		settings |= MGMT_SETTING_ADVERTISING;
696 
697 	if (hci_dev_test_flag(hdev, HCI_SC_ENABLED))
698 		settings |= MGMT_SETTING_SECURE_CONN;
699 
700 	if (hci_dev_test_flag(hdev, HCI_KEEP_DEBUG_KEYS))
701 		settings |= MGMT_SETTING_DEBUG_KEYS;
702 
703 	if (hci_dev_test_flag(hdev, HCI_PRIVACY))
704 		settings |= MGMT_SETTING_PRIVACY;
705 
706 	/* The current setting for static address has two purposes. The
707 	 * first is to indicate if the static address will be used and
708 	 * the second is to indicate if it is actually set.
709 	 *
710 	 * This means if the static address is not configured, this flag
711 	 * will never be set. If the address is configured, then if the
712 	 * address is actually used decides if the flag is set or not.
713 	 *
714 	 * For single mode LE only controllers and dual-mode controllers
715 	 * with BR/EDR disabled, the existence of the static address will
716 	 * be evaluated.
717 	 */
718 	if (hci_dev_test_flag(hdev, HCI_FORCE_STATIC_ADDR) ||
719 	    !hci_dev_test_flag(hdev, HCI_BREDR_ENABLED) ||
720 	    !bacmp(&hdev->bdaddr, BDADDR_ANY)) {
721 		if (bacmp(&hdev->static_addr, BDADDR_ANY))
722 			settings |= MGMT_SETTING_STATIC_ADDRESS;
723 	}
724 
725 	return settings;
726 }
727 
728 static struct mgmt_pending_cmd *pending_find(u16 opcode, struct hci_dev *hdev)
729 {
730 	return mgmt_pending_find(HCI_CHANNEL_CONTROL, opcode, hdev);
731 }
732 
733 static struct mgmt_pending_cmd *pending_find_data(u16 opcode,
734 						  struct hci_dev *hdev,
735 						  const void *data)
736 {
737 	return mgmt_pending_find_data(HCI_CHANNEL_CONTROL, opcode, hdev, data);
738 }
739 
740 u8 mgmt_get_adv_discov_flags(struct hci_dev *hdev)
741 {
742 	struct mgmt_pending_cmd *cmd;
743 
744 	/* If there's a pending mgmt command the flags will not yet have
745 	 * their final values, so check for this first.
746 	 */
747 	cmd = pending_find(MGMT_OP_SET_DISCOVERABLE, hdev);
748 	if (cmd) {
749 		struct mgmt_mode *cp = cmd->param;
750 		if (cp->val == 0x01)
751 			return LE_AD_GENERAL;
752 		else if (cp->val == 0x02)
753 			return LE_AD_LIMITED;
754 	} else {
755 		if (hci_dev_test_flag(hdev, HCI_LIMITED_DISCOVERABLE))
756 			return LE_AD_LIMITED;
757 		else if (hci_dev_test_flag(hdev, HCI_DISCOVERABLE))
758 			return LE_AD_GENERAL;
759 	}
760 
761 	return 0;
762 }
763 
764 bool mgmt_get_connectable(struct hci_dev *hdev)
765 {
766 	struct mgmt_pending_cmd *cmd;
767 
768 	/* If there's a pending mgmt command the flag will not yet have
769 	 * it's final value, so check for this first.
770 	 */
771 	cmd = pending_find(MGMT_OP_SET_CONNECTABLE, hdev);
772 	if (cmd) {
773 		struct mgmt_mode *cp = cmd->param;
774 
775 		return cp->val;
776 	}
777 
778 	return hci_dev_test_flag(hdev, HCI_CONNECTABLE);
779 }
780 
781 static void service_cache_off(struct work_struct *work)
782 {
783 	struct hci_dev *hdev = container_of(work, struct hci_dev,
784 					    service_cache.work);
785 	struct hci_request req;
786 
787 	if (!hci_dev_test_and_clear_flag(hdev, HCI_SERVICE_CACHE))
788 		return;
789 
790 	hci_req_init(&req, hdev);
791 
792 	hci_dev_lock(hdev);
793 
794 	__hci_req_update_eir(&req);
795 	__hci_req_update_class(&req);
796 
797 	hci_dev_unlock(hdev);
798 
799 	hci_req_run(&req, NULL);
800 }
801 
802 static void rpa_expired(struct work_struct *work)
803 {
804 	struct hci_dev *hdev = container_of(work, struct hci_dev,
805 					    rpa_expired.work);
806 	struct hci_request req;
807 
808 	BT_DBG("");
809 
810 	hci_dev_set_flag(hdev, HCI_RPA_EXPIRED);
811 
812 	if (!hci_dev_test_flag(hdev, HCI_ADVERTISING))
813 		return;
814 
815 	/* The generation of a new RPA and programming it into the
816 	 * controller happens in the hci_req_enable_advertising()
817 	 * function.
818 	 */
819 	hci_req_init(&req, hdev);
820 	__hci_req_enable_advertising(&req);
821 	hci_req_run(&req, NULL);
822 }
823 
824 static void mgmt_init_hdev(struct sock *sk, struct hci_dev *hdev)
825 {
826 	if (hci_dev_test_and_set_flag(hdev, HCI_MGMT))
827 		return;
828 
829 	INIT_DELAYED_WORK(&hdev->service_cache, service_cache_off);
830 	INIT_DELAYED_WORK(&hdev->rpa_expired, rpa_expired);
831 
832 	/* Non-mgmt controlled devices get this bit set
833 	 * implicitly so that pairing works for them, however
834 	 * for mgmt we require user-space to explicitly enable
835 	 * it
836 	 */
837 	hci_dev_clear_flag(hdev, HCI_BONDABLE);
838 }
839 
840 static int read_controller_info(struct sock *sk, struct hci_dev *hdev,
841 				void *data, u16 data_len)
842 {
843 	struct mgmt_rp_read_info rp;
844 
845 	BT_DBG("sock %p %s", sk, hdev->name);
846 
847 	hci_dev_lock(hdev);
848 
849 	memset(&rp, 0, sizeof(rp));
850 
851 	bacpy(&rp.bdaddr, &hdev->bdaddr);
852 
853 	rp.version = hdev->hci_ver;
854 	rp.manufacturer = cpu_to_le16(hdev->manufacturer);
855 
856 	rp.supported_settings = cpu_to_le32(get_supported_settings(hdev));
857 	rp.current_settings = cpu_to_le32(get_current_settings(hdev));
858 
859 	memcpy(rp.dev_class, hdev->dev_class, 3);
860 
861 	memcpy(rp.name, hdev->dev_name, sizeof(hdev->dev_name));
862 	memcpy(rp.short_name, hdev->short_name, sizeof(hdev->short_name));
863 
864 	hci_dev_unlock(hdev);
865 
866 	return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_READ_INFO, 0, &rp,
867 				 sizeof(rp));
868 }
869 
870 static u16 append_eir_data_to_buf(struct hci_dev *hdev, u8 *eir)
871 {
872 	u16 eir_len = 0;
873 	size_t name_len;
874 
875 	if (hci_dev_test_flag(hdev, HCI_BREDR_ENABLED))
876 		eir_len = eir_append_data(eir, eir_len, EIR_CLASS_OF_DEV,
877 					  hdev->dev_class, 3);
878 
879 	if (hci_dev_test_flag(hdev, HCI_LE_ENABLED))
880 		eir_len = eir_append_le16(eir, eir_len, EIR_APPEARANCE,
881 					  hdev->appearance);
882 
883 	name_len = strlen(hdev->dev_name);
884 	eir_len = eir_append_data(eir, eir_len, EIR_NAME_COMPLETE,
885 				  hdev->dev_name, name_len);
886 
887 	name_len = strlen(hdev->short_name);
888 	eir_len = eir_append_data(eir, eir_len, EIR_NAME_SHORT,
889 				  hdev->short_name, name_len);
890 
891 	return eir_len;
892 }
893 
894 static int read_ext_controller_info(struct sock *sk, struct hci_dev *hdev,
895 				    void *data, u16 data_len)
896 {
897 	char buf[512];
898 	struct mgmt_rp_read_ext_info *rp = (void *)buf;
899 	u16 eir_len;
900 
901 	BT_DBG("sock %p %s", sk, hdev->name);
902 
903 	memset(&buf, 0, sizeof(buf));
904 
905 	hci_dev_lock(hdev);
906 
907 	bacpy(&rp->bdaddr, &hdev->bdaddr);
908 
909 	rp->version = hdev->hci_ver;
910 	rp->manufacturer = cpu_to_le16(hdev->manufacturer);
911 
912 	rp->supported_settings = cpu_to_le32(get_supported_settings(hdev));
913 	rp->current_settings = cpu_to_le32(get_current_settings(hdev));
914 
915 
916 	eir_len = append_eir_data_to_buf(hdev, rp->eir);
917 	rp->eir_len = cpu_to_le16(eir_len);
918 
919 	hci_dev_unlock(hdev);
920 
921 	/* If this command is called at least once, then the events
922 	 * for class of device and local name changes are disabled
923 	 * and only the new extended controller information event
924 	 * is used.
925 	 */
926 	hci_sock_set_flag(sk, HCI_MGMT_EXT_INFO_EVENTS);
927 	hci_sock_clear_flag(sk, HCI_MGMT_DEV_CLASS_EVENTS);
928 	hci_sock_clear_flag(sk, HCI_MGMT_LOCAL_NAME_EVENTS);
929 
930 	return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_READ_EXT_INFO, 0, rp,
931 				 sizeof(*rp) + eir_len);
932 }
933 
934 static int ext_info_changed(struct hci_dev *hdev, struct sock *skip)
935 {
936 	char buf[512];
937 	struct mgmt_ev_ext_info_changed *ev = (void *)buf;
938 	u16 eir_len;
939 
940 	memset(buf, 0, sizeof(buf));
941 
942 	eir_len = append_eir_data_to_buf(hdev, ev->eir);
943 	ev->eir_len = cpu_to_le16(eir_len);
944 
945 	return mgmt_limited_event(MGMT_EV_EXT_INFO_CHANGED, hdev, ev,
946 				  sizeof(*ev) + eir_len,
947 				  HCI_MGMT_EXT_INFO_EVENTS, skip);
948 }
949 
950 static int send_settings_rsp(struct sock *sk, u16 opcode, struct hci_dev *hdev)
951 {
952 	__le32 settings = cpu_to_le32(get_current_settings(hdev));
953 
954 	return mgmt_cmd_complete(sk, hdev->id, opcode, 0, &settings,
955 				 sizeof(settings));
956 }
957 
958 static void clean_up_hci_complete(struct hci_dev *hdev, u8 status, u16 opcode)
959 {
960 	BT_DBG("%s status 0x%02x", hdev->name, status);
961 
962 	if (hci_conn_count(hdev) == 0) {
963 		cancel_delayed_work(&hdev->power_off);
964 		queue_work(hdev->req_workqueue, &hdev->power_off.work);
965 	}
966 }
967 
968 void mgmt_advertising_added(struct sock *sk, struct hci_dev *hdev, u8 instance)
969 {
970 	struct mgmt_ev_advertising_added ev;
971 
972 	ev.instance = instance;
973 
974 	mgmt_event(MGMT_EV_ADVERTISING_ADDED, hdev, &ev, sizeof(ev), sk);
975 }
976 
977 void mgmt_advertising_removed(struct sock *sk, struct hci_dev *hdev,
978 			      u8 instance)
979 {
980 	struct mgmt_ev_advertising_removed ev;
981 
982 	ev.instance = instance;
983 
984 	mgmt_event(MGMT_EV_ADVERTISING_REMOVED, hdev, &ev, sizeof(ev), sk);
985 }
986 
987 static void cancel_adv_timeout(struct hci_dev *hdev)
988 {
989 	if (hdev->adv_instance_timeout) {
990 		hdev->adv_instance_timeout = 0;
991 		cancel_delayed_work(&hdev->adv_instance_expire);
992 	}
993 }
994 
995 static int clean_up_hci_state(struct hci_dev *hdev)
996 {
997 	struct hci_request req;
998 	struct hci_conn *conn;
999 	bool discov_stopped;
1000 	int err;
1001 
1002 	hci_req_init(&req, hdev);
1003 
1004 	if (test_bit(HCI_ISCAN, &hdev->flags) ||
1005 	    test_bit(HCI_PSCAN, &hdev->flags)) {
1006 		u8 scan = 0x00;
1007 		hci_req_add(&req, HCI_OP_WRITE_SCAN_ENABLE, 1, &scan);
1008 	}
1009 
1010 	hci_req_clear_adv_instance(hdev, NULL, NULL, 0x00, false);
1011 
1012 	if (hci_dev_test_flag(hdev, HCI_LE_ADV))
1013 		__hci_req_disable_advertising(&req);
1014 
1015 	discov_stopped = hci_req_stop_discovery(&req);
1016 
1017 	list_for_each_entry(conn, &hdev->conn_hash.list, list) {
1018 		/* 0x15 == Terminated due to Power Off */
1019 		__hci_abort_conn(&req, conn, 0x15);
1020 	}
1021 
1022 	err = hci_req_run(&req, clean_up_hci_complete);
1023 	if (!err && discov_stopped)
1024 		hci_discovery_set_state(hdev, DISCOVERY_STOPPING);
1025 
1026 	return err;
1027 }
1028 
1029 static int set_powered(struct sock *sk, struct hci_dev *hdev, void *data,
1030 		       u16 len)
1031 {
1032 	struct mgmt_mode *cp = data;
1033 	struct mgmt_pending_cmd *cmd;
1034 	int err;
1035 
1036 	BT_DBG("request for %s", hdev->name);
1037 
1038 	if (cp->val != 0x00 && cp->val != 0x01)
1039 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_POWERED,
1040 				       MGMT_STATUS_INVALID_PARAMS);
1041 
1042 	hci_dev_lock(hdev);
1043 
1044 	if (pending_find(MGMT_OP_SET_POWERED, hdev)) {
1045 		err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_POWERED,
1046 				      MGMT_STATUS_BUSY);
1047 		goto failed;
1048 	}
1049 
1050 	if (!!cp->val == hdev_is_powered(hdev)) {
1051 		err = send_settings_rsp(sk, MGMT_OP_SET_POWERED, hdev);
1052 		goto failed;
1053 	}
1054 
1055 	cmd = mgmt_pending_add(sk, MGMT_OP_SET_POWERED, hdev, data, len);
1056 	if (!cmd) {
1057 		err = -ENOMEM;
1058 		goto failed;
1059 	}
1060 
1061 	if (cp->val) {
1062 		queue_work(hdev->req_workqueue, &hdev->power_on);
1063 		err = 0;
1064 	} else {
1065 		/* Disconnect connections, stop scans, etc */
1066 		err = clean_up_hci_state(hdev);
1067 		if (!err)
1068 			queue_delayed_work(hdev->req_workqueue, &hdev->power_off,
1069 					   HCI_POWER_OFF_TIMEOUT);
1070 
1071 		/* ENODATA means there were no HCI commands queued */
1072 		if (err == -ENODATA) {
1073 			cancel_delayed_work(&hdev->power_off);
1074 			queue_work(hdev->req_workqueue, &hdev->power_off.work);
1075 			err = 0;
1076 		}
1077 	}
1078 
1079 failed:
1080 	hci_dev_unlock(hdev);
1081 	return err;
1082 }
1083 
1084 static int new_settings(struct hci_dev *hdev, struct sock *skip)
1085 {
1086 	__le32 ev = cpu_to_le32(get_current_settings(hdev));
1087 
1088 	return mgmt_limited_event(MGMT_EV_NEW_SETTINGS, hdev, &ev,
1089 				  sizeof(ev), HCI_MGMT_SETTING_EVENTS, skip);
1090 }
1091 
1092 int mgmt_new_settings(struct hci_dev *hdev)
1093 {
1094 	return new_settings(hdev, NULL);
1095 }
1096 
1097 struct cmd_lookup {
1098 	struct sock *sk;
1099 	struct hci_dev *hdev;
1100 	u8 mgmt_status;
1101 };
1102 
1103 static void settings_rsp(struct mgmt_pending_cmd *cmd, void *data)
1104 {
1105 	struct cmd_lookup *match = data;
1106 
1107 	send_settings_rsp(cmd->sk, cmd->opcode, match->hdev);
1108 
1109 	list_del(&cmd->list);
1110 
1111 	if (match->sk == NULL) {
1112 		match->sk = cmd->sk;
1113 		sock_hold(match->sk);
1114 	}
1115 
1116 	mgmt_pending_free(cmd);
1117 }
1118 
1119 static void cmd_status_rsp(struct mgmt_pending_cmd *cmd, void *data)
1120 {
1121 	u8 *status = data;
1122 
1123 	mgmt_cmd_status(cmd->sk, cmd->index, cmd->opcode, *status);
1124 	mgmt_pending_remove(cmd);
1125 }
1126 
1127 static void cmd_complete_rsp(struct mgmt_pending_cmd *cmd, void *data)
1128 {
1129 	if (cmd->cmd_complete) {
1130 		u8 *status = data;
1131 
1132 		cmd->cmd_complete(cmd, *status);
1133 		mgmt_pending_remove(cmd);
1134 
1135 		return;
1136 	}
1137 
1138 	cmd_status_rsp(cmd, data);
1139 }
1140 
1141 static int generic_cmd_complete(struct mgmt_pending_cmd *cmd, u8 status)
1142 {
1143 	return mgmt_cmd_complete(cmd->sk, cmd->index, cmd->opcode, status,
1144 				 cmd->param, cmd->param_len);
1145 }
1146 
1147 static int addr_cmd_complete(struct mgmt_pending_cmd *cmd, u8 status)
1148 {
1149 	return mgmt_cmd_complete(cmd->sk, cmd->index, cmd->opcode, status,
1150 				 cmd->param, sizeof(struct mgmt_addr_info));
1151 }
1152 
1153 static u8 mgmt_bredr_support(struct hci_dev *hdev)
1154 {
1155 	if (!lmp_bredr_capable(hdev))
1156 		return MGMT_STATUS_NOT_SUPPORTED;
1157 	else if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED))
1158 		return MGMT_STATUS_REJECTED;
1159 	else
1160 		return MGMT_STATUS_SUCCESS;
1161 }
1162 
1163 static u8 mgmt_le_support(struct hci_dev *hdev)
1164 {
1165 	if (!lmp_le_capable(hdev))
1166 		return MGMT_STATUS_NOT_SUPPORTED;
1167 	else if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED))
1168 		return MGMT_STATUS_REJECTED;
1169 	else
1170 		return MGMT_STATUS_SUCCESS;
1171 }
1172 
1173 void mgmt_set_discoverable_complete(struct hci_dev *hdev, u8 status)
1174 {
1175 	struct mgmt_pending_cmd *cmd;
1176 
1177 	BT_DBG("status 0x%02x", status);
1178 
1179 	hci_dev_lock(hdev);
1180 
1181 	cmd = pending_find(MGMT_OP_SET_DISCOVERABLE, hdev);
1182 	if (!cmd)
1183 		goto unlock;
1184 
1185 	if (status) {
1186 		u8 mgmt_err = mgmt_status(status);
1187 		mgmt_cmd_status(cmd->sk, cmd->index, cmd->opcode, mgmt_err);
1188 		hci_dev_clear_flag(hdev, HCI_LIMITED_DISCOVERABLE);
1189 		goto remove_cmd;
1190 	}
1191 
1192 	if (hci_dev_test_flag(hdev, HCI_DISCOVERABLE) &&
1193 	    hdev->discov_timeout > 0) {
1194 		int to = msecs_to_jiffies(hdev->discov_timeout * 1000);
1195 		queue_delayed_work(hdev->req_workqueue, &hdev->discov_off, to);
1196 	}
1197 
1198 	send_settings_rsp(cmd->sk, MGMT_OP_SET_DISCOVERABLE, hdev);
1199 	new_settings(hdev, cmd->sk);
1200 
1201 remove_cmd:
1202 	mgmt_pending_remove(cmd);
1203 
1204 unlock:
1205 	hci_dev_unlock(hdev);
1206 }
1207 
1208 static int set_discoverable(struct sock *sk, struct hci_dev *hdev, void *data,
1209 			    u16 len)
1210 {
1211 	struct mgmt_cp_set_discoverable *cp = data;
1212 	struct mgmt_pending_cmd *cmd;
1213 	u16 timeout;
1214 	int err;
1215 
1216 	BT_DBG("request for %s", hdev->name);
1217 
1218 	if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED) &&
1219 	    !hci_dev_test_flag(hdev, HCI_BREDR_ENABLED))
1220 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_DISCOVERABLE,
1221 				       MGMT_STATUS_REJECTED);
1222 
1223 	if (cp->val != 0x00 && cp->val != 0x01 && cp->val != 0x02)
1224 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_DISCOVERABLE,
1225 				       MGMT_STATUS_INVALID_PARAMS);
1226 
1227 	timeout = __le16_to_cpu(cp->timeout);
1228 
1229 	/* Disabling discoverable requires that no timeout is set,
1230 	 * and enabling limited discoverable requires a timeout.
1231 	 */
1232 	if ((cp->val == 0x00 && timeout > 0) ||
1233 	    (cp->val == 0x02 && timeout == 0))
1234 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_DISCOVERABLE,
1235 				       MGMT_STATUS_INVALID_PARAMS);
1236 
1237 	hci_dev_lock(hdev);
1238 
1239 	if (!hdev_is_powered(hdev) && timeout > 0) {
1240 		err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_DISCOVERABLE,
1241 				      MGMT_STATUS_NOT_POWERED);
1242 		goto failed;
1243 	}
1244 
1245 	if (pending_find(MGMT_OP_SET_DISCOVERABLE, hdev) ||
1246 	    pending_find(MGMT_OP_SET_CONNECTABLE, hdev)) {
1247 		err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_DISCOVERABLE,
1248 				      MGMT_STATUS_BUSY);
1249 		goto failed;
1250 	}
1251 
1252 	if (!hci_dev_test_flag(hdev, HCI_CONNECTABLE)) {
1253 		err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_DISCOVERABLE,
1254 				      MGMT_STATUS_REJECTED);
1255 		goto failed;
1256 	}
1257 
1258 	if (!hdev_is_powered(hdev)) {
1259 		bool changed = false;
1260 
1261 		/* Setting limited discoverable when powered off is
1262 		 * not a valid operation since it requires a timeout
1263 		 * and so no need to check HCI_LIMITED_DISCOVERABLE.
1264 		 */
1265 		if (!!cp->val != hci_dev_test_flag(hdev, HCI_DISCOVERABLE)) {
1266 			hci_dev_change_flag(hdev, HCI_DISCOVERABLE);
1267 			changed = true;
1268 		}
1269 
1270 		err = send_settings_rsp(sk, MGMT_OP_SET_DISCOVERABLE, hdev);
1271 		if (err < 0)
1272 			goto failed;
1273 
1274 		if (changed)
1275 			err = new_settings(hdev, sk);
1276 
1277 		goto failed;
1278 	}
1279 
1280 	/* If the current mode is the same, then just update the timeout
1281 	 * value with the new value. And if only the timeout gets updated,
1282 	 * then no need for any HCI transactions.
1283 	 */
1284 	if (!!cp->val == hci_dev_test_flag(hdev, HCI_DISCOVERABLE) &&
1285 	    (cp->val == 0x02) == hci_dev_test_flag(hdev,
1286 						   HCI_LIMITED_DISCOVERABLE)) {
1287 		cancel_delayed_work(&hdev->discov_off);
1288 		hdev->discov_timeout = timeout;
1289 
1290 		if (cp->val && hdev->discov_timeout > 0) {
1291 			int to = msecs_to_jiffies(hdev->discov_timeout * 1000);
1292 			queue_delayed_work(hdev->req_workqueue,
1293 					   &hdev->discov_off, to);
1294 		}
1295 
1296 		err = send_settings_rsp(sk, MGMT_OP_SET_DISCOVERABLE, hdev);
1297 		goto failed;
1298 	}
1299 
1300 	cmd = mgmt_pending_add(sk, MGMT_OP_SET_DISCOVERABLE, hdev, data, len);
1301 	if (!cmd) {
1302 		err = -ENOMEM;
1303 		goto failed;
1304 	}
1305 
1306 	/* Cancel any potential discoverable timeout that might be
1307 	 * still active and store new timeout value. The arming of
1308 	 * the timeout happens in the complete handler.
1309 	 */
1310 	cancel_delayed_work(&hdev->discov_off);
1311 	hdev->discov_timeout = timeout;
1312 
1313 	if (cp->val)
1314 		hci_dev_set_flag(hdev, HCI_DISCOVERABLE);
1315 	else
1316 		hci_dev_clear_flag(hdev, HCI_DISCOVERABLE);
1317 
1318 	/* Limited discoverable mode */
1319 	if (cp->val == 0x02)
1320 		hci_dev_set_flag(hdev, HCI_LIMITED_DISCOVERABLE);
1321 	else
1322 		hci_dev_clear_flag(hdev, HCI_LIMITED_DISCOVERABLE);
1323 
1324 	queue_work(hdev->req_workqueue, &hdev->discoverable_update);
1325 	err = 0;
1326 
1327 failed:
1328 	hci_dev_unlock(hdev);
1329 	return err;
1330 }
1331 
1332 void mgmt_set_connectable_complete(struct hci_dev *hdev, u8 status)
1333 {
1334 	struct mgmt_pending_cmd *cmd;
1335 
1336 	BT_DBG("status 0x%02x", status);
1337 
1338 	hci_dev_lock(hdev);
1339 
1340 	cmd = pending_find(MGMT_OP_SET_CONNECTABLE, hdev);
1341 	if (!cmd)
1342 		goto unlock;
1343 
1344 	if (status) {
1345 		u8 mgmt_err = mgmt_status(status);
1346 		mgmt_cmd_status(cmd->sk, cmd->index, cmd->opcode, mgmt_err);
1347 		goto remove_cmd;
1348 	}
1349 
1350 	send_settings_rsp(cmd->sk, MGMT_OP_SET_CONNECTABLE, hdev);
1351 	new_settings(hdev, cmd->sk);
1352 
1353 remove_cmd:
1354 	mgmt_pending_remove(cmd);
1355 
1356 unlock:
1357 	hci_dev_unlock(hdev);
1358 }
1359 
1360 static int set_connectable_update_settings(struct hci_dev *hdev,
1361 					   struct sock *sk, u8 val)
1362 {
1363 	bool changed = false;
1364 	int err;
1365 
1366 	if (!!val != hci_dev_test_flag(hdev, HCI_CONNECTABLE))
1367 		changed = true;
1368 
1369 	if (val) {
1370 		hci_dev_set_flag(hdev, HCI_CONNECTABLE);
1371 	} else {
1372 		hci_dev_clear_flag(hdev, HCI_CONNECTABLE);
1373 		hci_dev_clear_flag(hdev, HCI_DISCOVERABLE);
1374 	}
1375 
1376 	err = send_settings_rsp(sk, MGMT_OP_SET_CONNECTABLE, hdev);
1377 	if (err < 0)
1378 		return err;
1379 
1380 	if (changed) {
1381 		hci_req_update_scan(hdev);
1382 		hci_update_background_scan(hdev);
1383 		return new_settings(hdev, sk);
1384 	}
1385 
1386 	return 0;
1387 }
1388 
1389 static int set_connectable(struct sock *sk, struct hci_dev *hdev, void *data,
1390 			   u16 len)
1391 {
1392 	struct mgmt_mode *cp = data;
1393 	struct mgmt_pending_cmd *cmd;
1394 	int err;
1395 
1396 	BT_DBG("request for %s", hdev->name);
1397 
1398 	if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED) &&
1399 	    !hci_dev_test_flag(hdev, HCI_BREDR_ENABLED))
1400 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_CONNECTABLE,
1401 				       MGMT_STATUS_REJECTED);
1402 
1403 	if (cp->val != 0x00 && cp->val != 0x01)
1404 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_CONNECTABLE,
1405 				       MGMT_STATUS_INVALID_PARAMS);
1406 
1407 	hci_dev_lock(hdev);
1408 
1409 	if (!hdev_is_powered(hdev)) {
1410 		err = set_connectable_update_settings(hdev, sk, cp->val);
1411 		goto failed;
1412 	}
1413 
1414 	if (pending_find(MGMT_OP_SET_DISCOVERABLE, hdev) ||
1415 	    pending_find(MGMT_OP_SET_CONNECTABLE, hdev)) {
1416 		err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_CONNECTABLE,
1417 				      MGMT_STATUS_BUSY);
1418 		goto failed;
1419 	}
1420 
1421 	cmd = mgmt_pending_add(sk, MGMT_OP_SET_CONNECTABLE, hdev, data, len);
1422 	if (!cmd) {
1423 		err = -ENOMEM;
1424 		goto failed;
1425 	}
1426 
1427 	if (cp->val) {
1428 		hci_dev_set_flag(hdev, HCI_CONNECTABLE);
1429 	} else {
1430 		if (hdev->discov_timeout > 0)
1431 			cancel_delayed_work(&hdev->discov_off);
1432 
1433 		hci_dev_clear_flag(hdev, HCI_LIMITED_DISCOVERABLE);
1434 		hci_dev_clear_flag(hdev, HCI_DISCOVERABLE);
1435 		hci_dev_clear_flag(hdev, HCI_CONNECTABLE);
1436 	}
1437 
1438 	queue_work(hdev->req_workqueue, &hdev->connectable_update);
1439 	err = 0;
1440 
1441 failed:
1442 	hci_dev_unlock(hdev);
1443 	return err;
1444 }
1445 
1446 static int set_bondable(struct sock *sk, struct hci_dev *hdev, void *data,
1447 			u16 len)
1448 {
1449 	struct mgmt_mode *cp = data;
1450 	bool changed;
1451 	int err;
1452 
1453 	BT_DBG("request for %s", hdev->name);
1454 
1455 	if (cp->val != 0x00 && cp->val != 0x01)
1456 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_BONDABLE,
1457 				       MGMT_STATUS_INVALID_PARAMS);
1458 
1459 	hci_dev_lock(hdev);
1460 
1461 	if (cp->val)
1462 		changed = !hci_dev_test_and_set_flag(hdev, HCI_BONDABLE);
1463 	else
1464 		changed = hci_dev_test_and_clear_flag(hdev, HCI_BONDABLE);
1465 
1466 	err = send_settings_rsp(sk, MGMT_OP_SET_BONDABLE, hdev);
1467 	if (err < 0)
1468 		goto unlock;
1469 
1470 	if (changed) {
1471 		/* In limited privacy mode the change of bondable mode
1472 		 * may affect the local advertising address.
1473 		 */
1474 		if (hdev_is_powered(hdev) &&
1475 		    hci_dev_test_flag(hdev, HCI_ADVERTISING) &&
1476 		    hci_dev_test_flag(hdev, HCI_DISCOVERABLE) &&
1477 		    hci_dev_test_flag(hdev, HCI_LIMITED_PRIVACY))
1478 			queue_work(hdev->req_workqueue,
1479 				   &hdev->discoverable_update);
1480 
1481 		err = new_settings(hdev, sk);
1482 	}
1483 
1484 unlock:
1485 	hci_dev_unlock(hdev);
1486 	return err;
1487 }
1488 
1489 static int set_link_security(struct sock *sk, struct hci_dev *hdev, void *data,
1490 			     u16 len)
1491 {
1492 	struct mgmt_mode *cp = data;
1493 	struct mgmt_pending_cmd *cmd;
1494 	u8 val, status;
1495 	int err;
1496 
1497 	BT_DBG("request for %s", hdev->name);
1498 
1499 	status = mgmt_bredr_support(hdev);
1500 	if (status)
1501 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_LINK_SECURITY,
1502 				       status);
1503 
1504 	if (cp->val != 0x00 && cp->val != 0x01)
1505 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_LINK_SECURITY,
1506 				       MGMT_STATUS_INVALID_PARAMS);
1507 
1508 	hci_dev_lock(hdev);
1509 
1510 	if (!hdev_is_powered(hdev)) {
1511 		bool changed = false;
1512 
1513 		if (!!cp->val != hci_dev_test_flag(hdev, HCI_LINK_SECURITY)) {
1514 			hci_dev_change_flag(hdev, HCI_LINK_SECURITY);
1515 			changed = true;
1516 		}
1517 
1518 		err = send_settings_rsp(sk, MGMT_OP_SET_LINK_SECURITY, hdev);
1519 		if (err < 0)
1520 			goto failed;
1521 
1522 		if (changed)
1523 			err = new_settings(hdev, sk);
1524 
1525 		goto failed;
1526 	}
1527 
1528 	if (pending_find(MGMT_OP_SET_LINK_SECURITY, hdev)) {
1529 		err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_LINK_SECURITY,
1530 				      MGMT_STATUS_BUSY);
1531 		goto failed;
1532 	}
1533 
1534 	val = !!cp->val;
1535 
1536 	if (test_bit(HCI_AUTH, &hdev->flags) == val) {
1537 		err = send_settings_rsp(sk, MGMT_OP_SET_LINK_SECURITY, hdev);
1538 		goto failed;
1539 	}
1540 
1541 	cmd = mgmt_pending_add(sk, MGMT_OP_SET_LINK_SECURITY, hdev, data, len);
1542 	if (!cmd) {
1543 		err = -ENOMEM;
1544 		goto failed;
1545 	}
1546 
1547 	err = hci_send_cmd(hdev, HCI_OP_WRITE_AUTH_ENABLE, sizeof(val), &val);
1548 	if (err < 0) {
1549 		mgmt_pending_remove(cmd);
1550 		goto failed;
1551 	}
1552 
1553 failed:
1554 	hci_dev_unlock(hdev);
1555 	return err;
1556 }
1557 
1558 static int set_ssp(struct sock *sk, struct hci_dev *hdev, void *data, u16 len)
1559 {
1560 	struct mgmt_mode *cp = data;
1561 	struct mgmt_pending_cmd *cmd;
1562 	u8 status;
1563 	int err;
1564 
1565 	BT_DBG("request for %s", hdev->name);
1566 
1567 	status = mgmt_bredr_support(hdev);
1568 	if (status)
1569 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_SSP, status);
1570 
1571 	if (!lmp_ssp_capable(hdev))
1572 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_SSP,
1573 				       MGMT_STATUS_NOT_SUPPORTED);
1574 
1575 	if (cp->val != 0x00 && cp->val != 0x01)
1576 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_SSP,
1577 				       MGMT_STATUS_INVALID_PARAMS);
1578 
1579 	hci_dev_lock(hdev);
1580 
1581 	if (!hdev_is_powered(hdev)) {
1582 		bool changed;
1583 
1584 		if (cp->val) {
1585 			changed = !hci_dev_test_and_set_flag(hdev,
1586 							     HCI_SSP_ENABLED);
1587 		} else {
1588 			changed = hci_dev_test_and_clear_flag(hdev,
1589 							      HCI_SSP_ENABLED);
1590 			if (!changed)
1591 				changed = hci_dev_test_and_clear_flag(hdev,
1592 								      HCI_HS_ENABLED);
1593 			else
1594 				hci_dev_clear_flag(hdev, HCI_HS_ENABLED);
1595 		}
1596 
1597 		err = send_settings_rsp(sk, MGMT_OP_SET_SSP, hdev);
1598 		if (err < 0)
1599 			goto failed;
1600 
1601 		if (changed)
1602 			err = new_settings(hdev, sk);
1603 
1604 		goto failed;
1605 	}
1606 
1607 	if (pending_find(MGMT_OP_SET_SSP, hdev)) {
1608 		err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_SSP,
1609 				      MGMT_STATUS_BUSY);
1610 		goto failed;
1611 	}
1612 
1613 	if (!!cp->val == hci_dev_test_flag(hdev, HCI_SSP_ENABLED)) {
1614 		err = send_settings_rsp(sk, MGMT_OP_SET_SSP, hdev);
1615 		goto failed;
1616 	}
1617 
1618 	cmd = mgmt_pending_add(sk, MGMT_OP_SET_SSP, hdev, data, len);
1619 	if (!cmd) {
1620 		err = -ENOMEM;
1621 		goto failed;
1622 	}
1623 
1624 	if (!cp->val && hci_dev_test_flag(hdev, HCI_USE_DEBUG_KEYS))
1625 		hci_send_cmd(hdev, HCI_OP_WRITE_SSP_DEBUG_MODE,
1626 			     sizeof(cp->val), &cp->val);
1627 
1628 	err = hci_send_cmd(hdev, HCI_OP_WRITE_SSP_MODE, 1, &cp->val);
1629 	if (err < 0) {
1630 		mgmt_pending_remove(cmd);
1631 		goto failed;
1632 	}
1633 
1634 failed:
1635 	hci_dev_unlock(hdev);
1636 	return err;
1637 }
1638 
1639 static int set_hs(struct sock *sk, struct hci_dev *hdev, void *data, u16 len)
1640 {
1641 	struct mgmt_mode *cp = data;
1642 	bool changed;
1643 	u8 status;
1644 	int err;
1645 
1646 	BT_DBG("request for %s", hdev->name);
1647 
1648 	status = mgmt_bredr_support(hdev);
1649 	if (status)
1650 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_HS, status);
1651 
1652 	if (!lmp_ssp_capable(hdev))
1653 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_HS,
1654 				       MGMT_STATUS_NOT_SUPPORTED);
1655 
1656 	if (!hci_dev_test_flag(hdev, HCI_SSP_ENABLED))
1657 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_HS,
1658 				       MGMT_STATUS_REJECTED);
1659 
1660 	if (cp->val != 0x00 && cp->val != 0x01)
1661 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_HS,
1662 				       MGMT_STATUS_INVALID_PARAMS);
1663 
1664 	hci_dev_lock(hdev);
1665 
1666 	if (pending_find(MGMT_OP_SET_SSP, hdev)) {
1667 		err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_HS,
1668 				      MGMT_STATUS_BUSY);
1669 		goto unlock;
1670 	}
1671 
1672 	if (cp->val) {
1673 		changed = !hci_dev_test_and_set_flag(hdev, HCI_HS_ENABLED);
1674 	} else {
1675 		if (hdev_is_powered(hdev)) {
1676 			err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_HS,
1677 					      MGMT_STATUS_REJECTED);
1678 			goto unlock;
1679 		}
1680 
1681 		changed = hci_dev_test_and_clear_flag(hdev, HCI_HS_ENABLED);
1682 	}
1683 
1684 	err = send_settings_rsp(sk, MGMT_OP_SET_HS, hdev);
1685 	if (err < 0)
1686 		goto unlock;
1687 
1688 	if (changed)
1689 		err = new_settings(hdev, sk);
1690 
1691 unlock:
1692 	hci_dev_unlock(hdev);
1693 	return err;
1694 }
1695 
1696 static void le_enable_complete(struct hci_dev *hdev, u8 status, u16 opcode)
1697 {
1698 	struct cmd_lookup match = { NULL, hdev };
1699 
1700 	hci_dev_lock(hdev);
1701 
1702 	if (status) {
1703 		u8 mgmt_err = mgmt_status(status);
1704 
1705 		mgmt_pending_foreach(MGMT_OP_SET_LE, hdev, cmd_status_rsp,
1706 				     &mgmt_err);
1707 		goto unlock;
1708 	}
1709 
1710 	mgmt_pending_foreach(MGMT_OP_SET_LE, hdev, settings_rsp, &match);
1711 
1712 	new_settings(hdev, match.sk);
1713 
1714 	if (match.sk)
1715 		sock_put(match.sk);
1716 
1717 	/* Make sure the controller has a good default for
1718 	 * advertising data. Restrict the update to when LE
1719 	 * has actually been enabled. During power on, the
1720 	 * update in powered_update_hci will take care of it.
1721 	 */
1722 	if (hci_dev_test_flag(hdev, HCI_LE_ENABLED)) {
1723 		struct hci_request req;
1724 
1725 		hci_req_init(&req, hdev);
1726 		__hci_req_update_adv_data(&req, 0x00);
1727 		__hci_req_update_scan_rsp_data(&req, 0x00);
1728 		hci_req_run(&req, NULL);
1729 		hci_update_background_scan(hdev);
1730 	}
1731 
1732 unlock:
1733 	hci_dev_unlock(hdev);
1734 }
1735 
1736 static int set_le(struct sock *sk, struct hci_dev *hdev, void *data, u16 len)
1737 {
1738 	struct mgmt_mode *cp = data;
1739 	struct hci_cp_write_le_host_supported hci_cp;
1740 	struct mgmt_pending_cmd *cmd;
1741 	struct hci_request req;
1742 	int err;
1743 	u8 val, enabled;
1744 
1745 	BT_DBG("request for %s", hdev->name);
1746 
1747 	if (!lmp_le_capable(hdev))
1748 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_LE,
1749 				       MGMT_STATUS_NOT_SUPPORTED);
1750 
1751 	if (cp->val != 0x00 && cp->val != 0x01)
1752 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_LE,
1753 				       MGMT_STATUS_INVALID_PARAMS);
1754 
1755 	/* Bluetooth single mode LE only controllers or dual-mode
1756 	 * controllers configured as LE only devices, do not allow
1757 	 * switching LE off. These have either LE enabled explicitly
1758 	 * or BR/EDR has been previously switched off.
1759 	 *
1760 	 * When trying to enable an already enabled LE, then gracefully
1761 	 * send a positive response. Trying to disable it however will
1762 	 * result into rejection.
1763 	 */
1764 	if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) {
1765 		if (cp->val == 0x01)
1766 			return send_settings_rsp(sk, MGMT_OP_SET_LE, hdev);
1767 
1768 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_LE,
1769 				       MGMT_STATUS_REJECTED);
1770 	}
1771 
1772 	hci_dev_lock(hdev);
1773 
1774 	val = !!cp->val;
1775 	enabled = lmp_host_le_capable(hdev);
1776 
1777 	if (!val)
1778 		hci_req_clear_adv_instance(hdev, NULL, NULL, 0x00, true);
1779 
1780 	if (!hdev_is_powered(hdev) || val == enabled) {
1781 		bool changed = false;
1782 
1783 		if (val != hci_dev_test_flag(hdev, HCI_LE_ENABLED)) {
1784 			hci_dev_change_flag(hdev, HCI_LE_ENABLED);
1785 			changed = true;
1786 		}
1787 
1788 		if (!val && hci_dev_test_flag(hdev, HCI_ADVERTISING)) {
1789 			hci_dev_clear_flag(hdev, HCI_ADVERTISING);
1790 			changed = true;
1791 		}
1792 
1793 		err = send_settings_rsp(sk, MGMT_OP_SET_LE, hdev);
1794 		if (err < 0)
1795 			goto unlock;
1796 
1797 		if (changed)
1798 			err = new_settings(hdev, sk);
1799 
1800 		goto unlock;
1801 	}
1802 
1803 	if (pending_find(MGMT_OP_SET_LE, hdev) ||
1804 	    pending_find(MGMT_OP_SET_ADVERTISING, hdev)) {
1805 		err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_LE,
1806 				      MGMT_STATUS_BUSY);
1807 		goto unlock;
1808 	}
1809 
1810 	cmd = mgmt_pending_add(sk, MGMT_OP_SET_LE, hdev, data, len);
1811 	if (!cmd) {
1812 		err = -ENOMEM;
1813 		goto unlock;
1814 	}
1815 
1816 	hci_req_init(&req, hdev);
1817 
1818 	memset(&hci_cp, 0, sizeof(hci_cp));
1819 
1820 	if (val) {
1821 		hci_cp.le = val;
1822 		hci_cp.simul = 0x00;
1823 	} else {
1824 		if (hci_dev_test_flag(hdev, HCI_LE_ADV))
1825 			__hci_req_disable_advertising(&req);
1826 	}
1827 
1828 	hci_req_add(&req, HCI_OP_WRITE_LE_HOST_SUPPORTED, sizeof(hci_cp),
1829 		    &hci_cp);
1830 
1831 	err = hci_req_run(&req, le_enable_complete);
1832 	if (err < 0)
1833 		mgmt_pending_remove(cmd);
1834 
1835 unlock:
1836 	hci_dev_unlock(hdev);
1837 	return err;
1838 }
1839 
1840 /* This is a helper function to test for pending mgmt commands that can
1841  * cause CoD or EIR HCI commands. We can only allow one such pending
1842  * mgmt command at a time since otherwise we cannot easily track what
1843  * the current values are, will be, and based on that calculate if a new
1844  * HCI command needs to be sent and if yes with what value.
1845  */
1846 static bool pending_eir_or_class(struct hci_dev *hdev)
1847 {
1848 	struct mgmt_pending_cmd *cmd;
1849 
1850 	list_for_each_entry(cmd, &hdev->mgmt_pending, list) {
1851 		switch (cmd->opcode) {
1852 		case MGMT_OP_ADD_UUID:
1853 		case MGMT_OP_REMOVE_UUID:
1854 		case MGMT_OP_SET_DEV_CLASS:
1855 		case MGMT_OP_SET_POWERED:
1856 			return true;
1857 		}
1858 	}
1859 
1860 	return false;
1861 }
1862 
1863 static const u8 bluetooth_base_uuid[] = {
1864 			0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80,
1865 			0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1866 };
1867 
1868 static u8 get_uuid_size(const u8 *uuid)
1869 {
1870 	u32 val;
1871 
1872 	if (memcmp(uuid, bluetooth_base_uuid, 12))
1873 		return 128;
1874 
1875 	val = get_unaligned_le32(&uuid[12]);
1876 	if (val > 0xffff)
1877 		return 32;
1878 
1879 	return 16;
1880 }
1881 
1882 static void mgmt_class_complete(struct hci_dev *hdev, u16 mgmt_op, u8 status)
1883 {
1884 	struct mgmt_pending_cmd *cmd;
1885 
1886 	hci_dev_lock(hdev);
1887 
1888 	cmd = pending_find(mgmt_op, hdev);
1889 	if (!cmd)
1890 		goto unlock;
1891 
1892 	mgmt_cmd_complete(cmd->sk, cmd->index, cmd->opcode,
1893 			  mgmt_status(status), hdev->dev_class, 3);
1894 
1895 	mgmt_pending_remove(cmd);
1896 
1897 unlock:
1898 	hci_dev_unlock(hdev);
1899 }
1900 
1901 static void add_uuid_complete(struct hci_dev *hdev, u8 status, u16 opcode)
1902 {
1903 	BT_DBG("status 0x%02x", status);
1904 
1905 	mgmt_class_complete(hdev, MGMT_OP_ADD_UUID, status);
1906 }
1907 
1908 static int add_uuid(struct sock *sk, struct hci_dev *hdev, void *data, u16 len)
1909 {
1910 	struct mgmt_cp_add_uuid *cp = data;
1911 	struct mgmt_pending_cmd *cmd;
1912 	struct hci_request req;
1913 	struct bt_uuid *uuid;
1914 	int err;
1915 
1916 	BT_DBG("request for %s", hdev->name);
1917 
1918 	hci_dev_lock(hdev);
1919 
1920 	if (pending_eir_or_class(hdev)) {
1921 		err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_ADD_UUID,
1922 				      MGMT_STATUS_BUSY);
1923 		goto failed;
1924 	}
1925 
1926 	uuid = kmalloc(sizeof(*uuid), GFP_KERNEL);
1927 	if (!uuid) {
1928 		err = -ENOMEM;
1929 		goto failed;
1930 	}
1931 
1932 	memcpy(uuid->uuid, cp->uuid, 16);
1933 	uuid->svc_hint = cp->svc_hint;
1934 	uuid->size = get_uuid_size(cp->uuid);
1935 
1936 	list_add_tail(&uuid->list, &hdev->uuids);
1937 
1938 	hci_req_init(&req, hdev);
1939 
1940 	__hci_req_update_class(&req);
1941 	__hci_req_update_eir(&req);
1942 
1943 	err = hci_req_run(&req, add_uuid_complete);
1944 	if (err < 0) {
1945 		if (err != -ENODATA)
1946 			goto failed;
1947 
1948 		err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_ADD_UUID, 0,
1949 					hdev->dev_class, 3);
1950 		goto failed;
1951 	}
1952 
1953 	cmd = mgmt_pending_add(sk, MGMT_OP_ADD_UUID, hdev, data, len);
1954 	if (!cmd) {
1955 		err = -ENOMEM;
1956 		goto failed;
1957 	}
1958 
1959 	err = 0;
1960 
1961 failed:
1962 	hci_dev_unlock(hdev);
1963 	return err;
1964 }
1965 
1966 static bool enable_service_cache(struct hci_dev *hdev)
1967 {
1968 	if (!hdev_is_powered(hdev))
1969 		return false;
1970 
1971 	if (!hci_dev_test_and_set_flag(hdev, HCI_SERVICE_CACHE)) {
1972 		queue_delayed_work(hdev->workqueue, &hdev->service_cache,
1973 				   CACHE_TIMEOUT);
1974 		return true;
1975 	}
1976 
1977 	return false;
1978 }
1979 
1980 static void remove_uuid_complete(struct hci_dev *hdev, u8 status, u16 opcode)
1981 {
1982 	BT_DBG("status 0x%02x", status);
1983 
1984 	mgmt_class_complete(hdev, MGMT_OP_REMOVE_UUID, status);
1985 }
1986 
1987 static int remove_uuid(struct sock *sk, struct hci_dev *hdev, void *data,
1988 		       u16 len)
1989 {
1990 	struct mgmt_cp_remove_uuid *cp = data;
1991 	struct mgmt_pending_cmd *cmd;
1992 	struct bt_uuid *match, *tmp;
1993 	u8 bt_uuid_any[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
1994 	struct hci_request req;
1995 	int err, found;
1996 
1997 	BT_DBG("request for %s", hdev->name);
1998 
1999 	hci_dev_lock(hdev);
2000 
2001 	if (pending_eir_or_class(hdev)) {
2002 		err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_REMOVE_UUID,
2003 				      MGMT_STATUS_BUSY);
2004 		goto unlock;
2005 	}
2006 
2007 	if (memcmp(cp->uuid, bt_uuid_any, 16) == 0) {
2008 		hci_uuids_clear(hdev);
2009 
2010 		if (enable_service_cache(hdev)) {
2011 			err = mgmt_cmd_complete(sk, hdev->id,
2012 						MGMT_OP_REMOVE_UUID,
2013 						0, hdev->dev_class, 3);
2014 			goto unlock;
2015 		}
2016 
2017 		goto update_class;
2018 	}
2019 
2020 	found = 0;
2021 
2022 	list_for_each_entry_safe(match, tmp, &hdev->uuids, list) {
2023 		if (memcmp(match->uuid, cp->uuid, 16) != 0)
2024 			continue;
2025 
2026 		list_del(&match->list);
2027 		kfree(match);
2028 		found++;
2029 	}
2030 
2031 	if (found == 0) {
2032 		err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_REMOVE_UUID,
2033 				      MGMT_STATUS_INVALID_PARAMS);
2034 		goto unlock;
2035 	}
2036 
2037 update_class:
2038 	hci_req_init(&req, hdev);
2039 
2040 	__hci_req_update_class(&req);
2041 	__hci_req_update_eir(&req);
2042 
2043 	err = hci_req_run(&req, remove_uuid_complete);
2044 	if (err < 0) {
2045 		if (err != -ENODATA)
2046 			goto unlock;
2047 
2048 		err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_REMOVE_UUID, 0,
2049 					hdev->dev_class, 3);
2050 		goto unlock;
2051 	}
2052 
2053 	cmd = mgmt_pending_add(sk, MGMT_OP_REMOVE_UUID, hdev, data, len);
2054 	if (!cmd) {
2055 		err = -ENOMEM;
2056 		goto unlock;
2057 	}
2058 
2059 	err = 0;
2060 
2061 unlock:
2062 	hci_dev_unlock(hdev);
2063 	return err;
2064 }
2065 
2066 static void set_class_complete(struct hci_dev *hdev, u8 status, u16 opcode)
2067 {
2068 	BT_DBG("status 0x%02x", status);
2069 
2070 	mgmt_class_complete(hdev, MGMT_OP_SET_DEV_CLASS, status);
2071 }
2072 
2073 static int set_dev_class(struct sock *sk, struct hci_dev *hdev, void *data,
2074 			 u16 len)
2075 {
2076 	struct mgmt_cp_set_dev_class *cp = data;
2077 	struct mgmt_pending_cmd *cmd;
2078 	struct hci_request req;
2079 	int err;
2080 
2081 	BT_DBG("request for %s", hdev->name);
2082 
2083 	if (!lmp_bredr_capable(hdev))
2084 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_DEV_CLASS,
2085 				       MGMT_STATUS_NOT_SUPPORTED);
2086 
2087 	hci_dev_lock(hdev);
2088 
2089 	if (pending_eir_or_class(hdev)) {
2090 		err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_DEV_CLASS,
2091 				      MGMT_STATUS_BUSY);
2092 		goto unlock;
2093 	}
2094 
2095 	if ((cp->minor & 0x03) != 0 || (cp->major & 0xe0) != 0) {
2096 		err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_DEV_CLASS,
2097 				      MGMT_STATUS_INVALID_PARAMS);
2098 		goto unlock;
2099 	}
2100 
2101 	hdev->major_class = cp->major;
2102 	hdev->minor_class = cp->minor;
2103 
2104 	if (!hdev_is_powered(hdev)) {
2105 		err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_SET_DEV_CLASS, 0,
2106 					hdev->dev_class, 3);
2107 		goto unlock;
2108 	}
2109 
2110 	hci_req_init(&req, hdev);
2111 
2112 	if (hci_dev_test_and_clear_flag(hdev, HCI_SERVICE_CACHE)) {
2113 		hci_dev_unlock(hdev);
2114 		cancel_delayed_work_sync(&hdev->service_cache);
2115 		hci_dev_lock(hdev);
2116 		__hci_req_update_eir(&req);
2117 	}
2118 
2119 	__hci_req_update_class(&req);
2120 
2121 	err = hci_req_run(&req, set_class_complete);
2122 	if (err < 0) {
2123 		if (err != -ENODATA)
2124 			goto unlock;
2125 
2126 		err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_SET_DEV_CLASS, 0,
2127 					hdev->dev_class, 3);
2128 		goto unlock;
2129 	}
2130 
2131 	cmd = mgmt_pending_add(sk, MGMT_OP_SET_DEV_CLASS, hdev, data, len);
2132 	if (!cmd) {
2133 		err = -ENOMEM;
2134 		goto unlock;
2135 	}
2136 
2137 	err = 0;
2138 
2139 unlock:
2140 	hci_dev_unlock(hdev);
2141 	return err;
2142 }
2143 
2144 static int load_link_keys(struct sock *sk, struct hci_dev *hdev, void *data,
2145 			  u16 len)
2146 {
2147 	struct mgmt_cp_load_link_keys *cp = data;
2148 	const u16 max_key_count = ((U16_MAX - sizeof(*cp)) /
2149 				   sizeof(struct mgmt_link_key_info));
2150 	u16 key_count, expected_len;
2151 	bool changed;
2152 	int i;
2153 
2154 	BT_DBG("request for %s", hdev->name);
2155 
2156 	if (!lmp_bredr_capable(hdev))
2157 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_LOAD_LINK_KEYS,
2158 				       MGMT_STATUS_NOT_SUPPORTED);
2159 
2160 	key_count = __le16_to_cpu(cp->key_count);
2161 	if (key_count > max_key_count) {
2162 		bt_dev_err(hdev, "load_link_keys: too big key_count value %u",
2163 			   key_count);
2164 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_LOAD_LINK_KEYS,
2165 				       MGMT_STATUS_INVALID_PARAMS);
2166 	}
2167 
2168 	expected_len = sizeof(*cp) + key_count *
2169 					sizeof(struct mgmt_link_key_info);
2170 	if (expected_len != len) {
2171 		bt_dev_err(hdev, "load_link_keys: expected %u bytes, got %u bytes",
2172 			   expected_len, len);
2173 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_LOAD_LINK_KEYS,
2174 				       MGMT_STATUS_INVALID_PARAMS);
2175 	}
2176 
2177 	if (cp->debug_keys != 0x00 && cp->debug_keys != 0x01)
2178 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_LOAD_LINK_KEYS,
2179 				       MGMT_STATUS_INVALID_PARAMS);
2180 
2181 	BT_DBG("%s debug_keys %u key_count %u", hdev->name, cp->debug_keys,
2182 	       key_count);
2183 
2184 	for (i = 0; i < key_count; i++) {
2185 		struct mgmt_link_key_info *key = &cp->keys[i];
2186 
2187 		if (key->addr.type != BDADDR_BREDR || key->type > 0x08)
2188 			return mgmt_cmd_status(sk, hdev->id,
2189 					       MGMT_OP_LOAD_LINK_KEYS,
2190 					       MGMT_STATUS_INVALID_PARAMS);
2191 	}
2192 
2193 	hci_dev_lock(hdev);
2194 
2195 	hci_link_keys_clear(hdev);
2196 
2197 	if (cp->debug_keys)
2198 		changed = !hci_dev_test_and_set_flag(hdev, HCI_KEEP_DEBUG_KEYS);
2199 	else
2200 		changed = hci_dev_test_and_clear_flag(hdev,
2201 						      HCI_KEEP_DEBUG_KEYS);
2202 
2203 	if (changed)
2204 		new_settings(hdev, NULL);
2205 
2206 	for (i = 0; i < key_count; i++) {
2207 		struct mgmt_link_key_info *key = &cp->keys[i];
2208 
2209 		/* Always ignore debug keys and require a new pairing if
2210 		 * the user wants to use them.
2211 		 */
2212 		if (key->type == HCI_LK_DEBUG_COMBINATION)
2213 			continue;
2214 
2215 		hci_add_link_key(hdev, NULL, &key->addr.bdaddr, key->val,
2216 				 key->type, key->pin_len, NULL);
2217 	}
2218 
2219 	mgmt_cmd_complete(sk, hdev->id, MGMT_OP_LOAD_LINK_KEYS, 0, NULL, 0);
2220 
2221 	hci_dev_unlock(hdev);
2222 
2223 	return 0;
2224 }
2225 
2226 static int device_unpaired(struct hci_dev *hdev, bdaddr_t *bdaddr,
2227 			   u8 addr_type, struct sock *skip_sk)
2228 {
2229 	struct mgmt_ev_device_unpaired ev;
2230 
2231 	bacpy(&ev.addr.bdaddr, bdaddr);
2232 	ev.addr.type = addr_type;
2233 
2234 	return mgmt_event(MGMT_EV_DEVICE_UNPAIRED, hdev, &ev, sizeof(ev),
2235 			  skip_sk);
2236 }
2237 
2238 static int unpair_device(struct sock *sk, struct hci_dev *hdev, void *data,
2239 			 u16 len)
2240 {
2241 	struct mgmt_cp_unpair_device *cp = data;
2242 	struct mgmt_rp_unpair_device rp;
2243 	struct hci_conn_params *params;
2244 	struct mgmt_pending_cmd *cmd;
2245 	struct hci_conn *conn;
2246 	u8 addr_type;
2247 	int err;
2248 
2249 	memset(&rp, 0, sizeof(rp));
2250 	bacpy(&rp.addr.bdaddr, &cp->addr.bdaddr);
2251 	rp.addr.type = cp->addr.type;
2252 
2253 	if (!bdaddr_type_is_valid(cp->addr.type))
2254 		return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_UNPAIR_DEVICE,
2255 					 MGMT_STATUS_INVALID_PARAMS,
2256 					 &rp, sizeof(rp));
2257 
2258 	if (cp->disconnect != 0x00 && cp->disconnect != 0x01)
2259 		return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_UNPAIR_DEVICE,
2260 					 MGMT_STATUS_INVALID_PARAMS,
2261 					 &rp, sizeof(rp));
2262 
2263 	hci_dev_lock(hdev);
2264 
2265 	if (!hdev_is_powered(hdev)) {
2266 		err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_UNPAIR_DEVICE,
2267 					MGMT_STATUS_NOT_POWERED, &rp,
2268 					sizeof(rp));
2269 		goto unlock;
2270 	}
2271 
2272 	if (cp->addr.type == BDADDR_BREDR) {
2273 		/* If disconnection is requested, then look up the
2274 		 * connection. If the remote device is connected, it
2275 		 * will be later used to terminate the link.
2276 		 *
2277 		 * Setting it to NULL explicitly will cause no
2278 		 * termination of the link.
2279 		 */
2280 		if (cp->disconnect)
2281 			conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK,
2282 						       &cp->addr.bdaddr);
2283 		else
2284 			conn = NULL;
2285 
2286 		err = hci_remove_link_key(hdev, &cp->addr.bdaddr);
2287 		if (err < 0) {
2288 			err = mgmt_cmd_complete(sk, hdev->id,
2289 						MGMT_OP_UNPAIR_DEVICE,
2290 						MGMT_STATUS_NOT_PAIRED, &rp,
2291 						sizeof(rp));
2292 			goto unlock;
2293 		}
2294 
2295 		goto done;
2296 	}
2297 
2298 	/* LE address type */
2299 	addr_type = le_addr_type(cp->addr.type);
2300 
2301 	hci_remove_irk(hdev, &cp->addr.bdaddr, addr_type);
2302 
2303 	err = hci_remove_ltk(hdev, &cp->addr.bdaddr, addr_type);
2304 	if (err < 0) {
2305 		err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_UNPAIR_DEVICE,
2306 					MGMT_STATUS_NOT_PAIRED, &rp,
2307 					sizeof(rp));
2308 		goto unlock;
2309 	}
2310 
2311 	conn = hci_conn_hash_lookup_le(hdev, &cp->addr.bdaddr, addr_type);
2312 	if (!conn) {
2313 		hci_conn_params_del(hdev, &cp->addr.bdaddr, addr_type);
2314 		goto done;
2315 	}
2316 
2317 	/* Abort any ongoing SMP pairing */
2318 	smp_cancel_pairing(conn);
2319 
2320 	/* Defer clearing up the connection parameters until closing to
2321 	 * give a chance of keeping them if a repairing happens.
2322 	 */
2323 	set_bit(HCI_CONN_PARAM_REMOVAL_PEND, &conn->flags);
2324 
2325 	/* Disable auto-connection parameters if present */
2326 	params = hci_conn_params_lookup(hdev, &cp->addr.bdaddr, addr_type);
2327 	if (params) {
2328 		if (params->explicit_connect)
2329 			params->auto_connect = HCI_AUTO_CONN_EXPLICIT;
2330 		else
2331 			params->auto_connect = HCI_AUTO_CONN_DISABLED;
2332 	}
2333 
2334 	/* If disconnection is not requested, then clear the connection
2335 	 * variable so that the link is not terminated.
2336 	 */
2337 	if (!cp->disconnect)
2338 		conn = NULL;
2339 
2340 done:
2341 	/* If the connection variable is set, then termination of the
2342 	 * link is requested.
2343 	 */
2344 	if (!conn) {
2345 		err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_UNPAIR_DEVICE, 0,
2346 					&rp, sizeof(rp));
2347 		device_unpaired(hdev, &cp->addr.bdaddr, cp->addr.type, sk);
2348 		goto unlock;
2349 	}
2350 
2351 	cmd = mgmt_pending_add(sk, MGMT_OP_UNPAIR_DEVICE, hdev, cp,
2352 			       sizeof(*cp));
2353 	if (!cmd) {
2354 		err = -ENOMEM;
2355 		goto unlock;
2356 	}
2357 
2358 	cmd->cmd_complete = addr_cmd_complete;
2359 
2360 	err = hci_abort_conn(conn, HCI_ERROR_REMOTE_USER_TERM);
2361 	if (err < 0)
2362 		mgmt_pending_remove(cmd);
2363 
2364 unlock:
2365 	hci_dev_unlock(hdev);
2366 	return err;
2367 }
2368 
2369 static int disconnect(struct sock *sk, struct hci_dev *hdev, void *data,
2370 		      u16 len)
2371 {
2372 	struct mgmt_cp_disconnect *cp = data;
2373 	struct mgmt_rp_disconnect rp;
2374 	struct mgmt_pending_cmd *cmd;
2375 	struct hci_conn *conn;
2376 	int err;
2377 
2378 	BT_DBG("");
2379 
2380 	memset(&rp, 0, sizeof(rp));
2381 	bacpy(&rp.addr.bdaddr, &cp->addr.bdaddr);
2382 	rp.addr.type = cp->addr.type;
2383 
2384 	if (!bdaddr_type_is_valid(cp->addr.type))
2385 		return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_DISCONNECT,
2386 					 MGMT_STATUS_INVALID_PARAMS,
2387 					 &rp, sizeof(rp));
2388 
2389 	hci_dev_lock(hdev);
2390 
2391 	if (!test_bit(HCI_UP, &hdev->flags)) {
2392 		err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_DISCONNECT,
2393 					MGMT_STATUS_NOT_POWERED, &rp,
2394 					sizeof(rp));
2395 		goto failed;
2396 	}
2397 
2398 	if (pending_find(MGMT_OP_DISCONNECT, hdev)) {
2399 		err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_DISCONNECT,
2400 					MGMT_STATUS_BUSY, &rp, sizeof(rp));
2401 		goto failed;
2402 	}
2403 
2404 	if (cp->addr.type == BDADDR_BREDR)
2405 		conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK,
2406 					       &cp->addr.bdaddr);
2407 	else
2408 		conn = hci_conn_hash_lookup_le(hdev, &cp->addr.bdaddr,
2409 					       le_addr_type(cp->addr.type));
2410 
2411 	if (!conn || conn->state == BT_OPEN || conn->state == BT_CLOSED) {
2412 		err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_DISCONNECT,
2413 					MGMT_STATUS_NOT_CONNECTED, &rp,
2414 					sizeof(rp));
2415 		goto failed;
2416 	}
2417 
2418 	cmd = mgmt_pending_add(sk, MGMT_OP_DISCONNECT, hdev, data, len);
2419 	if (!cmd) {
2420 		err = -ENOMEM;
2421 		goto failed;
2422 	}
2423 
2424 	cmd->cmd_complete = generic_cmd_complete;
2425 
2426 	err = hci_disconnect(conn, HCI_ERROR_REMOTE_USER_TERM);
2427 	if (err < 0)
2428 		mgmt_pending_remove(cmd);
2429 
2430 failed:
2431 	hci_dev_unlock(hdev);
2432 	return err;
2433 }
2434 
2435 static u8 link_to_bdaddr(u8 link_type, u8 addr_type)
2436 {
2437 	switch (link_type) {
2438 	case LE_LINK:
2439 		switch (addr_type) {
2440 		case ADDR_LE_DEV_PUBLIC:
2441 			return BDADDR_LE_PUBLIC;
2442 
2443 		default:
2444 			/* Fallback to LE Random address type */
2445 			return BDADDR_LE_RANDOM;
2446 		}
2447 
2448 	default:
2449 		/* Fallback to BR/EDR type */
2450 		return BDADDR_BREDR;
2451 	}
2452 }
2453 
2454 static int get_connections(struct sock *sk, struct hci_dev *hdev, void *data,
2455 			   u16 data_len)
2456 {
2457 	struct mgmt_rp_get_connections *rp;
2458 	struct hci_conn *c;
2459 	size_t rp_len;
2460 	int err;
2461 	u16 i;
2462 
2463 	BT_DBG("");
2464 
2465 	hci_dev_lock(hdev);
2466 
2467 	if (!hdev_is_powered(hdev)) {
2468 		err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_GET_CONNECTIONS,
2469 				      MGMT_STATUS_NOT_POWERED);
2470 		goto unlock;
2471 	}
2472 
2473 	i = 0;
2474 	list_for_each_entry(c, &hdev->conn_hash.list, list) {
2475 		if (test_bit(HCI_CONN_MGMT_CONNECTED, &c->flags))
2476 			i++;
2477 	}
2478 
2479 	rp_len = sizeof(*rp) + (i * sizeof(struct mgmt_addr_info));
2480 	rp = kmalloc(rp_len, GFP_KERNEL);
2481 	if (!rp) {
2482 		err = -ENOMEM;
2483 		goto unlock;
2484 	}
2485 
2486 	i = 0;
2487 	list_for_each_entry(c, &hdev->conn_hash.list, list) {
2488 		if (!test_bit(HCI_CONN_MGMT_CONNECTED, &c->flags))
2489 			continue;
2490 		bacpy(&rp->addr[i].bdaddr, &c->dst);
2491 		rp->addr[i].type = link_to_bdaddr(c->type, c->dst_type);
2492 		if (c->type == SCO_LINK || c->type == ESCO_LINK)
2493 			continue;
2494 		i++;
2495 	}
2496 
2497 	rp->conn_count = cpu_to_le16(i);
2498 
2499 	/* Recalculate length in case of filtered SCO connections, etc */
2500 	rp_len = sizeof(*rp) + (i * sizeof(struct mgmt_addr_info));
2501 
2502 	err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_GET_CONNECTIONS, 0, rp,
2503 				rp_len);
2504 
2505 	kfree(rp);
2506 
2507 unlock:
2508 	hci_dev_unlock(hdev);
2509 	return err;
2510 }
2511 
2512 static int send_pin_code_neg_reply(struct sock *sk, struct hci_dev *hdev,
2513 				   struct mgmt_cp_pin_code_neg_reply *cp)
2514 {
2515 	struct mgmt_pending_cmd *cmd;
2516 	int err;
2517 
2518 	cmd = mgmt_pending_add(sk, MGMT_OP_PIN_CODE_NEG_REPLY, hdev, cp,
2519 			       sizeof(*cp));
2520 	if (!cmd)
2521 		return -ENOMEM;
2522 
2523 	cmd->cmd_complete = addr_cmd_complete;
2524 
2525 	err = hci_send_cmd(hdev, HCI_OP_PIN_CODE_NEG_REPLY,
2526 			   sizeof(cp->addr.bdaddr), &cp->addr.bdaddr);
2527 	if (err < 0)
2528 		mgmt_pending_remove(cmd);
2529 
2530 	return err;
2531 }
2532 
2533 static int pin_code_reply(struct sock *sk, struct hci_dev *hdev, void *data,
2534 			  u16 len)
2535 {
2536 	struct hci_conn *conn;
2537 	struct mgmt_cp_pin_code_reply *cp = data;
2538 	struct hci_cp_pin_code_reply reply;
2539 	struct mgmt_pending_cmd *cmd;
2540 	int err;
2541 
2542 	BT_DBG("");
2543 
2544 	hci_dev_lock(hdev);
2545 
2546 	if (!hdev_is_powered(hdev)) {
2547 		err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_PIN_CODE_REPLY,
2548 				      MGMT_STATUS_NOT_POWERED);
2549 		goto failed;
2550 	}
2551 
2552 	conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->addr.bdaddr);
2553 	if (!conn) {
2554 		err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_PIN_CODE_REPLY,
2555 				      MGMT_STATUS_NOT_CONNECTED);
2556 		goto failed;
2557 	}
2558 
2559 	if (conn->pending_sec_level == BT_SECURITY_HIGH && cp->pin_len != 16) {
2560 		struct mgmt_cp_pin_code_neg_reply ncp;
2561 
2562 		memcpy(&ncp.addr, &cp->addr, sizeof(ncp.addr));
2563 
2564 		bt_dev_err(hdev, "PIN code is not 16 bytes long");
2565 
2566 		err = send_pin_code_neg_reply(sk, hdev, &ncp);
2567 		if (err >= 0)
2568 			err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_PIN_CODE_REPLY,
2569 					      MGMT_STATUS_INVALID_PARAMS);
2570 
2571 		goto failed;
2572 	}
2573 
2574 	cmd = mgmt_pending_add(sk, MGMT_OP_PIN_CODE_REPLY, hdev, data, len);
2575 	if (!cmd) {
2576 		err = -ENOMEM;
2577 		goto failed;
2578 	}
2579 
2580 	cmd->cmd_complete = addr_cmd_complete;
2581 
2582 	bacpy(&reply.bdaddr, &cp->addr.bdaddr);
2583 	reply.pin_len = cp->pin_len;
2584 	memcpy(reply.pin_code, cp->pin_code, sizeof(reply.pin_code));
2585 
2586 	err = hci_send_cmd(hdev, HCI_OP_PIN_CODE_REPLY, sizeof(reply), &reply);
2587 	if (err < 0)
2588 		mgmt_pending_remove(cmd);
2589 
2590 failed:
2591 	hci_dev_unlock(hdev);
2592 	return err;
2593 }
2594 
2595 static int set_io_capability(struct sock *sk, struct hci_dev *hdev, void *data,
2596 			     u16 len)
2597 {
2598 	struct mgmt_cp_set_io_capability *cp = data;
2599 
2600 	BT_DBG("");
2601 
2602 	if (cp->io_capability > SMP_IO_KEYBOARD_DISPLAY)
2603 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_IO_CAPABILITY,
2604 				       MGMT_STATUS_INVALID_PARAMS);
2605 
2606 	hci_dev_lock(hdev);
2607 
2608 	hdev->io_capability = cp->io_capability;
2609 
2610 	BT_DBG("%s IO capability set to 0x%02x", hdev->name,
2611 	       hdev->io_capability);
2612 
2613 	hci_dev_unlock(hdev);
2614 
2615 	return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_SET_IO_CAPABILITY, 0,
2616 				 NULL, 0);
2617 }
2618 
2619 static struct mgmt_pending_cmd *find_pairing(struct hci_conn *conn)
2620 {
2621 	struct hci_dev *hdev = conn->hdev;
2622 	struct mgmt_pending_cmd *cmd;
2623 
2624 	list_for_each_entry(cmd, &hdev->mgmt_pending, list) {
2625 		if (cmd->opcode != MGMT_OP_PAIR_DEVICE)
2626 			continue;
2627 
2628 		if (cmd->user_data != conn)
2629 			continue;
2630 
2631 		return cmd;
2632 	}
2633 
2634 	return NULL;
2635 }
2636 
2637 static int pairing_complete(struct mgmt_pending_cmd *cmd, u8 status)
2638 {
2639 	struct mgmt_rp_pair_device rp;
2640 	struct hci_conn *conn = cmd->user_data;
2641 	int err;
2642 
2643 	bacpy(&rp.addr.bdaddr, &conn->dst);
2644 	rp.addr.type = link_to_bdaddr(conn->type, conn->dst_type);
2645 
2646 	err = mgmt_cmd_complete(cmd->sk, cmd->index, MGMT_OP_PAIR_DEVICE,
2647 				status, &rp, sizeof(rp));
2648 
2649 	/* So we don't get further callbacks for this connection */
2650 	conn->connect_cfm_cb = NULL;
2651 	conn->security_cfm_cb = NULL;
2652 	conn->disconn_cfm_cb = NULL;
2653 
2654 	hci_conn_drop(conn);
2655 
2656 	/* The device is paired so there is no need to remove
2657 	 * its connection parameters anymore.
2658 	 */
2659 	clear_bit(HCI_CONN_PARAM_REMOVAL_PEND, &conn->flags);
2660 
2661 	hci_conn_put(conn);
2662 
2663 	return err;
2664 }
2665 
2666 void mgmt_smp_complete(struct hci_conn *conn, bool complete)
2667 {
2668 	u8 status = complete ? MGMT_STATUS_SUCCESS : MGMT_STATUS_FAILED;
2669 	struct mgmt_pending_cmd *cmd;
2670 
2671 	cmd = find_pairing(conn);
2672 	if (cmd) {
2673 		cmd->cmd_complete(cmd, status);
2674 		mgmt_pending_remove(cmd);
2675 	}
2676 }
2677 
2678 static void pairing_complete_cb(struct hci_conn *conn, u8 status)
2679 {
2680 	struct mgmt_pending_cmd *cmd;
2681 
2682 	BT_DBG("status %u", status);
2683 
2684 	cmd = find_pairing(conn);
2685 	if (!cmd) {
2686 		BT_DBG("Unable to find a pending command");
2687 		return;
2688 	}
2689 
2690 	cmd->cmd_complete(cmd, mgmt_status(status));
2691 	mgmt_pending_remove(cmd);
2692 }
2693 
2694 static void le_pairing_complete_cb(struct hci_conn *conn, u8 status)
2695 {
2696 	struct mgmt_pending_cmd *cmd;
2697 
2698 	BT_DBG("status %u", status);
2699 
2700 	if (!status)
2701 		return;
2702 
2703 	cmd = find_pairing(conn);
2704 	if (!cmd) {
2705 		BT_DBG("Unable to find a pending command");
2706 		return;
2707 	}
2708 
2709 	cmd->cmd_complete(cmd, mgmt_status(status));
2710 	mgmt_pending_remove(cmd);
2711 }
2712 
2713 static int pair_device(struct sock *sk, struct hci_dev *hdev, void *data,
2714 		       u16 len)
2715 {
2716 	struct mgmt_cp_pair_device *cp = data;
2717 	struct mgmt_rp_pair_device rp;
2718 	struct mgmt_pending_cmd *cmd;
2719 	u8 sec_level, auth_type;
2720 	struct hci_conn *conn;
2721 	int err;
2722 
2723 	BT_DBG("");
2724 
2725 	memset(&rp, 0, sizeof(rp));
2726 	bacpy(&rp.addr.bdaddr, &cp->addr.bdaddr);
2727 	rp.addr.type = cp->addr.type;
2728 
2729 	if (!bdaddr_type_is_valid(cp->addr.type))
2730 		return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_PAIR_DEVICE,
2731 					 MGMT_STATUS_INVALID_PARAMS,
2732 					 &rp, sizeof(rp));
2733 
2734 	if (cp->io_cap > SMP_IO_KEYBOARD_DISPLAY)
2735 		return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_PAIR_DEVICE,
2736 					 MGMT_STATUS_INVALID_PARAMS,
2737 					 &rp, sizeof(rp));
2738 
2739 	hci_dev_lock(hdev);
2740 
2741 	if (!hdev_is_powered(hdev)) {
2742 		err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_PAIR_DEVICE,
2743 					MGMT_STATUS_NOT_POWERED, &rp,
2744 					sizeof(rp));
2745 		goto unlock;
2746 	}
2747 
2748 	if (hci_bdaddr_is_paired(hdev, &cp->addr.bdaddr, cp->addr.type)) {
2749 		err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_PAIR_DEVICE,
2750 					MGMT_STATUS_ALREADY_PAIRED, &rp,
2751 					sizeof(rp));
2752 		goto unlock;
2753 	}
2754 
2755 	sec_level = BT_SECURITY_MEDIUM;
2756 	auth_type = HCI_AT_DEDICATED_BONDING;
2757 
2758 	if (cp->addr.type == BDADDR_BREDR) {
2759 		conn = hci_connect_acl(hdev, &cp->addr.bdaddr, sec_level,
2760 				       auth_type);
2761 	} else {
2762 		u8 addr_type = le_addr_type(cp->addr.type);
2763 		struct hci_conn_params *p;
2764 
2765 		/* When pairing a new device, it is expected to remember
2766 		 * this device for future connections. Adding the connection
2767 		 * parameter information ahead of time allows tracking
2768 		 * of the slave preferred values and will speed up any
2769 		 * further connection establishment.
2770 		 *
2771 		 * If connection parameters already exist, then they
2772 		 * will be kept and this function does nothing.
2773 		 */
2774 		p = hci_conn_params_add(hdev, &cp->addr.bdaddr, addr_type);
2775 
2776 		if (p->auto_connect == HCI_AUTO_CONN_EXPLICIT)
2777 			p->auto_connect = HCI_AUTO_CONN_DISABLED;
2778 
2779 		conn = hci_connect_le_scan(hdev, &cp->addr.bdaddr,
2780 					   addr_type, sec_level,
2781 					   HCI_LE_CONN_TIMEOUT);
2782 	}
2783 
2784 	if (IS_ERR(conn)) {
2785 		int status;
2786 
2787 		if (PTR_ERR(conn) == -EBUSY)
2788 			status = MGMT_STATUS_BUSY;
2789 		else if (PTR_ERR(conn) == -EOPNOTSUPP)
2790 			status = MGMT_STATUS_NOT_SUPPORTED;
2791 		else if (PTR_ERR(conn) == -ECONNREFUSED)
2792 			status = MGMT_STATUS_REJECTED;
2793 		else
2794 			status = MGMT_STATUS_CONNECT_FAILED;
2795 
2796 		err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_PAIR_DEVICE,
2797 					status, &rp, sizeof(rp));
2798 		goto unlock;
2799 	}
2800 
2801 	if (conn->connect_cfm_cb) {
2802 		hci_conn_drop(conn);
2803 		err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_PAIR_DEVICE,
2804 					MGMT_STATUS_BUSY, &rp, sizeof(rp));
2805 		goto unlock;
2806 	}
2807 
2808 	cmd = mgmt_pending_add(sk, MGMT_OP_PAIR_DEVICE, hdev, data, len);
2809 	if (!cmd) {
2810 		err = -ENOMEM;
2811 		hci_conn_drop(conn);
2812 		goto unlock;
2813 	}
2814 
2815 	cmd->cmd_complete = pairing_complete;
2816 
2817 	/* For LE, just connecting isn't a proof that the pairing finished */
2818 	if (cp->addr.type == BDADDR_BREDR) {
2819 		conn->connect_cfm_cb = pairing_complete_cb;
2820 		conn->security_cfm_cb = pairing_complete_cb;
2821 		conn->disconn_cfm_cb = pairing_complete_cb;
2822 	} else {
2823 		conn->connect_cfm_cb = le_pairing_complete_cb;
2824 		conn->security_cfm_cb = le_pairing_complete_cb;
2825 		conn->disconn_cfm_cb = le_pairing_complete_cb;
2826 	}
2827 
2828 	conn->io_capability = cp->io_cap;
2829 	cmd->user_data = hci_conn_get(conn);
2830 
2831 	if ((conn->state == BT_CONNECTED || conn->state == BT_CONFIG) &&
2832 	    hci_conn_security(conn, sec_level, auth_type, true)) {
2833 		cmd->cmd_complete(cmd, 0);
2834 		mgmt_pending_remove(cmd);
2835 	}
2836 
2837 	err = 0;
2838 
2839 unlock:
2840 	hci_dev_unlock(hdev);
2841 	return err;
2842 }
2843 
2844 static int cancel_pair_device(struct sock *sk, struct hci_dev *hdev, void *data,
2845 			      u16 len)
2846 {
2847 	struct mgmt_addr_info *addr = data;
2848 	struct mgmt_pending_cmd *cmd;
2849 	struct hci_conn *conn;
2850 	int err;
2851 
2852 	BT_DBG("");
2853 
2854 	hci_dev_lock(hdev);
2855 
2856 	if (!hdev_is_powered(hdev)) {
2857 		err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_CANCEL_PAIR_DEVICE,
2858 				      MGMT_STATUS_NOT_POWERED);
2859 		goto unlock;
2860 	}
2861 
2862 	cmd = pending_find(MGMT_OP_PAIR_DEVICE, hdev);
2863 	if (!cmd) {
2864 		err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_CANCEL_PAIR_DEVICE,
2865 				      MGMT_STATUS_INVALID_PARAMS);
2866 		goto unlock;
2867 	}
2868 
2869 	conn = cmd->user_data;
2870 
2871 	if (bacmp(&addr->bdaddr, &conn->dst) != 0) {
2872 		err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_CANCEL_PAIR_DEVICE,
2873 				      MGMT_STATUS_INVALID_PARAMS);
2874 		goto unlock;
2875 	}
2876 
2877 	cmd->cmd_complete(cmd, MGMT_STATUS_CANCELLED);
2878 	mgmt_pending_remove(cmd);
2879 
2880 	err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_CANCEL_PAIR_DEVICE, 0,
2881 				addr, sizeof(*addr));
2882 unlock:
2883 	hci_dev_unlock(hdev);
2884 	return err;
2885 }
2886 
2887 static int user_pairing_resp(struct sock *sk, struct hci_dev *hdev,
2888 			     struct mgmt_addr_info *addr, u16 mgmt_op,
2889 			     u16 hci_op, __le32 passkey)
2890 {
2891 	struct mgmt_pending_cmd *cmd;
2892 	struct hci_conn *conn;
2893 	int err;
2894 
2895 	hci_dev_lock(hdev);
2896 
2897 	if (!hdev_is_powered(hdev)) {
2898 		err = mgmt_cmd_complete(sk, hdev->id, mgmt_op,
2899 					MGMT_STATUS_NOT_POWERED, addr,
2900 					sizeof(*addr));
2901 		goto done;
2902 	}
2903 
2904 	if (addr->type == BDADDR_BREDR)
2905 		conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &addr->bdaddr);
2906 	else
2907 		conn = hci_conn_hash_lookup_le(hdev, &addr->bdaddr,
2908 					       le_addr_type(addr->type));
2909 
2910 	if (!conn) {
2911 		err = mgmt_cmd_complete(sk, hdev->id, mgmt_op,
2912 					MGMT_STATUS_NOT_CONNECTED, addr,
2913 					sizeof(*addr));
2914 		goto done;
2915 	}
2916 
2917 	if (addr->type == BDADDR_LE_PUBLIC || addr->type == BDADDR_LE_RANDOM) {
2918 		err = smp_user_confirm_reply(conn, mgmt_op, passkey);
2919 		if (!err)
2920 			err = mgmt_cmd_complete(sk, hdev->id, mgmt_op,
2921 						MGMT_STATUS_SUCCESS, addr,
2922 						sizeof(*addr));
2923 		else
2924 			err = mgmt_cmd_complete(sk, hdev->id, mgmt_op,
2925 						MGMT_STATUS_FAILED, addr,
2926 						sizeof(*addr));
2927 
2928 		goto done;
2929 	}
2930 
2931 	cmd = mgmt_pending_add(sk, mgmt_op, hdev, addr, sizeof(*addr));
2932 	if (!cmd) {
2933 		err = -ENOMEM;
2934 		goto done;
2935 	}
2936 
2937 	cmd->cmd_complete = addr_cmd_complete;
2938 
2939 	/* Continue with pairing via HCI */
2940 	if (hci_op == HCI_OP_USER_PASSKEY_REPLY) {
2941 		struct hci_cp_user_passkey_reply cp;
2942 
2943 		bacpy(&cp.bdaddr, &addr->bdaddr);
2944 		cp.passkey = passkey;
2945 		err = hci_send_cmd(hdev, hci_op, sizeof(cp), &cp);
2946 	} else
2947 		err = hci_send_cmd(hdev, hci_op, sizeof(addr->bdaddr),
2948 				   &addr->bdaddr);
2949 
2950 	if (err < 0)
2951 		mgmt_pending_remove(cmd);
2952 
2953 done:
2954 	hci_dev_unlock(hdev);
2955 	return err;
2956 }
2957 
2958 static int pin_code_neg_reply(struct sock *sk, struct hci_dev *hdev,
2959 			      void *data, u16 len)
2960 {
2961 	struct mgmt_cp_pin_code_neg_reply *cp = data;
2962 
2963 	BT_DBG("");
2964 
2965 	return user_pairing_resp(sk, hdev, &cp->addr,
2966 				MGMT_OP_PIN_CODE_NEG_REPLY,
2967 				HCI_OP_PIN_CODE_NEG_REPLY, 0);
2968 }
2969 
2970 static int user_confirm_reply(struct sock *sk, struct hci_dev *hdev, void *data,
2971 			      u16 len)
2972 {
2973 	struct mgmt_cp_user_confirm_reply *cp = data;
2974 
2975 	BT_DBG("");
2976 
2977 	if (len != sizeof(*cp))
2978 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_USER_CONFIRM_REPLY,
2979 				       MGMT_STATUS_INVALID_PARAMS);
2980 
2981 	return user_pairing_resp(sk, hdev, &cp->addr,
2982 				 MGMT_OP_USER_CONFIRM_REPLY,
2983 				 HCI_OP_USER_CONFIRM_REPLY, 0);
2984 }
2985 
2986 static int user_confirm_neg_reply(struct sock *sk, struct hci_dev *hdev,
2987 				  void *data, u16 len)
2988 {
2989 	struct mgmt_cp_user_confirm_neg_reply *cp = data;
2990 
2991 	BT_DBG("");
2992 
2993 	return user_pairing_resp(sk, hdev, &cp->addr,
2994 				 MGMT_OP_USER_CONFIRM_NEG_REPLY,
2995 				 HCI_OP_USER_CONFIRM_NEG_REPLY, 0);
2996 }
2997 
2998 static int user_passkey_reply(struct sock *sk, struct hci_dev *hdev, void *data,
2999 			      u16 len)
3000 {
3001 	struct mgmt_cp_user_passkey_reply *cp = data;
3002 
3003 	BT_DBG("");
3004 
3005 	return user_pairing_resp(sk, hdev, &cp->addr,
3006 				 MGMT_OP_USER_PASSKEY_REPLY,
3007 				 HCI_OP_USER_PASSKEY_REPLY, cp->passkey);
3008 }
3009 
3010 static int user_passkey_neg_reply(struct sock *sk, struct hci_dev *hdev,
3011 				  void *data, u16 len)
3012 {
3013 	struct mgmt_cp_user_passkey_neg_reply *cp = data;
3014 
3015 	BT_DBG("");
3016 
3017 	return user_pairing_resp(sk, hdev, &cp->addr,
3018 				 MGMT_OP_USER_PASSKEY_NEG_REPLY,
3019 				 HCI_OP_USER_PASSKEY_NEG_REPLY, 0);
3020 }
3021 
3022 static void adv_expire(struct hci_dev *hdev, u32 flags)
3023 {
3024 	struct adv_info *adv_instance;
3025 	struct hci_request req;
3026 	int err;
3027 
3028 	adv_instance = hci_find_adv_instance(hdev, hdev->cur_adv_instance);
3029 	if (!adv_instance)
3030 		return;
3031 
3032 	/* stop if current instance doesn't need to be changed */
3033 	if (!(adv_instance->flags & flags))
3034 		return;
3035 
3036 	cancel_adv_timeout(hdev);
3037 
3038 	adv_instance = hci_get_next_instance(hdev, adv_instance->instance);
3039 	if (!adv_instance)
3040 		return;
3041 
3042 	hci_req_init(&req, hdev);
3043 	err = __hci_req_schedule_adv_instance(&req, adv_instance->instance,
3044 					      true);
3045 	if (err)
3046 		return;
3047 
3048 	hci_req_run(&req, NULL);
3049 }
3050 
3051 static void set_name_complete(struct hci_dev *hdev, u8 status, u16 opcode)
3052 {
3053 	struct mgmt_cp_set_local_name *cp;
3054 	struct mgmt_pending_cmd *cmd;
3055 
3056 	BT_DBG("status 0x%02x", status);
3057 
3058 	hci_dev_lock(hdev);
3059 
3060 	cmd = pending_find(MGMT_OP_SET_LOCAL_NAME, hdev);
3061 	if (!cmd)
3062 		goto unlock;
3063 
3064 	cp = cmd->param;
3065 
3066 	if (status) {
3067 		mgmt_cmd_status(cmd->sk, hdev->id, MGMT_OP_SET_LOCAL_NAME,
3068 			        mgmt_status(status));
3069 	} else {
3070 		mgmt_cmd_complete(cmd->sk, hdev->id, MGMT_OP_SET_LOCAL_NAME, 0,
3071 				  cp, sizeof(*cp));
3072 
3073 		if (hci_dev_test_flag(hdev, HCI_LE_ADV))
3074 			adv_expire(hdev, MGMT_ADV_FLAG_LOCAL_NAME);
3075 	}
3076 
3077 	mgmt_pending_remove(cmd);
3078 
3079 unlock:
3080 	hci_dev_unlock(hdev);
3081 }
3082 
3083 static int set_local_name(struct sock *sk, struct hci_dev *hdev, void *data,
3084 			  u16 len)
3085 {
3086 	struct mgmt_cp_set_local_name *cp = data;
3087 	struct mgmt_pending_cmd *cmd;
3088 	struct hci_request req;
3089 	int err;
3090 
3091 	BT_DBG("");
3092 
3093 	hci_dev_lock(hdev);
3094 
3095 	/* If the old values are the same as the new ones just return a
3096 	 * direct command complete event.
3097 	 */
3098 	if (!memcmp(hdev->dev_name, cp->name, sizeof(hdev->dev_name)) &&
3099 	    !memcmp(hdev->short_name, cp->short_name,
3100 		    sizeof(hdev->short_name))) {
3101 		err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_SET_LOCAL_NAME, 0,
3102 					data, len);
3103 		goto failed;
3104 	}
3105 
3106 	memcpy(hdev->short_name, cp->short_name, sizeof(hdev->short_name));
3107 
3108 	if (!hdev_is_powered(hdev)) {
3109 		memcpy(hdev->dev_name, cp->name, sizeof(hdev->dev_name));
3110 
3111 		err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_SET_LOCAL_NAME, 0,
3112 					data, len);
3113 		if (err < 0)
3114 			goto failed;
3115 
3116 		err = mgmt_limited_event(MGMT_EV_LOCAL_NAME_CHANGED, hdev, data,
3117 					 len, HCI_MGMT_LOCAL_NAME_EVENTS, sk);
3118 		ext_info_changed(hdev, sk);
3119 
3120 		goto failed;
3121 	}
3122 
3123 	cmd = mgmt_pending_add(sk, MGMT_OP_SET_LOCAL_NAME, hdev, data, len);
3124 	if (!cmd) {
3125 		err = -ENOMEM;
3126 		goto failed;
3127 	}
3128 
3129 	memcpy(hdev->dev_name, cp->name, sizeof(hdev->dev_name));
3130 
3131 	hci_req_init(&req, hdev);
3132 
3133 	if (lmp_bredr_capable(hdev)) {
3134 		__hci_req_update_name(&req);
3135 		__hci_req_update_eir(&req);
3136 	}
3137 
3138 	/* The name is stored in the scan response data and so
3139 	 * no need to udpate the advertising data here.
3140 	 */
3141 	if (lmp_le_capable(hdev) && hci_dev_test_flag(hdev, HCI_ADVERTISING))
3142 		__hci_req_update_scan_rsp_data(&req, hdev->cur_adv_instance);
3143 
3144 	err = hci_req_run(&req, set_name_complete);
3145 	if (err < 0)
3146 		mgmt_pending_remove(cmd);
3147 
3148 failed:
3149 	hci_dev_unlock(hdev);
3150 	return err;
3151 }
3152 
3153 static int set_appearance(struct sock *sk, struct hci_dev *hdev, void *data,
3154 			  u16 len)
3155 {
3156 	struct mgmt_cp_set_appearance *cp = data;
3157 	u16 apperance;
3158 	int err;
3159 
3160 	BT_DBG("");
3161 
3162 	if (!lmp_le_capable(hdev))
3163 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_APPEARANCE,
3164 				       MGMT_STATUS_NOT_SUPPORTED);
3165 
3166 	apperance = le16_to_cpu(cp->appearance);
3167 
3168 	hci_dev_lock(hdev);
3169 
3170 	if (hdev->appearance != apperance) {
3171 		hdev->appearance = apperance;
3172 
3173 		if (hci_dev_test_flag(hdev, HCI_LE_ADV))
3174 			adv_expire(hdev, MGMT_ADV_FLAG_APPEARANCE);
3175 
3176 		ext_info_changed(hdev, sk);
3177 	}
3178 
3179 	err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_SET_APPEARANCE, 0, NULL,
3180 				0);
3181 
3182 	hci_dev_unlock(hdev);
3183 
3184 	return err;
3185 }
3186 
3187 static void read_local_oob_data_complete(struct hci_dev *hdev, u8 status,
3188 				         u16 opcode, struct sk_buff *skb)
3189 {
3190 	struct mgmt_rp_read_local_oob_data mgmt_rp;
3191 	size_t rp_size = sizeof(mgmt_rp);
3192 	struct mgmt_pending_cmd *cmd;
3193 
3194 	BT_DBG("%s status %u", hdev->name, status);
3195 
3196 	cmd = pending_find(MGMT_OP_READ_LOCAL_OOB_DATA, hdev);
3197 	if (!cmd)
3198 		return;
3199 
3200 	if (status || !skb) {
3201 		mgmt_cmd_status(cmd->sk, hdev->id, MGMT_OP_READ_LOCAL_OOB_DATA,
3202 				status ? mgmt_status(status) : MGMT_STATUS_FAILED);
3203 		goto remove;
3204 	}
3205 
3206 	memset(&mgmt_rp, 0, sizeof(mgmt_rp));
3207 
3208 	if (opcode == HCI_OP_READ_LOCAL_OOB_DATA) {
3209 		struct hci_rp_read_local_oob_data *rp = (void *) skb->data;
3210 
3211 		if (skb->len < sizeof(*rp)) {
3212 			mgmt_cmd_status(cmd->sk, hdev->id,
3213 					MGMT_OP_READ_LOCAL_OOB_DATA,
3214 					MGMT_STATUS_FAILED);
3215 			goto remove;
3216 		}
3217 
3218 		memcpy(mgmt_rp.hash192, rp->hash, sizeof(rp->hash));
3219 		memcpy(mgmt_rp.rand192, rp->rand, sizeof(rp->rand));
3220 
3221 		rp_size -= sizeof(mgmt_rp.hash256) + sizeof(mgmt_rp.rand256);
3222 	} else {
3223 		struct hci_rp_read_local_oob_ext_data *rp = (void *) skb->data;
3224 
3225 		if (skb->len < sizeof(*rp)) {
3226 			mgmt_cmd_status(cmd->sk, hdev->id,
3227 					MGMT_OP_READ_LOCAL_OOB_DATA,
3228 					MGMT_STATUS_FAILED);
3229 			goto remove;
3230 		}
3231 
3232 		memcpy(mgmt_rp.hash192, rp->hash192, sizeof(rp->hash192));
3233 		memcpy(mgmt_rp.rand192, rp->rand192, sizeof(rp->rand192));
3234 
3235 		memcpy(mgmt_rp.hash256, rp->hash256, sizeof(rp->hash256));
3236 		memcpy(mgmt_rp.rand256, rp->rand256, sizeof(rp->rand256));
3237 	}
3238 
3239 	mgmt_cmd_complete(cmd->sk, hdev->id, MGMT_OP_READ_LOCAL_OOB_DATA,
3240 			  MGMT_STATUS_SUCCESS, &mgmt_rp, rp_size);
3241 
3242 remove:
3243 	mgmt_pending_remove(cmd);
3244 }
3245 
3246 static int read_local_oob_data(struct sock *sk, struct hci_dev *hdev,
3247 			       void *data, u16 data_len)
3248 {
3249 	struct mgmt_pending_cmd *cmd;
3250 	struct hci_request req;
3251 	int err;
3252 
3253 	BT_DBG("%s", hdev->name);
3254 
3255 	hci_dev_lock(hdev);
3256 
3257 	if (!hdev_is_powered(hdev)) {
3258 		err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_READ_LOCAL_OOB_DATA,
3259 				      MGMT_STATUS_NOT_POWERED);
3260 		goto unlock;
3261 	}
3262 
3263 	if (!lmp_ssp_capable(hdev)) {
3264 		err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_READ_LOCAL_OOB_DATA,
3265 				      MGMT_STATUS_NOT_SUPPORTED);
3266 		goto unlock;
3267 	}
3268 
3269 	if (pending_find(MGMT_OP_READ_LOCAL_OOB_DATA, hdev)) {
3270 		err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_READ_LOCAL_OOB_DATA,
3271 				      MGMT_STATUS_BUSY);
3272 		goto unlock;
3273 	}
3274 
3275 	cmd = mgmt_pending_add(sk, MGMT_OP_READ_LOCAL_OOB_DATA, hdev, NULL, 0);
3276 	if (!cmd) {
3277 		err = -ENOMEM;
3278 		goto unlock;
3279 	}
3280 
3281 	hci_req_init(&req, hdev);
3282 
3283 	if (bredr_sc_enabled(hdev))
3284 		hci_req_add(&req, HCI_OP_READ_LOCAL_OOB_EXT_DATA, 0, NULL);
3285 	else
3286 		hci_req_add(&req, HCI_OP_READ_LOCAL_OOB_DATA, 0, NULL);
3287 
3288 	err = hci_req_run_skb(&req, read_local_oob_data_complete);
3289 	if (err < 0)
3290 		mgmt_pending_remove(cmd);
3291 
3292 unlock:
3293 	hci_dev_unlock(hdev);
3294 	return err;
3295 }
3296 
3297 static int add_remote_oob_data(struct sock *sk, struct hci_dev *hdev,
3298 			       void *data, u16 len)
3299 {
3300 	struct mgmt_addr_info *addr = data;
3301 	int err;
3302 
3303 	BT_DBG("%s ", hdev->name);
3304 
3305 	if (!bdaddr_type_is_valid(addr->type))
3306 		return mgmt_cmd_complete(sk, hdev->id,
3307 					 MGMT_OP_ADD_REMOTE_OOB_DATA,
3308 					 MGMT_STATUS_INVALID_PARAMS,
3309 					 addr, sizeof(*addr));
3310 
3311 	hci_dev_lock(hdev);
3312 
3313 	if (len == MGMT_ADD_REMOTE_OOB_DATA_SIZE) {
3314 		struct mgmt_cp_add_remote_oob_data *cp = data;
3315 		u8 status;
3316 
3317 		if (cp->addr.type != BDADDR_BREDR) {
3318 			err = mgmt_cmd_complete(sk, hdev->id,
3319 						MGMT_OP_ADD_REMOTE_OOB_DATA,
3320 						MGMT_STATUS_INVALID_PARAMS,
3321 						&cp->addr, sizeof(cp->addr));
3322 			goto unlock;
3323 		}
3324 
3325 		err = hci_add_remote_oob_data(hdev, &cp->addr.bdaddr,
3326 					      cp->addr.type, cp->hash,
3327 					      cp->rand, NULL, NULL);
3328 		if (err < 0)
3329 			status = MGMT_STATUS_FAILED;
3330 		else
3331 			status = MGMT_STATUS_SUCCESS;
3332 
3333 		err = mgmt_cmd_complete(sk, hdev->id,
3334 					MGMT_OP_ADD_REMOTE_OOB_DATA, status,
3335 					&cp->addr, sizeof(cp->addr));
3336 	} else if (len == MGMT_ADD_REMOTE_OOB_EXT_DATA_SIZE) {
3337 		struct mgmt_cp_add_remote_oob_ext_data *cp = data;
3338 		u8 *rand192, *hash192, *rand256, *hash256;
3339 		u8 status;
3340 
3341 		if (bdaddr_type_is_le(cp->addr.type)) {
3342 			/* Enforce zero-valued 192-bit parameters as
3343 			 * long as legacy SMP OOB isn't implemented.
3344 			 */
3345 			if (memcmp(cp->rand192, ZERO_KEY, 16) ||
3346 			    memcmp(cp->hash192, ZERO_KEY, 16)) {
3347 				err = mgmt_cmd_complete(sk, hdev->id,
3348 							MGMT_OP_ADD_REMOTE_OOB_DATA,
3349 							MGMT_STATUS_INVALID_PARAMS,
3350 							addr, sizeof(*addr));
3351 				goto unlock;
3352 			}
3353 
3354 			rand192 = NULL;
3355 			hash192 = NULL;
3356 		} else {
3357 			/* In case one of the P-192 values is set to zero,
3358 			 * then just disable OOB data for P-192.
3359 			 */
3360 			if (!memcmp(cp->rand192, ZERO_KEY, 16) ||
3361 			    !memcmp(cp->hash192, ZERO_KEY, 16)) {
3362 				rand192 = NULL;
3363 				hash192 = NULL;
3364 			} else {
3365 				rand192 = cp->rand192;
3366 				hash192 = cp->hash192;
3367 			}
3368 		}
3369 
3370 		/* In case one of the P-256 values is set to zero, then just
3371 		 * disable OOB data for P-256.
3372 		 */
3373 		if (!memcmp(cp->rand256, ZERO_KEY, 16) ||
3374 		    !memcmp(cp->hash256, ZERO_KEY, 16)) {
3375 			rand256 = NULL;
3376 			hash256 = NULL;
3377 		} else {
3378 			rand256 = cp->rand256;
3379 			hash256 = cp->hash256;
3380 		}
3381 
3382 		err = hci_add_remote_oob_data(hdev, &cp->addr.bdaddr,
3383 					      cp->addr.type, hash192, rand192,
3384 					      hash256, rand256);
3385 		if (err < 0)
3386 			status = MGMT_STATUS_FAILED;
3387 		else
3388 			status = MGMT_STATUS_SUCCESS;
3389 
3390 		err = mgmt_cmd_complete(sk, hdev->id,
3391 					MGMT_OP_ADD_REMOTE_OOB_DATA,
3392 					status, &cp->addr, sizeof(cp->addr));
3393 	} else {
3394 		bt_dev_err(hdev, "add_remote_oob_data: invalid len of %u bytes",
3395 			   len);
3396 		err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_ADD_REMOTE_OOB_DATA,
3397 				      MGMT_STATUS_INVALID_PARAMS);
3398 	}
3399 
3400 unlock:
3401 	hci_dev_unlock(hdev);
3402 	return err;
3403 }
3404 
3405 static int remove_remote_oob_data(struct sock *sk, struct hci_dev *hdev,
3406 				  void *data, u16 len)
3407 {
3408 	struct mgmt_cp_remove_remote_oob_data *cp = data;
3409 	u8 status;
3410 	int err;
3411 
3412 	BT_DBG("%s", hdev->name);
3413 
3414 	if (cp->addr.type != BDADDR_BREDR)
3415 		return mgmt_cmd_complete(sk, hdev->id,
3416 					 MGMT_OP_REMOVE_REMOTE_OOB_DATA,
3417 					 MGMT_STATUS_INVALID_PARAMS,
3418 					 &cp->addr, sizeof(cp->addr));
3419 
3420 	hci_dev_lock(hdev);
3421 
3422 	if (!bacmp(&cp->addr.bdaddr, BDADDR_ANY)) {
3423 		hci_remote_oob_data_clear(hdev);
3424 		status = MGMT_STATUS_SUCCESS;
3425 		goto done;
3426 	}
3427 
3428 	err = hci_remove_remote_oob_data(hdev, &cp->addr.bdaddr, cp->addr.type);
3429 	if (err < 0)
3430 		status = MGMT_STATUS_INVALID_PARAMS;
3431 	else
3432 		status = MGMT_STATUS_SUCCESS;
3433 
3434 done:
3435 	err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_REMOVE_REMOTE_OOB_DATA,
3436 				status, &cp->addr, sizeof(cp->addr));
3437 
3438 	hci_dev_unlock(hdev);
3439 	return err;
3440 }
3441 
3442 void mgmt_start_discovery_complete(struct hci_dev *hdev, u8 status)
3443 {
3444 	struct mgmt_pending_cmd *cmd;
3445 
3446 	BT_DBG("status %d", status);
3447 
3448 	hci_dev_lock(hdev);
3449 
3450 	cmd = pending_find(MGMT_OP_START_DISCOVERY, hdev);
3451 	if (!cmd)
3452 		cmd = pending_find(MGMT_OP_START_SERVICE_DISCOVERY, hdev);
3453 
3454 	if (!cmd)
3455 		cmd = pending_find(MGMT_OP_START_LIMITED_DISCOVERY, hdev);
3456 
3457 	if (cmd) {
3458 		cmd->cmd_complete(cmd, mgmt_status(status));
3459 		mgmt_pending_remove(cmd);
3460 	}
3461 
3462 	hci_dev_unlock(hdev);
3463 }
3464 
3465 static bool discovery_type_is_valid(struct hci_dev *hdev, uint8_t type,
3466 				    uint8_t *mgmt_status)
3467 {
3468 	switch (type) {
3469 	case DISCOV_TYPE_LE:
3470 		*mgmt_status = mgmt_le_support(hdev);
3471 		if (*mgmt_status)
3472 			return false;
3473 		break;
3474 	case DISCOV_TYPE_INTERLEAVED:
3475 		*mgmt_status = mgmt_le_support(hdev);
3476 		if (*mgmt_status)
3477 			return false;
3478 		/* Intentional fall-through */
3479 	case DISCOV_TYPE_BREDR:
3480 		*mgmt_status = mgmt_bredr_support(hdev);
3481 		if (*mgmt_status)
3482 			return false;
3483 		break;
3484 	default:
3485 		*mgmt_status = MGMT_STATUS_INVALID_PARAMS;
3486 		return false;
3487 	}
3488 
3489 	return true;
3490 }
3491 
3492 static int start_discovery_internal(struct sock *sk, struct hci_dev *hdev,
3493 				    u16 op, void *data, u16 len)
3494 {
3495 	struct mgmt_cp_start_discovery *cp = data;
3496 	struct mgmt_pending_cmd *cmd;
3497 	u8 status;
3498 	int err;
3499 
3500 	BT_DBG("%s", hdev->name);
3501 
3502 	hci_dev_lock(hdev);
3503 
3504 	if (!hdev_is_powered(hdev)) {
3505 		err = mgmt_cmd_complete(sk, hdev->id, op,
3506 					MGMT_STATUS_NOT_POWERED,
3507 					&cp->type, sizeof(cp->type));
3508 		goto failed;
3509 	}
3510 
3511 	if (hdev->discovery.state != DISCOVERY_STOPPED ||
3512 	    hci_dev_test_flag(hdev, HCI_PERIODIC_INQ)) {
3513 		err = mgmt_cmd_complete(sk, hdev->id, op, MGMT_STATUS_BUSY,
3514 					&cp->type, sizeof(cp->type));
3515 		goto failed;
3516 	}
3517 
3518 	if (!discovery_type_is_valid(hdev, cp->type, &status)) {
3519 		err = mgmt_cmd_complete(sk, hdev->id, op, status,
3520 					&cp->type, sizeof(cp->type));
3521 		goto failed;
3522 	}
3523 
3524 	/* Clear the discovery filter first to free any previously
3525 	 * allocated memory for the UUID list.
3526 	 */
3527 	hci_discovery_filter_clear(hdev);
3528 
3529 	hdev->discovery.type = cp->type;
3530 	hdev->discovery.report_invalid_rssi = false;
3531 	if (op == MGMT_OP_START_LIMITED_DISCOVERY)
3532 		hdev->discovery.limited = true;
3533 	else
3534 		hdev->discovery.limited = false;
3535 
3536 	cmd = mgmt_pending_add(sk, op, hdev, data, len);
3537 	if (!cmd) {
3538 		err = -ENOMEM;
3539 		goto failed;
3540 	}
3541 
3542 	cmd->cmd_complete = generic_cmd_complete;
3543 
3544 	hci_discovery_set_state(hdev, DISCOVERY_STARTING);
3545 	queue_work(hdev->req_workqueue, &hdev->discov_update);
3546 	err = 0;
3547 
3548 failed:
3549 	hci_dev_unlock(hdev);
3550 	return err;
3551 }
3552 
3553 static int start_discovery(struct sock *sk, struct hci_dev *hdev,
3554 			   void *data, u16 len)
3555 {
3556 	return start_discovery_internal(sk, hdev, MGMT_OP_START_DISCOVERY,
3557 					data, len);
3558 }
3559 
3560 static int start_limited_discovery(struct sock *sk, struct hci_dev *hdev,
3561 				   void *data, u16 len)
3562 {
3563 	return start_discovery_internal(sk, hdev,
3564 					MGMT_OP_START_LIMITED_DISCOVERY,
3565 					data, len);
3566 }
3567 
3568 static int service_discovery_cmd_complete(struct mgmt_pending_cmd *cmd,
3569 					  u8 status)
3570 {
3571 	return mgmt_cmd_complete(cmd->sk, cmd->index, cmd->opcode, status,
3572 				 cmd->param, 1);
3573 }
3574 
3575 static int start_service_discovery(struct sock *sk, struct hci_dev *hdev,
3576 				   void *data, u16 len)
3577 {
3578 	struct mgmt_cp_start_service_discovery *cp = data;
3579 	struct mgmt_pending_cmd *cmd;
3580 	const u16 max_uuid_count = ((U16_MAX - sizeof(*cp)) / 16);
3581 	u16 uuid_count, expected_len;
3582 	u8 status;
3583 	int err;
3584 
3585 	BT_DBG("%s", hdev->name);
3586 
3587 	hci_dev_lock(hdev);
3588 
3589 	if (!hdev_is_powered(hdev)) {
3590 		err = mgmt_cmd_complete(sk, hdev->id,
3591 					MGMT_OP_START_SERVICE_DISCOVERY,
3592 					MGMT_STATUS_NOT_POWERED,
3593 					&cp->type, sizeof(cp->type));
3594 		goto failed;
3595 	}
3596 
3597 	if (hdev->discovery.state != DISCOVERY_STOPPED ||
3598 	    hci_dev_test_flag(hdev, HCI_PERIODIC_INQ)) {
3599 		err = mgmt_cmd_complete(sk, hdev->id,
3600 					MGMT_OP_START_SERVICE_DISCOVERY,
3601 					MGMT_STATUS_BUSY, &cp->type,
3602 					sizeof(cp->type));
3603 		goto failed;
3604 	}
3605 
3606 	uuid_count = __le16_to_cpu(cp->uuid_count);
3607 	if (uuid_count > max_uuid_count) {
3608 		bt_dev_err(hdev, "service_discovery: too big uuid_count value %u",
3609 			   uuid_count);
3610 		err = mgmt_cmd_complete(sk, hdev->id,
3611 					MGMT_OP_START_SERVICE_DISCOVERY,
3612 					MGMT_STATUS_INVALID_PARAMS, &cp->type,
3613 					sizeof(cp->type));
3614 		goto failed;
3615 	}
3616 
3617 	expected_len = sizeof(*cp) + uuid_count * 16;
3618 	if (expected_len != len) {
3619 		bt_dev_err(hdev, "service_discovery: expected %u bytes, got %u bytes",
3620 			   expected_len, len);
3621 		err = mgmt_cmd_complete(sk, hdev->id,
3622 					MGMT_OP_START_SERVICE_DISCOVERY,
3623 					MGMT_STATUS_INVALID_PARAMS, &cp->type,
3624 					sizeof(cp->type));
3625 		goto failed;
3626 	}
3627 
3628 	if (!discovery_type_is_valid(hdev, cp->type, &status)) {
3629 		err = mgmt_cmd_complete(sk, hdev->id,
3630 					MGMT_OP_START_SERVICE_DISCOVERY,
3631 					status, &cp->type, sizeof(cp->type));
3632 		goto failed;
3633 	}
3634 
3635 	cmd = mgmt_pending_add(sk, MGMT_OP_START_SERVICE_DISCOVERY,
3636 			       hdev, data, len);
3637 	if (!cmd) {
3638 		err = -ENOMEM;
3639 		goto failed;
3640 	}
3641 
3642 	cmd->cmd_complete = service_discovery_cmd_complete;
3643 
3644 	/* Clear the discovery filter first to free any previously
3645 	 * allocated memory for the UUID list.
3646 	 */
3647 	hci_discovery_filter_clear(hdev);
3648 
3649 	hdev->discovery.result_filtering = true;
3650 	hdev->discovery.type = cp->type;
3651 	hdev->discovery.rssi = cp->rssi;
3652 	hdev->discovery.uuid_count = uuid_count;
3653 
3654 	if (uuid_count > 0) {
3655 		hdev->discovery.uuids = kmemdup(cp->uuids, uuid_count * 16,
3656 						GFP_KERNEL);
3657 		if (!hdev->discovery.uuids) {
3658 			err = mgmt_cmd_complete(sk, hdev->id,
3659 						MGMT_OP_START_SERVICE_DISCOVERY,
3660 						MGMT_STATUS_FAILED,
3661 						&cp->type, sizeof(cp->type));
3662 			mgmt_pending_remove(cmd);
3663 			goto failed;
3664 		}
3665 	}
3666 
3667 	hci_discovery_set_state(hdev, DISCOVERY_STARTING);
3668 	queue_work(hdev->req_workqueue, &hdev->discov_update);
3669 	err = 0;
3670 
3671 failed:
3672 	hci_dev_unlock(hdev);
3673 	return err;
3674 }
3675 
3676 void mgmt_stop_discovery_complete(struct hci_dev *hdev, u8 status)
3677 {
3678 	struct mgmt_pending_cmd *cmd;
3679 
3680 	BT_DBG("status %d", status);
3681 
3682 	hci_dev_lock(hdev);
3683 
3684 	cmd = pending_find(MGMT_OP_STOP_DISCOVERY, hdev);
3685 	if (cmd) {
3686 		cmd->cmd_complete(cmd, mgmt_status(status));
3687 		mgmt_pending_remove(cmd);
3688 	}
3689 
3690 	hci_dev_unlock(hdev);
3691 }
3692 
3693 static int stop_discovery(struct sock *sk, struct hci_dev *hdev, void *data,
3694 			  u16 len)
3695 {
3696 	struct mgmt_cp_stop_discovery *mgmt_cp = data;
3697 	struct mgmt_pending_cmd *cmd;
3698 	int err;
3699 
3700 	BT_DBG("%s", hdev->name);
3701 
3702 	hci_dev_lock(hdev);
3703 
3704 	if (!hci_discovery_active(hdev)) {
3705 		err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_STOP_DISCOVERY,
3706 					MGMT_STATUS_REJECTED, &mgmt_cp->type,
3707 					sizeof(mgmt_cp->type));
3708 		goto unlock;
3709 	}
3710 
3711 	if (hdev->discovery.type != mgmt_cp->type) {
3712 		err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_STOP_DISCOVERY,
3713 					MGMT_STATUS_INVALID_PARAMS,
3714 					&mgmt_cp->type, sizeof(mgmt_cp->type));
3715 		goto unlock;
3716 	}
3717 
3718 	cmd = mgmt_pending_add(sk, MGMT_OP_STOP_DISCOVERY, hdev, data, len);
3719 	if (!cmd) {
3720 		err = -ENOMEM;
3721 		goto unlock;
3722 	}
3723 
3724 	cmd->cmd_complete = generic_cmd_complete;
3725 
3726 	hci_discovery_set_state(hdev, DISCOVERY_STOPPING);
3727 	queue_work(hdev->req_workqueue, &hdev->discov_update);
3728 	err = 0;
3729 
3730 unlock:
3731 	hci_dev_unlock(hdev);
3732 	return err;
3733 }
3734 
3735 static int confirm_name(struct sock *sk, struct hci_dev *hdev, void *data,
3736 			u16 len)
3737 {
3738 	struct mgmt_cp_confirm_name *cp = data;
3739 	struct inquiry_entry *e;
3740 	int err;
3741 
3742 	BT_DBG("%s", hdev->name);
3743 
3744 	hci_dev_lock(hdev);
3745 
3746 	if (!hci_discovery_active(hdev)) {
3747 		err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_CONFIRM_NAME,
3748 					MGMT_STATUS_FAILED, &cp->addr,
3749 					sizeof(cp->addr));
3750 		goto failed;
3751 	}
3752 
3753 	e = hci_inquiry_cache_lookup_unknown(hdev, &cp->addr.bdaddr);
3754 	if (!e) {
3755 		err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_CONFIRM_NAME,
3756 					MGMT_STATUS_INVALID_PARAMS, &cp->addr,
3757 					sizeof(cp->addr));
3758 		goto failed;
3759 	}
3760 
3761 	if (cp->name_known) {
3762 		e->name_state = NAME_KNOWN;
3763 		list_del(&e->list);
3764 	} else {
3765 		e->name_state = NAME_NEEDED;
3766 		hci_inquiry_cache_update_resolve(hdev, e);
3767 	}
3768 
3769 	err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_CONFIRM_NAME, 0,
3770 				&cp->addr, sizeof(cp->addr));
3771 
3772 failed:
3773 	hci_dev_unlock(hdev);
3774 	return err;
3775 }
3776 
3777 static int block_device(struct sock *sk, struct hci_dev *hdev, void *data,
3778 			u16 len)
3779 {
3780 	struct mgmt_cp_block_device *cp = data;
3781 	u8 status;
3782 	int err;
3783 
3784 	BT_DBG("%s", hdev->name);
3785 
3786 	if (!bdaddr_type_is_valid(cp->addr.type))
3787 		return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_BLOCK_DEVICE,
3788 					 MGMT_STATUS_INVALID_PARAMS,
3789 					 &cp->addr, sizeof(cp->addr));
3790 
3791 	hci_dev_lock(hdev);
3792 
3793 	err = hci_bdaddr_list_add(&hdev->blacklist, &cp->addr.bdaddr,
3794 				  cp->addr.type);
3795 	if (err < 0) {
3796 		status = MGMT_STATUS_FAILED;
3797 		goto done;
3798 	}
3799 
3800 	mgmt_event(MGMT_EV_DEVICE_BLOCKED, hdev, &cp->addr, sizeof(cp->addr),
3801 		   sk);
3802 	status = MGMT_STATUS_SUCCESS;
3803 
3804 done:
3805 	err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_BLOCK_DEVICE, status,
3806 				&cp->addr, sizeof(cp->addr));
3807 
3808 	hci_dev_unlock(hdev);
3809 
3810 	return err;
3811 }
3812 
3813 static int unblock_device(struct sock *sk, struct hci_dev *hdev, void *data,
3814 			  u16 len)
3815 {
3816 	struct mgmt_cp_unblock_device *cp = data;
3817 	u8 status;
3818 	int err;
3819 
3820 	BT_DBG("%s", hdev->name);
3821 
3822 	if (!bdaddr_type_is_valid(cp->addr.type))
3823 		return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_UNBLOCK_DEVICE,
3824 					 MGMT_STATUS_INVALID_PARAMS,
3825 					 &cp->addr, sizeof(cp->addr));
3826 
3827 	hci_dev_lock(hdev);
3828 
3829 	err = hci_bdaddr_list_del(&hdev->blacklist, &cp->addr.bdaddr,
3830 				  cp->addr.type);
3831 	if (err < 0) {
3832 		status = MGMT_STATUS_INVALID_PARAMS;
3833 		goto done;
3834 	}
3835 
3836 	mgmt_event(MGMT_EV_DEVICE_UNBLOCKED, hdev, &cp->addr, sizeof(cp->addr),
3837 		   sk);
3838 	status = MGMT_STATUS_SUCCESS;
3839 
3840 done:
3841 	err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_UNBLOCK_DEVICE, status,
3842 				&cp->addr, sizeof(cp->addr));
3843 
3844 	hci_dev_unlock(hdev);
3845 
3846 	return err;
3847 }
3848 
3849 static int set_device_id(struct sock *sk, struct hci_dev *hdev, void *data,
3850 			 u16 len)
3851 {
3852 	struct mgmt_cp_set_device_id *cp = data;
3853 	struct hci_request req;
3854 	int err;
3855 	__u16 source;
3856 
3857 	BT_DBG("%s", hdev->name);
3858 
3859 	source = __le16_to_cpu(cp->source);
3860 
3861 	if (source > 0x0002)
3862 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_DEVICE_ID,
3863 				       MGMT_STATUS_INVALID_PARAMS);
3864 
3865 	hci_dev_lock(hdev);
3866 
3867 	hdev->devid_source = source;
3868 	hdev->devid_vendor = __le16_to_cpu(cp->vendor);
3869 	hdev->devid_product = __le16_to_cpu(cp->product);
3870 	hdev->devid_version = __le16_to_cpu(cp->version);
3871 
3872 	err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_SET_DEVICE_ID, 0,
3873 				NULL, 0);
3874 
3875 	hci_req_init(&req, hdev);
3876 	__hci_req_update_eir(&req);
3877 	hci_req_run(&req, NULL);
3878 
3879 	hci_dev_unlock(hdev);
3880 
3881 	return err;
3882 }
3883 
3884 static void enable_advertising_instance(struct hci_dev *hdev, u8 status,
3885 					u16 opcode)
3886 {
3887 	BT_DBG("status %d", status);
3888 }
3889 
3890 static void set_advertising_complete(struct hci_dev *hdev, u8 status,
3891 				     u16 opcode)
3892 {
3893 	struct cmd_lookup match = { NULL, hdev };
3894 	struct hci_request req;
3895 	u8 instance;
3896 	struct adv_info *adv_instance;
3897 	int err;
3898 
3899 	hci_dev_lock(hdev);
3900 
3901 	if (status) {
3902 		u8 mgmt_err = mgmt_status(status);
3903 
3904 		mgmt_pending_foreach(MGMT_OP_SET_ADVERTISING, hdev,
3905 				     cmd_status_rsp, &mgmt_err);
3906 		goto unlock;
3907 	}
3908 
3909 	if (hci_dev_test_flag(hdev, HCI_LE_ADV))
3910 		hci_dev_set_flag(hdev, HCI_ADVERTISING);
3911 	else
3912 		hci_dev_clear_flag(hdev, HCI_ADVERTISING);
3913 
3914 	mgmt_pending_foreach(MGMT_OP_SET_ADVERTISING, hdev, settings_rsp,
3915 			     &match);
3916 
3917 	new_settings(hdev, match.sk);
3918 
3919 	if (match.sk)
3920 		sock_put(match.sk);
3921 
3922 	/* If "Set Advertising" was just disabled and instance advertising was
3923 	 * set up earlier, then re-enable multi-instance advertising.
3924 	 */
3925 	if (hci_dev_test_flag(hdev, HCI_ADVERTISING) ||
3926 	    list_empty(&hdev->adv_instances))
3927 		goto unlock;
3928 
3929 	instance = hdev->cur_adv_instance;
3930 	if (!instance) {
3931 		adv_instance = list_first_entry_or_null(&hdev->adv_instances,
3932 							struct adv_info, list);
3933 		if (!adv_instance)
3934 			goto unlock;
3935 
3936 		instance = adv_instance->instance;
3937 	}
3938 
3939 	hci_req_init(&req, hdev);
3940 
3941 	err = __hci_req_schedule_adv_instance(&req, instance, true);
3942 
3943 	if (!err)
3944 		err = hci_req_run(&req, enable_advertising_instance);
3945 
3946 	if (err)
3947 		bt_dev_err(hdev, "failed to re-configure advertising");
3948 
3949 unlock:
3950 	hci_dev_unlock(hdev);
3951 }
3952 
3953 static int set_advertising(struct sock *sk, struct hci_dev *hdev, void *data,
3954 			   u16 len)
3955 {
3956 	struct mgmt_mode *cp = data;
3957 	struct mgmt_pending_cmd *cmd;
3958 	struct hci_request req;
3959 	u8 val, status;
3960 	int err;
3961 
3962 	BT_DBG("request for %s", hdev->name);
3963 
3964 	status = mgmt_le_support(hdev);
3965 	if (status)
3966 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_ADVERTISING,
3967 				       status);
3968 
3969 	if (cp->val != 0x00 && cp->val != 0x01 && cp->val != 0x02)
3970 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_ADVERTISING,
3971 				       MGMT_STATUS_INVALID_PARAMS);
3972 
3973 	hci_dev_lock(hdev);
3974 
3975 	val = !!cp->val;
3976 
3977 	/* The following conditions are ones which mean that we should
3978 	 * not do any HCI communication but directly send a mgmt
3979 	 * response to user space (after toggling the flag if
3980 	 * necessary).
3981 	 */
3982 	if (!hdev_is_powered(hdev) ||
3983 	    (val == hci_dev_test_flag(hdev, HCI_ADVERTISING) &&
3984 	     (cp->val == 0x02) == hci_dev_test_flag(hdev, HCI_ADVERTISING_CONNECTABLE)) ||
3985 	    hci_conn_num(hdev, LE_LINK) > 0 ||
3986 	    (hci_dev_test_flag(hdev, HCI_LE_SCAN) &&
3987 	     hdev->le_scan_type == LE_SCAN_ACTIVE)) {
3988 		bool changed;
3989 
3990 		if (cp->val) {
3991 			hdev->cur_adv_instance = 0x00;
3992 			changed = !hci_dev_test_and_set_flag(hdev, HCI_ADVERTISING);
3993 			if (cp->val == 0x02)
3994 				hci_dev_set_flag(hdev, HCI_ADVERTISING_CONNECTABLE);
3995 			else
3996 				hci_dev_clear_flag(hdev, HCI_ADVERTISING_CONNECTABLE);
3997 		} else {
3998 			changed = hci_dev_test_and_clear_flag(hdev, HCI_ADVERTISING);
3999 			hci_dev_clear_flag(hdev, HCI_ADVERTISING_CONNECTABLE);
4000 		}
4001 
4002 		err = send_settings_rsp(sk, MGMT_OP_SET_ADVERTISING, hdev);
4003 		if (err < 0)
4004 			goto unlock;
4005 
4006 		if (changed)
4007 			err = new_settings(hdev, sk);
4008 
4009 		goto unlock;
4010 	}
4011 
4012 	if (pending_find(MGMT_OP_SET_ADVERTISING, hdev) ||
4013 	    pending_find(MGMT_OP_SET_LE, hdev)) {
4014 		err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_ADVERTISING,
4015 				      MGMT_STATUS_BUSY);
4016 		goto unlock;
4017 	}
4018 
4019 	cmd = mgmt_pending_add(sk, MGMT_OP_SET_ADVERTISING, hdev, data, len);
4020 	if (!cmd) {
4021 		err = -ENOMEM;
4022 		goto unlock;
4023 	}
4024 
4025 	hci_req_init(&req, hdev);
4026 
4027 	if (cp->val == 0x02)
4028 		hci_dev_set_flag(hdev, HCI_ADVERTISING_CONNECTABLE);
4029 	else
4030 		hci_dev_clear_flag(hdev, HCI_ADVERTISING_CONNECTABLE);
4031 
4032 	cancel_adv_timeout(hdev);
4033 
4034 	if (val) {
4035 		/* Switch to instance "0" for the Set Advertising setting.
4036 		 * We cannot use update_[adv|scan_rsp]_data() here as the
4037 		 * HCI_ADVERTISING flag is not yet set.
4038 		 */
4039 		hdev->cur_adv_instance = 0x00;
4040 		__hci_req_update_adv_data(&req, 0x00);
4041 		__hci_req_update_scan_rsp_data(&req, 0x00);
4042 		__hci_req_enable_advertising(&req);
4043 	} else {
4044 		__hci_req_disable_advertising(&req);
4045 	}
4046 
4047 	err = hci_req_run(&req, set_advertising_complete);
4048 	if (err < 0)
4049 		mgmt_pending_remove(cmd);
4050 
4051 unlock:
4052 	hci_dev_unlock(hdev);
4053 	return err;
4054 }
4055 
4056 static int set_static_address(struct sock *sk, struct hci_dev *hdev,
4057 			      void *data, u16 len)
4058 {
4059 	struct mgmt_cp_set_static_address *cp = data;
4060 	int err;
4061 
4062 	BT_DBG("%s", hdev->name);
4063 
4064 	if (!lmp_le_capable(hdev))
4065 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_STATIC_ADDRESS,
4066 				       MGMT_STATUS_NOT_SUPPORTED);
4067 
4068 	if (hdev_is_powered(hdev))
4069 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_STATIC_ADDRESS,
4070 				       MGMT_STATUS_REJECTED);
4071 
4072 	if (bacmp(&cp->bdaddr, BDADDR_ANY)) {
4073 		if (!bacmp(&cp->bdaddr, BDADDR_NONE))
4074 			return mgmt_cmd_status(sk, hdev->id,
4075 					       MGMT_OP_SET_STATIC_ADDRESS,
4076 					       MGMT_STATUS_INVALID_PARAMS);
4077 
4078 		/* Two most significant bits shall be set */
4079 		if ((cp->bdaddr.b[5] & 0xc0) != 0xc0)
4080 			return mgmt_cmd_status(sk, hdev->id,
4081 					       MGMT_OP_SET_STATIC_ADDRESS,
4082 					       MGMT_STATUS_INVALID_PARAMS);
4083 	}
4084 
4085 	hci_dev_lock(hdev);
4086 
4087 	bacpy(&hdev->static_addr, &cp->bdaddr);
4088 
4089 	err = send_settings_rsp(sk, MGMT_OP_SET_STATIC_ADDRESS, hdev);
4090 	if (err < 0)
4091 		goto unlock;
4092 
4093 	err = new_settings(hdev, sk);
4094 
4095 unlock:
4096 	hci_dev_unlock(hdev);
4097 	return err;
4098 }
4099 
4100 static int set_scan_params(struct sock *sk, struct hci_dev *hdev,
4101 			   void *data, u16 len)
4102 {
4103 	struct mgmt_cp_set_scan_params *cp = data;
4104 	__u16 interval, window;
4105 	int err;
4106 
4107 	BT_DBG("%s", hdev->name);
4108 
4109 	if (!lmp_le_capable(hdev))
4110 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_SCAN_PARAMS,
4111 				       MGMT_STATUS_NOT_SUPPORTED);
4112 
4113 	interval = __le16_to_cpu(cp->interval);
4114 
4115 	if (interval < 0x0004 || interval > 0x4000)
4116 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_SCAN_PARAMS,
4117 				       MGMT_STATUS_INVALID_PARAMS);
4118 
4119 	window = __le16_to_cpu(cp->window);
4120 
4121 	if (window < 0x0004 || window > 0x4000)
4122 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_SCAN_PARAMS,
4123 				       MGMT_STATUS_INVALID_PARAMS);
4124 
4125 	if (window > interval)
4126 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_SCAN_PARAMS,
4127 				       MGMT_STATUS_INVALID_PARAMS);
4128 
4129 	hci_dev_lock(hdev);
4130 
4131 	hdev->le_scan_interval = interval;
4132 	hdev->le_scan_window = window;
4133 
4134 	err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_SET_SCAN_PARAMS, 0,
4135 				NULL, 0);
4136 
4137 	/* If background scan is running, restart it so new parameters are
4138 	 * loaded.
4139 	 */
4140 	if (hci_dev_test_flag(hdev, HCI_LE_SCAN) &&
4141 	    hdev->discovery.state == DISCOVERY_STOPPED) {
4142 		struct hci_request req;
4143 
4144 		hci_req_init(&req, hdev);
4145 
4146 		hci_req_add_le_scan_disable(&req);
4147 		hci_req_add_le_passive_scan(&req);
4148 
4149 		hci_req_run(&req, NULL);
4150 	}
4151 
4152 	hci_dev_unlock(hdev);
4153 
4154 	return err;
4155 }
4156 
4157 static void fast_connectable_complete(struct hci_dev *hdev, u8 status,
4158 				      u16 opcode)
4159 {
4160 	struct mgmt_pending_cmd *cmd;
4161 
4162 	BT_DBG("status 0x%02x", status);
4163 
4164 	hci_dev_lock(hdev);
4165 
4166 	cmd = pending_find(MGMT_OP_SET_FAST_CONNECTABLE, hdev);
4167 	if (!cmd)
4168 		goto unlock;
4169 
4170 	if (status) {
4171 		mgmt_cmd_status(cmd->sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE,
4172 			        mgmt_status(status));
4173 	} else {
4174 		struct mgmt_mode *cp = cmd->param;
4175 
4176 		if (cp->val)
4177 			hci_dev_set_flag(hdev, HCI_FAST_CONNECTABLE);
4178 		else
4179 			hci_dev_clear_flag(hdev, HCI_FAST_CONNECTABLE);
4180 
4181 		send_settings_rsp(cmd->sk, MGMT_OP_SET_FAST_CONNECTABLE, hdev);
4182 		new_settings(hdev, cmd->sk);
4183 	}
4184 
4185 	mgmt_pending_remove(cmd);
4186 
4187 unlock:
4188 	hci_dev_unlock(hdev);
4189 }
4190 
4191 static int set_fast_connectable(struct sock *sk, struct hci_dev *hdev,
4192 				void *data, u16 len)
4193 {
4194 	struct mgmt_mode *cp = data;
4195 	struct mgmt_pending_cmd *cmd;
4196 	struct hci_request req;
4197 	int err;
4198 
4199 	BT_DBG("%s", hdev->name);
4200 
4201 	if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED) ||
4202 	    hdev->hci_ver < BLUETOOTH_VER_1_2)
4203 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE,
4204 				       MGMT_STATUS_NOT_SUPPORTED);
4205 
4206 	if (cp->val != 0x00 && cp->val != 0x01)
4207 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE,
4208 				       MGMT_STATUS_INVALID_PARAMS);
4209 
4210 	hci_dev_lock(hdev);
4211 
4212 	if (pending_find(MGMT_OP_SET_FAST_CONNECTABLE, hdev)) {
4213 		err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE,
4214 				      MGMT_STATUS_BUSY);
4215 		goto unlock;
4216 	}
4217 
4218 	if (!!cp->val == hci_dev_test_flag(hdev, HCI_FAST_CONNECTABLE)) {
4219 		err = send_settings_rsp(sk, MGMT_OP_SET_FAST_CONNECTABLE,
4220 					hdev);
4221 		goto unlock;
4222 	}
4223 
4224 	if (!hdev_is_powered(hdev)) {
4225 		hci_dev_change_flag(hdev, HCI_FAST_CONNECTABLE);
4226 		err = send_settings_rsp(sk, MGMT_OP_SET_FAST_CONNECTABLE,
4227 					hdev);
4228 		new_settings(hdev, sk);
4229 		goto unlock;
4230 	}
4231 
4232 	cmd = mgmt_pending_add(sk, MGMT_OP_SET_FAST_CONNECTABLE, hdev,
4233 			       data, len);
4234 	if (!cmd) {
4235 		err = -ENOMEM;
4236 		goto unlock;
4237 	}
4238 
4239 	hci_req_init(&req, hdev);
4240 
4241 	__hci_req_write_fast_connectable(&req, cp->val);
4242 
4243 	err = hci_req_run(&req, fast_connectable_complete);
4244 	if (err < 0) {
4245 		err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE,
4246 				      MGMT_STATUS_FAILED);
4247 		mgmt_pending_remove(cmd);
4248 	}
4249 
4250 unlock:
4251 	hci_dev_unlock(hdev);
4252 
4253 	return err;
4254 }
4255 
4256 static void set_bredr_complete(struct hci_dev *hdev, u8 status, u16 opcode)
4257 {
4258 	struct mgmt_pending_cmd *cmd;
4259 
4260 	BT_DBG("status 0x%02x", status);
4261 
4262 	hci_dev_lock(hdev);
4263 
4264 	cmd = pending_find(MGMT_OP_SET_BREDR, hdev);
4265 	if (!cmd)
4266 		goto unlock;
4267 
4268 	if (status) {
4269 		u8 mgmt_err = mgmt_status(status);
4270 
4271 		/* We need to restore the flag if related HCI commands
4272 		 * failed.
4273 		 */
4274 		hci_dev_clear_flag(hdev, HCI_BREDR_ENABLED);
4275 
4276 		mgmt_cmd_status(cmd->sk, cmd->index, cmd->opcode, mgmt_err);
4277 	} else {
4278 		send_settings_rsp(cmd->sk, MGMT_OP_SET_BREDR, hdev);
4279 		new_settings(hdev, cmd->sk);
4280 	}
4281 
4282 	mgmt_pending_remove(cmd);
4283 
4284 unlock:
4285 	hci_dev_unlock(hdev);
4286 }
4287 
4288 static int set_bredr(struct sock *sk, struct hci_dev *hdev, void *data, u16 len)
4289 {
4290 	struct mgmt_mode *cp = data;
4291 	struct mgmt_pending_cmd *cmd;
4292 	struct hci_request req;
4293 	int err;
4294 
4295 	BT_DBG("request for %s", hdev->name);
4296 
4297 	if (!lmp_bredr_capable(hdev) || !lmp_le_capable(hdev))
4298 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_BREDR,
4299 				       MGMT_STATUS_NOT_SUPPORTED);
4300 
4301 	if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED))
4302 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_BREDR,
4303 				       MGMT_STATUS_REJECTED);
4304 
4305 	if (cp->val != 0x00 && cp->val != 0x01)
4306 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_BREDR,
4307 				       MGMT_STATUS_INVALID_PARAMS);
4308 
4309 	hci_dev_lock(hdev);
4310 
4311 	if (cp->val == hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) {
4312 		err = send_settings_rsp(sk, MGMT_OP_SET_BREDR, hdev);
4313 		goto unlock;
4314 	}
4315 
4316 	if (!hdev_is_powered(hdev)) {
4317 		if (!cp->val) {
4318 			hci_dev_clear_flag(hdev, HCI_DISCOVERABLE);
4319 			hci_dev_clear_flag(hdev, HCI_SSP_ENABLED);
4320 			hci_dev_clear_flag(hdev, HCI_LINK_SECURITY);
4321 			hci_dev_clear_flag(hdev, HCI_FAST_CONNECTABLE);
4322 			hci_dev_clear_flag(hdev, HCI_HS_ENABLED);
4323 		}
4324 
4325 		hci_dev_change_flag(hdev, HCI_BREDR_ENABLED);
4326 
4327 		err = send_settings_rsp(sk, MGMT_OP_SET_BREDR, hdev);
4328 		if (err < 0)
4329 			goto unlock;
4330 
4331 		err = new_settings(hdev, sk);
4332 		goto unlock;
4333 	}
4334 
4335 	/* Reject disabling when powered on */
4336 	if (!cp->val) {
4337 		err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_BREDR,
4338 				      MGMT_STATUS_REJECTED);
4339 		goto unlock;
4340 	} else {
4341 		/* When configuring a dual-mode controller to operate
4342 		 * with LE only and using a static address, then switching
4343 		 * BR/EDR back on is not allowed.
4344 		 *
4345 		 * Dual-mode controllers shall operate with the public
4346 		 * address as its identity address for BR/EDR and LE. So
4347 		 * reject the attempt to create an invalid configuration.
4348 		 *
4349 		 * The same restrictions applies when secure connections
4350 		 * has been enabled. For BR/EDR this is a controller feature
4351 		 * while for LE it is a host stack feature. This means that
4352 		 * switching BR/EDR back on when secure connections has been
4353 		 * enabled is not a supported transaction.
4354 		 */
4355 		if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED) &&
4356 		    (bacmp(&hdev->static_addr, BDADDR_ANY) ||
4357 		     hci_dev_test_flag(hdev, HCI_SC_ENABLED))) {
4358 			err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_BREDR,
4359 					      MGMT_STATUS_REJECTED);
4360 			goto unlock;
4361 		}
4362 	}
4363 
4364 	if (pending_find(MGMT_OP_SET_BREDR, hdev)) {
4365 		err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_BREDR,
4366 				      MGMT_STATUS_BUSY);
4367 		goto unlock;
4368 	}
4369 
4370 	cmd = mgmt_pending_add(sk, MGMT_OP_SET_BREDR, hdev, data, len);
4371 	if (!cmd) {
4372 		err = -ENOMEM;
4373 		goto unlock;
4374 	}
4375 
4376 	/* We need to flip the bit already here so that
4377 	 * hci_req_update_adv_data generates the correct flags.
4378 	 */
4379 	hci_dev_set_flag(hdev, HCI_BREDR_ENABLED);
4380 
4381 	hci_req_init(&req, hdev);
4382 
4383 	__hci_req_write_fast_connectable(&req, false);
4384 	__hci_req_update_scan(&req);
4385 
4386 	/* Since only the advertising data flags will change, there
4387 	 * is no need to update the scan response data.
4388 	 */
4389 	__hci_req_update_adv_data(&req, hdev->cur_adv_instance);
4390 
4391 	err = hci_req_run(&req, set_bredr_complete);
4392 	if (err < 0)
4393 		mgmt_pending_remove(cmd);
4394 
4395 unlock:
4396 	hci_dev_unlock(hdev);
4397 	return err;
4398 }
4399 
4400 static void sc_enable_complete(struct hci_dev *hdev, u8 status, u16 opcode)
4401 {
4402 	struct mgmt_pending_cmd *cmd;
4403 	struct mgmt_mode *cp;
4404 
4405 	BT_DBG("%s status %u", hdev->name, status);
4406 
4407 	hci_dev_lock(hdev);
4408 
4409 	cmd = pending_find(MGMT_OP_SET_SECURE_CONN, hdev);
4410 	if (!cmd)
4411 		goto unlock;
4412 
4413 	if (status) {
4414 		mgmt_cmd_status(cmd->sk, cmd->index, cmd->opcode,
4415 			        mgmt_status(status));
4416 		goto remove;
4417 	}
4418 
4419 	cp = cmd->param;
4420 
4421 	switch (cp->val) {
4422 	case 0x00:
4423 		hci_dev_clear_flag(hdev, HCI_SC_ENABLED);
4424 		hci_dev_clear_flag(hdev, HCI_SC_ONLY);
4425 		break;
4426 	case 0x01:
4427 		hci_dev_set_flag(hdev, HCI_SC_ENABLED);
4428 		hci_dev_clear_flag(hdev, HCI_SC_ONLY);
4429 		break;
4430 	case 0x02:
4431 		hci_dev_set_flag(hdev, HCI_SC_ENABLED);
4432 		hci_dev_set_flag(hdev, HCI_SC_ONLY);
4433 		break;
4434 	}
4435 
4436 	send_settings_rsp(cmd->sk, MGMT_OP_SET_SECURE_CONN, hdev);
4437 	new_settings(hdev, cmd->sk);
4438 
4439 remove:
4440 	mgmt_pending_remove(cmd);
4441 unlock:
4442 	hci_dev_unlock(hdev);
4443 }
4444 
4445 static int set_secure_conn(struct sock *sk, struct hci_dev *hdev,
4446 			   void *data, u16 len)
4447 {
4448 	struct mgmt_mode *cp = data;
4449 	struct mgmt_pending_cmd *cmd;
4450 	struct hci_request req;
4451 	u8 val;
4452 	int err;
4453 
4454 	BT_DBG("request for %s", hdev->name);
4455 
4456 	if (!lmp_sc_capable(hdev) &&
4457 	    !hci_dev_test_flag(hdev, HCI_LE_ENABLED))
4458 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_SECURE_CONN,
4459 				       MGMT_STATUS_NOT_SUPPORTED);
4460 
4461 	if (hci_dev_test_flag(hdev, HCI_BREDR_ENABLED) &&
4462 	    lmp_sc_capable(hdev) &&
4463 	    !hci_dev_test_flag(hdev, HCI_SSP_ENABLED))
4464 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_SECURE_CONN,
4465 				       MGMT_STATUS_REJECTED);
4466 
4467 	if (cp->val != 0x00 && cp->val != 0x01 && cp->val != 0x02)
4468 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_SECURE_CONN,
4469 				  MGMT_STATUS_INVALID_PARAMS);
4470 
4471 	hci_dev_lock(hdev);
4472 
4473 	if (!hdev_is_powered(hdev) || !lmp_sc_capable(hdev) ||
4474 	    !hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) {
4475 		bool changed;
4476 
4477 		if (cp->val) {
4478 			changed = !hci_dev_test_and_set_flag(hdev,
4479 							     HCI_SC_ENABLED);
4480 			if (cp->val == 0x02)
4481 				hci_dev_set_flag(hdev, HCI_SC_ONLY);
4482 			else
4483 				hci_dev_clear_flag(hdev, HCI_SC_ONLY);
4484 		} else {
4485 			changed = hci_dev_test_and_clear_flag(hdev,
4486 							      HCI_SC_ENABLED);
4487 			hci_dev_clear_flag(hdev, HCI_SC_ONLY);
4488 		}
4489 
4490 		err = send_settings_rsp(sk, MGMT_OP_SET_SECURE_CONN, hdev);
4491 		if (err < 0)
4492 			goto failed;
4493 
4494 		if (changed)
4495 			err = new_settings(hdev, sk);
4496 
4497 		goto failed;
4498 	}
4499 
4500 	if (pending_find(MGMT_OP_SET_SECURE_CONN, hdev)) {
4501 		err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_SECURE_CONN,
4502 				      MGMT_STATUS_BUSY);
4503 		goto failed;
4504 	}
4505 
4506 	val = !!cp->val;
4507 
4508 	if (val == hci_dev_test_flag(hdev, HCI_SC_ENABLED) &&
4509 	    (cp->val == 0x02) == hci_dev_test_flag(hdev, HCI_SC_ONLY)) {
4510 		err = send_settings_rsp(sk, MGMT_OP_SET_SECURE_CONN, hdev);
4511 		goto failed;
4512 	}
4513 
4514 	cmd = mgmt_pending_add(sk, MGMT_OP_SET_SECURE_CONN, hdev, data, len);
4515 	if (!cmd) {
4516 		err = -ENOMEM;
4517 		goto failed;
4518 	}
4519 
4520 	hci_req_init(&req, hdev);
4521 	hci_req_add(&req, HCI_OP_WRITE_SC_SUPPORT, 1, &val);
4522 	err = hci_req_run(&req, sc_enable_complete);
4523 	if (err < 0) {
4524 		mgmt_pending_remove(cmd);
4525 		goto failed;
4526 	}
4527 
4528 failed:
4529 	hci_dev_unlock(hdev);
4530 	return err;
4531 }
4532 
4533 static int set_debug_keys(struct sock *sk, struct hci_dev *hdev,
4534 			  void *data, u16 len)
4535 {
4536 	struct mgmt_mode *cp = data;
4537 	bool changed, use_changed;
4538 	int err;
4539 
4540 	BT_DBG("request for %s", hdev->name);
4541 
4542 	if (cp->val != 0x00 && cp->val != 0x01 && cp->val != 0x02)
4543 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_DEBUG_KEYS,
4544 				       MGMT_STATUS_INVALID_PARAMS);
4545 
4546 	hci_dev_lock(hdev);
4547 
4548 	if (cp->val)
4549 		changed = !hci_dev_test_and_set_flag(hdev, HCI_KEEP_DEBUG_KEYS);
4550 	else
4551 		changed = hci_dev_test_and_clear_flag(hdev,
4552 						      HCI_KEEP_DEBUG_KEYS);
4553 
4554 	if (cp->val == 0x02)
4555 		use_changed = !hci_dev_test_and_set_flag(hdev,
4556 							 HCI_USE_DEBUG_KEYS);
4557 	else
4558 		use_changed = hci_dev_test_and_clear_flag(hdev,
4559 							  HCI_USE_DEBUG_KEYS);
4560 
4561 	if (hdev_is_powered(hdev) && use_changed &&
4562 	    hci_dev_test_flag(hdev, HCI_SSP_ENABLED)) {
4563 		u8 mode = (cp->val == 0x02) ? 0x01 : 0x00;
4564 		hci_send_cmd(hdev, HCI_OP_WRITE_SSP_DEBUG_MODE,
4565 			     sizeof(mode), &mode);
4566 	}
4567 
4568 	err = send_settings_rsp(sk, MGMT_OP_SET_DEBUG_KEYS, hdev);
4569 	if (err < 0)
4570 		goto unlock;
4571 
4572 	if (changed)
4573 		err = new_settings(hdev, sk);
4574 
4575 unlock:
4576 	hci_dev_unlock(hdev);
4577 	return err;
4578 }
4579 
4580 static int set_privacy(struct sock *sk, struct hci_dev *hdev, void *cp_data,
4581 		       u16 len)
4582 {
4583 	struct mgmt_cp_set_privacy *cp = cp_data;
4584 	bool changed;
4585 	int err;
4586 
4587 	BT_DBG("request for %s", hdev->name);
4588 
4589 	if (!lmp_le_capable(hdev))
4590 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_PRIVACY,
4591 				       MGMT_STATUS_NOT_SUPPORTED);
4592 
4593 	if (cp->privacy != 0x00 && cp->privacy != 0x01 && cp->privacy != 0x02)
4594 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_PRIVACY,
4595 				       MGMT_STATUS_INVALID_PARAMS);
4596 
4597 	if (hdev_is_powered(hdev))
4598 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_PRIVACY,
4599 				       MGMT_STATUS_REJECTED);
4600 
4601 	hci_dev_lock(hdev);
4602 
4603 	/* If user space supports this command it is also expected to
4604 	 * handle IRKs. Therefore, set the HCI_RPA_RESOLVING flag.
4605 	 */
4606 	hci_dev_set_flag(hdev, HCI_RPA_RESOLVING);
4607 
4608 	if (cp->privacy) {
4609 		changed = !hci_dev_test_and_set_flag(hdev, HCI_PRIVACY);
4610 		memcpy(hdev->irk, cp->irk, sizeof(hdev->irk));
4611 		hci_dev_set_flag(hdev, HCI_RPA_EXPIRED);
4612 		if (cp->privacy == 0x02)
4613 			hci_dev_set_flag(hdev, HCI_LIMITED_PRIVACY);
4614 		else
4615 			hci_dev_clear_flag(hdev, HCI_LIMITED_PRIVACY);
4616 	} else {
4617 		changed = hci_dev_test_and_clear_flag(hdev, HCI_PRIVACY);
4618 		memset(hdev->irk, 0, sizeof(hdev->irk));
4619 		hci_dev_clear_flag(hdev, HCI_RPA_EXPIRED);
4620 		hci_dev_clear_flag(hdev, HCI_LIMITED_PRIVACY);
4621 	}
4622 
4623 	err = send_settings_rsp(sk, MGMT_OP_SET_PRIVACY, hdev);
4624 	if (err < 0)
4625 		goto unlock;
4626 
4627 	if (changed)
4628 		err = new_settings(hdev, sk);
4629 
4630 unlock:
4631 	hci_dev_unlock(hdev);
4632 	return err;
4633 }
4634 
4635 static bool irk_is_valid(struct mgmt_irk_info *irk)
4636 {
4637 	switch (irk->addr.type) {
4638 	case BDADDR_LE_PUBLIC:
4639 		return true;
4640 
4641 	case BDADDR_LE_RANDOM:
4642 		/* Two most significant bits shall be set */
4643 		if ((irk->addr.bdaddr.b[5] & 0xc0) != 0xc0)
4644 			return false;
4645 		return true;
4646 	}
4647 
4648 	return false;
4649 }
4650 
4651 static int load_irks(struct sock *sk, struct hci_dev *hdev, void *cp_data,
4652 		     u16 len)
4653 {
4654 	struct mgmt_cp_load_irks *cp = cp_data;
4655 	const u16 max_irk_count = ((U16_MAX - sizeof(*cp)) /
4656 				   sizeof(struct mgmt_irk_info));
4657 	u16 irk_count, expected_len;
4658 	int i, err;
4659 
4660 	BT_DBG("request for %s", hdev->name);
4661 
4662 	if (!lmp_le_capable(hdev))
4663 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_LOAD_IRKS,
4664 				       MGMT_STATUS_NOT_SUPPORTED);
4665 
4666 	irk_count = __le16_to_cpu(cp->irk_count);
4667 	if (irk_count > max_irk_count) {
4668 		bt_dev_err(hdev, "load_irks: too big irk_count value %u",
4669 			   irk_count);
4670 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_LOAD_IRKS,
4671 				       MGMT_STATUS_INVALID_PARAMS);
4672 	}
4673 
4674 	expected_len = sizeof(*cp) + irk_count * sizeof(struct mgmt_irk_info);
4675 	if (expected_len != len) {
4676 		bt_dev_err(hdev, "load_irks: expected %u bytes, got %u bytes",
4677 			   expected_len, len);
4678 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_LOAD_IRKS,
4679 				       MGMT_STATUS_INVALID_PARAMS);
4680 	}
4681 
4682 	BT_DBG("%s irk_count %u", hdev->name, irk_count);
4683 
4684 	for (i = 0; i < irk_count; i++) {
4685 		struct mgmt_irk_info *key = &cp->irks[i];
4686 
4687 		if (!irk_is_valid(key))
4688 			return mgmt_cmd_status(sk, hdev->id,
4689 					       MGMT_OP_LOAD_IRKS,
4690 					       MGMT_STATUS_INVALID_PARAMS);
4691 	}
4692 
4693 	hci_dev_lock(hdev);
4694 
4695 	hci_smp_irks_clear(hdev);
4696 
4697 	for (i = 0; i < irk_count; i++) {
4698 		struct mgmt_irk_info *irk = &cp->irks[i];
4699 
4700 		hci_add_irk(hdev, &irk->addr.bdaddr,
4701 			    le_addr_type(irk->addr.type), irk->val,
4702 			    BDADDR_ANY);
4703 	}
4704 
4705 	hci_dev_set_flag(hdev, HCI_RPA_RESOLVING);
4706 
4707 	err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_LOAD_IRKS, 0, NULL, 0);
4708 
4709 	hci_dev_unlock(hdev);
4710 
4711 	return err;
4712 }
4713 
4714 static bool ltk_is_valid(struct mgmt_ltk_info *key)
4715 {
4716 	if (key->master != 0x00 && key->master != 0x01)
4717 		return false;
4718 
4719 	switch (key->addr.type) {
4720 	case BDADDR_LE_PUBLIC:
4721 		return true;
4722 
4723 	case BDADDR_LE_RANDOM:
4724 		/* Two most significant bits shall be set */
4725 		if ((key->addr.bdaddr.b[5] & 0xc0) != 0xc0)
4726 			return false;
4727 		return true;
4728 	}
4729 
4730 	return false;
4731 }
4732 
4733 static int load_long_term_keys(struct sock *sk, struct hci_dev *hdev,
4734 			       void *cp_data, u16 len)
4735 {
4736 	struct mgmt_cp_load_long_term_keys *cp = cp_data;
4737 	const u16 max_key_count = ((U16_MAX - sizeof(*cp)) /
4738 				   sizeof(struct mgmt_ltk_info));
4739 	u16 key_count, expected_len;
4740 	int i, err;
4741 
4742 	BT_DBG("request for %s", hdev->name);
4743 
4744 	if (!lmp_le_capable(hdev))
4745 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_LOAD_LONG_TERM_KEYS,
4746 				       MGMT_STATUS_NOT_SUPPORTED);
4747 
4748 	key_count = __le16_to_cpu(cp->key_count);
4749 	if (key_count > max_key_count) {
4750 		bt_dev_err(hdev, "load_ltks: too big key_count value %u",
4751 			   key_count);
4752 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_LOAD_LONG_TERM_KEYS,
4753 				       MGMT_STATUS_INVALID_PARAMS);
4754 	}
4755 
4756 	expected_len = sizeof(*cp) + key_count *
4757 					sizeof(struct mgmt_ltk_info);
4758 	if (expected_len != len) {
4759 		bt_dev_err(hdev, "load_keys: expected %u bytes, got %u bytes",
4760 			   expected_len, len);
4761 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_LOAD_LONG_TERM_KEYS,
4762 				       MGMT_STATUS_INVALID_PARAMS);
4763 	}
4764 
4765 	BT_DBG("%s key_count %u", hdev->name, key_count);
4766 
4767 	for (i = 0; i < key_count; i++) {
4768 		struct mgmt_ltk_info *key = &cp->keys[i];
4769 
4770 		if (!ltk_is_valid(key))
4771 			return mgmt_cmd_status(sk, hdev->id,
4772 					       MGMT_OP_LOAD_LONG_TERM_KEYS,
4773 					       MGMT_STATUS_INVALID_PARAMS);
4774 	}
4775 
4776 	hci_dev_lock(hdev);
4777 
4778 	hci_smp_ltks_clear(hdev);
4779 
4780 	for (i = 0; i < key_count; i++) {
4781 		struct mgmt_ltk_info *key = &cp->keys[i];
4782 		u8 type, authenticated;
4783 
4784 		switch (key->type) {
4785 		case MGMT_LTK_UNAUTHENTICATED:
4786 			authenticated = 0x00;
4787 			type = key->master ? SMP_LTK : SMP_LTK_SLAVE;
4788 			break;
4789 		case MGMT_LTK_AUTHENTICATED:
4790 			authenticated = 0x01;
4791 			type = key->master ? SMP_LTK : SMP_LTK_SLAVE;
4792 			break;
4793 		case MGMT_LTK_P256_UNAUTH:
4794 			authenticated = 0x00;
4795 			type = SMP_LTK_P256;
4796 			break;
4797 		case MGMT_LTK_P256_AUTH:
4798 			authenticated = 0x01;
4799 			type = SMP_LTK_P256;
4800 			break;
4801 		case MGMT_LTK_P256_DEBUG:
4802 			authenticated = 0x00;
4803 			type = SMP_LTK_P256_DEBUG;
4804 			/* fall through */
4805 		default:
4806 			continue;
4807 		}
4808 
4809 		hci_add_ltk(hdev, &key->addr.bdaddr,
4810 			    le_addr_type(key->addr.type), type, authenticated,
4811 			    key->val, key->enc_size, key->ediv, key->rand);
4812 	}
4813 
4814 	err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_LOAD_LONG_TERM_KEYS, 0,
4815 			   NULL, 0);
4816 
4817 	hci_dev_unlock(hdev);
4818 
4819 	return err;
4820 }
4821 
4822 static int conn_info_cmd_complete(struct mgmt_pending_cmd *cmd, u8 status)
4823 {
4824 	struct hci_conn *conn = cmd->user_data;
4825 	struct mgmt_rp_get_conn_info rp;
4826 	int err;
4827 
4828 	memcpy(&rp.addr, cmd->param, sizeof(rp.addr));
4829 
4830 	if (status == MGMT_STATUS_SUCCESS) {
4831 		rp.rssi = conn->rssi;
4832 		rp.tx_power = conn->tx_power;
4833 		rp.max_tx_power = conn->max_tx_power;
4834 	} else {
4835 		rp.rssi = HCI_RSSI_INVALID;
4836 		rp.tx_power = HCI_TX_POWER_INVALID;
4837 		rp.max_tx_power = HCI_TX_POWER_INVALID;
4838 	}
4839 
4840 	err = mgmt_cmd_complete(cmd->sk, cmd->index, MGMT_OP_GET_CONN_INFO,
4841 				status, &rp, sizeof(rp));
4842 
4843 	hci_conn_drop(conn);
4844 	hci_conn_put(conn);
4845 
4846 	return err;
4847 }
4848 
4849 static void conn_info_refresh_complete(struct hci_dev *hdev, u8 hci_status,
4850 				       u16 opcode)
4851 {
4852 	struct hci_cp_read_rssi *cp;
4853 	struct mgmt_pending_cmd *cmd;
4854 	struct hci_conn *conn;
4855 	u16 handle;
4856 	u8 status;
4857 
4858 	BT_DBG("status 0x%02x", hci_status);
4859 
4860 	hci_dev_lock(hdev);
4861 
4862 	/* Commands sent in request are either Read RSSI or Read Transmit Power
4863 	 * Level so we check which one was last sent to retrieve connection
4864 	 * handle.  Both commands have handle as first parameter so it's safe to
4865 	 * cast data on the same command struct.
4866 	 *
4867 	 * First command sent is always Read RSSI and we fail only if it fails.
4868 	 * In other case we simply override error to indicate success as we
4869 	 * already remembered if TX power value is actually valid.
4870 	 */
4871 	cp = hci_sent_cmd_data(hdev, HCI_OP_READ_RSSI);
4872 	if (!cp) {
4873 		cp = hci_sent_cmd_data(hdev, HCI_OP_READ_TX_POWER);
4874 		status = MGMT_STATUS_SUCCESS;
4875 	} else {
4876 		status = mgmt_status(hci_status);
4877 	}
4878 
4879 	if (!cp) {
4880 		bt_dev_err(hdev, "invalid sent_cmd in conn_info response");
4881 		goto unlock;
4882 	}
4883 
4884 	handle = __le16_to_cpu(cp->handle);
4885 	conn = hci_conn_hash_lookup_handle(hdev, handle);
4886 	if (!conn) {
4887 		bt_dev_err(hdev, "unknown handle (%d) in conn_info response",
4888 			   handle);
4889 		goto unlock;
4890 	}
4891 
4892 	cmd = pending_find_data(MGMT_OP_GET_CONN_INFO, hdev, conn);
4893 	if (!cmd)
4894 		goto unlock;
4895 
4896 	cmd->cmd_complete(cmd, status);
4897 	mgmt_pending_remove(cmd);
4898 
4899 unlock:
4900 	hci_dev_unlock(hdev);
4901 }
4902 
4903 static int get_conn_info(struct sock *sk, struct hci_dev *hdev, void *data,
4904 			 u16 len)
4905 {
4906 	struct mgmt_cp_get_conn_info *cp = data;
4907 	struct mgmt_rp_get_conn_info rp;
4908 	struct hci_conn *conn;
4909 	unsigned long conn_info_age;
4910 	int err = 0;
4911 
4912 	BT_DBG("%s", hdev->name);
4913 
4914 	memset(&rp, 0, sizeof(rp));
4915 	bacpy(&rp.addr.bdaddr, &cp->addr.bdaddr);
4916 	rp.addr.type = cp->addr.type;
4917 
4918 	if (!bdaddr_type_is_valid(cp->addr.type))
4919 		return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_GET_CONN_INFO,
4920 					 MGMT_STATUS_INVALID_PARAMS,
4921 					 &rp, sizeof(rp));
4922 
4923 	hci_dev_lock(hdev);
4924 
4925 	if (!hdev_is_powered(hdev)) {
4926 		err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_GET_CONN_INFO,
4927 					MGMT_STATUS_NOT_POWERED, &rp,
4928 					sizeof(rp));
4929 		goto unlock;
4930 	}
4931 
4932 	if (cp->addr.type == BDADDR_BREDR)
4933 		conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK,
4934 					       &cp->addr.bdaddr);
4935 	else
4936 		conn = hci_conn_hash_lookup_ba(hdev, LE_LINK, &cp->addr.bdaddr);
4937 
4938 	if (!conn || conn->state != BT_CONNECTED) {
4939 		err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_GET_CONN_INFO,
4940 					MGMT_STATUS_NOT_CONNECTED, &rp,
4941 					sizeof(rp));
4942 		goto unlock;
4943 	}
4944 
4945 	if (pending_find_data(MGMT_OP_GET_CONN_INFO, hdev, conn)) {
4946 		err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_GET_CONN_INFO,
4947 					MGMT_STATUS_BUSY, &rp, sizeof(rp));
4948 		goto unlock;
4949 	}
4950 
4951 	/* To avoid client trying to guess when to poll again for information we
4952 	 * calculate conn info age as random value between min/max set in hdev.
4953 	 */
4954 	conn_info_age = hdev->conn_info_min_age +
4955 			prandom_u32_max(hdev->conn_info_max_age -
4956 					hdev->conn_info_min_age);
4957 
4958 	/* Query controller to refresh cached values if they are too old or were
4959 	 * never read.
4960 	 */
4961 	if (time_after(jiffies, conn->conn_info_timestamp +
4962 		       msecs_to_jiffies(conn_info_age)) ||
4963 	    !conn->conn_info_timestamp) {
4964 		struct hci_request req;
4965 		struct hci_cp_read_tx_power req_txp_cp;
4966 		struct hci_cp_read_rssi req_rssi_cp;
4967 		struct mgmt_pending_cmd *cmd;
4968 
4969 		hci_req_init(&req, hdev);
4970 		req_rssi_cp.handle = cpu_to_le16(conn->handle);
4971 		hci_req_add(&req, HCI_OP_READ_RSSI, sizeof(req_rssi_cp),
4972 			    &req_rssi_cp);
4973 
4974 		/* For LE links TX power does not change thus we don't need to
4975 		 * query for it once value is known.
4976 		 */
4977 		if (!bdaddr_type_is_le(cp->addr.type) ||
4978 		    conn->tx_power == HCI_TX_POWER_INVALID) {
4979 			req_txp_cp.handle = cpu_to_le16(conn->handle);
4980 			req_txp_cp.type = 0x00;
4981 			hci_req_add(&req, HCI_OP_READ_TX_POWER,
4982 				    sizeof(req_txp_cp), &req_txp_cp);
4983 		}
4984 
4985 		/* Max TX power needs to be read only once per connection */
4986 		if (conn->max_tx_power == HCI_TX_POWER_INVALID) {
4987 			req_txp_cp.handle = cpu_to_le16(conn->handle);
4988 			req_txp_cp.type = 0x01;
4989 			hci_req_add(&req, HCI_OP_READ_TX_POWER,
4990 				    sizeof(req_txp_cp), &req_txp_cp);
4991 		}
4992 
4993 		err = hci_req_run(&req, conn_info_refresh_complete);
4994 		if (err < 0)
4995 			goto unlock;
4996 
4997 		cmd = mgmt_pending_add(sk, MGMT_OP_GET_CONN_INFO, hdev,
4998 				       data, len);
4999 		if (!cmd) {
5000 			err = -ENOMEM;
5001 			goto unlock;
5002 		}
5003 
5004 		hci_conn_hold(conn);
5005 		cmd->user_data = hci_conn_get(conn);
5006 		cmd->cmd_complete = conn_info_cmd_complete;
5007 
5008 		conn->conn_info_timestamp = jiffies;
5009 	} else {
5010 		/* Cache is valid, just reply with values cached in hci_conn */
5011 		rp.rssi = conn->rssi;
5012 		rp.tx_power = conn->tx_power;
5013 		rp.max_tx_power = conn->max_tx_power;
5014 
5015 		err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_GET_CONN_INFO,
5016 					MGMT_STATUS_SUCCESS, &rp, sizeof(rp));
5017 	}
5018 
5019 unlock:
5020 	hci_dev_unlock(hdev);
5021 	return err;
5022 }
5023 
5024 static int clock_info_cmd_complete(struct mgmt_pending_cmd *cmd, u8 status)
5025 {
5026 	struct hci_conn *conn = cmd->user_data;
5027 	struct mgmt_rp_get_clock_info rp;
5028 	struct hci_dev *hdev;
5029 	int err;
5030 
5031 	memset(&rp, 0, sizeof(rp));
5032 	memcpy(&rp.addr, cmd->param, sizeof(rp.addr));
5033 
5034 	if (status)
5035 		goto complete;
5036 
5037 	hdev = hci_dev_get(cmd->index);
5038 	if (hdev) {
5039 		rp.local_clock = cpu_to_le32(hdev->clock);
5040 		hci_dev_put(hdev);
5041 	}
5042 
5043 	if (conn) {
5044 		rp.piconet_clock = cpu_to_le32(conn->clock);
5045 		rp.accuracy = cpu_to_le16(conn->clock_accuracy);
5046 	}
5047 
5048 complete:
5049 	err = mgmt_cmd_complete(cmd->sk, cmd->index, cmd->opcode, status, &rp,
5050 				sizeof(rp));
5051 
5052 	if (conn) {
5053 		hci_conn_drop(conn);
5054 		hci_conn_put(conn);
5055 	}
5056 
5057 	return err;
5058 }
5059 
5060 static void get_clock_info_complete(struct hci_dev *hdev, u8 status, u16 opcode)
5061 {
5062 	struct hci_cp_read_clock *hci_cp;
5063 	struct mgmt_pending_cmd *cmd;
5064 	struct hci_conn *conn;
5065 
5066 	BT_DBG("%s status %u", hdev->name, status);
5067 
5068 	hci_dev_lock(hdev);
5069 
5070 	hci_cp = hci_sent_cmd_data(hdev, HCI_OP_READ_CLOCK);
5071 	if (!hci_cp)
5072 		goto unlock;
5073 
5074 	if (hci_cp->which) {
5075 		u16 handle = __le16_to_cpu(hci_cp->handle);
5076 		conn = hci_conn_hash_lookup_handle(hdev, handle);
5077 	} else {
5078 		conn = NULL;
5079 	}
5080 
5081 	cmd = pending_find_data(MGMT_OP_GET_CLOCK_INFO, hdev, conn);
5082 	if (!cmd)
5083 		goto unlock;
5084 
5085 	cmd->cmd_complete(cmd, mgmt_status(status));
5086 	mgmt_pending_remove(cmd);
5087 
5088 unlock:
5089 	hci_dev_unlock(hdev);
5090 }
5091 
5092 static int get_clock_info(struct sock *sk, struct hci_dev *hdev, void *data,
5093 			 u16 len)
5094 {
5095 	struct mgmt_cp_get_clock_info *cp = data;
5096 	struct mgmt_rp_get_clock_info rp;
5097 	struct hci_cp_read_clock hci_cp;
5098 	struct mgmt_pending_cmd *cmd;
5099 	struct hci_request req;
5100 	struct hci_conn *conn;
5101 	int err;
5102 
5103 	BT_DBG("%s", hdev->name);
5104 
5105 	memset(&rp, 0, sizeof(rp));
5106 	bacpy(&rp.addr.bdaddr, &cp->addr.bdaddr);
5107 	rp.addr.type = cp->addr.type;
5108 
5109 	if (cp->addr.type != BDADDR_BREDR)
5110 		return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_GET_CLOCK_INFO,
5111 					 MGMT_STATUS_INVALID_PARAMS,
5112 					 &rp, sizeof(rp));
5113 
5114 	hci_dev_lock(hdev);
5115 
5116 	if (!hdev_is_powered(hdev)) {
5117 		err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_GET_CLOCK_INFO,
5118 					MGMT_STATUS_NOT_POWERED, &rp,
5119 					sizeof(rp));
5120 		goto unlock;
5121 	}
5122 
5123 	if (bacmp(&cp->addr.bdaddr, BDADDR_ANY)) {
5124 		conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK,
5125 					       &cp->addr.bdaddr);
5126 		if (!conn || conn->state != BT_CONNECTED) {
5127 			err = mgmt_cmd_complete(sk, hdev->id,
5128 						MGMT_OP_GET_CLOCK_INFO,
5129 						MGMT_STATUS_NOT_CONNECTED,
5130 						&rp, sizeof(rp));
5131 			goto unlock;
5132 		}
5133 	} else {
5134 		conn = NULL;
5135 	}
5136 
5137 	cmd = mgmt_pending_add(sk, MGMT_OP_GET_CLOCK_INFO, hdev, data, len);
5138 	if (!cmd) {
5139 		err = -ENOMEM;
5140 		goto unlock;
5141 	}
5142 
5143 	cmd->cmd_complete = clock_info_cmd_complete;
5144 
5145 	hci_req_init(&req, hdev);
5146 
5147 	memset(&hci_cp, 0, sizeof(hci_cp));
5148 	hci_req_add(&req, HCI_OP_READ_CLOCK, sizeof(hci_cp), &hci_cp);
5149 
5150 	if (conn) {
5151 		hci_conn_hold(conn);
5152 		cmd->user_data = hci_conn_get(conn);
5153 
5154 		hci_cp.handle = cpu_to_le16(conn->handle);
5155 		hci_cp.which = 0x01; /* Piconet clock */
5156 		hci_req_add(&req, HCI_OP_READ_CLOCK, sizeof(hci_cp), &hci_cp);
5157 	}
5158 
5159 	err = hci_req_run(&req, get_clock_info_complete);
5160 	if (err < 0)
5161 		mgmt_pending_remove(cmd);
5162 
5163 unlock:
5164 	hci_dev_unlock(hdev);
5165 	return err;
5166 }
5167 
5168 static bool is_connected(struct hci_dev *hdev, bdaddr_t *addr, u8 type)
5169 {
5170 	struct hci_conn *conn;
5171 
5172 	conn = hci_conn_hash_lookup_ba(hdev, LE_LINK, addr);
5173 	if (!conn)
5174 		return false;
5175 
5176 	if (conn->dst_type != type)
5177 		return false;
5178 
5179 	if (conn->state != BT_CONNECTED)
5180 		return false;
5181 
5182 	return true;
5183 }
5184 
5185 /* This function requires the caller holds hdev->lock */
5186 static int hci_conn_params_set(struct hci_dev *hdev, bdaddr_t *addr,
5187 			       u8 addr_type, u8 auto_connect)
5188 {
5189 	struct hci_conn_params *params;
5190 
5191 	params = hci_conn_params_add(hdev, addr, addr_type);
5192 	if (!params)
5193 		return -EIO;
5194 
5195 	if (params->auto_connect == auto_connect)
5196 		return 0;
5197 
5198 	list_del_init(&params->action);
5199 
5200 	switch (auto_connect) {
5201 	case HCI_AUTO_CONN_DISABLED:
5202 	case HCI_AUTO_CONN_LINK_LOSS:
5203 		/* If auto connect is being disabled when we're trying to
5204 		 * connect to device, keep connecting.
5205 		 */
5206 		if (params->explicit_connect)
5207 			list_add(&params->action, &hdev->pend_le_conns);
5208 		break;
5209 	case HCI_AUTO_CONN_REPORT:
5210 		if (params->explicit_connect)
5211 			list_add(&params->action, &hdev->pend_le_conns);
5212 		else
5213 			list_add(&params->action, &hdev->pend_le_reports);
5214 		break;
5215 	case HCI_AUTO_CONN_DIRECT:
5216 	case HCI_AUTO_CONN_ALWAYS:
5217 		if (!is_connected(hdev, addr, addr_type))
5218 			list_add(&params->action, &hdev->pend_le_conns);
5219 		break;
5220 	}
5221 
5222 	params->auto_connect = auto_connect;
5223 
5224 	BT_DBG("addr %pMR (type %u) auto_connect %u", addr, addr_type,
5225 	       auto_connect);
5226 
5227 	return 0;
5228 }
5229 
5230 static void device_added(struct sock *sk, struct hci_dev *hdev,
5231 			 bdaddr_t *bdaddr, u8 type, u8 action)
5232 {
5233 	struct mgmt_ev_device_added ev;
5234 
5235 	bacpy(&ev.addr.bdaddr, bdaddr);
5236 	ev.addr.type = type;
5237 	ev.action = action;
5238 
5239 	mgmt_event(MGMT_EV_DEVICE_ADDED, hdev, &ev, sizeof(ev), sk);
5240 }
5241 
5242 static int add_device(struct sock *sk, struct hci_dev *hdev,
5243 		      void *data, u16 len)
5244 {
5245 	struct mgmt_cp_add_device *cp = data;
5246 	u8 auto_conn, addr_type;
5247 	int err;
5248 
5249 	BT_DBG("%s", hdev->name);
5250 
5251 	if (!bdaddr_type_is_valid(cp->addr.type) ||
5252 	    !bacmp(&cp->addr.bdaddr, BDADDR_ANY))
5253 		return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_ADD_DEVICE,
5254 					 MGMT_STATUS_INVALID_PARAMS,
5255 					 &cp->addr, sizeof(cp->addr));
5256 
5257 	if (cp->action != 0x00 && cp->action != 0x01 && cp->action != 0x02)
5258 		return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_ADD_DEVICE,
5259 					 MGMT_STATUS_INVALID_PARAMS,
5260 					 &cp->addr, sizeof(cp->addr));
5261 
5262 	hci_dev_lock(hdev);
5263 
5264 	if (cp->addr.type == BDADDR_BREDR) {
5265 		/* Only incoming connections action is supported for now */
5266 		if (cp->action != 0x01) {
5267 			err = mgmt_cmd_complete(sk, hdev->id,
5268 						MGMT_OP_ADD_DEVICE,
5269 						MGMT_STATUS_INVALID_PARAMS,
5270 						&cp->addr, sizeof(cp->addr));
5271 			goto unlock;
5272 		}
5273 
5274 		err = hci_bdaddr_list_add(&hdev->whitelist, &cp->addr.bdaddr,
5275 					  cp->addr.type);
5276 		if (err)
5277 			goto unlock;
5278 
5279 		hci_req_update_scan(hdev);
5280 
5281 		goto added;
5282 	}
5283 
5284 	addr_type = le_addr_type(cp->addr.type);
5285 
5286 	if (cp->action == 0x02)
5287 		auto_conn = HCI_AUTO_CONN_ALWAYS;
5288 	else if (cp->action == 0x01)
5289 		auto_conn = HCI_AUTO_CONN_DIRECT;
5290 	else
5291 		auto_conn = HCI_AUTO_CONN_REPORT;
5292 
5293 	/* Kernel internally uses conn_params with resolvable private
5294 	 * address, but Add Device allows only identity addresses.
5295 	 * Make sure it is enforced before calling
5296 	 * hci_conn_params_lookup.
5297 	 */
5298 	if (!hci_is_identity_address(&cp->addr.bdaddr, addr_type)) {
5299 		err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_ADD_DEVICE,
5300 					MGMT_STATUS_INVALID_PARAMS,
5301 					&cp->addr, sizeof(cp->addr));
5302 		goto unlock;
5303 	}
5304 
5305 	/* If the connection parameters don't exist for this device,
5306 	 * they will be created and configured with defaults.
5307 	 */
5308 	if (hci_conn_params_set(hdev, &cp->addr.bdaddr, addr_type,
5309 				auto_conn) < 0) {
5310 		err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_ADD_DEVICE,
5311 					MGMT_STATUS_FAILED, &cp->addr,
5312 					sizeof(cp->addr));
5313 		goto unlock;
5314 	}
5315 
5316 	hci_update_background_scan(hdev);
5317 
5318 added:
5319 	device_added(sk, hdev, &cp->addr.bdaddr, cp->addr.type, cp->action);
5320 
5321 	err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_ADD_DEVICE,
5322 				MGMT_STATUS_SUCCESS, &cp->addr,
5323 				sizeof(cp->addr));
5324 
5325 unlock:
5326 	hci_dev_unlock(hdev);
5327 	return err;
5328 }
5329 
5330 static void device_removed(struct sock *sk, struct hci_dev *hdev,
5331 			   bdaddr_t *bdaddr, u8 type)
5332 {
5333 	struct mgmt_ev_device_removed ev;
5334 
5335 	bacpy(&ev.addr.bdaddr, bdaddr);
5336 	ev.addr.type = type;
5337 
5338 	mgmt_event(MGMT_EV_DEVICE_REMOVED, hdev, &ev, sizeof(ev), sk);
5339 }
5340 
5341 static int remove_device(struct sock *sk, struct hci_dev *hdev,
5342 			 void *data, u16 len)
5343 {
5344 	struct mgmt_cp_remove_device *cp = data;
5345 	int err;
5346 
5347 	BT_DBG("%s", hdev->name);
5348 
5349 	hci_dev_lock(hdev);
5350 
5351 	if (bacmp(&cp->addr.bdaddr, BDADDR_ANY)) {
5352 		struct hci_conn_params *params;
5353 		u8 addr_type;
5354 
5355 		if (!bdaddr_type_is_valid(cp->addr.type)) {
5356 			err = mgmt_cmd_complete(sk, hdev->id,
5357 						MGMT_OP_REMOVE_DEVICE,
5358 						MGMT_STATUS_INVALID_PARAMS,
5359 						&cp->addr, sizeof(cp->addr));
5360 			goto unlock;
5361 		}
5362 
5363 		if (cp->addr.type == BDADDR_BREDR) {
5364 			err = hci_bdaddr_list_del(&hdev->whitelist,
5365 						  &cp->addr.bdaddr,
5366 						  cp->addr.type);
5367 			if (err) {
5368 				err = mgmt_cmd_complete(sk, hdev->id,
5369 							MGMT_OP_REMOVE_DEVICE,
5370 							MGMT_STATUS_INVALID_PARAMS,
5371 							&cp->addr,
5372 							sizeof(cp->addr));
5373 				goto unlock;
5374 			}
5375 
5376 			hci_req_update_scan(hdev);
5377 
5378 			device_removed(sk, hdev, &cp->addr.bdaddr,
5379 				       cp->addr.type);
5380 			goto complete;
5381 		}
5382 
5383 		addr_type = le_addr_type(cp->addr.type);
5384 
5385 		/* Kernel internally uses conn_params with resolvable private
5386 		 * address, but Remove Device allows only identity addresses.
5387 		 * Make sure it is enforced before calling
5388 		 * hci_conn_params_lookup.
5389 		 */
5390 		if (!hci_is_identity_address(&cp->addr.bdaddr, addr_type)) {
5391 			err = mgmt_cmd_complete(sk, hdev->id,
5392 						MGMT_OP_REMOVE_DEVICE,
5393 						MGMT_STATUS_INVALID_PARAMS,
5394 						&cp->addr, sizeof(cp->addr));
5395 			goto unlock;
5396 		}
5397 
5398 		params = hci_conn_params_lookup(hdev, &cp->addr.bdaddr,
5399 						addr_type);
5400 		if (!params) {
5401 			err = mgmt_cmd_complete(sk, hdev->id,
5402 						MGMT_OP_REMOVE_DEVICE,
5403 						MGMT_STATUS_INVALID_PARAMS,
5404 						&cp->addr, sizeof(cp->addr));
5405 			goto unlock;
5406 		}
5407 
5408 		if (params->auto_connect == HCI_AUTO_CONN_DISABLED ||
5409 		    params->auto_connect == HCI_AUTO_CONN_EXPLICIT) {
5410 			err = mgmt_cmd_complete(sk, hdev->id,
5411 						MGMT_OP_REMOVE_DEVICE,
5412 						MGMT_STATUS_INVALID_PARAMS,
5413 						&cp->addr, sizeof(cp->addr));
5414 			goto unlock;
5415 		}
5416 
5417 		list_del(&params->action);
5418 		list_del(&params->list);
5419 		kfree(params);
5420 		hci_update_background_scan(hdev);
5421 
5422 		device_removed(sk, hdev, &cp->addr.bdaddr, cp->addr.type);
5423 	} else {
5424 		struct hci_conn_params *p, *tmp;
5425 		struct bdaddr_list *b, *btmp;
5426 
5427 		if (cp->addr.type) {
5428 			err = mgmt_cmd_complete(sk, hdev->id,
5429 						MGMT_OP_REMOVE_DEVICE,
5430 						MGMT_STATUS_INVALID_PARAMS,
5431 						&cp->addr, sizeof(cp->addr));
5432 			goto unlock;
5433 		}
5434 
5435 		list_for_each_entry_safe(b, btmp, &hdev->whitelist, list) {
5436 			device_removed(sk, hdev, &b->bdaddr, b->bdaddr_type);
5437 			list_del(&b->list);
5438 			kfree(b);
5439 		}
5440 
5441 		hci_req_update_scan(hdev);
5442 
5443 		list_for_each_entry_safe(p, tmp, &hdev->le_conn_params, list) {
5444 			if (p->auto_connect == HCI_AUTO_CONN_DISABLED)
5445 				continue;
5446 			device_removed(sk, hdev, &p->addr, p->addr_type);
5447 			if (p->explicit_connect) {
5448 				p->auto_connect = HCI_AUTO_CONN_EXPLICIT;
5449 				continue;
5450 			}
5451 			list_del(&p->action);
5452 			list_del(&p->list);
5453 			kfree(p);
5454 		}
5455 
5456 		BT_DBG("All LE connection parameters were removed");
5457 
5458 		hci_update_background_scan(hdev);
5459 	}
5460 
5461 complete:
5462 	err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_REMOVE_DEVICE,
5463 				MGMT_STATUS_SUCCESS, &cp->addr,
5464 				sizeof(cp->addr));
5465 unlock:
5466 	hci_dev_unlock(hdev);
5467 	return err;
5468 }
5469 
5470 static int load_conn_param(struct sock *sk, struct hci_dev *hdev, void *data,
5471 			   u16 len)
5472 {
5473 	struct mgmt_cp_load_conn_param *cp = data;
5474 	const u16 max_param_count = ((U16_MAX - sizeof(*cp)) /
5475 				     sizeof(struct mgmt_conn_param));
5476 	u16 param_count, expected_len;
5477 	int i;
5478 
5479 	if (!lmp_le_capable(hdev))
5480 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_LOAD_CONN_PARAM,
5481 				       MGMT_STATUS_NOT_SUPPORTED);
5482 
5483 	param_count = __le16_to_cpu(cp->param_count);
5484 	if (param_count > max_param_count) {
5485 		bt_dev_err(hdev, "load_conn_param: too big param_count value %u",
5486 			   param_count);
5487 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_LOAD_CONN_PARAM,
5488 				       MGMT_STATUS_INVALID_PARAMS);
5489 	}
5490 
5491 	expected_len = sizeof(*cp) + param_count *
5492 					sizeof(struct mgmt_conn_param);
5493 	if (expected_len != len) {
5494 		bt_dev_err(hdev, "load_conn_param: expected %u bytes, got %u bytes",
5495 			   expected_len, len);
5496 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_LOAD_CONN_PARAM,
5497 				       MGMT_STATUS_INVALID_PARAMS);
5498 	}
5499 
5500 	BT_DBG("%s param_count %u", hdev->name, param_count);
5501 
5502 	hci_dev_lock(hdev);
5503 
5504 	hci_conn_params_clear_disabled(hdev);
5505 
5506 	for (i = 0; i < param_count; i++) {
5507 		struct mgmt_conn_param *param = &cp->params[i];
5508 		struct hci_conn_params *hci_param;
5509 		u16 min, max, latency, timeout;
5510 		u8 addr_type;
5511 
5512 		BT_DBG("Adding %pMR (type %u)", &param->addr.bdaddr,
5513 		       param->addr.type);
5514 
5515 		if (param->addr.type == BDADDR_LE_PUBLIC) {
5516 			addr_type = ADDR_LE_DEV_PUBLIC;
5517 		} else if (param->addr.type == BDADDR_LE_RANDOM) {
5518 			addr_type = ADDR_LE_DEV_RANDOM;
5519 		} else {
5520 			bt_dev_err(hdev, "ignoring invalid connection parameters");
5521 			continue;
5522 		}
5523 
5524 		min = le16_to_cpu(param->min_interval);
5525 		max = le16_to_cpu(param->max_interval);
5526 		latency = le16_to_cpu(param->latency);
5527 		timeout = le16_to_cpu(param->timeout);
5528 
5529 		BT_DBG("min 0x%04x max 0x%04x latency 0x%04x timeout 0x%04x",
5530 		       min, max, latency, timeout);
5531 
5532 		if (hci_check_conn_params(min, max, latency, timeout) < 0) {
5533 			bt_dev_err(hdev, "ignoring invalid connection parameters");
5534 			continue;
5535 		}
5536 
5537 		hci_param = hci_conn_params_add(hdev, &param->addr.bdaddr,
5538 						addr_type);
5539 		if (!hci_param) {
5540 			bt_dev_err(hdev, "failed to add connection parameters");
5541 			continue;
5542 		}
5543 
5544 		hci_param->conn_min_interval = min;
5545 		hci_param->conn_max_interval = max;
5546 		hci_param->conn_latency = latency;
5547 		hci_param->supervision_timeout = timeout;
5548 	}
5549 
5550 	hci_dev_unlock(hdev);
5551 
5552 	return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_LOAD_CONN_PARAM, 0,
5553 				 NULL, 0);
5554 }
5555 
5556 static int set_external_config(struct sock *sk, struct hci_dev *hdev,
5557 			       void *data, u16 len)
5558 {
5559 	struct mgmt_cp_set_external_config *cp = data;
5560 	bool changed;
5561 	int err;
5562 
5563 	BT_DBG("%s", hdev->name);
5564 
5565 	if (hdev_is_powered(hdev))
5566 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_EXTERNAL_CONFIG,
5567 				       MGMT_STATUS_REJECTED);
5568 
5569 	if (cp->config != 0x00 && cp->config != 0x01)
5570 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_EXTERNAL_CONFIG,
5571 				         MGMT_STATUS_INVALID_PARAMS);
5572 
5573 	if (!test_bit(HCI_QUIRK_EXTERNAL_CONFIG, &hdev->quirks))
5574 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_EXTERNAL_CONFIG,
5575 				       MGMT_STATUS_NOT_SUPPORTED);
5576 
5577 	hci_dev_lock(hdev);
5578 
5579 	if (cp->config)
5580 		changed = !hci_dev_test_and_set_flag(hdev, HCI_EXT_CONFIGURED);
5581 	else
5582 		changed = hci_dev_test_and_clear_flag(hdev, HCI_EXT_CONFIGURED);
5583 
5584 	err = send_options_rsp(sk, MGMT_OP_SET_EXTERNAL_CONFIG, hdev);
5585 	if (err < 0)
5586 		goto unlock;
5587 
5588 	if (!changed)
5589 		goto unlock;
5590 
5591 	err = new_options(hdev, sk);
5592 
5593 	if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED) == is_configured(hdev)) {
5594 		mgmt_index_removed(hdev);
5595 
5596 		if (hci_dev_test_and_change_flag(hdev, HCI_UNCONFIGURED)) {
5597 			hci_dev_set_flag(hdev, HCI_CONFIG);
5598 			hci_dev_set_flag(hdev, HCI_AUTO_OFF);
5599 
5600 			queue_work(hdev->req_workqueue, &hdev->power_on);
5601 		} else {
5602 			set_bit(HCI_RAW, &hdev->flags);
5603 			mgmt_index_added(hdev);
5604 		}
5605 	}
5606 
5607 unlock:
5608 	hci_dev_unlock(hdev);
5609 	return err;
5610 }
5611 
5612 static int set_public_address(struct sock *sk, struct hci_dev *hdev,
5613 			      void *data, u16 len)
5614 {
5615 	struct mgmt_cp_set_public_address *cp = data;
5616 	bool changed;
5617 	int err;
5618 
5619 	BT_DBG("%s", hdev->name);
5620 
5621 	if (hdev_is_powered(hdev))
5622 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_PUBLIC_ADDRESS,
5623 				       MGMT_STATUS_REJECTED);
5624 
5625 	if (!bacmp(&cp->bdaddr, BDADDR_ANY))
5626 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_PUBLIC_ADDRESS,
5627 				       MGMT_STATUS_INVALID_PARAMS);
5628 
5629 	if (!hdev->set_bdaddr)
5630 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_PUBLIC_ADDRESS,
5631 				       MGMT_STATUS_NOT_SUPPORTED);
5632 
5633 	hci_dev_lock(hdev);
5634 
5635 	changed = !!bacmp(&hdev->public_addr, &cp->bdaddr);
5636 	bacpy(&hdev->public_addr, &cp->bdaddr);
5637 
5638 	err = send_options_rsp(sk, MGMT_OP_SET_PUBLIC_ADDRESS, hdev);
5639 	if (err < 0)
5640 		goto unlock;
5641 
5642 	if (!changed)
5643 		goto unlock;
5644 
5645 	if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED))
5646 		err = new_options(hdev, sk);
5647 
5648 	if (is_configured(hdev)) {
5649 		mgmt_index_removed(hdev);
5650 
5651 		hci_dev_clear_flag(hdev, HCI_UNCONFIGURED);
5652 
5653 		hci_dev_set_flag(hdev, HCI_CONFIG);
5654 		hci_dev_set_flag(hdev, HCI_AUTO_OFF);
5655 
5656 		queue_work(hdev->req_workqueue, &hdev->power_on);
5657 	}
5658 
5659 unlock:
5660 	hci_dev_unlock(hdev);
5661 	return err;
5662 }
5663 
5664 static void read_local_oob_ext_data_complete(struct hci_dev *hdev, u8 status,
5665 					     u16 opcode, struct sk_buff *skb)
5666 {
5667 	const struct mgmt_cp_read_local_oob_ext_data *mgmt_cp;
5668 	struct mgmt_rp_read_local_oob_ext_data *mgmt_rp;
5669 	u8 *h192, *r192, *h256, *r256;
5670 	struct mgmt_pending_cmd *cmd;
5671 	u16 eir_len;
5672 	int err;
5673 
5674 	BT_DBG("%s status %u", hdev->name, status);
5675 
5676 	cmd = pending_find(MGMT_OP_READ_LOCAL_OOB_EXT_DATA, hdev);
5677 	if (!cmd)
5678 		return;
5679 
5680 	mgmt_cp = cmd->param;
5681 
5682 	if (status) {
5683 		status = mgmt_status(status);
5684 		eir_len = 0;
5685 
5686 		h192 = NULL;
5687 		r192 = NULL;
5688 		h256 = NULL;
5689 		r256 = NULL;
5690 	} else if (opcode == HCI_OP_READ_LOCAL_OOB_DATA) {
5691 		struct hci_rp_read_local_oob_data *rp;
5692 
5693 		if (skb->len != sizeof(*rp)) {
5694 			status = MGMT_STATUS_FAILED;
5695 			eir_len = 0;
5696 		} else {
5697 			status = MGMT_STATUS_SUCCESS;
5698 			rp = (void *)skb->data;
5699 
5700 			eir_len = 5 + 18 + 18;
5701 			h192 = rp->hash;
5702 			r192 = rp->rand;
5703 			h256 = NULL;
5704 			r256 = NULL;
5705 		}
5706 	} else {
5707 		struct hci_rp_read_local_oob_ext_data *rp;
5708 
5709 		if (skb->len != sizeof(*rp)) {
5710 			status = MGMT_STATUS_FAILED;
5711 			eir_len = 0;
5712 		} else {
5713 			status = MGMT_STATUS_SUCCESS;
5714 			rp = (void *)skb->data;
5715 
5716 			if (hci_dev_test_flag(hdev, HCI_SC_ONLY)) {
5717 				eir_len = 5 + 18 + 18;
5718 				h192 = NULL;
5719 				r192 = NULL;
5720 			} else {
5721 				eir_len = 5 + 18 + 18 + 18 + 18;
5722 				h192 = rp->hash192;
5723 				r192 = rp->rand192;
5724 			}
5725 
5726 			h256 = rp->hash256;
5727 			r256 = rp->rand256;
5728 		}
5729 	}
5730 
5731 	mgmt_rp = kmalloc(sizeof(*mgmt_rp) + eir_len, GFP_KERNEL);
5732 	if (!mgmt_rp)
5733 		goto done;
5734 
5735 	if (status)
5736 		goto send_rsp;
5737 
5738 	eir_len = eir_append_data(mgmt_rp->eir, 0, EIR_CLASS_OF_DEV,
5739 				  hdev->dev_class, 3);
5740 
5741 	if (h192 && r192) {
5742 		eir_len = eir_append_data(mgmt_rp->eir, eir_len,
5743 					  EIR_SSP_HASH_C192, h192, 16);
5744 		eir_len = eir_append_data(mgmt_rp->eir, eir_len,
5745 					  EIR_SSP_RAND_R192, r192, 16);
5746 	}
5747 
5748 	if (h256 && r256) {
5749 		eir_len = eir_append_data(mgmt_rp->eir, eir_len,
5750 					  EIR_SSP_HASH_C256, h256, 16);
5751 		eir_len = eir_append_data(mgmt_rp->eir, eir_len,
5752 					  EIR_SSP_RAND_R256, r256, 16);
5753 	}
5754 
5755 send_rsp:
5756 	mgmt_rp->type = mgmt_cp->type;
5757 	mgmt_rp->eir_len = cpu_to_le16(eir_len);
5758 
5759 	err = mgmt_cmd_complete(cmd->sk, hdev->id,
5760 				MGMT_OP_READ_LOCAL_OOB_EXT_DATA, status,
5761 				mgmt_rp, sizeof(*mgmt_rp) + eir_len);
5762 	if (err < 0 || status)
5763 		goto done;
5764 
5765 	hci_sock_set_flag(cmd->sk, HCI_MGMT_OOB_DATA_EVENTS);
5766 
5767 	err = mgmt_limited_event(MGMT_EV_LOCAL_OOB_DATA_UPDATED, hdev,
5768 				 mgmt_rp, sizeof(*mgmt_rp) + eir_len,
5769 				 HCI_MGMT_OOB_DATA_EVENTS, cmd->sk);
5770 done:
5771 	kfree(mgmt_rp);
5772 	mgmt_pending_remove(cmd);
5773 }
5774 
5775 static int read_local_ssp_oob_req(struct hci_dev *hdev, struct sock *sk,
5776 				  struct mgmt_cp_read_local_oob_ext_data *cp)
5777 {
5778 	struct mgmt_pending_cmd *cmd;
5779 	struct hci_request req;
5780 	int err;
5781 
5782 	cmd = mgmt_pending_add(sk, MGMT_OP_READ_LOCAL_OOB_EXT_DATA, hdev,
5783 			       cp, sizeof(*cp));
5784 	if (!cmd)
5785 		return -ENOMEM;
5786 
5787 	hci_req_init(&req, hdev);
5788 
5789 	if (bredr_sc_enabled(hdev))
5790 		hci_req_add(&req, HCI_OP_READ_LOCAL_OOB_EXT_DATA, 0, NULL);
5791 	else
5792 		hci_req_add(&req, HCI_OP_READ_LOCAL_OOB_DATA, 0, NULL);
5793 
5794 	err = hci_req_run_skb(&req, read_local_oob_ext_data_complete);
5795 	if (err < 0) {
5796 		mgmt_pending_remove(cmd);
5797 		return err;
5798 	}
5799 
5800 	return 0;
5801 }
5802 
5803 static int read_local_oob_ext_data(struct sock *sk, struct hci_dev *hdev,
5804 				   void *data, u16 data_len)
5805 {
5806 	struct mgmt_cp_read_local_oob_ext_data *cp = data;
5807 	struct mgmt_rp_read_local_oob_ext_data *rp;
5808 	size_t rp_len;
5809 	u16 eir_len;
5810 	u8 status, flags, role, addr[7], hash[16], rand[16];
5811 	int err;
5812 
5813 	BT_DBG("%s", hdev->name);
5814 
5815 	if (hdev_is_powered(hdev)) {
5816 		switch (cp->type) {
5817 		case BIT(BDADDR_BREDR):
5818 			status = mgmt_bredr_support(hdev);
5819 			if (status)
5820 				eir_len = 0;
5821 			else
5822 				eir_len = 5;
5823 			break;
5824 		case (BIT(BDADDR_LE_PUBLIC) | BIT(BDADDR_LE_RANDOM)):
5825 			status = mgmt_le_support(hdev);
5826 			if (status)
5827 				eir_len = 0;
5828 			else
5829 				eir_len = 9 + 3 + 18 + 18 + 3;
5830 			break;
5831 		default:
5832 			status = MGMT_STATUS_INVALID_PARAMS;
5833 			eir_len = 0;
5834 			break;
5835 		}
5836 	} else {
5837 		status = MGMT_STATUS_NOT_POWERED;
5838 		eir_len = 0;
5839 	}
5840 
5841 	rp_len = sizeof(*rp) + eir_len;
5842 	rp = kmalloc(rp_len, GFP_ATOMIC);
5843 	if (!rp)
5844 		return -ENOMEM;
5845 
5846 	if (status)
5847 		goto complete;
5848 
5849 	hci_dev_lock(hdev);
5850 
5851 	eir_len = 0;
5852 	switch (cp->type) {
5853 	case BIT(BDADDR_BREDR):
5854 		if (hci_dev_test_flag(hdev, HCI_SSP_ENABLED)) {
5855 			err = read_local_ssp_oob_req(hdev, sk, cp);
5856 			hci_dev_unlock(hdev);
5857 			if (!err)
5858 				goto done;
5859 
5860 			status = MGMT_STATUS_FAILED;
5861 			goto complete;
5862 		} else {
5863 			eir_len = eir_append_data(rp->eir, eir_len,
5864 						  EIR_CLASS_OF_DEV,
5865 						  hdev->dev_class, 3);
5866 		}
5867 		break;
5868 	case (BIT(BDADDR_LE_PUBLIC) | BIT(BDADDR_LE_RANDOM)):
5869 		if (hci_dev_test_flag(hdev, HCI_SC_ENABLED) &&
5870 		    smp_generate_oob(hdev, hash, rand) < 0) {
5871 			hci_dev_unlock(hdev);
5872 			status = MGMT_STATUS_FAILED;
5873 			goto complete;
5874 		}
5875 
5876 		/* This should return the active RPA, but since the RPA
5877 		 * is only programmed on demand, it is really hard to fill
5878 		 * this in at the moment. For now disallow retrieving
5879 		 * local out-of-band data when privacy is in use.
5880 		 *
5881 		 * Returning the identity address will not help here since
5882 		 * pairing happens before the identity resolving key is
5883 		 * known and thus the connection establishment happens
5884 		 * based on the RPA and not the identity address.
5885 		 */
5886 		if (hci_dev_test_flag(hdev, HCI_PRIVACY)) {
5887 			hci_dev_unlock(hdev);
5888 			status = MGMT_STATUS_REJECTED;
5889 			goto complete;
5890 		}
5891 
5892 		if (hci_dev_test_flag(hdev, HCI_FORCE_STATIC_ADDR) ||
5893 		   !bacmp(&hdev->bdaddr, BDADDR_ANY) ||
5894 		   (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED) &&
5895 		    bacmp(&hdev->static_addr, BDADDR_ANY))) {
5896 			memcpy(addr, &hdev->static_addr, 6);
5897 			addr[6] = 0x01;
5898 		} else {
5899 			memcpy(addr, &hdev->bdaddr, 6);
5900 			addr[6] = 0x00;
5901 		}
5902 
5903 		eir_len = eir_append_data(rp->eir, eir_len, EIR_LE_BDADDR,
5904 					  addr, sizeof(addr));
5905 
5906 		if (hci_dev_test_flag(hdev, HCI_ADVERTISING))
5907 			role = 0x02;
5908 		else
5909 			role = 0x01;
5910 
5911 		eir_len = eir_append_data(rp->eir, eir_len, EIR_LE_ROLE,
5912 					  &role, sizeof(role));
5913 
5914 		if (hci_dev_test_flag(hdev, HCI_SC_ENABLED)) {
5915 			eir_len = eir_append_data(rp->eir, eir_len,
5916 						  EIR_LE_SC_CONFIRM,
5917 						  hash, sizeof(hash));
5918 
5919 			eir_len = eir_append_data(rp->eir, eir_len,
5920 						  EIR_LE_SC_RANDOM,
5921 						  rand, sizeof(rand));
5922 		}
5923 
5924 		flags = mgmt_get_adv_discov_flags(hdev);
5925 
5926 		if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED))
5927 			flags |= LE_AD_NO_BREDR;
5928 
5929 		eir_len = eir_append_data(rp->eir, eir_len, EIR_FLAGS,
5930 					  &flags, sizeof(flags));
5931 		break;
5932 	}
5933 
5934 	hci_dev_unlock(hdev);
5935 
5936 	hci_sock_set_flag(sk, HCI_MGMT_OOB_DATA_EVENTS);
5937 
5938 	status = MGMT_STATUS_SUCCESS;
5939 
5940 complete:
5941 	rp->type = cp->type;
5942 	rp->eir_len = cpu_to_le16(eir_len);
5943 
5944 	err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_READ_LOCAL_OOB_EXT_DATA,
5945 				status, rp, sizeof(*rp) + eir_len);
5946 	if (err < 0 || status)
5947 		goto done;
5948 
5949 	err = mgmt_limited_event(MGMT_EV_LOCAL_OOB_DATA_UPDATED, hdev,
5950 				 rp, sizeof(*rp) + eir_len,
5951 				 HCI_MGMT_OOB_DATA_EVENTS, sk);
5952 
5953 done:
5954 	kfree(rp);
5955 
5956 	return err;
5957 }
5958 
5959 static u32 get_supported_adv_flags(struct hci_dev *hdev)
5960 {
5961 	u32 flags = 0;
5962 
5963 	flags |= MGMT_ADV_FLAG_CONNECTABLE;
5964 	flags |= MGMT_ADV_FLAG_DISCOV;
5965 	flags |= MGMT_ADV_FLAG_LIMITED_DISCOV;
5966 	flags |= MGMT_ADV_FLAG_MANAGED_FLAGS;
5967 	flags |= MGMT_ADV_FLAG_APPEARANCE;
5968 	flags |= MGMT_ADV_FLAG_LOCAL_NAME;
5969 
5970 	if (hdev->adv_tx_power != HCI_TX_POWER_INVALID)
5971 		flags |= MGMT_ADV_FLAG_TX_POWER;
5972 
5973 	return flags;
5974 }
5975 
5976 static int read_adv_features(struct sock *sk, struct hci_dev *hdev,
5977 			     void *data, u16 data_len)
5978 {
5979 	struct mgmt_rp_read_adv_features *rp;
5980 	size_t rp_len;
5981 	int err;
5982 	struct adv_info *adv_instance;
5983 	u32 supported_flags;
5984 	u8 *instance;
5985 
5986 	BT_DBG("%s", hdev->name);
5987 
5988 	if (!lmp_le_capable(hdev))
5989 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_READ_ADV_FEATURES,
5990 				       MGMT_STATUS_REJECTED);
5991 
5992 	hci_dev_lock(hdev);
5993 
5994 	rp_len = sizeof(*rp) + hdev->adv_instance_cnt;
5995 	rp = kmalloc(rp_len, GFP_ATOMIC);
5996 	if (!rp) {
5997 		hci_dev_unlock(hdev);
5998 		return -ENOMEM;
5999 	}
6000 
6001 	supported_flags = get_supported_adv_flags(hdev);
6002 
6003 	rp->supported_flags = cpu_to_le32(supported_flags);
6004 	rp->max_adv_data_len = HCI_MAX_AD_LENGTH;
6005 	rp->max_scan_rsp_len = HCI_MAX_AD_LENGTH;
6006 	rp->max_instances = HCI_MAX_ADV_INSTANCES;
6007 	rp->num_instances = hdev->adv_instance_cnt;
6008 
6009 	instance = rp->instance;
6010 	list_for_each_entry(adv_instance, &hdev->adv_instances, list) {
6011 		*instance = adv_instance->instance;
6012 		instance++;
6013 	}
6014 
6015 	hci_dev_unlock(hdev);
6016 
6017 	err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_READ_ADV_FEATURES,
6018 				MGMT_STATUS_SUCCESS, rp, rp_len);
6019 
6020 	kfree(rp);
6021 
6022 	return err;
6023 }
6024 
6025 static u8 calculate_name_len(struct hci_dev *hdev)
6026 {
6027 	u8 buf[HCI_MAX_SHORT_NAME_LENGTH + 3];
6028 
6029 	return append_local_name(hdev, buf, 0);
6030 }
6031 
6032 static u8 tlv_data_max_len(struct hci_dev *hdev, u32 adv_flags,
6033 			   bool is_adv_data)
6034 {
6035 	u8 max_len = HCI_MAX_AD_LENGTH;
6036 
6037 	if (is_adv_data) {
6038 		if (adv_flags & (MGMT_ADV_FLAG_DISCOV |
6039 				 MGMT_ADV_FLAG_LIMITED_DISCOV |
6040 				 MGMT_ADV_FLAG_MANAGED_FLAGS))
6041 			max_len -= 3;
6042 
6043 		if (adv_flags & MGMT_ADV_FLAG_TX_POWER)
6044 			max_len -= 3;
6045 	} else {
6046 		if (adv_flags & MGMT_ADV_FLAG_LOCAL_NAME)
6047 			max_len -= calculate_name_len(hdev);
6048 
6049 		if (adv_flags & (MGMT_ADV_FLAG_APPEARANCE))
6050 			max_len -= 4;
6051 	}
6052 
6053 	return max_len;
6054 }
6055 
6056 static bool flags_managed(u32 adv_flags)
6057 {
6058 	return adv_flags & (MGMT_ADV_FLAG_DISCOV |
6059 			    MGMT_ADV_FLAG_LIMITED_DISCOV |
6060 			    MGMT_ADV_FLAG_MANAGED_FLAGS);
6061 }
6062 
6063 static bool tx_power_managed(u32 adv_flags)
6064 {
6065 	return adv_flags & MGMT_ADV_FLAG_TX_POWER;
6066 }
6067 
6068 static bool name_managed(u32 adv_flags)
6069 {
6070 	return adv_flags & MGMT_ADV_FLAG_LOCAL_NAME;
6071 }
6072 
6073 static bool appearance_managed(u32 adv_flags)
6074 {
6075 	return adv_flags & MGMT_ADV_FLAG_APPEARANCE;
6076 }
6077 
6078 static bool tlv_data_is_valid(struct hci_dev *hdev, u32 adv_flags, u8 *data,
6079 			      u8 len, bool is_adv_data)
6080 {
6081 	int i, cur_len;
6082 	u8 max_len;
6083 
6084 	max_len = tlv_data_max_len(hdev, adv_flags, is_adv_data);
6085 
6086 	if (len > max_len)
6087 		return false;
6088 
6089 	/* Make sure that the data is correctly formatted. */
6090 	for (i = 0, cur_len = 0; i < len; i += (cur_len + 1)) {
6091 		cur_len = data[i];
6092 
6093 		if (data[i + 1] == EIR_FLAGS &&
6094 		    (!is_adv_data || flags_managed(adv_flags)))
6095 			return false;
6096 
6097 		if (data[i + 1] == EIR_TX_POWER && tx_power_managed(adv_flags))
6098 			return false;
6099 
6100 		if (data[i + 1] == EIR_NAME_COMPLETE && name_managed(adv_flags))
6101 			return false;
6102 
6103 		if (data[i + 1] == EIR_NAME_SHORT && name_managed(adv_flags))
6104 			return false;
6105 
6106 		if (data[i + 1] == EIR_APPEARANCE &&
6107 		    appearance_managed(adv_flags))
6108 			return false;
6109 
6110 		/* If the current field length would exceed the total data
6111 		 * length, then it's invalid.
6112 		 */
6113 		if (i + cur_len >= len)
6114 			return false;
6115 	}
6116 
6117 	return true;
6118 }
6119 
6120 static void add_advertising_complete(struct hci_dev *hdev, u8 status,
6121 				     u16 opcode)
6122 {
6123 	struct mgmt_pending_cmd *cmd;
6124 	struct mgmt_cp_add_advertising *cp;
6125 	struct mgmt_rp_add_advertising rp;
6126 	struct adv_info *adv_instance, *n;
6127 	u8 instance;
6128 
6129 	BT_DBG("status %d", status);
6130 
6131 	hci_dev_lock(hdev);
6132 
6133 	cmd = pending_find(MGMT_OP_ADD_ADVERTISING, hdev);
6134 
6135 	list_for_each_entry_safe(adv_instance, n, &hdev->adv_instances, list) {
6136 		if (!adv_instance->pending)
6137 			continue;
6138 
6139 		if (!status) {
6140 			adv_instance->pending = false;
6141 			continue;
6142 		}
6143 
6144 		instance = adv_instance->instance;
6145 
6146 		if (hdev->cur_adv_instance == instance)
6147 			cancel_adv_timeout(hdev);
6148 
6149 		hci_remove_adv_instance(hdev, instance);
6150 		mgmt_advertising_removed(cmd ? cmd->sk : NULL, hdev, instance);
6151 	}
6152 
6153 	if (!cmd)
6154 		goto unlock;
6155 
6156 	cp = cmd->param;
6157 	rp.instance = cp->instance;
6158 
6159 	if (status)
6160 		mgmt_cmd_status(cmd->sk, cmd->index, cmd->opcode,
6161 				mgmt_status(status));
6162 	else
6163 		mgmt_cmd_complete(cmd->sk, cmd->index, cmd->opcode,
6164 				  mgmt_status(status), &rp, sizeof(rp));
6165 
6166 	mgmt_pending_remove(cmd);
6167 
6168 unlock:
6169 	hci_dev_unlock(hdev);
6170 }
6171 
6172 static int add_advertising(struct sock *sk, struct hci_dev *hdev,
6173 			   void *data, u16 data_len)
6174 {
6175 	struct mgmt_cp_add_advertising *cp = data;
6176 	struct mgmt_rp_add_advertising rp;
6177 	u32 flags;
6178 	u32 supported_flags;
6179 	u8 status;
6180 	u16 timeout, duration;
6181 	unsigned int prev_instance_cnt = hdev->adv_instance_cnt;
6182 	u8 schedule_instance = 0;
6183 	struct adv_info *next_instance;
6184 	int err;
6185 	struct mgmt_pending_cmd *cmd;
6186 	struct hci_request req;
6187 
6188 	BT_DBG("%s", hdev->name);
6189 
6190 	status = mgmt_le_support(hdev);
6191 	if (status)
6192 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_ADD_ADVERTISING,
6193 				       status);
6194 
6195 	if (cp->instance < 1 || cp->instance > HCI_MAX_ADV_INSTANCES)
6196 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_ADD_ADVERTISING,
6197 				       MGMT_STATUS_INVALID_PARAMS);
6198 
6199 	if (data_len != sizeof(*cp) + cp->adv_data_len + cp->scan_rsp_len)
6200 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_ADD_ADVERTISING,
6201 				       MGMT_STATUS_INVALID_PARAMS);
6202 
6203 	flags = __le32_to_cpu(cp->flags);
6204 	timeout = __le16_to_cpu(cp->timeout);
6205 	duration = __le16_to_cpu(cp->duration);
6206 
6207 	/* The current implementation only supports a subset of the specified
6208 	 * flags.
6209 	 */
6210 	supported_flags = get_supported_adv_flags(hdev);
6211 	if (flags & ~supported_flags)
6212 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_ADD_ADVERTISING,
6213 				       MGMT_STATUS_INVALID_PARAMS);
6214 
6215 	hci_dev_lock(hdev);
6216 
6217 	if (timeout && !hdev_is_powered(hdev)) {
6218 		err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_ADD_ADVERTISING,
6219 				      MGMT_STATUS_REJECTED);
6220 		goto unlock;
6221 	}
6222 
6223 	if (pending_find(MGMT_OP_ADD_ADVERTISING, hdev) ||
6224 	    pending_find(MGMT_OP_REMOVE_ADVERTISING, hdev) ||
6225 	    pending_find(MGMT_OP_SET_LE, hdev)) {
6226 		err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_ADD_ADVERTISING,
6227 				      MGMT_STATUS_BUSY);
6228 		goto unlock;
6229 	}
6230 
6231 	if (!tlv_data_is_valid(hdev, flags, cp->data, cp->adv_data_len, true) ||
6232 	    !tlv_data_is_valid(hdev, flags, cp->data + cp->adv_data_len,
6233 			       cp->scan_rsp_len, false)) {
6234 		err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_ADD_ADVERTISING,
6235 				      MGMT_STATUS_INVALID_PARAMS);
6236 		goto unlock;
6237 	}
6238 
6239 	err = hci_add_adv_instance(hdev, cp->instance, flags,
6240 				   cp->adv_data_len, cp->data,
6241 				   cp->scan_rsp_len,
6242 				   cp->data + cp->adv_data_len,
6243 				   timeout, duration);
6244 	if (err < 0) {
6245 		err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_ADD_ADVERTISING,
6246 				      MGMT_STATUS_FAILED);
6247 		goto unlock;
6248 	}
6249 
6250 	/* Only trigger an advertising added event if a new instance was
6251 	 * actually added.
6252 	 */
6253 	if (hdev->adv_instance_cnt > prev_instance_cnt)
6254 		mgmt_advertising_added(sk, hdev, cp->instance);
6255 
6256 	if (hdev->cur_adv_instance == cp->instance) {
6257 		/* If the currently advertised instance is being changed then
6258 		 * cancel the current advertising and schedule the next
6259 		 * instance. If there is only one instance then the overridden
6260 		 * advertising data will be visible right away.
6261 		 */
6262 		cancel_adv_timeout(hdev);
6263 
6264 		next_instance = hci_get_next_instance(hdev, cp->instance);
6265 		if (next_instance)
6266 			schedule_instance = next_instance->instance;
6267 	} else if (!hdev->adv_instance_timeout) {
6268 		/* Immediately advertise the new instance if no other
6269 		 * instance is currently being advertised.
6270 		 */
6271 		schedule_instance = cp->instance;
6272 	}
6273 
6274 	/* If the HCI_ADVERTISING flag is set or the device isn't powered or
6275 	 * there is no instance to be advertised then we have no HCI
6276 	 * communication to make. Simply return.
6277 	 */
6278 	if (!hdev_is_powered(hdev) ||
6279 	    hci_dev_test_flag(hdev, HCI_ADVERTISING) ||
6280 	    !schedule_instance) {
6281 		rp.instance = cp->instance;
6282 		err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_ADD_ADVERTISING,
6283 					MGMT_STATUS_SUCCESS, &rp, sizeof(rp));
6284 		goto unlock;
6285 	}
6286 
6287 	/* We're good to go, update advertising data, parameters, and start
6288 	 * advertising.
6289 	 */
6290 	cmd = mgmt_pending_add(sk, MGMT_OP_ADD_ADVERTISING, hdev, data,
6291 			       data_len);
6292 	if (!cmd) {
6293 		err = -ENOMEM;
6294 		goto unlock;
6295 	}
6296 
6297 	hci_req_init(&req, hdev);
6298 
6299 	err = __hci_req_schedule_adv_instance(&req, schedule_instance, true);
6300 
6301 	if (!err)
6302 		err = hci_req_run(&req, add_advertising_complete);
6303 
6304 	if (err < 0)
6305 		mgmt_pending_remove(cmd);
6306 
6307 unlock:
6308 	hci_dev_unlock(hdev);
6309 
6310 	return err;
6311 }
6312 
6313 static void remove_advertising_complete(struct hci_dev *hdev, u8 status,
6314 					u16 opcode)
6315 {
6316 	struct mgmt_pending_cmd *cmd;
6317 	struct mgmt_cp_remove_advertising *cp;
6318 	struct mgmt_rp_remove_advertising rp;
6319 
6320 	BT_DBG("status %d", status);
6321 
6322 	hci_dev_lock(hdev);
6323 
6324 	/* A failure status here only means that we failed to disable
6325 	 * advertising. Otherwise, the advertising instance has been removed,
6326 	 * so report success.
6327 	 */
6328 	cmd = pending_find(MGMT_OP_REMOVE_ADVERTISING, hdev);
6329 	if (!cmd)
6330 		goto unlock;
6331 
6332 	cp = cmd->param;
6333 	rp.instance = cp->instance;
6334 
6335 	mgmt_cmd_complete(cmd->sk, cmd->index, cmd->opcode, MGMT_STATUS_SUCCESS,
6336 			  &rp, sizeof(rp));
6337 	mgmt_pending_remove(cmd);
6338 
6339 unlock:
6340 	hci_dev_unlock(hdev);
6341 }
6342 
6343 static int remove_advertising(struct sock *sk, struct hci_dev *hdev,
6344 			      void *data, u16 data_len)
6345 {
6346 	struct mgmt_cp_remove_advertising *cp = data;
6347 	struct mgmt_rp_remove_advertising rp;
6348 	struct mgmt_pending_cmd *cmd;
6349 	struct hci_request req;
6350 	int err;
6351 
6352 	BT_DBG("%s", hdev->name);
6353 
6354 	hci_dev_lock(hdev);
6355 
6356 	if (cp->instance && !hci_find_adv_instance(hdev, cp->instance)) {
6357 		err = mgmt_cmd_status(sk, hdev->id,
6358 				      MGMT_OP_REMOVE_ADVERTISING,
6359 				      MGMT_STATUS_INVALID_PARAMS);
6360 		goto unlock;
6361 	}
6362 
6363 	if (pending_find(MGMT_OP_ADD_ADVERTISING, hdev) ||
6364 	    pending_find(MGMT_OP_REMOVE_ADVERTISING, hdev) ||
6365 	    pending_find(MGMT_OP_SET_LE, hdev)) {
6366 		err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_REMOVE_ADVERTISING,
6367 				      MGMT_STATUS_BUSY);
6368 		goto unlock;
6369 	}
6370 
6371 	if (list_empty(&hdev->adv_instances)) {
6372 		err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_REMOVE_ADVERTISING,
6373 				      MGMT_STATUS_INVALID_PARAMS);
6374 		goto unlock;
6375 	}
6376 
6377 	hci_req_init(&req, hdev);
6378 
6379 	hci_req_clear_adv_instance(hdev, sk, &req, cp->instance, true);
6380 
6381 	if (list_empty(&hdev->adv_instances))
6382 		__hci_req_disable_advertising(&req);
6383 
6384 	/* If no HCI commands have been collected so far or the HCI_ADVERTISING
6385 	 * flag is set or the device isn't powered then we have no HCI
6386 	 * communication to make. Simply return.
6387 	 */
6388 	if (skb_queue_empty(&req.cmd_q) ||
6389 	    !hdev_is_powered(hdev) ||
6390 	    hci_dev_test_flag(hdev, HCI_ADVERTISING)) {
6391 		hci_req_purge(&req);
6392 		rp.instance = cp->instance;
6393 		err = mgmt_cmd_complete(sk, hdev->id,
6394 					MGMT_OP_REMOVE_ADVERTISING,
6395 					MGMT_STATUS_SUCCESS, &rp, sizeof(rp));
6396 		goto unlock;
6397 	}
6398 
6399 	cmd = mgmt_pending_add(sk, MGMT_OP_REMOVE_ADVERTISING, hdev, data,
6400 			       data_len);
6401 	if (!cmd) {
6402 		err = -ENOMEM;
6403 		goto unlock;
6404 	}
6405 
6406 	err = hci_req_run(&req, remove_advertising_complete);
6407 	if (err < 0)
6408 		mgmt_pending_remove(cmd);
6409 
6410 unlock:
6411 	hci_dev_unlock(hdev);
6412 
6413 	return err;
6414 }
6415 
6416 static int get_adv_size_info(struct sock *sk, struct hci_dev *hdev,
6417 			     void *data, u16 data_len)
6418 {
6419 	struct mgmt_cp_get_adv_size_info *cp = data;
6420 	struct mgmt_rp_get_adv_size_info rp;
6421 	u32 flags, supported_flags;
6422 	int err;
6423 
6424 	BT_DBG("%s", hdev->name);
6425 
6426 	if (!lmp_le_capable(hdev))
6427 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_GET_ADV_SIZE_INFO,
6428 				       MGMT_STATUS_REJECTED);
6429 
6430 	if (cp->instance < 1 || cp->instance > HCI_MAX_ADV_INSTANCES)
6431 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_GET_ADV_SIZE_INFO,
6432 				       MGMT_STATUS_INVALID_PARAMS);
6433 
6434 	flags = __le32_to_cpu(cp->flags);
6435 
6436 	/* The current implementation only supports a subset of the specified
6437 	 * flags.
6438 	 */
6439 	supported_flags = get_supported_adv_flags(hdev);
6440 	if (flags & ~supported_flags)
6441 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_GET_ADV_SIZE_INFO,
6442 				       MGMT_STATUS_INVALID_PARAMS);
6443 
6444 	rp.instance = cp->instance;
6445 	rp.flags = cp->flags;
6446 	rp.max_adv_data_len = tlv_data_max_len(hdev, flags, true);
6447 	rp.max_scan_rsp_len = tlv_data_max_len(hdev, flags, false);
6448 
6449 	err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_GET_ADV_SIZE_INFO,
6450 				MGMT_STATUS_SUCCESS, &rp, sizeof(rp));
6451 
6452 	return err;
6453 }
6454 
6455 static const struct hci_mgmt_handler mgmt_handlers[] = {
6456 	{ NULL }, /* 0x0000 (no command) */
6457 	{ read_version,            MGMT_READ_VERSION_SIZE,
6458 						HCI_MGMT_NO_HDEV |
6459 						HCI_MGMT_UNTRUSTED },
6460 	{ read_commands,           MGMT_READ_COMMANDS_SIZE,
6461 						HCI_MGMT_NO_HDEV |
6462 						HCI_MGMT_UNTRUSTED },
6463 	{ read_index_list,         MGMT_READ_INDEX_LIST_SIZE,
6464 						HCI_MGMT_NO_HDEV |
6465 						HCI_MGMT_UNTRUSTED },
6466 	{ read_controller_info,    MGMT_READ_INFO_SIZE,
6467 						HCI_MGMT_UNTRUSTED },
6468 	{ set_powered,             MGMT_SETTING_SIZE },
6469 	{ set_discoverable,        MGMT_SET_DISCOVERABLE_SIZE },
6470 	{ set_connectable,         MGMT_SETTING_SIZE },
6471 	{ set_fast_connectable,    MGMT_SETTING_SIZE },
6472 	{ set_bondable,            MGMT_SETTING_SIZE },
6473 	{ set_link_security,       MGMT_SETTING_SIZE },
6474 	{ set_ssp,                 MGMT_SETTING_SIZE },
6475 	{ set_hs,                  MGMT_SETTING_SIZE },
6476 	{ set_le,                  MGMT_SETTING_SIZE },
6477 	{ set_dev_class,           MGMT_SET_DEV_CLASS_SIZE },
6478 	{ set_local_name,          MGMT_SET_LOCAL_NAME_SIZE },
6479 	{ add_uuid,                MGMT_ADD_UUID_SIZE },
6480 	{ remove_uuid,             MGMT_REMOVE_UUID_SIZE },
6481 	{ load_link_keys,          MGMT_LOAD_LINK_KEYS_SIZE,
6482 						HCI_MGMT_VAR_LEN },
6483 	{ load_long_term_keys,     MGMT_LOAD_LONG_TERM_KEYS_SIZE,
6484 						HCI_MGMT_VAR_LEN },
6485 	{ disconnect,              MGMT_DISCONNECT_SIZE },
6486 	{ get_connections,         MGMT_GET_CONNECTIONS_SIZE },
6487 	{ pin_code_reply,          MGMT_PIN_CODE_REPLY_SIZE },
6488 	{ pin_code_neg_reply,      MGMT_PIN_CODE_NEG_REPLY_SIZE },
6489 	{ set_io_capability,       MGMT_SET_IO_CAPABILITY_SIZE },
6490 	{ pair_device,             MGMT_PAIR_DEVICE_SIZE },
6491 	{ cancel_pair_device,      MGMT_CANCEL_PAIR_DEVICE_SIZE },
6492 	{ unpair_device,           MGMT_UNPAIR_DEVICE_SIZE },
6493 	{ user_confirm_reply,      MGMT_USER_CONFIRM_REPLY_SIZE },
6494 	{ user_confirm_neg_reply,  MGMT_USER_CONFIRM_NEG_REPLY_SIZE },
6495 	{ user_passkey_reply,      MGMT_USER_PASSKEY_REPLY_SIZE },
6496 	{ user_passkey_neg_reply,  MGMT_USER_PASSKEY_NEG_REPLY_SIZE },
6497 	{ read_local_oob_data,     MGMT_READ_LOCAL_OOB_DATA_SIZE },
6498 	{ add_remote_oob_data,     MGMT_ADD_REMOTE_OOB_DATA_SIZE,
6499 						HCI_MGMT_VAR_LEN },
6500 	{ remove_remote_oob_data,  MGMT_REMOVE_REMOTE_OOB_DATA_SIZE },
6501 	{ start_discovery,         MGMT_START_DISCOVERY_SIZE },
6502 	{ stop_discovery,          MGMT_STOP_DISCOVERY_SIZE },
6503 	{ confirm_name,            MGMT_CONFIRM_NAME_SIZE },
6504 	{ block_device,            MGMT_BLOCK_DEVICE_SIZE },
6505 	{ unblock_device,          MGMT_UNBLOCK_DEVICE_SIZE },
6506 	{ set_device_id,           MGMT_SET_DEVICE_ID_SIZE },
6507 	{ set_advertising,         MGMT_SETTING_SIZE },
6508 	{ set_bredr,               MGMT_SETTING_SIZE },
6509 	{ set_static_address,      MGMT_SET_STATIC_ADDRESS_SIZE },
6510 	{ set_scan_params,         MGMT_SET_SCAN_PARAMS_SIZE },
6511 	{ set_secure_conn,         MGMT_SETTING_SIZE },
6512 	{ set_debug_keys,          MGMT_SETTING_SIZE },
6513 	{ set_privacy,             MGMT_SET_PRIVACY_SIZE },
6514 	{ load_irks,               MGMT_LOAD_IRKS_SIZE,
6515 						HCI_MGMT_VAR_LEN },
6516 	{ get_conn_info,           MGMT_GET_CONN_INFO_SIZE },
6517 	{ get_clock_info,          MGMT_GET_CLOCK_INFO_SIZE },
6518 	{ add_device,              MGMT_ADD_DEVICE_SIZE },
6519 	{ remove_device,           MGMT_REMOVE_DEVICE_SIZE },
6520 	{ load_conn_param,         MGMT_LOAD_CONN_PARAM_SIZE,
6521 						HCI_MGMT_VAR_LEN },
6522 	{ read_unconf_index_list,  MGMT_READ_UNCONF_INDEX_LIST_SIZE,
6523 						HCI_MGMT_NO_HDEV |
6524 						HCI_MGMT_UNTRUSTED },
6525 	{ read_config_info,        MGMT_READ_CONFIG_INFO_SIZE,
6526 						HCI_MGMT_UNCONFIGURED |
6527 						HCI_MGMT_UNTRUSTED },
6528 	{ set_external_config,     MGMT_SET_EXTERNAL_CONFIG_SIZE,
6529 						HCI_MGMT_UNCONFIGURED },
6530 	{ set_public_address,      MGMT_SET_PUBLIC_ADDRESS_SIZE,
6531 						HCI_MGMT_UNCONFIGURED },
6532 	{ start_service_discovery, MGMT_START_SERVICE_DISCOVERY_SIZE,
6533 						HCI_MGMT_VAR_LEN },
6534 	{ read_local_oob_ext_data, MGMT_READ_LOCAL_OOB_EXT_DATA_SIZE },
6535 	{ read_ext_index_list,     MGMT_READ_EXT_INDEX_LIST_SIZE,
6536 						HCI_MGMT_NO_HDEV |
6537 						HCI_MGMT_UNTRUSTED },
6538 	{ read_adv_features,       MGMT_READ_ADV_FEATURES_SIZE },
6539 	{ add_advertising,	   MGMT_ADD_ADVERTISING_SIZE,
6540 						HCI_MGMT_VAR_LEN },
6541 	{ remove_advertising,	   MGMT_REMOVE_ADVERTISING_SIZE },
6542 	{ get_adv_size_info,       MGMT_GET_ADV_SIZE_INFO_SIZE },
6543 	{ start_limited_discovery, MGMT_START_DISCOVERY_SIZE },
6544 	{ read_ext_controller_info,MGMT_READ_EXT_INFO_SIZE,
6545 						HCI_MGMT_UNTRUSTED },
6546 	{ set_appearance,	   MGMT_SET_APPEARANCE_SIZE },
6547 };
6548 
6549 void mgmt_index_added(struct hci_dev *hdev)
6550 {
6551 	struct mgmt_ev_ext_index ev;
6552 
6553 	if (test_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks))
6554 		return;
6555 
6556 	switch (hdev->dev_type) {
6557 	case HCI_PRIMARY:
6558 		if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED)) {
6559 			mgmt_index_event(MGMT_EV_UNCONF_INDEX_ADDED, hdev,
6560 					 NULL, 0, HCI_MGMT_UNCONF_INDEX_EVENTS);
6561 			ev.type = 0x01;
6562 		} else {
6563 			mgmt_index_event(MGMT_EV_INDEX_ADDED, hdev, NULL, 0,
6564 					 HCI_MGMT_INDEX_EVENTS);
6565 			ev.type = 0x00;
6566 		}
6567 		break;
6568 	case HCI_AMP:
6569 		ev.type = 0x02;
6570 		break;
6571 	default:
6572 		return;
6573 	}
6574 
6575 	ev.bus = hdev->bus;
6576 
6577 	mgmt_index_event(MGMT_EV_EXT_INDEX_ADDED, hdev, &ev, sizeof(ev),
6578 			 HCI_MGMT_EXT_INDEX_EVENTS);
6579 }
6580 
6581 void mgmt_index_removed(struct hci_dev *hdev)
6582 {
6583 	struct mgmt_ev_ext_index ev;
6584 	u8 status = MGMT_STATUS_INVALID_INDEX;
6585 
6586 	if (test_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks))
6587 		return;
6588 
6589 	switch (hdev->dev_type) {
6590 	case HCI_PRIMARY:
6591 		mgmt_pending_foreach(0, hdev, cmd_complete_rsp, &status);
6592 
6593 		if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED)) {
6594 			mgmt_index_event(MGMT_EV_UNCONF_INDEX_REMOVED, hdev,
6595 					 NULL, 0, HCI_MGMT_UNCONF_INDEX_EVENTS);
6596 			ev.type = 0x01;
6597 		} else {
6598 			mgmt_index_event(MGMT_EV_INDEX_REMOVED, hdev, NULL, 0,
6599 					 HCI_MGMT_INDEX_EVENTS);
6600 			ev.type = 0x00;
6601 		}
6602 		break;
6603 	case HCI_AMP:
6604 		ev.type = 0x02;
6605 		break;
6606 	default:
6607 		return;
6608 	}
6609 
6610 	ev.bus = hdev->bus;
6611 
6612 	mgmt_index_event(MGMT_EV_EXT_INDEX_REMOVED, hdev, &ev, sizeof(ev),
6613 			 HCI_MGMT_EXT_INDEX_EVENTS);
6614 }
6615 
6616 /* This function requires the caller holds hdev->lock */
6617 static void restart_le_actions(struct hci_dev *hdev)
6618 {
6619 	struct hci_conn_params *p;
6620 
6621 	list_for_each_entry(p, &hdev->le_conn_params, list) {
6622 		/* Needed for AUTO_OFF case where might not "really"
6623 		 * have been powered off.
6624 		 */
6625 		list_del_init(&p->action);
6626 
6627 		switch (p->auto_connect) {
6628 		case HCI_AUTO_CONN_DIRECT:
6629 		case HCI_AUTO_CONN_ALWAYS:
6630 			list_add(&p->action, &hdev->pend_le_conns);
6631 			break;
6632 		case HCI_AUTO_CONN_REPORT:
6633 			list_add(&p->action, &hdev->pend_le_reports);
6634 			break;
6635 		default:
6636 			break;
6637 		}
6638 	}
6639 }
6640 
6641 void mgmt_power_on(struct hci_dev *hdev, int err)
6642 {
6643 	struct cmd_lookup match = { NULL, hdev };
6644 
6645 	BT_DBG("err %d", err);
6646 
6647 	hci_dev_lock(hdev);
6648 
6649 	if (!err) {
6650 		restart_le_actions(hdev);
6651 		hci_update_background_scan(hdev);
6652 	}
6653 
6654 	mgmt_pending_foreach(MGMT_OP_SET_POWERED, hdev, settings_rsp, &match);
6655 
6656 	new_settings(hdev, match.sk);
6657 
6658 	if (match.sk)
6659 		sock_put(match.sk);
6660 
6661 	hci_dev_unlock(hdev);
6662 }
6663 
6664 void __mgmt_power_off(struct hci_dev *hdev)
6665 {
6666 	struct cmd_lookup match = { NULL, hdev };
6667 	u8 status, zero_cod[] = { 0, 0, 0 };
6668 
6669 	mgmt_pending_foreach(MGMT_OP_SET_POWERED, hdev, settings_rsp, &match);
6670 
6671 	/* If the power off is because of hdev unregistration let
6672 	 * use the appropriate INVALID_INDEX status. Otherwise use
6673 	 * NOT_POWERED. We cover both scenarios here since later in
6674 	 * mgmt_index_removed() any hci_conn callbacks will have already
6675 	 * been triggered, potentially causing misleading DISCONNECTED
6676 	 * status responses.
6677 	 */
6678 	if (hci_dev_test_flag(hdev, HCI_UNREGISTER))
6679 		status = MGMT_STATUS_INVALID_INDEX;
6680 	else
6681 		status = MGMT_STATUS_NOT_POWERED;
6682 
6683 	mgmt_pending_foreach(0, hdev, cmd_complete_rsp, &status);
6684 
6685 	if (memcmp(hdev->dev_class, zero_cod, sizeof(zero_cod)) != 0) {
6686 		mgmt_limited_event(MGMT_EV_CLASS_OF_DEV_CHANGED, hdev,
6687 				   zero_cod, sizeof(zero_cod),
6688 				   HCI_MGMT_DEV_CLASS_EVENTS, NULL);
6689 		ext_info_changed(hdev, NULL);
6690 	}
6691 
6692 	new_settings(hdev, match.sk);
6693 
6694 	if (match.sk)
6695 		sock_put(match.sk);
6696 }
6697 
6698 void mgmt_set_powered_failed(struct hci_dev *hdev, int err)
6699 {
6700 	struct mgmt_pending_cmd *cmd;
6701 	u8 status;
6702 
6703 	cmd = pending_find(MGMT_OP_SET_POWERED, hdev);
6704 	if (!cmd)
6705 		return;
6706 
6707 	if (err == -ERFKILL)
6708 		status = MGMT_STATUS_RFKILLED;
6709 	else
6710 		status = MGMT_STATUS_FAILED;
6711 
6712 	mgmt_cmd_status(cmd->sk, hdev->id, MGMT_OP_SET_POWERED, status);
6713 
6714 	mgmt_pending_remove(cmd);
6715 }
6716 
6717 void mgmt_new_link_key(struct hci_dev *hdev, struct link_key *key,
6718 		       bool persistent)
6719 {
6720 	struct mgmt_ev_new_link_key ev;
6721 
6722 	memset(&ev, 0, sizeof(ev));
6723 
6724 	ev.store_hint = persistent;
6725 	bacpy(&ev.key.addr.bdaddr, &key->bdaddr);
6726 	ev.key.addr.type = BDADDR_BREDR;
6727 	ev.key.type = key->type;
6728 	memcpy(ev.key.val, key->val, HCI_LINK_KEY_SIZE);
6729 	ev.key.pin_len = key->pin_len;
6730 
6731 	mgmt_event(MGMT_EV_NEW_LINK_KEY, hdev, &ev, sizeof(ev), NULL);
6732 }
6733 
6734 static u8 mgmt_ltk_type(struct smp_ltk *ltk)
6735 {
6736 	switch (ltk->type) {
6737 	case SMP_LTK:
6738 	case SMP_LTK_SLAVE:
6739 		if (ltk->authenticated)
6740 			return MGMT_LTK_AUTHENTICATED;
6741 		return MGMT_LTK_UNAUTHENTICATED;
6742 	case SMP_LTK_P256:
6743 		if (ltk->authenticated)
6744 			return MGMT_LTK_P256_AUTH;
6745 		return MGMT_LTK_P256_UNAUTH;
6746 	case SMP_LTK_P256_DEBUG:
6747 		return MGMT_LTK_P256_DEBUG;
6748 	}
6749 
6750 	return MGMT_LTK_UNAUTHENTICATED;
6751 }
6752 
6753 void mgmt_new_ltk(struct hci_dev *hdev, struct smp_ltk *key, bool persistent)
6754 {
6755 	struct mgmt_ev_new_long_term_key ev;
6756 
6757 	memset(&ev, 0, sizeof(ev));
6758 
6759 	/* Devices using resolvable or non-resolvable random addresses
6760 	 * without providing an identity resolving key don't require
6761 	 * to store long term keys. Their addresses will change the
6762 	 * next time around.
6763 	 *
6764 	 * Only when a remote device provides an identity address
6765 	 * make sure the long term key is stored. If the remote
6766 	 * identity is known, the long term keys are internally
6767 	 * mapped to the identity address. So allow static random
6768 	 * and public addresses here.
6769 	 */
6770 	if (key->bdaddr_type == ADDR_LE_DEV_RANDOM &&
6771 	    (key->bdaddr.b[5] & 0xc0) != 0xc0)
6772 		ev.store_hint = 0x00;
6773 	else
6774 		ev.store_hint = persistent;
6775 
6776 	bacpy(&ev.key.addr.bdaddr, &key->bdaddr);
6777 	ev.key.addr.type = link_to_bdaddr(LE_LINK, key->bdaddr_type);
6778 	ev.key.type = mgmt_ltk_type(key);
6779 	ev.key.enc_size = key->enc_size;
6780 	ev.key.ediv = key->ediv;
6781 	ev.key.rand = key->rand;
6782 
6783 	if (key->type == SMP_LTK)
6784 		ev.key.master = 1;
6785 
6786 	/* Make sure we copy only the significant bytes based on the
6787 	 * encryption key size, and set the rest of the value to zeroes.
6788 	 */
6789 	memcpy(ev.key.val, key->val, key->enc_size);
6790 	memset(ev.key.val + key->enc_size, 0,
6791 	       sizeof(ev.key.val) - key->enc_size);
6792 
6793 	mgmt_event(MGMT_EV_NEW_LONG_TERM_KEY, hdev, &ev, sizeof(ev), NULL);
6794 }
6795 
6796 void mgmt_new_irk(struct hci_dev *hdev, struct smp_irk *irk, bool persistent)
6797 {
6798 	struct mgmt_ev_new_irk ev;
6799 
6800 	memset(&ev, 0, sizeof(ev));
6801 
6802 	ev.store_hint = persistent;
6803 
6804 	bacpy(&ev.rpa, &irk->rpa);
6805 	bacpy(&ev.irk.addr.bdaddr, &irk->bdaddr);
6806 	ev.irk.addr.type = link_to_bdaddr(LE_LINK, irk->addr_type);
6807 	memcpy(ev.irk.val, irk->val, sizeof(irk->val));
6808 
6809 	mgmt_event(MGMT_EV_NEW_IRK, hdev, &ev, sizeof(ev), NULL);
6810 }
6811 
6812 void mgmt_new_csrk(struct hci_dev *hdev, struct smp_csrk *csrk,
6813 		   bool persistent)
6814 {
6815 	struct mgmt_ev_new_csrk ev;
6816 
6817 	memset(&ev, 0, sizeof(ev));
6818 
6819 	/* Devices using resolvable or non-resolvable random addresses
6820 	 * without providing an identity resolving key don't require
6821 	 * to store signature resolving keys. Their addresses will change
6822 	 * the next time around.
6823 	 *
6824 	 * Only when a remote device provides an identity address
6825 	 * make sure the signature resolving key is stored. So allow
6826 	 * static random and public addresses here.
6827 	 */
6828 	if (csrk->bdaddr_type == ADDR_LE_DEV_RANDOM &&
6829 	    (csrk->bdaddr.b[5] & 0xc0) != 0xc0)
6830 		ev.store_hint = 0x00;
6831 	else
6832 		ev.store_hint = persistent;
6833 
6834 	bacpy(&ev.key.addr.bdaddr, &csrk->bdaddr);
6835 	ev.key.addr.type = link_to_bdaddr(LE_LINK, csrk->bdaddr_type);
6836 	ev.key.type = csrk->type;
6837 	memcpy(ev.key.val, csrk->val, sizeof(csrk->val));
6838 
6839 	mgmt_event(MGMT_EV_NEW_CSRK, hdev, &ev, sizeof(ev), NULL);
6840 }
6841 
6842 void mgmt_new_conn_param(struct hci_dev *hdev, bdaddr_t *bdaddr,
6843 			 u8 bdaddr_type, u8 store_hint, u16 min_interval,
6844 			 u16 max_interval, u16 latency, u16 timeout)
6845 {
6846 	struct mgmt_ev_new_conn_param ev;
6847 
6848 	if (!hci_is_identity_address(bdaddr, bdaddr_type))
6849 		return;
6850 
6851 	memset(&ev, 0, sizeof(ev));
6852 	bacpy(&ev.addr.bdaddr, bdaddr);
6853 	ev.addr.type = link_to_bdaddr(LE_LINK, bdaddr_type);
6854 	ev.store_hint = store_hint;
6855 	ev.min_interval = cpu_to_le16(min_interval);
6856 	ev.max_interval = cpu_to_le16(max_interval);
6857 	ev.latency = cpu_to_le16(latency);
6858 	ev.timeout = cpu_to_le16(timeout);
6859 
6860 	mgmt_event(MGMT_EV_NEW_CONN_PARAM, hdev, &ev, sizeof(ev), NULL);
6861 }
6862 
6863 void mgmt_device_connected(struct hci_dev *hdev, struct hci_conn *conn,
6864 			   u32 flags, u8 *name, u8 name_len)
6865 {
6866 	char buf[512];
6867 	struct mgmt_ev_device_connected *ev = (void *) buf;
6868 	u16 eir_len = 0;
6869 
6870 	bacpy(&ev->addr.bdaddr, &conn->dst);
6871 	ev->addr.type = link_to_bdaddr(conn->type, conn->dst_type);
6872 
6873 	ev->flags = __cpu_to_le32(flags);
6874 
6875 	/* We must ensure that the EIR Data fields are ordered and
6876 	 * unique. Keep it simple for now and avoid the problem by not
6877 	 * adding any BR/EDR data to the LE adv.
6878 	 */
6879 	if (conn->le_adv_data_len > 0) {
6880 		memcpy(&ev->eir[eir_len],
6881 		       conn->le_adv_data, conn->le_adv_data_len);
6882 		eir_len = conn->le_adv_data_len;
6883 	} else {
6884 		if (name_len > 0)
6885 			eir_len = eir_append_data(ev->eir, 0, EIR_NAME_COMPLETE,
6886 						  name, name_len);
6887 
6888 		if (memcmp(conn->dev_class, "\0\0\0", 3) != 0)
6889 			eir_len = eir_append_data(ev->eir, eir_len,
6890 						  EIR_CLASS_OF_DEV,
6891 						  conn->dev_class, 3);
6892 	}
6893 
6894 	ev->eir_len = cpu_to_le16(eir_len);
6895 
6896 	mgmt_event(MGMT_EV_DEVICE_CONNECTED, hdev, buf,
6897 		    sizeof(*ev) + eir_len, NULL);
6898 }
6899 
6900 static void disconnect_rsp(struct mgmt_pending_cmd *cmd, void *data)
6901 {
6902 	struct sock **sk = data;
6903 
6904 	cmd->cmd_complete(cmd, 0);
6905 
6906 	*sk = cmd->sk;
6907 	sock_hold(*sk);
6908 
6909 	mgmt_pending_remove(cmd);
6910 }
6911 
6912 static void unpair_device_rsp(struct mgmt_pending_cmd *cmd, void *data)
6913 {
6914 	struct hci_dev *hdev = data;
6915 	struct mgmt_cp_unpair_device *cp = cmd->param;
6916 
6917 	device_unpaired(hdev, &cp->addr.bdaddr, cp->addr.type, cmd->sk);
6918 
6919 	cmd->cmd_complete(cmd, 0);
6920 	mgmt_pending_remove(cmd);
6921 }
6922 
6923 bool mgmt_powering_down(struct hci_dev *hdev)
6924 {
6925 	struct mgmt_pending_cmd *cmd;
6926 	struct mgmt_mode *cp;
6927 
6928 	cmd = pending_find(MGMT_OP_SET_POWERED, hdev);
6929 	if (!cmd)
6930 		return false;
6931 
6932 	cp = cmd->param;
6933 	if (!cp->val)
6934 		return true;
6935 
6936 	return false;
6937 }
6938 
6939 void mgmt_device_disconnected(struct hci_dev *hdev, bdaddr_t *bdaddr,
6940 			      u8 link_type, u8 addr_type, u8 reason,
6941 			      bool mgmt_connected)
6942 {
6943 	struct mgmt_ev_device_disconnected ev;
6944 	struct sock *sk = NULL;
6945 
6946 	/* The connection is still in hci_conn_hash so test for 1
6947 	 * instead of 0 to know if this is the last one.
6948 	 */
6949 	if (mgmt_powering_down(hdev) && hci_conn_count(hdev) == 1) {
6950 		cancel_delayed_work(&hdev->power_off);
6951 		queue_work(hdev->req_workqueue, &hdev->power_off.work);
6952 	}
6953 
6954 	if (!mgmt_connected)
6955 		return;
6956 
6957 	if (link_type != ACL_LINK && link_type != LE_LINK)
6958 		return;
6959 
6960 	mgmt_pending_foreach(MGMT_OP_DISCONNECT, hdev, disconnect_rsp, &sk);
6961 
6962 	bacpy(&ev.addr.bdaddr, bdaddr);
6963 	ev.addr.type = link_to_bdaddr(link_type, addr_type);
6964 	ev.reason = reason;
6965 
6966 	mgmt_event(MGMT_EV_DEVICE_DISCONNECTED, hdev, &ev, sizeof(ev), sk);
6967 
6968 	if (sk)
6969 		sock_put(sk);
6970 
6971 	mgmt_pending_foreach(MGMT_OP_UNPAIR_DEVICE, hdev, unpair_device_rsp,
6972 			     hdev);
6973 }
6974 
6975 void mgmt_disconnect_failed(struct hci_dev *hdev, bdaddr_t *bdaddr,
6976 			    u8 link_type, u8 addr_type, u8 status)
6977 {
6978 	u8 bdaddr_type = link_to_bdaddr(link_type, addr_type);
6979 	struct mgmt_cp_disconnect *cp;
6980 	struct mgmt_pending_cmd *cmd;
6981 
6982 	mgmt_pending_foreach(MGMT_OP_UNPAIR_DEVICE, hdev, unpair_device_rsp,
6983 			     hdev);
6984 
6985 	cmd = pending_find(MGMT_OP_DISCONNECT, hdev);
6986 	if (!cmd)
6987 		return;
6988 
6989 	cp = cmd->param;
6990 
6991 	if (bacmp(bdaddr, &cp->addr.bdaddr))
6992 		return;
6993 
6994 	if (cp->addr.type != bdaddr_type)
6995 		return;
6996 
6997 	cmd->cmd_complete(cmd, mgmt_status(status));
6998 	mgmt_pending_remove(cmd);
6999 }
7000 
7001 void mgmt_connect_failed(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
7002 			 u8 addr_type, u8 status)
7003 {
7004 	struct mgmt_ev_connect_failed ev;
7005 
7006 	/* The connection is still in hci_conn_hash so test for 1
7007 	 * instead of 0 to know if this is the last one.
7008 	 */
7009 	if (mgmt_powering_down(hdev) && hci_conn_count(hdev) == 1) {
7010 		cancel_delayed_work(&hdev->power_off);
7011 		queue_work(hdev->req_workqueue, &hdev->power_off.work);
7012 	}
7013 
7014 	bacpy(&ev.addr.bdaddr, bdaddr);
7015 	ev.addr.type = link_to_bdaddr(link_type, addr_type);
7016 	ev.status = mgmt_status(status);
7017 
7018 	mgmt_event(MGMT_EV_CONNECT_FAILED, hdev, &ev, sizeof(ev), NULL);
7019 }
7020 
7021 void mgmt_pin_code_request(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 secure)
7022 {
7023 	struct mgmt_ev_pin_code_request ev;
7024 
7025 	bacpy(&ev.addr.bdaddr, bdaddr);
7026 	ev.addr.type = BDADDR_BREDR;
7027 	ev.secure = secure;
7028 
7029 	mgmt_event(MGMT_EV_PIN_CODE_REQUEST, hdev, &ev, sizeof(ev), NULL);
7030 }
7031 
7032 void mgmt_pin_code_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
7033 				  u8 status)
7034 {
7035 	struct mgmt_pending_cmd *cmd;
7036 
7037 	cmd = pending_find(MGMT_OP_PIN_CODE_REPLY, hdev);
7038 	if (!cmd)
7039 		return;
7040 
7041 	cmd->cmd_complete(cmd, mgmt_status(status));
7042 	mgmt_pending_remove(cmd);
7043 }
7044 
7045 void mgmt_pin_code_neg_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
7046 				      u8 status)
7047 {
7048 	struct mgmt_pending_cmd *cmd;
7049 
7050 	cmd = pending_find(MGMT_OP_PIN_CODE_NEG_REPLY, hdev);
7051 	if (!cmd)
7052 		return;
7053 
7054 	cmd->cmd_complete(cmd, mgmt_status(status));
7055 	mgmt_pending_remove(cmd);
7056 }
7057 
7058 int mgmt_user_confirm_request(struct hci_dev *hdev, bdaddr_t *bdaddr,
7059 			      u8 link_type, u8 addr_type, u32 value,
7060 			      u8 confirm_hint)
7061 {
7062 	struct mgmt_ev_user_confirm_request ev;
7063 
7064 	BT_DBG("%s", hdev->name);
7065 
7066 	bacpy(&ev.addr.bdaddr, bdaddr);
7067 	ev.addr.type = link_to_bdaddr(link_type, addr_type);
7068 	ev.confirm_hint = confirm_hint;
7069 	ev.value = cpu_to_le32(value);
7070 
7071 	return mgmt_event(MGMT_EV_USER_CONFIRM_REQUEST, hdev, &ev, sizeof(ev),
7072 			  NULL);
7073 }
7074 
7075 int mgmt_user_passkey_request(struct hci_dev *hdev, bdaddr_t *bdaddr,
7076 			      u8 link_type, u8 addr_type)
7077 {
7078 	struct mgmt_ev_user_passkey_request ev;
7079 
7080 	BT_DBG("%s", hdev->name);
7081 
7082 	bacpy(&ev.addr.bdaddr, bdaddr);
7083 	ev.addr.type = link_to_bdaddr(link_type, addr_type);
7084 
7085 	return mgmt_event(MGMT_EV_USER_PASSKEY_REQUEST, hdev, &ev, sizeof(ev),
7086 			  NULL);
7087 }
7088 
7089 static int user_pairing_resp_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
7090 				      u8 link_type, u8 addr_type, u8 status,
7091 				      u8 opcode)
7092 {
7093 	struct mgmt_pending_cmd *cmd;
7094 
7095 	cmd = pending_find(opcode, hdev);
7096 	if (!cmd)
7097 		return -ENOENT;
7098 
7099 	cmd->cmd_complete(cmd, mgmt_status(status));
7100 	mgmt_pending_remove(cmd);
7101 
7102 	return 0;
7103 }
7104 
7105 int mgmt_user_confirm_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
7106 				     u8 link_type, u8 addr_type, u8 status)
7107 {
7108 	return user_pairing_resp_complete(hdev, bdaddr, link_type, addr_type,
7109 					  status, MGMT_OP_USER_CONFIRM_REPLY);
7110 }
7111 
7112 int mgmt_user_confirm_neg_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
7113 					 u8 link_type, u8 addr_type, u8 status)
7114 {
7115 	return user_pairing_resp_complete(hdev, bdaddr, link_type, addr_type,
7116 					  status,
7117 					  MGMT_OP_USER_CONFIRM_NEG_REPLY);
7118 }
7119 
7120 int mgmt_user_passkey_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
7121 				     u8 link_type, u8 addr_type, u8 status)
7122 {
7123 	return user_pairing_resp_complete(hdev, bdaddr, link_type, addr_type,
7124 					  status, MGMT_OP_USER_PASSKEY_REPLY);
7125 }
7126 
7127 int mgmt_user_passkey_neg_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
7128 					 u8 link_type, u8 addr_type, u8 status)
7129 {
7130 	return user_pairing_resp_complete(hdev, bdaddr, link_type, addr_type,
7131 					  status,
7132 					  MGMT_OP_USER_PASSKEY_NEG_REPLY);
7133 }
7134 
7135 int mgmt_user_passkey_notify(struct hci_dev *hdev, bdaddr_t *bdaddr,
7136 			     u8 link_type, u8 addr_type, u32 passkey,
7137 			     u8 entered)
7138 {
7139 	struct mgmt_ev_passkey_notify ev;
7140 
7141 	BT_DBG("%s", hdev->name);
7142 
7143 	bacpy(&ev.addr.bdaddr, bdaddr);
7144 	ev.addr.type = link_to_bdaddr(link_type, addr_type);
7145 	ev.passkey = __cpu_to_le32(passkey);
7146 	ev.entered = entered;
7147 
7148 	return mgmt_event(MGMT_EV_PASSKEY_NOTIFY, hdev, &ev, sizeof(ev), NULL);
7149 }
7150 
7151 void mgmt_auth_failed(struct hci_conn *conn, u8 hci_status)
7152 {
7153 	struct mgmt_ev_auth_failed ev;
7154 	struct mgmt_pending_cmd *cmd;
7155 	u8 status = mgmt_status(hci_status);
7156 
7157 	bacpy(&ev.addr.bdaddr, &conn->dst);
7158 	ev.addr.type = link_to_bdaddr(conn->type, conn->dst_type);
7159 	ev.status = status;
7160 
7161 	cmd = find_pairing(conn);
7162 
7163 	mgmt_event(MGMT_EV_AUTH_FAILED, conn->hdev, &ev, sizeof(ev),
7164 		    cmd ? cmd->sk : NULL);
7165 
7166 	if (cmd) {
7167 		cmd->cmd_complete(cmd, status);
7168 		mgmt_pending_remove(cmd);
7169 	}
7170 }
7171 
7172 void mgmt_auth_enable_complete(struct hci_dev *hdev, u8 status)
7173 {
7174 	struct cmd_lookup match = { NULL, hdev };
7175 	bool changed;
7176 
7177 	if (status) {
7178 		u8 mgmt_err = mgmt_status(status);
7179 		mgmt_pending_foreach(MGMT_OP_SET_LINK_SECURITY, hdev,
7180 				     cmd_status_rsp, &mgmt_err);
7181 		return;
7182 	}
7183 
7184 	if (test_bit(HCI_AUTH, &hdev->flags))
7185 		changed = !hci_dev_test_and_set_flag(hdev, HCI_LINK_SECURITY);
7186 	else
7187 		changed = hci_dev_test_and_clear_flag(hdev, HCI_LINK_SECURITY);
7188 
7189 	mgmt_pending_foreach(MGMT_OP_SET_LINK_SECURITY, hdev, settings_rsp,
7190 			     &match);
7191 
7192 	if (changed)
7193 		new_settings(hdev, match.sk);
7194 
7195 	if (match.sk)
7196 		sock_put(match.sk);
7197 }
7198 
7199 static void clear_eir(struct hci_request *req)
7200 {
7201 	struct hci_dev *hdev = req->hdev;
7202 	struct hci_cp_write_eir cp;
7203 
7204 	if (!lmp_ext_inq_capable(hdev))
7205 		return;
7206 
7207 	memset(hdev->eir, 0, sizeof(hdev->eir));
7208 
7209 	memset(&cp, 0, sizeof(cp));
7210 
7211 	hci_req_add(req, HCI_OP_WRITE_EIR, sizeof(cp), &cp);
7212 }
7213 
7214 void mgmt_ssp_enable_complete(struct hci_dev *hdev, u8 enable, u8 status)
7215 {
7216 	struct cmd_lookup match = { NULL, hdev };
7217 	struct hci_request req;
7218 	bool changed = false;
7219 
7220 	if (status) {
7221 		u8 mgmt_err = mgmt_status(status);
7222 
7223 		if (enable && hci_dev_test_and_clear_flag(hdev,
7224 							  HCI_SSP_ENABLED)) {
7225 			hci_dev_clear_flag(hdev, HCI_HS_ENABLED);
7226 			new_settings(hdev, NULL);
7227 		}
7228 
7229 		mgmt_pending_foreach(MGMT_OP_SET_SSP, hdev, cmd_status_rsp,
7230 				     &mgmt_err);
7231 		return;
7232 	}
7233 
7234 	if (enable) {
7235 		changed = !hci_dev_test_and_set_flag(hdev, HCI_SSP_ENABLED);
7236 	} else {
7237 		changed = hci_dev_test_and_clear_flag(hdev, HCI_SSP_ENABLED);
7238 		if (!changed)
7239 			changed = hci_dev_test_and_clear_flag(hdev,
7240 							      HCI_HS_ENABLED);
7241 		else
7242 			hci_dev_clear_flag(hdev, HCI_HS_ENABLED);
7243 	}
7244 
7245 	mgmt_pending_foreach(MGMT_OP_SET_SSP, hdev, settings_rsp, &match);
7246 
7247 	if (changed)
7248 		new_settings(hdev, match.sk);
7249 
7250 	if (match.sk)
7251 		sock_put(match.sk);
7252 
7253 	hci_req_init(&req, hdev);
7254 
7255 	if (hci_dev_test_flag(hdev, HCI_SSP_ENABLED)) {
7256 		if (hci_dev_test_flag(hdev, HCI_USE_DEBUG_KEYS))
7257 			hci_req_add(&req, HCI_OP_WRITE_SSP_DEBUG_MODE,
7258 				    sizeof(enable), &enable);
7259 		__hci_req_update_eir(&req);
7260 	} else {
7261 		clear_eir(&req);
7262 	}
7263 
7264 	hci_req_run(&req, NULL);
7265 }
7266 
7267 static void sk_lookup(struct mgmt_pending_cmd *cmd, void *data)
7268 {
7269 	struct cmd_lookup *match = data;
7270 
7271 	if (match->sk == NULL) {
7272 		match->sk = cmd->sk;
7273 		sock_hold(match->sk);
7274 	}
7275 }
7276 
7277 void mgmt_set_class_of_dev_complete(struct hci_dev *hdev, u8 *dev_class,
7278 				    u8 status)
7279 {
7280 	struct cmd_lookup match = { NULL, hdev, mgmt_status(status) };
7281 
7282 	mgmt_pending_foreach(MGMT_OP_SET_DEV_CLASS, hdev, sk_lookup, &match);
7283 	mgmt_pending_foreach(MGMT_OP_ADD_UUID, hdev, sk_lookup, &match);
7284 	mgmt_pending_foreach(MGMT_OP_REMOVE_UUID, hdev, sk_lookup, &match);
7285 
7286 	if (!status) {
7287 		mgmt_limited_event(MGMT_EV_CLASS_OF_DEV_CHANGED, hdev, dev_class,
7288 				   3, HCI_MGMT_DEV_CLASS_EVENTS, NULL);
7289 		ext_info_changed(hdev, NULL);
7290 	}
7291 
7292 	if (match.sk)
7293 		sock_put(match.sk);
7294 }
7295 
7296 void mgmt_set_local_name_complete(struct hci_dev *hdev, u8 *name, u8 status)
7297 {
7298 	struct mgmt_cp_set_local_name ev;
7299 	struct mgmt_pending_cmd *cmd;
7300 
7301 	if (status)
7302 		return;
7303 
7304 	memset(&ev, 0, sizeof(ev));
7305 	memcpy(ev.name, name, HCI_MAX_NAME_LENGTH);
7306 	memcpy(ev.short_name, hdev->short_name, HCI_MAX_SHORT_NAME_LENGTH);
7307 
7308 	cmd = pending_find(MGMT_OP_SET_LOCAL_NAME, hdev);
7309 	if (!cmd) {
7310 		memcpy(hdev->dev_name, name, sizeof(hdev->dev_name));
7311 
7312 		/* If this is a HCI command related to powering on the
7313 		 * HCI dev don't send any mgmt signals.
7314 		 */
7315 		if (pending_find(MGMT_OP_SET_POWERED, hdev))
7316 			return;
7317 	}
7318 
7319 	mgmt_limited_event(MGMT_EV_LOCAL_NAME_CHANGED, hdev, &ev, sizeof(ev),
7320 			   HCI_MGMT_LOCAL_NAME_EVENTS, cmd ? cmd->sk : NULL);
7321 	ext_info_changed(hdev, cmd ? cmd->sk : NULL);
7322 }
7323 
7324 static inline bool has_uuid(u8 *uuid, u16 uuid_count, u8 (*uuids)[16])
7325 {
7326 	int i;
7327 
7328 	for (i = 0; i < uuid_count; i++) {
7329 		if (!memcmp(uuid, uuids[i], 16))
7330 			return true;
7331 	}
7332 
7333 	return false;
7334 }
7335 
7336 static bool eir_has_uuids(u8 *eir, u16 eir_len, u16 uuid_count, u8 (*uuids)[16])
7337 {
7338 	u16 parsed = 0;
7339 
7340 	while (parsed < eir_len) {
7341 		u8 field_len = eir[0];
7342 		u8 uuid[16];
7343 		int i;
7344 
7345 		if (field_len == 0)
7346 			break;
7347 
7348 		if (eir_len - parsed < field_len + 1)
7349 			break;
7350 
7351 		switch (eir[1]) {
7352 		case EIR_UUID16_ALL:
7353 		case EIR_UUID16_SOME:
7354 			for (i = 0; i + 3 <= field_len; i += 2) {
7355 				memcpy(uuid, bluetooth_base_uuid, 16);
7356 				uuid[13] = eir[i + 3];
7357 				uuid[12] = eir[i + 2];
7358 				if (has_uuid(uuid, uuid_count, uuids))
7359 					return true;
7360 			}
7361 			break;
7362 		case EIR_UUID32_ALL:
7363 		case EIR_UUID32_SOME:
7364 			for (i = 0; i + 5 <= field_len; i += 4) {
7365 				memcpy(uuid, bluetooth_base_uuid, 16);
7366 				uuid[15] = eir[i + 5];
7367 				uuid[14] = eir[i + 4];
7368 				uuid[13] = eir[i + 3];
7369 				uuid[12] = eir[i + 2];
7370 				if (has_uuid(uuid, uuid_count, uuids))
7371 					return true;
7372 			}
7373 			break;
7374 		case EIR_UUID128_ALL:
7375 		case EIR_UUID128_SOME:
7376 			for (i = 0; i + 17 <= field_len; i += 16) {
7377 				memcpy(uuid, eir + i + 2, 16);
7378 				if (has_uuid(uuid, uuid_count, uuids))
7379 					return true;
7380 			}
7381 			break;
7382 		}
7383 
7384 		parsed += field_len + 1;
7385 		eir += field_len + 1;
7386 	}
7387 
7388 	return false;
7389 }
7390 
7391 static void restart_le_scan(struct hci_dev *hdev)
7392 {
7393 	/* If controller is not scanning we are done. */
7394 	if (!hci_dev_test_flag(hdev, HCI_LE_SCAN))
7395 		return;
7396 
7397 	if (time_after(jiffies + DISCOV_LE_RESTART_DELAY,
7398 		       hdev->discovery.scan_start +
7399 		       hdev->discovery.scan_duration))
7400 		return;
7401 
7402 	queue_delayed_work(hdev->req_workqueue, &hdev->le_scan_restart,
7403 			   DISCOV_LE_RESTART_DELAY);
7404 }
7405 
7406 static bool is_filter_match(struct hci_dev *hdev, s8 rssi, u8 *eir,
7407 			    u16 eir_len, u8 *scan_rsp, u8 scan_rsp_len)
7408 {
7409 	/* If a RSSI threshold has been specified, and
7410 	 * HCI_QUIRK_STRICT_DUPLICATE_FILTER is not set, then all results with
7411 	 * a RSSI smaller than the RSSI threshold will be dropped. If the quirk
7412 	 * is set, let it through for further processing, as we might need to
7413 	 * restart the scan.
7414 	 *
7415 	 * For BR/EDR devices (pre 1.2) providing no RSSI during inquiry,
7416 	 * the results are also dropped.
7417 	 */
7418 	if (hdev->discovery.rssi != HCI_RSSI_INVALID &&
7419 	    (rssi == HCI_RSSI_INVALID ||
7420 	    (rssi < hdev->discovery.rssi &&
7421 	     !test_bit(HCI_QUIRK_STRICT_DUPLICATE_FILTER, &hdev->quirks))))
7422 		return  false;
7423 
7424 	if (hdev->discovery.uuid_count != 0) {
7425 		/* If a list of UUIDs is provided in filter, results with no
7426 		 * matching UUID should be dropped.
7427 		 */
7428 		if (!eir_has_uuids(eir, eir_len, hdev->discovery.uuid_count,
7429 				   hdev->discovery.uuids) &&
7430 		    !eir_has_uuids(scan_rsp, scan_rsp_len,
7431 				   hdev->discovery.uuid_count,
7432 				   hdev->discovery.uuids))
7433 			return false;
7434 	}
7435 
7436 	/* If duplicate filtering does not report RSSI changes, then restart
7437 	 * scanning to ensure updated result with updated RSSI values.
7438 	 */
7439 	if (test_bit(HCI_QUIRK_STRICT_DUPLICATE_FILTER, &hdev->quirks)) {
7440 		restart_le_scan(hdev);
7441 
7442 		/* Validate RSSI value against the RSSI threshold once more. */
7443 		if (hdev->discovery.rssi != HCI_RSSI_INVALID &&
7444 		    rssi < hdev->discovery.rssi)
7445 			return false;
7446 	}
7447 
7448 	return true;
7449 }
7450 
7451 void mgmt_device_found(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
7452 		       u8 addr_type, u8 *dev_class, s8 rssi, u32 flags,
7453 		       u8 *eir, u16 eir_len, u8 *scan_rsp, u8 scan_rsp_len)
7454 {
7455 	char buf[512];
7456 	struct mgmt_ev_device_found *ev = (void *)buf;
7457 	size_t ev_size;
7458 
7459 	/* Don't send events for a non-kernel initiated discovery. With
7460 	 * LE one exception is if we have pend_le_reports > 0 in which
7461 	 * case we're doing passive scanning and want these events.
7462 	 */
7463 	if (!hci_discovery_active(hdev)) {
7464 		if (link_type == ACL_LINK)
7465 			return;
7466 		if (link_type == LE_LINK && list_empty(&hdev->pend_le_reports))
7467 			return;
7468 	}
7469 
7470 	if (hdev->discovery.result_filtering) {
7471 		/* We are using service discovery */
7472 		if (!is_filter_match(hdev, rssi, eir, eir_len, scan_rsp,
7473 				     scan_rsp_len))
7474 			return;
7475 	}
7476 
7477 	if (hdev->discovery.limited) {
7478 		/* Check for limited discoverable bit */
7479 		if (dev_class) {
7480 			if (!(dev_class[1] & 0x20))
7481 				return;
7482 		} else {
7483 			u8 *flags = eir_get_data(eir, eir_len, EIR_FLAGS, NULL);
7484 			if (!flags || !(flags[0] & LE_AD_LIMITED))
7485 				return;
7486 		}
7487 	}
7488 
7489 	/* Make sure that the buffer is big enough. The 5 extra bytes
7490 	 * are for the potential CoD field.
7491 	 */
7492 	if (sizeof(*ev) + eir_len + scan_rsp_len + 5 > sizeof(buf))
7493 		return;
7494 
7495 	memset(buf, 0, sizeof(buf));
7496 
7497 	/* In case of device discovery with BR/EDR devices (pre 1.2), the
7498 	 * RSSI value was reported as 0 when not available. This behavior
7499 	 * is kept when using device discovery. This is required for full
7500 	 * backwards compatibility with the API.
7501 	 *
7502 	 * However when using service discovery, the value 127 will be
7503 	 * returned when the RSSI is not available.
7504 	 */
7505 	if (rssi == HCI_RSSI_INVALID && !hdev->discovery.report_invalid_rssi &&
7506 	    link_type == ACL_LINK)
7507 		rssi = 0;
7508 
7509 	bacpy(&ev->addr.bdaddr, bdaddr);
7510 	ev->addr.type = link_to_bdaddr(link_type, addr_type);
7511 	ev->rssi = rssi;
7512 	ev->flags = cpu_to_le32(flags);
7513 
7514 	if (eir_len > 0)
7515 		/* Copy EIR or advertising data into event */
7516 		memcpy(ev->eir, eir, eir_len);
7517 
7518 	if (dev_class && !eir_get_data(ev->eir, eir_len, EIR_CLASS_OF_DEV,
7519 				       NULL))
7520 		eir_len = eir_append_data(ev->eir, eir_len, EIR_CLASS_OF_DEV,
7521 					  dev_class, 3);
7522 
7523 	if (scan_rsp_len > 0)
7524 		/* Append scan response data to event */
7525 		memcpy(ev->eir + eir_len, scan_rsp, scan_rsp_len);
7526 
7527 	ev->eir_len = cpu_to_le16(eir_len + scan_rsp_len);
7528 	ev_size = sizeof(*ev) + eir_len + scan_rsp_len;
7529 
7530 	mgmt_event(MGMT_EV_DEVICE_FOUND, hdev, ev, ev_size, NULL);
7531 }
7532 
7533 void mgmt_remote_name(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
7534 		      u8 addr_type, s8 rssi, u8 *name, u8 name_len)
7535 {
7536 	struct mgmt_ev_device_found *ev;
7537 	char buf[sizeof(*ev) + HCI_MAX_NAME_LENGTH + 2];
7538 	u16 eir_len;
7539 
7540 	ev = (struct mgmt_ev_device_found *) buf;
7541 
7542 	memset(buf, 0, sizeof(buf));
7543 
7544 	bacpy(&ev->addr.bdaddr, bdaddr);
7545 	ev->addr.type = link_to_bdaddr(link_type, addr_type);
7546 	ev->rssi = rssi;
7547 
7548 	eir_len = eir_append_data(ev->eir, 0, EIR_NAME_COMPLETE, name,
7549 				  name_len);
7550 
7551 	ev->eir_len = cpu_to_le16(eir_len);
7552 
7553 	mgmt_event(MGMT_EV_DEVICE_FOUND, hdev, ev, sizeof(*ev) + eir_len, NULL);
7554 }
7555 
7556 void mgmt_discovering(struct hci_dev *hdev, u8 discovering)
7557 {
7558 	struct mgmt_ev_discovering ev;
7559 
7560 	BT_DBG("%s discovering %u", hdev->name, discovering);
7561 
7562 	memset(&ev, 0, sizeof(ev));
7563 	ev.type = hdev->discovery.type;
7564 	ev.discovering = discovering;
7565 
7566 	mgmt_event(MGMT_EV_DISCOVERING, hdev, &ev, sizeof(ev), NULL);
7567 }
7568 
7569 static struct hci_mgmt_chan chan = {
7570 	.channel	= HCI_CHANNEL_CONTROL,
7571 	.handler_count	= ARRAY_SIZE(mgmt_handlers),
7572 	.handlers	= mgmt_handlers,
7573 	.hdev_init	= mgmt_init_hdev,
7574 };
7575 
7576 int mgmt_init(void)
7577 {
7578 	return hci_mgmt_chan_register(&chan);
7579 }
7580 
7581 void mgmt_exit(void)
7582 {
7583 	hci_mgmt_chan_unregister(&chan);
7584 }
7585