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