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