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