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