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