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