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