xref: /openbmc/linux/net/bluetooth/mgmt.c (revision a2cce7a9)
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 
3549 		/* Convert from L2CAP channel address type to HCI address type
3550 		 */
3551 		if (cp->addr.type == BDADDR_LE_PUBLIC)
3552 			addr_type = ADDR_LE_DEV_PUBLIC;
3553 		else
3554 			addr_type = ADDR_LE_DEV_RANDOM;
3555 
3556 		/* When pairing a new device, it is expected to remember
3557 		 * this device for future connections. Adding the connection
3558 		 * parameter information ahead of time allows tracking
3559 		 * of the slave preferred values and will speed up any
3560 		 * further connection establishment.
3561 		 *
3562 		 * If connection parameters already exist, then they
3563 		 * will be kept and this function does nothing.
3564 		 */
3565 		hci_conn_params_add(hdev, &cp->addr.bdaddr, addr_type);
3566 
3567 		conn = hci_connect_le_scan(hdev, &cp->addr.bdaddr,
3568 					   addr_type, sec_level,
3569 					   HCI_LE_CONN_TIMEOUT,
3570 					   HCI_ROLE_MASTER);
3571 	}
3572 
3573 	if (IS_ERR(conn)) {
3574 		int status;
3575 
3576 		if (PTR_ERR(conn) == -EBUSY)
3577 			status = MGMT_STATUS_BUSY;
3578 		else if (PTR_ERR(conn) == -EOPNOTSUPP)
3579 			status = MGMT_STATUS_NOT_SUPPORTED;
3580 		else if (PTR_ERR(conn) == -ECONNREFUSED)
3581 			status = MGMT_STATUS_REJECTED;
3582 		else
3583 			status = MGMT_STATUS_CONNECT_FAILED;
3584 
3585 		err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_PAIR_DEVICE,
3586 					status, &rp, sizeof(rp));
3587 		goto unlock;
3588 	}
3589 
3590 	if (conn->connect_cfm_cb) {
3591 		hci_conn_drop(conn);
3592 		err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_PAIR_DEVICE,
3593 					MGMT_STATUS_BUSY, &rp, sizeof(rp));
3594 		goto unlock;
3595 	}
3596 
3597 	cmd = mgmt_pending_add(sk, MGMT_OP_PAIR_DEVICE, hdev, data, len);
3598 	if (!cmd) {
3599 		err = -ENOMEM;
3600 		hci_conn_drop(conn);
3601 		goto unlock;
3602 	}
3603 
3604 	cmd->cmd_complete = pairing_complete;
3605 
3606 	/* For LE, just connecting isn't a proof that the pairing finished */
3607 	if (cp->addr.type == BDADDR_BREDR) {
3608 		conn->connect_cfm_cb = pairing_complete_cb;
3609 		conn->security_cfm_cb = pairing_complete_cb;
3610 		conn->disconn_cfm_cb = pairing_complete_cb;
3611 	} else {
3612 		conn->connect_cfm_cb = le_pairing_complete_cb;
3613 		conn->security_cfm_cb = le_pairing_complete_cb;
3614 		conn->disconn_cfm_cb = le_pairing_complete_cb;
3615 	}
3616 
3617 	conn->io_capability = cp->io_cap;
3618 	cmd->user_data = hci_conn_get(conn);
3619 
3620 	if ((conn->state == BT_CONNECTED || conn->state == BT_CONFIG) &&
3621 	    hci_conn_security(conn, sec_level, auth_type, true)) {
3622 		cmd->cmd_complete(cmd, 0);
3623 		mgmt_pending_remove(cmd);
3624 	}
3625 
3626 	err = 0;
3627 
3628 unlock:
3629 	hci_dev_unlock(hdev);
3630 	return err;
3631 }
3632 
3633 static int cancel_pair_device(struct sock *sk, struct hci_dev *hdev, void *data,
3634 			      u16 len)
3635 {
3636 	struct mgmt_addr_info *addr = data;
3637 	struct mgmt_pending_cmd *cmd;
3638 	struct hci_conn *conn;
3639 	int err;
3640 
3641 	BT_DBG("");
3642 
3643 	hci_dev_lock(hdev);
3644 
3645 	if (!hdev_is_powered(hdev)) {
3646 		err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_CANCEL_PAIR_DEVICE,
3647 				      MGMT_STATUS_NOT_POWERED);
3648 		goto unlock;
3649 	}
3650 
3651 	cmd = pending_find(MGMT_OP_PAIR_DEVICE, hdev);
3652 	if (!cmd) {
3653 		err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_CANCEL_PAIR_DEVICE,
3654 				      MGMT_STATUS_INVALID_PARAMS);
3655 		goto unlock;
3656 	}
3657 
3658 	conn = cmd->user_data;
3659 
3660 	if (bacmp(&addr->bdaddr, &conn->dst) != 0) {
3661 		err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_CANCEL_PAIR_DEVICE,
3662 				      MGMT_STATUS_INVALID_PARAMS);
3663 		goto unlock;
3664 	}
3665 
3666 	cmd->cmd_complete(cmd, MGMT_STATUS_CANCELLED);
3667 	mgmt_pending_remove(cmd);
3668 
3669 	err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_CANCEL_PAIR_DEVICE, 0,
3670 				addr, sizeof(*addr));
3671 unlock:
3672 	hci_dev_unlock(hdev);
3673 	return err;
3674 }
3675 
3676 static int user_pairing_resp(struct sock *sk, struct hci_dev *hdev,
3677 			     struct mgmt_addr_info *addr, u16 mgmt_op,
3678 			     u16 hci_op, __le32 passkey)
3679 {
3680 	struct mgmt_pending_cmd *cmd;
3681 	struct hci_conn *conn;
3682 	int err;
3683 
3684 	hci_dev_lock(hdev);
3685 
3686 	if (!hdev_is_powered(hdev)) {
3687 		err = mgmt_cmd_complete(sk, hdev->id, mgmt_op,
3688 					MGMT_STATUS_NOT_POWERED, addr,
3689 					sizeof(*addr));
3690 		goto done;
3691 	}
3692 
3693 	if (addr->type == BDADDR_BREDR)
3694 		conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &addr->bdaddr);
3695 	else
3696 		conn = hci_conn_hash_lookup_ba(hdev, LE_LINK, &addr->bdaddr);
3697 
3698 	if (!conn) {
3699 		err = mgmt_cmd_complete(sk, hdev->id, mgmt_op,
3700 					MGMT_STATUS_NOT_CONNECTED, addr,
3701 					sizeof(*addr));
3702 		goto done;
3703 	}
3704 
3705 	if (addr->type == BDADDR_LE_PUBLIC || addr->type == BDADDR_LE_RANDOM) {
3706 		err = smp_user_confirm_reply(conn, mgmt_op, passkey);
3707 		if (!err)
3708 			err = mgmt_cmd_complete(sk, hdev->id, mgmt_op,
3709 						MGMT_STATUS_SUCCESS, addr,
3710 						sizeof(*addr));
3711 		else
3712 			err = mgmt_cmd_complete(sk, hdev->id, mgmt_op,
3713 						MGMT_STATUS_FAILED, addr,
3714 						sizeof(*addr));
3715 
3716 		goto done;
3717 	}
3718 
3719 	cmd = mgmt_pending_add(sk, mgmt_op, hdev, addr, sizeof(*addr));
3720 	if (!cmd) {
3721 		err = -ENOMEM;
3722 		goto done;
3723 	}
3724 
3725 	cmd->cmd_complete = addr_cmd_complete;
3726 
3727 	/* Continue with pairing via HCI */
3728 	if (hci_op == HCI_OP_USER_PASSKEY_REPLY) {
3729 		struct hci_cp_user_passkey_reply cp;
3730 
3731 		bacpy(&cp.bdaddr, &addr->bdaddr);
3732 		cp.passkey = passkey;
3733 		err = hci_send_cmd(hdev, hci_op, sizeof(cp), &cp);
3734 	} else
3735 		err = hci_send_cmd(hdev, hci_op, sizeof(addr->bdaddr),
3736 				   &addr->bdaddr);
3737 
3738 	if (err < 0)
3739 		mgmt_pending_remove(cmd);
3740 
3741 done:
3742 	hci_dev_unlock(hdev);
3743 	return err;
3744 }
3745 
3746 static int pin_code_neg_reply(struct sock *sk, struct hci_dev *hdev,
3747 			      void *data, u16 len)
3748 {
3749 	struct mgmt_cp_pin_code_neg_reply *cp = data;
3750 
3751 	BT_DBG("");
3752 
3753 	return user_pairing_resp(sk, hdev, &cp->addr,
3754 				MGMT_OP_PIN_CODE_NEG_REPLY,
3755 				HCI_OP_PIN_CODE_NEG_REPLY, 0);
3756 }
3757 
3758 static int user_confirm_reply(struct sock *sk, struct hci_dev *hdev, void *data,
3759 			      u16 len)
3760 {
3761 	struct mgmt_cp_user_confirm_reply *cp = data;
3762 
3763 	BT_DBG("");
3764 
3765 	if (len != sizeof(*cp))
3766 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_USER_CONFIRM_REPLY,
3767 				       MGMT_STATUS_INVALID_PARAMS);
3768 
3769 	return user_pairing_resp(sk, hdev, &cp->addr,
3770 				 MGMT_OP_USER_CONFIRM_REPLY,
3771 				 HCI_OP_USER_CONFIRM_REPLY, 0);
3772 }
3773 
3774 static int user_confirm_neg_reply(struct sock *sk, struct hci_dev *hdev,
3775 				  void *data, u16 len)
3776 {
3777 	struct mgmt_cp_user_confirm_neg_reply *cp = data;
3778 
3779 	BT_DBG("");
3780 
3781 	return user_pairing_resp(sk, hdev, &cp->addr,
3782 				 MGMT_OP_USER_CONFIRM_NEG_REPLY,
3783 				 HCI_OP_USER_CONFIRM_NEG_REPLY, 0);
3784 }
3785 
3786 static int user_passkey_reply(struct sock *sk, struct hci_dev *hdev, void *data,
3787 			      u16 len)
3788 {
3789 	struct mgmt_cp_user_passkey_reply *cp = data;
3790 
3791 	BT_DBG("");
3792 
3793 	return user_pairing_resp(sk, hdev, &cp->addr,
3794 				 MGMT_OP_USER_PASSKEY_REPLY,
3795 				 HCI_OP_USER_PASSKEY_REPLY, cp->passkey);
3796 }
3797 
3798 static int user_passkey_neg_reply(struct sock *sk, struct hci_dev *hdev,
3799 				  void *data, u16 len)
3800 {
3801 	struct mgmt_cp_user_passkey_neg_reply *cp = data;
3802 
3803 	BT_DBG("");
3804 
3805 	return user_pairing_resp(sk, hdev, &cp->addr,
3806 				 MGMT_OP_USER_PASSKEY_NEG_REPLY,
3807 				 HCI_OP_USER_PASSKEY_NEG_REPLY, 0);
3808 }
3809 
3810 static void update_name(struct hci_request *req)
3811 {
3812 	struct hci_dev *hdev = req->hdev;
3813 	struct hci_cp_write_local_name cp;
3814 
3815 	memcpy(cp.name, hdev->dev_name, sizeof(cp.name));
3816 
3817 	hci_req_add(req, HCI_OP_WRITE_LOCAL_NAME, sizeof(cp), &cp);
3818 }
3819 
3820 static void set_name_complete(struct hci_dev *hdev, u8 status, u16 opcode)
3821 {
3822 	struct mgmt_cp_set_local_name *cp;
3823 	struct mgmt_pending_cmd *cmd;
3824 
3825 	BT_DBG("status 0x%02x", status);
3826 
3827 	hci_dev_lock(hdev);
3828 
3829 	cmd = pending_find(MGMT_OP_SET_LOCAL_NAME, hdev);
3830 	if (!cmd)
3831 		goto unlock;
3832 
3833 	cp = cmd->param;
3834 
3835 	if (status)
3836 		mgmt_cmd_status(cmd->sk, hdev->id, MGMT_OP_SET_LOCAL_NAME,
3837 			        mgmt_status(status));
3838 	else
3839 		mgmt_cmd_complete(cmd->sk, hdev->id, MGMT_OP_SET_LOCAL_NAME, 0,
3840 				  cp, sizeof(*cp));
3841 
3842 	mgmt_pending_remove(cmd);
3843 
3844 unlock:
3845 	hci_dev_unlock(hdev);
3846 }
3847 
3848 static int set_local_name(struct sock *sk, struct hci_dev *hdev, void *data,
3849 			  u16 len)
3850 {
3851 	struct mgmt_cp_set_local_name *cp = data;
3852 	struct mgmt_pending_cmd *cmd;
3853 	struct hci_request req;
3854 	int err;
3855 
3856 	BT_DBG("");
3857 
3858 	hci_dev_lock(hdev);
3859 
3860 	/* If the old values are the same as the new ones just return a
3861 	 * direct command complete event.
3862 	 */
3863 	if (!memcmp(hdev->dev_name, cp->name, sizeof(hdev->dev_name)) &&
3864 	    !memcmp(hdev->short_name, cp->short_name,
3865 		    sizeof(hdev->short_name))) {
3866 		err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_SET_LOCAL_NAME, 0,
3867 					data, len);
3868 		goto failed;
3869 	}
3870 
3871 	memcpy(hdev->short_name, cp->short_name, sizeof(hdev->short_name));
3872 
3873 	if (!hdev_is_powered(hdev)) {
3874 		memcpy(hdev->dev_name, cp->name, sizeof(hdev->dev_name));
3875 
3876 		err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_SET_LOCAL_NAME, 0,
3877 					data, len);
3878 		if (err < 0)
3879 			goto failed;
3880 
3881 		err = mgmt_generic_event(MGMT_EV_LOCAL_NAME_CHANGED, hdev,
3882 					 data, len, sk);
3883 
3884 		goto failed;
3885 	}
3886 
3887 	cmd = mgmt_pending_add(sk, MGMT_OP_SET_LOCAL_NAME, hdev, data, len);
3888 	if (!cmd) {
3889 		err = -ENOMEM;
3890 		goto failed;
3891 	}
3892 
3893 	memcpy(hdev->dev_name, cp->name, sizeof(hdev->dev_name));
3894 
3895 	hci_req_init(&req, hdev);
3896 
3897 	if (lmp_bredr_capable(hdev)) {
3898 		update_name(&req);
3899 		update_eir(&req);
3900 	}
3901 
3902 	/* The name is stored in the scan response data and so
3903 	 * no need to udpate the advertising data here.
3904 	 */
3905 	if (lmp_le_capable(hdev))
3906 		update_scan_rsp_data(&req);
3907 
3908 	err = hci_req_run(&req, set_name_complete);
3909 	if (err < 0)
3910 		mgmt_pending_remove(cmd);
3911 
3912 failed:
3913 	hci_dev_unlock(hdev);
3914 	return err;
3915 }
3916 
3917 static void read_local_oob_data_complete(struct hci_dev *hdev, u8 status,
3918 				         u16 opcode, struct sk_buff *skb)
3919 {
3920 	struct mgmt_rp_read_local_oob_data mgmt_rp;
3921 	size_t rp_size = sizeof(mgmt_rp);
3922 	struct mgmt_pending_cmd *cmd;
3923 
3924 	BT_DBG("%s status %u", hdev->name, status);
3925 
3926 	cmd = pending_find(MGMT_OP_READ_LOCAL_OOB_DATA, hdev);
3927 	if (!cmd)
3928 		return;
3929 
3930 	if (status || !skb) {
3931 		mgmt_cmd_status(cmd->sk, hdev->id, MGMT_OP_READ_LOCAL_OOB_DATA,
3932 				status ? mgmt_status(status) : MGMT_STATUS_FAILED);
3933 		goto remove;
3934 	}
3935 
3936 	memset(&mgmt_rp, 0, sizeof(mgmt_rp));
3937 
3938 	if (opcode == HCI_OP_READ_LOCAL_OOB_DATA) {
3939 		struct hci_rp_read_local_oob_data *rp = (void *) skb->data;
3940 
3941 		if (skb->len < sizeof(*rp)) {
3942 			mgmt_cmd_status(cmd->sk, hdev->id,
3943 					MGMT_OP_READ_LOCAL_OOB_DATA,
3944 					MGMT_STATUS_FAILED);
3945 			goto remove;
3946 		}
3947 
3948 		memcpy(mgmt_rp.hash192, rp->hash, sizeof(rp->hash));
3949 		memcpy(mgmt_rp.rand192, rp->rand, sizeof(rp->rand));
3950 
3951 		rp_size -= sizeof(mgmt_rp.hash256) + sizeof(mgmt_rp.rand256);
3952 	} else {
3953 		struct hci_rp_read_local_oob_ext_data *rp = (void *) skb->data;
3954 
3955 		if (skb->len < sizeof(*rp)) {
3956 			mgmt_cmd_status(cmd->sk, hdev->id,
3957 					MGMT_OP_READ_LOCAL_OOB_DATA,
3958 					MGMT_STATUS_FAILED);
3959 			goto remove;
3960 		}
3961 
3962 		memcpy(mgmt_rp.hash192, rp->hash192, sizeof(rp->hash192));
3963 		memcpy(mgmt_rp.rand192, rp->rand192, sizeof(rp->rand192));
3964 
3965 		memcpy(mgmt_rp.hash256, rp->hash256, sizeof(rp->hash256));
3966 		memcpy(mgmt_rp.rand256, rp->rand256, sizeof(rp->rand256));
3967 	}
3968 
3969 	mgmt_cmd_complete(cmd->sk, hdev->id, MGMT_OP_READ_LOCAL_OOB_DATA,
3970 			  MGMT_STATUS_SUCCESS, &mgmt_rp, rp_size);
3971 
3972 remove:
3973 	mgmt_pending_remove(cmd);
3974 }
3975 
3976 static int read_local_oob_data(struct sock *sk, struct hci_dev *hdev,
3977 			       void *data, u16 data_len)
3978 {
3979 	struct mgmt_pending_cmd *cmd;
3980 	struct hci_request req;
3981 	int err;
3982 
3983 	BT_DBG("%s", hdev->name);
3984 
3985 	hci_dev_lock(hdev);
3986 
3987 	if (!hdev_is_powered(hdev)) {
3988 		err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_READ_LOCAL_OOB_DATA,
3989 				      MGMT_STATUS_NOT_POWERED);
3990 		goto unlock;
3991 	}
3992 
3993 	if (!lmp_ssp_capable(hdev)) {
3994 		err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_READ_LOCAL_OOB_DATA,
3995 				      MGMT_STATUS_NOT_SUPPORTED);
3996 		goto unlock;
3997 	}
3998 
3999 	if (pending_find(MGMT_OP_READ_LOCAL_OOB_DATA, hdev)) {
4000 		err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_READ_LOCAL_OOB_DATA,
4001 				      MGMT_STATUS_BUSY);
4002 		goto unlock;
4003 	}
4004 
4005 	cmd = mgmt_pending_add(sk, MGMT_OP_READ_LOCAL_OOB_DATA, hdev, NULL, 0);
4006 	if (!cmd) {
4007 		err = -ENOMEM;
4008 		goto unlock;
4009 	}
4010 
4011 	hci_req_init(&req, hdev);
4012 
4013 	if (bredr_sc_enabled(hdev))
4014 		hci_req_add(&req, HCI_OP_READ_LOCAL_OOB_EXT_DATA, 0, NULL);
4015 	else
4016 		hci_req_add(&req, HCI_OP_READ_LOCAL_OOB_DATA, 0, NULL);
4017 
4018 	err = hci_req_run_skb(&req, read_local_oob_data_complete);
4019 	if (err < 0)
4020 		mgmt_pending_remove(cmd);
4021 
4022 unlock:
4023 	hci_dev_unlock(hdev);
4024 	return err;
4025 }
4026 
4027 static int add_remote_oob_data(struct sock *sk, struct hci_dev *hdev,
4028 			       void *data, u16 len)
4029 {
4030 	struct mgmt_addr_info *addr = data;
4031 	int err;
4032 
4033 	BT_DBG("%s ", hdev->name);
4034 
4035 	if (!bdaddr_type_is_valid(addr->type))
4036 		return mgmt_cmd_complete(sk, hdev->id,
4037 					 MGMT_OP_ADD_REMOTE_OOB_DATA,
4038 					 MGMT_STATUS_INVALID_PARAMS,
4039 					 addr, sizeof(*addr));
4040 
4041 	hci_dev_lock(hdev);
4042 
4043 	if (len == MGMT_ADD_REMOTE_OOB_DATA_SIZE) {
4044 		struct mgmt_cp_add_remote_oob_data *cp = data;
4045 		u8 status;
4046 
4047 		if (cp->addr.type != BDADDR_BREDR) {
4048 			err = mgmt_cmd_complete(sk, hdev->id,
4049 						MGMT_OP_ADD_REMOTE_OOB_DATA,
4050 						MGMT_STATUS_INVALID_PARAMS,
4051 						&cp->addr, sizeof(cp->addr));
4052 			goto unlock;
4053 		}
4054 
4055 		err = hci_add_remote_oob_data(hdev, &cp->addr.bdaddr,
4056 					      cp->addr.type, cp->hash,
4057 					      cp->rand, NULL, NULL);
4058 		if (err < 0)
4059 			status = MGMT_STATUS_FAILED;
4060 		else
4061 			status = MGMT_STATUS_SUCCESS;
4062 
4063 		err = mgmt_cmd_complete(sk, hdev->id,
4064 					MGMT_OP_ADD_REMOTE_OOB_DATA, status,
4065 					&cp->addr, sizeof(cp->addr));
4066 	} else if (len == MGMT_ADD_REMOTE_OOB_EXT_DATA_SIZE) {
4067 		struct mgmt_cp_add_remote_oob_ext_data *cp = data;
4068 		u8 *rand192, *hash192, *rand256, *hash256;
4069 		u8 status;
4070 
4071 		if (bdaddr_type_is_le(cp->addr.type)) {
4072 			/* Enforce zero-valued 192-bit parameters as
4073 			 * long as legacy SMP OOB isn't implemented.
4074 			 */
4075 			if (memcmp(cp->rand192, ZERO_KEY, 16) ||
4076 			    memcmp(cp->hash192, ZERO_KEY, 16)) {
4077 				err = mgmt_cmd_complete(sk, hdev->id,
4078 							MGMT_OP_ADD_REMOTE_OOB_DATA,
4079 							MGMT_STATUS_INVALID_PARAMS,
4080 							addr, sizeof(*addr));
4081 				goto unlock;
4082 			}
4083 
4084 			rand192 = NULL;
4085 			hash192 = NULL;
4086 		} else {
4087 			/* In case one of the P-192 values is set to zero,
4088 			 * then just disable OOB data for P-192.
4089 			 */
4090 			if (!memcmp(cp->rand192, ZERO_KEY, 16) ||
4091 			    !memcmp(cp->hash192, ZERO_KEY, 16)) {
4092 				rand192 = NULL;
4093 				hash192 = NULL;
4094 			} else {
4095 				rand192 = cp->rand192;
4096 				hash192 = cp->hash192;
4097 			}
4098 		}
4099 
4100 		/* In case one of the P-256 values is set to zero, then just
4101 		 * disable OOB data for P-256.
4102 		 */
4103 		if (!memcmp(cp->rand256, ZERO_KEY, 16) ||
4104 		    !memcmp(cp->hash256, ZERO_KEY, 16)) {
4105 			rand256 = NULL;
4106 			hash256 = NULL;
4107 		} else {
4108 			rand256 = cp->rand256;
4109 			hash256 = cp->hash256;
4110 		}
4111 
4112 		err = hci_add_remote_oob_data(hdev, &cp->addr.bdaddr,
4113 					      cp->addr.type, hash192, rand192,
4114 					      hash256, rand256);
4115 		if (err < 0)
4116 			status = MGMT_STATUS_FAILED;
4117 		else
4118 			status = MGMT_STATUS_SUCCESS;
4119 
4120 		err = mgmt_cmd_complete(sk, hdev->id,
4121 					MGMT_OP_ADD_REMOTE_OOB_DATA,
4122 					status, &cp->addr, sizeof(cp->addr));
4123 	} else {
4124 		BT_ERR("add_remote_oob_data: invalid length of %u bytes", len);
4125 		err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_ADD_REMOTE_OOB_DATA,
4126 				      MGMT_STATUS_INVALID_PARAMS);
4127 	}
4128 
4129 unlock:
4130 	hci_dev_unlock(hdev);
4131 	return err;
4132 }
4133 
4134 static int remove_remote_oob_data(struct sock *sk, struct hci_dev *hdev,
4135 				  void *data, u16 len)
4136 {
4137 	struct mgmt_cp_remove_remote_oob_data *cp = data;
4138 	u8 status;
4139 	int err;
4140 
4141 	BT_DBG("%s", hdev->name);
4142 
4143 	if (cp->addr.type != BDADDR_BREDR)
4144 		return mgmt_cmd_complete(sk, hdev->id,
4145 					 MGMT_OP_REMOVE_REMOTE_OOB_DATA,
4146 					 MGMT_STATUS_INVALID_PARAMS,
4147 					 &cp->addr, sizeof(cp->addr));
4148 
4149 	hci_dev_lock(hdev);
4150 
4151 	if (!bacmp(&cp->addr.bdaddr, BDADDR_ANY)) {
4152 		hci_remote_oob_data_clear(hdev);
4153 		status = MGMT_STATUS_SUCCESS;
4154 		goto done;
4155 	}
4156 
4157 	err = hci_remove_remote_oob_data(hdev, &cp->addr.bdaddr, cp->addr.type);
4158 	if (err < 0)
4159 		status = MGMT_STATUS_INVALID_PARAMS;
4160 	else
4161 		status = MGMT_STATUS_SUCCESS;
4162 
4163 done:
4164 	err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_REMOVE_REMOTE_OOB_DATA,
4165 				status, &cp->addr, sizeof(cp->addr));
4166 
4167 	hci_dev_unlock(hdev);
4168 	return err;
4169 }
4170 
4171 static bool trigger_bredr_inquiry(struct hci_request *req, u8 *status)
4172 {
4173 	struct hci_dev *hdev = req->hdev;
4174 	struct hci_cp_inquiry cp;
4175 	/* General inquiry access code (GIAC) */
4176 	u8 lap[3] = { 0x33, 0x8b, 0x9e };
4177 
4178 	*status = mgmt_bredr_support(hdev);
4179 	if (*status)
4180 		return false;
4181 
4182 	if (hci_dev_test_flag(hdev, HCI_INQUIRY)) {
4183 		*status = MGMT_STATUS_BUSY;
4184 		return false;
4185 	}
4186 
4187 	hci_inquiry_cache_flush(hdev);
4188 
4189 	memset(&cp, 0, sizeof(cp));
4190 	memcpy(&cp.lap, lap, sizeof(cp.lap));
4191 	cp.length = DISCOV_BREDR_INQUIRY_LEN;
4192 
4193 	hci_req_add(req, HCI_OP_INQUIRY, sizeof(cp), &cp);
4194 
4195 	return true;
4196 }
4197 
4198 static bool trigger_le_scan(struct hci_request *req, u16 interval, u8 *status)
4199 {
4200 	struct hci_dev *hdev = req->hdev;
4201 	struct hci_cp_le_set_scan_param param_cp;
4202 	struct hci_cp_le_set_scan_enable enable_cp;
4203 	u8 own_addr_type;
4204 	int err;
4205 
4206 	*status = mgmt_le_support(hdev);
4207 	if (*status)
4208 		return false;
4209 
4210 	if (hci_dev_test_flag(hdev, HCI_LE_ADV)) {
4211 		/* Don't let discovery abort an outgoing connection attempt
4212 		 * that's using directed advertising.
4213 		 */
4214 		if (hci_lookup_le_connect(hdev)) {
4215 			*status = MGMT_STATUS_REJECTED;
4216 			return false;
4217 		}
4218 
4219 		cancel_adv_timeout(hdev);
4220 		disable_advertising(req);
4221 	}
4222 
4223 	/* If controller is scanning, it means the background scanning is
4224 	 * running. Thus, we should temporarily stop it in order to set the
4225 	 * discovery scanning parameters.
4226 	 */
4227 	if (hci_dev_test_flag(hdev, HCI_LE_SCAN))
4228 		hci_req_add_le_scan_disable(req);
4229 
4230 	/* All active scans will be done with either a resolvable private
4231 	 * address (when privacy feature has been enabled) or non-resolvable
4232 	 * private address.
4233 	 */
4234 	err = hci_update_random_address(req, true, &own_addr_type);
4235 	if (err < 0) {
4236 		*status = MGMT_STATUS_FAILED;
4237 		return false;
4238 	}
4239 
4240 	memset(&param_cp, 0, sizeof(param_cp));
4241 	param_cp.type = LE_SCAN_ACTIVE;
4242 	param_cp.interval = cpu_to_le16(interval);
4243 	param_cp.window = cpu_to_le16(DISCOV_LE_SCAN_WIN);
4244 	param_cp.own_address_type = own_addr_type;
4245 
4246 	hci_req_add(req, HCI_OP_LE_SET_SCAN_PARAM, sizeof(param_cp),
4247 		    &param_cp);
4248 
4249 	memset(&enable_cp, 0, sizeof(enable_cp));
4250 	enable_cp.enable = LE_SCAN_ENABLE;
4251 	enable_cp.filter_dup = LE_SCAN_FILTER_DUP_ENABLE;
4252 
4253 	hci_req_add(req, HCI_OP_LE_SET_SCAN_ENABLE, sizeof(enable_cp),
4254 		    &enable_cp);
4255 
4256 	return true;
4257 }
4258 
4259 static bool trigger_discovery(struct hci_request *req, u8 *status)
4260 {
4261 	struct hci_dev *hdev = req->hdev;
4262 
4263 	switch (hdev->discovery.type) {
4264 	case DISCOV_TYPE_BREDR:
4265 		if (!trigger_bredr_inquiry(req, status))
4266 			return false;
4267 		break;
4268 
4269 	case DISCOV_TYPE_INTERLEAVED:
4270 		if (test_bit(HCI_QUIRK_SIMULTANEOUS_DISCOVERY,
4271 			     &hdev->quirks)) {
4272 			/* During simultaneous discovery, we double LE scan
4273 			 * interval. We must leave some time for the controller
4274 			 * to do BR/EDR inquiry.
4275 			 */
4276 			if (!trigger_le_scan(req, DISCOV_LE_SCAN_INT * 2,
4277 					     status))
4278 				return false;
4279 
4280 			if (!trigger_bredr_inquiry(req, status))
4281 				return false;
4282 
4283 			return true;
4284 		}
4285 
4286 		if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) {
4287 			*status = MGMT_STATUS_NOT_SUPPORTED;
4288 			return false;
4289 		}
4290 		/* fall through */
4291 
4292 	case DISCOV_TYPE_LE:
4293 		if (!trigger_le_scan(req, DISCOV_LE_SCAN_INT, status))
4294 			return false;
4295 		break;
4296 
4297 	default:
4298 		*status = MGMT_STATUS_INVALID_PARAMS;
4299 		return false;
4300 	}
4301 
4302 	return true;
4303 }
4304 
4305 static void start_discovery_complete(struct hci_dev *hdev, u8 status,
4306 				     u16 opcode)
4307 {
4308 	struct mgmt_pending_cmd *cmd;
4309 	unsigned long timeout;
4310 
4311 	BT_DBG("status %d", status);
4312 
4313 	hci_dev_lock(hdev);
4314 
4315 	cmd = pending_find(MGMT_OP_START_DISCOVERY, hdev);
4316 	if (!cmd)
4317 		cmd = pending_find(MGMT_OP_START_SERVICE_DISCOVERY, hdev);
4318 
4319 	if (cmd) {
4320 		cmd->cmd_complete(cmd, mgmt_status(status));
4321 		mgmt_pending_remove(cmd);
4322 	}
4323 
4324 	if (status) {
4325 		hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
4326 		goto unlock;
4327 	}
4328 
4329 	hci_discovery_set_state(hdev, DISCOVERY_FINDING);
4330 
4331 	/* If the scan involves LE scan, pick proper timeout to schedule
4332 	 * hdev->le_scan_disable that will stop it.
4333 	 */
4334 	switch (hdev->discovery.type) {
4335 	case DISCOV_TYPE_LE:
4336 		timeout = msecs_to_jiffies(DISCOV_LE_TIMEOUT);
4337 		break;
4338 	case DISCOV_TYPE_INTERLEAVED:
4339 		 /* When running simultaneous discovery, the LE scanning time
4340 		 * should occupy the whole discovery time sine BR/EDR inquiry
4341 		 * and LE scanning are scheduled by the controller.
4342 		 *
4343 		 * For interleaving discovery in comparison, BR/EDR inquiry
4344 		 * and LE scanning are done sequentially with separate
4345 		 * timeouts.
4346 		 */
4347 		if (test_bit(HCI_QUIRK_SIMULTANEOUS_DISCOVERY, &hdev->quirks))
4348 			timeout = msecs_to_jiffies(DISCOV_LE_TIMEOUT);
4349 		else
4350 			timeout = msecs_to_jiffies(hdev->discov_interleaved_timeout);
4351 		break;
4352 	case DISCOV_TYPE_BREDR:
4353 		timeout = 0;
4354 		break;
4355 	default:
4356 		BT_ERR("Invalid discovery type %d", hdev->discovery.type);
4357 		timeout = 0;
4358 		break;
4359 	}
4360 
4361 	if (timeout) {
4362 		/* When service discovery is used and the controller has
4363 		 * a strict duplicate filter, it is important to remember
4364 		 * the start and duration of the scan. This is required
4365 		 * for restarting scanning during the discovery phase.
4366 		 */
4367 		if (test_bit(HCI_QUIRK_STRICT_DUPLICATE_FILTER,
4368 			     &hdev->quirks) &&
4369 		    hdev->discovery.result_filtering) {
4370 			hdev->discovery.scan_start = jiffies;
4371 			hdev->discovery.scan_duration = timeout;
4372 		}
4373 
4374 		queue_delayed_work(hdev->workqueue,
4375 				   &hdev->le_scan_disable, timeout);
4376 	}
4377 
4378 unlock:
4379 	hci_dev_unlock(hdev);
4380 }
4381 
4382 static int start_discovery(struct sock *sk, struct hci_dev *hdev,
4383 			   void *data, u16 len)
4384 {
4385 	struct mgmt_cp_start_discovery *cp = data;
4386 	struct mgmt_pending_cmd *cmd;
4387 	struct hci_request req;
4388 	u8 status;
4389 	int err;
4390 
4391 	BT_DBG("%s", hdev->name);
4392 
4393 	hci_dev_lock(hdev);
4394 
4395 	if (!hdev_is_powered(hdev)) {
4396 		err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_START_DISCOVERY,
4397 					MGMT_STATUS_NOT_POWERED,
4398 					&cp->type, sizeof(cp->type));
4399 		goto failed;
4400 	}
4401 
4402 	if (hdev->discovery.state != DISCOVERY_STOPPED ||
4403 	    hci_dev_test_flag(hdev, HCI_PERIODIC_INQ)) {
4404 		err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_START_DISCOVERY,
4405 					MGMT_STATUS_BUSY, &cp->type,
4406 					sizeof(cp->type));
4407 		goto failed;
4408 	}
4409 
4410 	cmd = mgmt_pending_add(sk, MGMT_OP_START_DISCOVERY, hdev, data, len);
4411 	if (!cmd) {
4412 		err = -ENOMEM;
4413 		goto failed;
4414 	}
4415 
4416 	cmd->cmd_complete = generic_cmd_complete;
4417 
4418 	/* Clear the discovery filter first to free any previously
4419 	 * allocated memory for the UUID list.
4420 	 */
4421 	hci_discovery_filter_clear(hdev);
4422 
4423 	hdev->discovery.type = cp->type;
4424 	hdev->discovery.report_invalid_rssi = false;
4425 
4426 	hci_req_init(&req, hdev);
4427 
4428 	if (!trigger_discovery(&req, &status)) {
4429 		err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_START_DISCOVERY,
4430 					status, &cp->type, sizeof(cp->type));
4431 		mgmt_pending_remove(cmd);
4432 		goto failed;
4433 	}
4434 
4435 	err = hci_req_run(&req, start_discovery_complete);
4436 	if (err < 0) {
4437 		mgmt_pending_remove(cmd);
4438 		goto failed;
4439 	}
4440 
4441 	hci_discovery_set_state(hdev, DISCOVERY_STARTING);
4442 
4443 failed:
4444 	hci_dev_unlock(hdev);
4445 	return err;
4446 }
4447 
4448 static int service_discovery_cmd_complete(struct mgmt_pending_cmd *cmd,
4449 					  u8 status)
4450 {
4451 	return mgmt_cmd_complete(cmd->sk, cmd->index, cmd->opcode, status,
4452 				 cmd->param, 1);
4453 }
4454 
4455 static int start_service_discovery(struct sock *sk, struct hci_dev *hdev,
4456 				   void *data, u16 len)
4457 {
4458 	struct mgmt_cp_start_service_discovery *cp = data;
4459 	struct mgmt_pending_cmd *cmd;
4460 	struct hci_request req;
4461 	const u16 max_uuid_count = ((U16_MAX - sizeof(*cp)) / 16);
4462 	u16 uuid_count, expected_len;
4463 	u8 status;
4464 	int err;
4465 
4466 	BT_DBG("%s", hdev->name);
4467 
4468 	hci_dev_lock(hdev);
4469 
4470 	if (!hdev_is_powered(hdev)) {
4471 		err = mgmt_cmd_complete(sk, hdev->id,
4472 					MGMT_OP_START_SERVICE_DISCOVERY,
4473 					MGMT_STATUS_NOT_POWERED,
4474 					&cp->type, sizeof(cp->type));
4475 		goto failed;
4476 	}
4477 
4478 	if (hdev->discovery.state != DISCOVERY_STOPPED ||
4479 	    hci_dev_test_flag(hdev, HCI_PERIODIC_INQ)) {
4480 		err = mgmt_cmd_complete(sk, hdev->id,
4481 					MGMT_OP_START_SERVICE_DISCOVERY,
4482 					MGMT_STATUS_BUSY, &cp->type,
4483 					sizeof(cp->type));
4484 		goto failed;
4485 	}
4486 
4487 	uuid_count = __le16_to_cpu(cp->uuid_count);
4488 	if (uuid_count > max_uuid_count) {
4489 		BT_ERR("service_discovery: too big uuid_count value %u",
4490 		       uuid_count);
4491 		err = mgmt_cmd_complete(sk, hdev->id,
4492 					MGMT_OP_START_SERVICE_DISCOVERY,
4493 					MGMT_STATUS_INVALID_PARAMS, &cp->type,
4494 					sizeof(cp->type));
4495 		goto failed;
4496 	}
4497 
4498 	expected_len = sizeof(*cp) + uuid_count * 16;
4499 	if (expected_len != len) {
4500 		BT_ERR("service_discovery: expected %u bytes, got %u bytes",
4501 		       expected_len, len);
4502 		err = mgmt_cmd_complete(sk, hdev->id,
4503 					MGMT_OP_START_SERVICE_DISCOVERY,
4504 					MGMT_STATUS_INVALID_PARAMS, &cp->type,
4505 					sizeof(cp->type));
4506 		goto failed;
4507 	}
4508 
4509 	cmd = mgmt_pending_add(sk, MGMT_OP_START_SERVICE_DISCOVERY,
4510 			       hdev, data, len);
4511 	if (!cmd) {
4512 		err = -ENOMEM;
4513 		goto failed;
4514 	}
4515 
4516 	cmd->cmd_complete = service_discovery_cmd_complete;
4517 
4518 	/* Clear the discovery filter first to free any previously
4519 	 * allocated memory for the UUID list.
4520 	 */
4521 	hci_discovery_filter_clear(hdev);
4522 
4523 	hdev->discovery.result_filtering = true;
4524 	hdev->discovery.type = cp->type;
4525 	hdev->discovery.rssi = cp->rssi;
4526 	hdev->discovery.uuid_count = uuid_count;
4527 
4528 	if (uuid_count > 0) {
4529 		hdev->discovery.uuids = kmemdup(cp->uuids, uuid_count * 16,
4530 						GFP_KERNEL);
4531 		if (!hdev->discovery.uuids) {
4532 			err = mgmt_cmd_complete(sk, hdev->id,
4533 						MGMT_OP_START_SERVICE_DISCOVERY,
4534 						MGMT_STATUS_FAILED,
4535 						&cp->type, sizeof(cp->type));
4536 			mgmt_pending_remove(cmd);
4537 			goto failed;
4538 		}
4539 	}
4540 
4541 	hci_req_init(&req, hdev);
4542 
4543 	if (!trigger_discovery(&req, &status)) {
4544 		err = mgmt_cmd_complete(sk, hdev->id,
4545 					MGMT_OP_START_SERVICE_DISCOVERY,
4546 					status, &cp->type, sizeof(cp->type));
4547 		mgmt_pending_remove(cmd);
4548 		goto failed;
4549 	}
4550 
4551 	err = hci_req_run(&req, start_discovery_complete);
4552 	if (err < 0) {
4553 		mgmt_pending_remove(cmd);
4554 		goto failed;
4555 	}
4556 
4557 	hci_discovery_set_state(hdev, DISCOVERY_STARTING);
4558 
4559 failed:
4560 	hci_dev_unlock(hdev);
4561 	return err;
4562 }
4563 
4564 static void stop_discovery_complete(struct hci_dev *hdev, u8 status, u16 opcode)
4565 {
4566 	struct mgmt_pending_cmd *cmd;
4567 
4568 	BT_DBG("status %d", status);
4569 
4570 	hci_dev_lock(hdev);
4571 
4572 	cmd = pending_find(MGMT_OP_STOP_DISCOVERY, hdev);
4573 	if (cmd) {
4574 		cmd->cmd_complete(cmd, mgmt_status(status));
4575 		mgmt_pending_remove(cmd);
4576 	}
4577 
4578 	if (!status)
4579 		hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
4580 
4581 	hci_dev_unlock(hdev);
4582 }
4583 
4584 static int stop_discovery(struct sock *sk, struct hci_dev *hdev, void *data,
4585 			  u16 len)
4586 {
4587 	struct mgmt_cp_stop_discovery *mgmt_cp = data;
4588 	struct mgmt_pending_cmd *cmd;
4589 	struct hci_request req;
4590 	int err;
4591 
4592 	BT_DBG("%s", hdev->name);
4593 
4594 	hci_dev_lock(hdev);
4595 
4596 	if (!hci_discovery_active(hdev)) {
4597 		err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_STOP_DISCOVERY,
4598 					MGMT_STATUS_REJECTED, &mgmt_cp->type,
4599 					sizeof(mgmt_cp->type));
4600 		goto unlock;
4601 	}
4602 
4603 	if (hdev->discovery.type != mgmt_cp->type) {
4604 		err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_STOP_DISCOVERY,
4605 					MGMT_STATUS_INVALID_PARAMS,
4606 					&mgmt_cp->type, sizeof(mgmt_cp->type));
4607 		goto unlock;
4608 	}
4609 
4610 	cmd = mgmt_pending_add(sk, MGMT_OP_STOP_DISCOVERY, hdev, data, len);
4611 	if (!cmd) {
4612 		err = -ENOMEM;
4613 		goto unlock;
4614 	}
4615 
4616 	cmd->cmd_complete = generic_cmd_complete;
4617 
4618 	hci_req_init(&req, hdev);
4619 
4620 	hci_stop_discovery(&req);
4621 
4622 	err = hci_req_run(&req, stop_discovery_complete);
4623 	if (!err) {
4624 		hci_discovery_set_state(hdev, DISCOVERY_STOPPING);
4625 		goto unlock;
4626 	}
4627 
4628 	mgmt_pending_remove(cmd);
4629 
4630 	/* If no HCI commands were sent we're done */
4631 	if (err == -ENODATA) {
4632 		err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_STOP_DISCOVERY, 0,
4633 					&mgmt_cp->type, sizeof(mgmt_cp->type));
4634 		hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
4635 	}
4636 
4637 unlock:
4638 	hci_dev_unlock(hdev);
4639 	return err;
4640 }
4641 
4642 static int confirm_name(struct sock *sk, struct hci_dev *hdev, void *data,
4643 			u16 len)
4644 {
4645 	struct mgmt_cp_confirm_name *cp = data;
4646 	struct inquiry_entry *e;
4647 	int err;
4648 
4649 	BT_DBG("%s", hdev->name);
4650 
4651 	hci_dev_lock(hdev);
4652 
4653 	if (!hci_discovery_active(hdev)) {
4654 		err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_CONFIRM_NAME,
4655 					MGMT_STATUS_FAILED, &cp->addr,
4656 					sizeof(cp->addr));
4657 		goto failed;
4658 	}
4659 
4660 	e = hci_inquiry_cache_lookup_unknown(hdev, &cp->addr.bdaddr);
4661 	if (!e) {
4662 		err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_CONFIRM_NAME,
4663 					MGMT_STATUS_INVALID_PARAMS, &cp->addr,
4664 					sizeof(cp->addr));
4665 		goto failed;
4666 	}
4667 
4668 	if (cp->name_known) {
4669 		e->name_state = NAME_KNOWN;
4670 		list_del(&e->list);
4671 	} else {
4672 		e->name_state = NAME_NEEDED;
4673 		hci_inquiry_cache_update_resolve(hdev, e);
4674 	}
4675 
4676 	err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_CONFIRM_NAME, 0,
4677 				&cp->addr, sizeof(cp->addr));
4678 
4679 failed:
4680 	hci_dev_unlock(hdev);
4681 	return err;
4682 }
4683 
4684 static int block_device(struct sock *sk, struct hci_dev *hdev, void *data,
4685 			u16 len)
4686 {
4687 	struct mgmt_cp_block_device *cp = data;
4688 	u8 status;
4689 	int err;
4690 
4691 	BT_DBG("%s", hdev->name);
4692 
4693 	if (!bdaddr_type_is_valid(cp->addr.type))
4694 		return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_BLOCK_DEVICE,
4695 					 MGMT_STATUS_INVALID_PARAMS,
4696 					 &cp->addr, sizeof(cp->addr));
4697 
4698 	hci_dev_lock(hdev);
4699 
4700 	err = hci_bdaddr_list_add(&hdev->blacklist, &cp->addr.bdaddr,
4701 				  cp->addr.type);
4702 	if (err < 0) {
4703 		status = MGMT_STATUS_FAILED;
4704 		goto done;
4705 	}
4706 
4707 	mgmt_event(MGMT_EV_DEVICE_BLOCKED, hdev, &cp->addr, sizeof(cp->addr),
4708 		   sk);
4709 	status = MGMT_STATUS_SUCCESS;
4710 
4711 done:
4712 	err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_BLOCK_DEVICE, status,
4713 				&cp->addr, sizeof(cp->addr));
4714 
4715 	hci_dev_unlock(hdev);
4716 
4717 	return err;
4718 }
4719 
4720 static int unblock_device(struct sock *sk, struct hci_dev *hdev, void *data,
4721 			  u16 len)
4722 {
4723 	struct mgmt_cp_unblock_device *cp = data;
4724 	u8 status;
4725 	int err;
4726 
4727 	BT_DBG("%s", hdev->name);
4728 
4729 	if (!bdaddr_type_is_valid(cp->addr.type))
4730 		return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_UNBLOCK_DEVICE,
4731 					 MGMT_STATUS_INVALID_PARAMS,
4732 					 &cp->addr, sizeof(cp->addr));
4733 
4734 	hci_dev_lock(hdev);
4735 
4736 	err = hci_bdaddr_list_del(&hdev->blacklist, &cp->addr.bdaddr,
4737 				  cp->addr.type);
4738 	if (err < 0) {
4739 		status = MGMT_STATUS_INVALID_PARAMS;
4740 		goto done;
4741 	}
4742 
4743 	mgmt_event(MGMT_EV_DEVICE_UNBLOCKED, hdev, &cp->addr, sizeof(cp->addr),
4744 		   sk);
4745 	status = MGMT_STATUS_SUCCESS;
4746 
4747 done:
4748 	err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_UNBLOCK_DEVICE, status,
4749 				&cp->addr, sizeof(cp->addr));
4750 
4751 	hci_dev_unlock(hdev);
4752 
4753 	return err;
4754 }
4755 
4756 static int set_device_id(struct sock *sk, struct hci_dev *hdev, void *data,
4757 			 u16 len)
4758 {
4759 	struct mgmt_cp_set_device_id *cp = data;
4760 	struct hci_request req;
4761 	int err;
4762 	__u16 source;
4763 
4764 	BT_DBG("%s", hdev->name);
4765 
4766 	source = __le16_to_cpu(cp->source);
4767 
4768 	if (source > 0x0002)
4769 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_DEVICE_ID,
4770 				       MGMT_STATUS_INVALID_PARAMS);
4771 
4772 	hci_dev_lock(hdev);
4773 
4774 	hdev->devid_source = source;
4775 	hdev->devid_vendor = __le16_to_cpu(cp->vendor);
4776 	hdev->devid_product = __le16_to_cpu(cp->product);
4777 	hdev->devid_version = __le16_to_cpu(cp->version);
4778 
4779 	err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_SET_DEVICE_ID, 0,
4780 				NULL, 0);
4781 
4782 	hci_req_init(&req, hdev);
4783 	update_eir(&req);
4784 	hci_req_run(&req, NULL);
4785 
4786 	hci_dev_unlock(hdev);
4787 
4788 	return err;
4789 }
4790 
4791 static void enable_advertising_instance(struct hci_dev *hdev, u8 status,
4792 					u16 opcode)
4793 {
4794 	BT_DBG("status %d", status);
4795 }
4796 
4797 static void set_advertising_complete(struct hci_dev *hdev, u8 status,
4798 				     u16 opcode)
4799 {
4800 	struct cmd_lookup match = { NULL, hdev };
4801 	struct hci_request req;
4802 	u8 instance;
4803 	struct adv_info *adv_instance;
4804 	int err;
4805 
4806 	hci_dev_lock(hdev);
4807 
4808 	if (status) {
4809 		u8 mgmt_err = mgmt_status(status);
4810 
4811 		mgmt_pending_foreach(MGMT_OP_SET_ADVERTISING, hdev,
4812 				     cmd_status_rsp, &mgmt_err);
4813 		goto unlock;
4814 	}
4815 
4816 	if (hci_dev_test_flag(hdev, HCI_LE_ADV))
4817 		hci_dev_set_flag(hdev, HCI_ADVERTISING);
4818 	else
4819 		hci_dev_clear_flag(hdev, HCI_ADVERTISING);
4820 
4821 	mgmt_pending_foreach(MGMT_OP_SET_ADVERTISING, hdev, settings_rsp,
4822 			     &match);
4823 
4824 	new_settings(hdev, match.sk);
4825 
4826 	if (match.sk)
4827 		sock_put(match.sk);
4828 
4829 	/* If "Set Advertising" was just disabled and instance advertising was
4830 	 * set up earlier, then re-enable multi-instance advertising.
4831 	 */
4832 	if (hci_dev_test_flag(hdev, HCI_ADVERTISING) ||
4833 	    !hci_dev_test_flag(hdev, HCI_ADVERTISING_INSTANCE) ||
4834 	    list_empty(&hdev->adv_instances))
4835 		goto unlock;
4836 
4837 	instance = hdev->cur_adv_instance;
4838 	if (!instance) {
4839 		adv_instance = list_first_entry_or_null(&hdev->adv_instances,
4840 							struct adv_info, list);
4841 		if (!adv_instance)
4842 			goto unlock;
4843 
4844 		instance = adv_instance->instance;
4845 	}
4846 
4847 	hci_req_init(&req, hdev);
4848 
4849 	err = schedule_adv_instance(&req, instance, true);
4850 
4851 	if (!err)
4852 		err = hci_req_run(&req, enable_advertising_instance);
4853 
4854 	if (err)
4855 		BT_ERR("Failed to re-configure advertising");
4856 
4857 unlock:
4858 	hci_dev_unlock(hdev);
4859 }
4860 
4861 static int set_advertising(struct sock *sk, struct hci_dev *hdev, void *data,
4862 			   u16 len)
4863 {
4864 	struct mgmt_mode *cp = data;
4865 	struct mgmt_pending_cmd *cmd;
4866 	struct hci_request req;
4867 	u8 val, status;
4868 	int err;
4869 
4870 	BT_DBG("request for %s", hdev->name);
4871 
4872 	status = mgmt_le_support(hdev);
4873 	if (status)
4874 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_ADVERTISING,
4875 				       status);
4876 
4877 	if (cp->val != 0x00 && cp->val != 0x01 && cp->val != 0x02)
4878 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_ADVERTISING,
4879 				       MGMT_STATUS_INVALID_PARAMS);
4880 
4881 	hci_dev_lock(hdev);
4882 
4883 	val = !!cp->val;
4884 
4885 	/* The following conditions are ones which mean that we should
4886 	 * not do any HCI communication but directly send a mgmt
4887 	 * response to user space (after toggling the flag if
4888 	 * necessary).
4889 	 */
4890 	if (!hdev_is_powered(hdev) ||
4891 	    (val == hci_dev_test_flag(hdev, HCI_ADVERTISING) &&
4892 	     (cp->val == 0x02) == hci_dev_test_flag(hdev, HCI_ADVERTISING_CONNECTABLE)) ||
4893 	    hci_conn_num(hdev, LE_LINK) > 0 ||
4894 	    (hci_dev_test_flag(hdev, HCI_LE_SCAN) &&
4895 	     hdev->le_scan_type == LE_SCAN_ACTIVE)) {
4896 		bool changed;
4897 
4898 		if (cp->val) {
4899 			changed = !hci_dev_test_and_set_flag(hdev, HCI_ADVERTISING);
4900 			if (cp->val == 0x02)
4901 				hci_dev_set_flag(hdev, HCI_ADVERTISING_CONNECTABLE);
4902 			else
4903 				hci_dev_clear_flag(hdev, HCI_ADVERTISING_CONNECTABLE);
4904 		} else {
4905 			changed = hci_dev_test_and_clear_flag(hdev, HCI_ADVERTISING);
4906 			hci_dev_clear_flag(hdev, HCI_ADVERTISING_CONNECTABLE);
4907 		}
4908 
4909 		err = send_settings_rsp(sk, MGMT_OP_SET_ADVERTISING, hdev);
4910 		if (err < 0)
4911 			goto unlock;
4912 
4913 		if (changed)
4914 			err = new_settings(hdev, sk);
4915 
4916 		goto unlock;
4917 	}
4918 
4919 	if (pending_find(MGMT_OP_SET_ADVERTISING, hdev) ||
4920 	    pending_find(MGMT_OP_SET_LE, hdev)) {
4921 		err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_ADVERTISING,
4922 				      MGMT_STATUS_BUSY);
4923 		goto unlock;
4924 	}
4925 
4926 	cmd = mgmt_pending_add(sk, MGMT_OP_SET_ADVERTISING, hdev, data, len);
4927 	if (!cmd) {
4928 		err = -ENOMEM;
4929 		goto unlock;
4930 	}
4931 
4932 	hci_req_init(&req, hdev);
4933 
4934 	if (cp->val == 0x02)
4935 		hci_dev_set_flag(hdev, HCI_ADVERTISING_CONNECTABLE);
4936 	else
4937 		hci_dev_clear_flag(hdev, HCI_ADVERTISING_CONNECTABLE);
4938 
4939 	cancel_adv_timeout(hdev);
4940 
4941 	if (val) {
4942 		/* Switch to instance "0" for the Set Advertising setting.
4943 		 * We cannot use update_[adv|scan_rsp]_data() here as the
4944 		 * HCI_ADVERTISING flag is not yet set.
4945 		 */
4946 		update_inst_adv_data(&req, 0x00);
4947 		update_inst_scan_rsp_data(&req, 0x00);
4948 		enable_advertising(&req);
4949 	} else {
4950 		disable_advertising(&req);
4951 	}
4952 
4953 	err = hci_req_run(&req, set_advertising_complete);
4954 	if (err < 0)
4955 		mgmt_pending_remove(cmd);
4956 
4957 unlock:
4958 	hci_dev_unlock(hdev);
4959 	return err;
4960 }
4961 
4962 static int set_static_address(struct sock *sk, struct hci_dev *hdev,
4963 			      void *data, u16 len)
4964 {
4965 	struct mgmt_cp_set_static_address *cp = data;
4966 	int err;
4967 
4968 	BT_DBG("%s", hdev->name);
4969 
4970 	if (!lmp_le_capable(hdev))
4971 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_STATIC_ADDRESS,
4972 				       MGMT_STATUS_NOT_SUPPORTED);
4973 
4974 	if (hdev_is_powered(hdev))
4975 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_STATIC_ADDRESS,
4976 				       MGMT_STATUS_REJECTED);
4977 
4978 	if (bacmp(&cp->bdaddr, BDADDR_ANY)) {
4979 		if (!bacmp(&cp->bdaddr, BDADDR_NONE))
4980 			return mgmt_cmd_status(sk, hdev->id,
4981 					       MGMT_OP_SET_STATIC_ADDRESS,
4982 					       MGMT_STATUS_INVALID_PARAMS);
4983 
4984 		/* Two most significant bits shall be set */
4985 		if ((cp->bdaddr.b[5] & 0xc0) != 0xc0)
4986 			return mgmt_cmd_status(sk, hdev->id,
4987 					       MGMT_OP_SET_STATIC_ADDRESS,
4988 					       MGMT_STATUS_INVALID_PARAMS);
4989 	}
4990 
4991 	hci_dev_lock(hdev);
4992 
4993 	bacpy(&hdev->static_addr, &cp->bdaddr);
4994 
4995 	err = send_settings_rsp(sk, MGMT_OP_SET_STATIC_ADDRESS, hdev);
4996 	if (err < 0)
4997 		goto unlock;
4998 
4999 	err = new_settings(hdev, sk);
5000 
5001 unlock:
5002 	hci_dev_unlock(hdev);
5003 	return err;
5004 }
5005 
5006 static int set_scan_params(struct sock *sk, struct hci_dev *hdev,
5007 			   void *data, u16 len)
5008 {
5009 	struct mgmt_cp_set_scan_params *cp = data;
5010 	__u16 interval, window;
5011 	int err;
5012 
5013 	BT_DBG("%s", hdev->name);
5014 
5015 	if (!lmp_le_capable(hdev))
5016 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_SCAN_PARAMS,
5017 				       MGMT_STATUS_NOT_SUPPORTED);
5018 
5019 	interval = __le16_to_cpu(cp->interval);
5020 
5021 	if (interval < 0x0004 || interval > 0x4000)
5022 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_SCAN_PARAMS,
5023 				       MGMT_STATUS_INVALID_PARAMS);
5024 
5025 	window = __le16_to_cpu(cp->window);
5026 
5027 	if (window < 0x0004 || window > 0x4000)
5028 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_SCAN_PARAMS,
5029 				       MGMT_STATUS_INVALID_PARAMS);
5030 
5031 	if (window > interval)
5032 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_SCAN_PARAMS,
5033 				       MGMT_STATUS_INVALID_PARAMS);
5034 
5035 	hci_dev_lock(hdev);
5036 
5037 	hdev->le_scan_interval = interval;
5038 	hdev->le_scan_window = window;
5039 
5040 	err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_SET_SCAN_PARAMS, 0,
5041 				NULL, 0);
5042 
5043 	/* If background scan is running, restart it so new parameters are
5044 	 * loaded.
5045 	 */
5046 	if (hci_dev_test_flag(hdev, HCI_LE_SCAN) &&
5047 	    hdev->discovery.state == DISCOVERY_STOPPED) {
5048 		struct hci_request req;
5049 
5050 		hci_req_init(&req, hdev);
5051 
5052 		hci_req_add_le_scan_disable(&req);
5053 		hci_req_add_le_passive_scan(&req);
5054 
5055 		hci_req_run(&req, NULL);
5056 	}
5057 
5058 	hci_dev_unlock(hdev);
5059 
5060 	return err;
5061 }
5062 
5063 static void fast_connectable_complete(struct hci_dev *hdev, u8 status,
5064 				      u16 opcode)
5065 {
5066 	struct mgmt_pending_cmd *cmd;
5067 
5068 	BT_DBG("status 0x%02x", status);
5069 
5070 	hci_dev_lock(hdev);
5071 
5072 	cmd = pending_find(MGMT_OP_SET_FAST_CONNECTABLE, hdev);
5073 	if (!cmd)
5074 		goto unlock;
5075 
5076 	if (status) {
5077 		mgmt_cmd_status(cmd->sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE,
5078 			        mgmt_status(status));
5079 	} else {
5080 		struct mgmt_mode *cp = cmd->param;
5081 
5082 		if (cp->val)
5083 			hci_dev_set_flag(hdev, HCI_FAST_CONNECTABLE);
5084 		else
5085 			hci_dev_clear_flag(hdev, HCI_FAST_CONNECTABLE);
5086 
5087 		send_settings_rsp(cmd->sk, MGMT_OP_SET_FAST_CONNECTABLE, hdev);
5088 		new_settings(hdev, cmd->sk);
5089 	}
5090 
5091 	mgmt_pending_remove(cmd);
5092 
5093 unlock:
5094 	hci_dev_unlock(hdev);
5095 }
5096 
5097 static int set_fast_connectable(struct sock *sk, struct hci_dev *hdev,
5098 				void *data, u16 len)
5099 {
5100 	struct mgmt_mode *cp = data;
5101 	struct mgmt_pending_cmd *cmd;
5102 	struct hci_request req;
5103 	int err;
5104 
5105 	BT_DBG("%s", hdev->name);
5106 
5107 	if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED) ||
5108 	    hdev->hci_ver < BLUETOOTH_VER_1_2)
5109 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE,
5110 				       MGMT_STATUS_NOT_SUPPORTED);
5111 
5112 	if (cp->val != 0x00 && cp->val != 0x01)
5113 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE,
5114 				       MGMT_STATUS_INVALID_PARAMS);
5115 
5116 	hci_dev_lock(hdev);
5117 
5118 	if (pending_find(MGMT_OP_SET_FAST_CONNECTABLE, hdev)) {
5119 		err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE,
5120 				      MGMT_STATUS_BUSY);
5121 		goto unlock;
5122 	}
5123 
5124 	if (!!cp->val == hci_dev_test_flag(hdev, HCI_FAST_CONNECTABLE)) {
5125 		err = send_settings_rsp(sk, MGMT_OP_SET_FAST_CONNECTABLE,
5126 					hdev);
5127 		goto unlock;
5128 	}
5129 
5130 	if (!hdev_is_powered(hdev)) {
5131 		hci_dev_change_flag(hdev, HCI_FAST_CONNECTABLE);
5132 		err = send_settings_rsp(sk, MGMT_OP_SET_FAST_CONNECTABLE,
5133 					hdev);
5134 		new_settings(hdev, sk);
5135 		goto unlock;
5136 	}
5137 
5138 	cmd = mgmt_pending_add(sk, MGMT_OP_SET_FAST_CONNECTABLE, hdev,
5139 			       data, len);
5140 	if (!cmd) {
5141 		err = -ENOMEM;
5142 		goto unlock;
5143 	}
5144 
5145 	hci_req_init(&req, hdev);
5146 
5147 	write_fast_connectable(&req, cp->val);
5148 
5149 	err = hci_req_run(&req, fast_connectable_complete);
5150 	if (err < 0) {
5151 		err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE,
5152 				      MGMT_STATUS_FAILED);
5153 		mgmt_pending_remove(cmd);
5154 	}
5155 
5156 unlock:
5157 	hci_dev_unlock(hdev);
5158 
5159 	return err;
5160 }
5161 
5162 static void set_bredr_complete(struct hci_dev *hdev, u8 status, u16 opcode)
5163 {
5164 	struct mgmt_pending_cmd *cmd;
5165 
5166 	BT_DBG("status 0x%02x", status);
5167 
5168 	hci_dev_lock(hdev);
5169 
5170 	cmd = pending_find(MGMT_OP_SET_BREDR, hdev);
5171 	if (!cmd)
5172 		goto unlock;
5173 
5174 	if (status) {
5175 		u8 mgmt_err = mgmt_status(status);
5176 
5177 		/* We need to restore the flag if related HCI commands
5178 		 * failed.
5179 		 */
5180 		hci_dev_clear_flag(hdev, HCI_BREDR_ENABLED);
5181 
5182 		mgmt_cmd_status(cmd->sk, cmd->index, cmd->opcode, mgmt_err);
5183 	} else {
5184 		send_settings_rsp(cmd->sk, MGMT_OP_SET_BREDR, hdev);
5185 		new_settings(hdev, cmd->sk);
5186 	}
5187 
5188 	mgmt_pending_remove(cmd);
5189 
5190 unlock:
5191 	hci_dev_unlock(hdev);
5192 }
5193 
5194 static int set_bredr(struct sock *sk, struct hci_dev *hdev, void *data, u16 len)
5195 {
5196 	struct mgmt_mode *cp = data;
5197 	struct mgmt_pending_cmd *cmd;
5198 	struct hci_request req;
5199 	int err;
5200 
5201 	BT_DBG("request for %s", hdev->name);
5202 
5203 	if (!lmp_bredr_capable(hdev) || !lmp_le_capable(hdev))
5204 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_BREDR,
5205 				       MGMT_STATUS_NOT_SUPPORTED);
5206 
5207 	if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED))
5208 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_BREDR,
5209 				       MGMT_STATUS_REJECTED);
5210 
5211 	if (cp->val != 0x00 && cp->val != 0x01)
5212 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_BREDR,
5213 				       MGMT_STATUS_INVALID_PARAMS);
5214 
5215 	hci_dev_lock(hdev);
5216 
5217 	if (cp->val == hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) {
5218 		err = send_settings_rsp(sk, MGMT_OP_SET_BREDR, hdev);
5219 		goto unlock;
5220 	}
5221 
5222 	if (!hdev_is_powered(hdev)) {
5223 		if (!cp->val) {
5224 			hci_dev_clear_flag(hdev, HCI_DISCOVERABLE);
5225 			hci_dev_clear_flag(hdev, HCI_SSP_ENABLED);
5226 			hci_dev_clear_flag(hdev, HCI_LINK_SECURITY);
5227 			hci_dev_clear_flag(hdev, HCI_FAST_CONNECTABLE);
5228 			hci_dev_clear_flag(hdev, HCI_HS_ENABLED);
5229 		}
5230 
5231 		hci_dev_change_flag(hdev, HCI_BREDR_ENABLED);
5232 
5233 		err = send_settings_rsp(sk, MGMT_OP_SET_BREDR, hdev);
5234 		if (err < 0)
5235 			goto unlock;
5236 
5237 		err = new_settings(hdev, sk);
5238 		goto unlock;
5239 	}
5240 
5241 	/* Reject disabling when powered on */
5242 	if (!cp->val) {
5243 		err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_BREDR,
5244 				      MGMT_STATUS_REJECTED);
5245 		goto unlock;
5246 	} else {
5247 		/* When configuring a dual-mode controller to operate
5248 		 * with LE only and using a static address, then switching
5249 		 * BR/EDR back on is not allowed.
5250 		 *
5251 		 * Dual-mode controllers shall operate with the public
5252 		 * address as its identity address for BR/EDR and LE. So
5253 		 * reject the attempt to create an invalid configuration.
5254 		 *
5255 		 * The same restrictions applies when secure connections
5256 		 * has been enabled. For BR/EDR this is a controller feature
5257 		 * while for LE it is a host stack feature. This means that
5258 		 * switching BR/EDR back on when secure connections has been
5259 		 * enabled is not a supported transaction.
5260 		 */
5261 		if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED) &&
5262 		    (bacmp(&hdev->static_addr, BDADDR_ANY) ||
5263 		     hci_dev_test_flag(hdev, HCI_SC_ENABLED))) {
5264 			err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_BREDR,
5265 					      MGMT_STATUS_REJECTED);
5266 			goto unlock;
5267 		}
5268 	}
5269 
5270 	if (pending_find(MGMT_OP_SET_BREDR, hdev)) {
5271 		err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_BREDR,
5272 				      MGMT_STATUS_BUSY);
5273 		goto unlock;
5274 	}
5275 
5276 	cmd = mgmt_pending_add(sk, MGMT_OP_SET_BREDR, hdev, data, len);
5277 	if (!cmd) {
5278 		err = -ENOMEM;
5279 		goto unlock;
5280 	}
5281 
5282 	/* We need to flip the bit already here so that update_adv_data
5283 	 * generates the correct flags.
5284 	 */
5285 	hci_dev_set_flag(hdev, HCI_BREDR_ENABLED);
5286 
5287 	hci_req_init(&req, hdev);
5288 
5289 	write_fast_connectable(&req, false);
5290 	__hci_update_page_scan(&req);
5291 
5292 	/* Since only the advertising data flags will change, there
5293 	 * is no need to update the scan response data.
5294 	 */
5295 	update_adv_data(&req);
5296 
5297 	err = hci_req_run(&req, set_bredr_complete);
5298 	if (err < 0)
5299 		mgmt_pending_remove(cmd);
5300 
5301 unlock:
5302 	hci_dev_unlock(hdev);
5303 	return err;
5304 }
5305 
5306 static void sc_enable_complete(struct hci_dev *hdev, u8 status, u16 opcode)
5307 {
5308 	struct mgmt_pending_cmd *cmd;
5309 	struct mgmt_mode *cp;
5310 
5311 	BT_DBG("%s status %u", hdev->name, status);
5312 
5313 	hci_dev_lock(hdev);
5314 
5315 	cmd = pending_find(MGMT_OP_SET_SECURE_CONN, hdev);
5316 	if (!cmd)
5317 		goto unlock;
5318 
5319 	if (status) {
5320 		mgmt_cmd_status(cmd->sk, cmd->index, cmd->opcode,
5321 			        mgmt_status(status));
5322 		goto remove;
5323 	}
5324 
5325 	cp = cmd->param;
5326 
5327 	switch (cp->val) {
5328 	case 0x00:
5329 		hci_dev_clear_flag(hdev, HCI_SC_ENABLED);
5330 		hci_dev_clear_flag(hdev, HCI_SC_ONLY);
5331 		break;
5332 	case 0x01:
5333 		hci_dev_set_flag(hdev, HCI_SC_ENABLED);
5334 		hci_dev_clear_flag(hdev, HCI_SC_ONLY);
5335 		break;
5336 	case 0x02:
5337 		hci_dev_set_flag(hdev, HCI_SC_ENABLED);
5338 		hci_dev_set_flag(hdev, HCI_SC_ONLY);
5339 		break;
5340 	}
5341 
5342 	send_settings_rsp(cmd->sk, MGMT_OP_SET_SECURE_CONN, hdev);
5343 	new_settings(hdev, cmd->sk);
5344 
5345 remove:
5346 	mgmt_pending_remove(cmd);
5347 unlock:
5348 	hci_dev_unlock(hdev);
5349 }
5350 
5351 static int set_secure_conn(struct sock *sk, struct hci_dev *hdev,
5352 			   void *data, u16 len)
5353 {
5354 	struct mgmt_mode *cp = data;
5355 	struct mgmt_pending_cmd *cmd;
5356 	struct hci_request req;
5357 	u8 val;
5358 	int err;
5359 
5360 	BT_DBG("request for %s", hdev->name);
5361 
5362 	if (!lmp_sc_capable(hdev) &&
5363 	    !hci_dev_test_flag(hdev, HCI_LE_ENABLED))
5364 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_SECURE_CONN,
5365 				       MGMT_STATUS_NOT_SUPPORTED);
5366 
5367 	if (hci_dev_test_flag(hdev, HCI_BREDR_ENABLED) &&
5368 	    lmp_sc_capable(hdev) &&
5369 	    !hci_dev_test_flag(hdev, HCI_SSP_ENABLED))
5370 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_SECURE_CONN,
5371 				       MGMT_STATUS_REJECTED);
5372 
5373 	if (cp->val != 0x00 && cp->val != 0x01 && cp->val != 0x02)
5374 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_SECURE_CONN,
5375 				  MGMT_STATUS_INVALID_PARAMS);
5376 
5377 	hci_dev_lock(hdev);
5378 
5379 	if (!hdev_is_powered(hdev) || !lmp_sc_capable(hdev) ||
5380 	    !hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) {
5381 		bool changed;
5382 
5383 		if (cp->val) {
5384 			changed = !hci_dev_test_and_set_flag(hdev,
5385 							     HCI_SC_ENABLED);
5386 			if (cp->val == 0x02)
5387 				hci_dev_set_flag(hdev, HCI_SC_ONLY);
5388 			else
5389 				hci_dev_clear_flag(hdev, HCI_SC_ONLY);
5390 		} else {
5391 			changed = hci_dev_test_and_clear_flag(hdev,
5392 							      HCI_SC_ENABLED);
5393 			hci_dev_clear_flag(hdev, HCI_SC_ONLY);
5394 		}
5395 
5396 		err = send_settings_rsp(sk, MGMT_OP_SET_SECURE_CONN, hdev);
5397 		if (err < 0)
5398 			goto failed;
5399 
5400 		if (changed)
5401 			err = new_settings(hdev, sk);
5402 
5403 		goto failed;
5404 	}
5405 
5406 	if (pending_find(MGMT_OP_SET_SECURE_CONN, hdev)) {
5407 		err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_SECURE_CONN,
5408 				      MGMT_STATUS_BUSY);
5409 		goto failed;
5410 	}
5411 
5412 	val = !!cp->val;
5413 
5414 	if (val == hci_dev_test_flag(hdev, HCI_SC_ENABLED) &&
5415 	    (cp->val == 0x02) == hci_dev_test_flag(hdev, HCI_SC_ONLY)) {
5416 		err = send_settings_rsp(sk, MGMT_OP_SET_SECURE_CONN, hdev);
5417 		goto failed;
5418 	}
5419 
5420 	cmd = mgmt_pending_add(sk, MGMT_OP_SET_SECURE_CONN, hdev, data, len);
5421 	if (!cmd) {
5422 		err = -ENOMEM;
5423 		goto failed;
5424 	}
5425 
5426 	hci_req_init(&req, hdev);
5427 	hci_req_add(&req, HCI_OP_WRITE_SC_SUPPORT, 1, &val);
5428 	err = hci_req_run(&req, sc_enable_complete);
5429 	if (err < 0) {
5430 		mgmt_pending_remove(cmd);
5431 		goto failed;
5432 	}
5433 
5434 failed:
5435 	hci_dev_unlock(hdev);
5436 	return err;
5437 }
5438 
5439 static int set_debug_keys(struct sock *sk, struct hci_dev *hdev,
5440 			  void *data, u16 len)
5441 {
5442 	struct mgmt_mode *cp = data;
5443 	bool changed, use_changed;
5444 	int err;
5445 
5446 	BT_DBG("request for %s", hdev->name);
5447 
5448 	if (cp->val != 0x00 && cp->val != 0x01 && cp->val != 0x02)
5449 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_DEBUG_KEYS,
5450 				       MGMT_STATUS_INVALID_PARAMS);
5451 
5452 	hci_dev_lock(hdev);
5453 
5454 	if (cp->val)
5455 		changed = !hci_dev_test_and_set_flag(hdev, HCI_KEEP_DEBUG_KEYS);
5456 	else
5457 		changed = hci_dev_test_and_clear_flag(hdev,
5458 						      HCI_KEEP_DEBUG_KEYS);
5459 
5460 	if (cp->val == 0x02)
5461 		use_changed = !hci_dev_test_and_set_flag(hdev,
5462 							 HCI_USE_DEBUG_KEYS);
5463 	else
5464 		use_changed = hci_dev_test_and_clear_flag(hdev,
5465 							  HCI_USE_DEBUG_KEYS);
5466 
5467 	if (hdev_is_powered(hdev) && use_changed &&
5468 	    hci_dev_test_flag(hdev, HCI_SSP_ENABLED)) {
5469 		u8 mode = (cp->val == 0x02) ? 0x01 : 0x00;
5470 		hci_send_cmd(hdev, HCI_OP_WRITE_SSP_DEBUG_MODE,
5471 			     sizeof(mode), &mode);
5472 	}
5473 
5474 	err = send_settings_rsp(sk, MGMT_OP_SET_DEBUG_KEYS, hdev);
5475 	if (err < 0)
5476 		goto unlock;
5477 
5478 	if (changed)
5479 		err = new_settings(hdev, sk);
5480 
5481 unlock:
5482 	hci_dev_unlock(hdev);
5483 	return err;
5484 }
5485 
5486 static int set_privacy(struct sock *sk, struct hci_dev *hdev, void *cp_data,
5487 		       u16 len)
5488 {
5489 	struct mgmt_cp_set_privacy *cp = cp_data;
5490 	bool changed;
5491 	int err;
5492 
5493 	BT_DBG("request for %s", hdev->name);
5494 
5495 	if (!lmp_le_capable(hdev))
5496 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_PRIVACY,
5497 				       MGMT_STATUS_NOT_SUPPORTED);
5498 
5499 	if (cp->privacy != 0x00 && cp->privacy != 0x01)
5500 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_PRIVACY,
5501 				       MGMT_STATUS_INVALID_PARAMS);
5502 
5503 	if (hdev_is_powered(hdev))
5504 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_PRIVACY,
5505 				       MGMT_STATUS_REJECTED);
5506 
5507 	hci_dev_lock(hdev);
5508 
5509 	/* If user space supports this command it is also expected to
5510 	 * handle IRKs. Therefore, set the HCI_RPA_RESOLVING flag.
5511 	 */
5512 	hci_dev_set_flag(hdev, HCI_RPA_RESOLVING);
5513 
5514 	if (cp->privacy) {
5515 		changed = !hci_dev_test_and_set_flag(hdev, HCI_PRIVACY);
5516 		memcpy(hdev->irk, cp->irk, sizeof(hdev->irk));
5517 		hci_dev_set_flag(hdev, HCI_RPA_EXPIRED);
5518 	} else {
5519 		changed = hci_dev_test_and_clear_flag(hdev, HCI_PRIVACY);
5520 		memset(hdev->irk, 0, sizeof(hdev->irk));
5521 		hci_dev_clear_flag(hdev, HCI_RPA_EXPIRED);
5522 	}
5523 
5524 	err = send_settings_rsp(sk, MGMT_OP_SET_PRIVACY, hdev);
5525 	if (err < 0)
5526 		goto unlock;
5527 
5528 	if (changed)
5529 		err = new_settings(hdev, sk);
5530 
5531 unlock:
5532 	hci_dev_unlock(hdev);
5533 	return err;
5534 }
5535 
5536 static bool irk_is_valid(struct mgmt_irk_info *irk)
5537 {
5538 	switch (irk->addr.type) {
5539 	case BDADDR_LE_PUBLIC:
5540 		return true;
5541 
5542 	case BDADDR_LE_RANDOM:
5543 		/* Two most significant bits shall be set */
5544 		if ((irk->addr.bdaddr.b[5] & 0xc0) != 0xc0)
5545 			return false;
5546 		return true;
5547 	}
5548 
5549 	return false;
5550 }
5551 
5552 static int load_irks(struct sock *sk, struct hci_dev *hdev, void *cp_data,
5553 		     u16 len)
5554 {
5555 	struct mgmt_cp_load_irks *cp = cp_data;
5556 	const u16 max_irk_count = ((U16_MAX - sizeof(*cp)) /
5557 				   sizeof(struct mgmt_irk_info));
5558 	u16 irk_count, expected_len;
5559 	int i, err;
5560 
5561 	BT_DBG("request for %s", hdev->name);
5562 
5563 	if (!lmp_le_capable(hdev))
5564 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_LOAD_IRKS,
5565 				       MGMT_STATUS_NOT_SUPPORTED);
5566 
5567 	irk_count = __le16_to_cpu(cp->irk_count);
5568 	if (irk_count > max_irk_count) {
5569 		BT_ERR("load_irks: too big irk_count value %u", irk_count);
5570 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_LOAD_IRKS,
5571 				       MGMT_STATUS_INVALID_PARAMS);
5572 	}
5573 
5574 	expected_len = sizeof(*cp) + irk_count * sizeof(struct mgmt_irk_info);
5575 	if (expected_len != len) {
5576 		BT_ERR("load_irks: expected %u bytes, got %u bytes",
5577 		       expected_len, len);
5578 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_LOAD_IRKS,
5579 				       MGMT_STATUS_INVALID_PARAMS);
5580 	}
5581 
5582 	BT_DBG("%s irk_count %u", hdev->name, irk_count);
5583 
5584 	for (i = 0; i < irk_count; i++) {
5585 		struct mgmt_irk_info *key = &cp->irks[i];
5586 
5587 		if (!irk_is_valid(key))
5588 			return mgmt_cmd_status(sk, hdev->id,
5589 					       MGMT_OP_LOAD_IRKS,
5590 					       MGMT_STATUS_INVALID_PARAMS);
5591 	}
5592 
5593 	hci_dev_lock(hdev);
5594 
5595 	hci_smp_irks_clear(hdev);
5596 
5597 	for (i = 0; i < irk_count; i++) {
5598 		struct mgmt_irk_info *irk = &cp->irks[i];
5599 		u8 addr_type;
5600 
5601 		if (irk->addr.type == BDADDR_LE_PUBLIC)
5602 			addr_type = ADDR_LE_DEV_PUBLIC;
5603 		else
5604 			addr_type = ADDR_LE_DEV_RANDOM;
5605 
5606 		hci_add_irk(hdev, &irk->addr.bdaddr, addr_type, irk->val,
5607 			    BDADDR_ANY);
5608 	}
5609 
5610 	hci_dev_set_flag(hdev, HCI_RPA_RESOLVING);
5611 
5612 	err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_LOAD_IRKS, 0, NULL, 0);
5613 
5614 	hci_dev_unlock(hdev);
5615 
5616 	return err;
5617 }
5618 
5619 static bool ltk_is_valid(struct mgmt_ltk_info *key)
5620 {
5621 	if (key->master != 0x00 && key->master != 0x01)
5622 		return false;
5623 
5624 	switch (key->addr.type) {
5625 	case BDADDR_LE_PUBLIC:
5626 		return true;
5627 
5628 	case BDADDR_LE_RANDOM:
5629 		/* Two most significant bits shall be set */
5630 		if ((key->addr.bdaddr.b[5] & 0xc0) != 0xc0)
5631 			return false;
5632 		return true;
5633 	}
5634 
5635 	return false;
5636 }
5637 
5638 static int load_long_term_keys(struct sock *sk, struct hci_dev *hdev,
5639 			       void *cp_data, u16 len)
5640 {
5641 	struct mgmt_cp_load_long_term_keys *cp = cp_data;
5642 	const u16 max_key_count = ((U16_MAX - sizeof(*cp)) /
5643 				   sizeof(struct mgmt_ltk_info));
5644 	u16 key_count, expected_len;
5645 	int i, err;
5646 
5647 	BT_DBG("request for %s", hdev->name);
5648 
5649 	if (!lmp_le_capable(hdev))
5650 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_LOAD_LONG_TERM_KEYS,
5651 				       MGMT_STATUS_NOT_SUPPORTED);
5652 
5653 	key_count = __le16_to_cpu(cp->key_count);
5654 	if (key_count > max_key_count) {
5655 		BT_ERR("load_ltks: too big key_count value %u", key_count);
5656 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_LOAD_LONG_TERM_KEYS,
5657 				       MGMT_STATUS_INVALID_PARAMS);
5658 	}
5659 
5660 	expected_len = sizeof(*cp) + key_count *
5661 					sizeof(struct mgmt_ltk_info);
5662 	if (expected_len != len) {
5663 		BT_ERR("load_keys: expected %u bytes, got %u bytes",
5664 		       expected_len, len);
5665 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_LOAD_LONG_TERM_KEYS,
5666 				       MGMT_STATUS_INVALID_PARAMS);
5667 	}
5668 
5669 	BT_DBG("%s key_count %u", hdev->name, key_count);
5670 
5671 	for (i = 0; i < key_count; i++) {
5672 		struct mgmt_ltk_info *key = &cp->keys[i];
5673 
5674 		if (!ltk_is_valid(key))
5675 			return mgmt_cmd_status(sk, hdev->id,
5676 					       MGMT_OP_LOAD_LONG_TERM_KEYS,
5677 					       MGMT_STATUS_INVALID_PARAMS);
5678 	}
5679 
5680 	hci_dev_lock(hdev);
5681 
5682 	hci_smp_ltks_clear(hdev);
5683 
5684 	for (i = 0; i < key_count; i++) {
5685 		struct mgmt_ltk_info *key = &cp->keys[i];
5686 		u8 type, addr_type, authenticated;
5687 
5688 		if (key->addr.type == BDADDR_LE_PUBLIC)
5689 			addr_type = ADDR_LE_DEV_PUBLIC;
5690 		else
5691 			addr_type = ADDR_LE_DEV_RANDOM;
5692 
5693 		switch (key->type) {
5694 		case MGMT_LTK_UNAUTHENTICATED:
5695 			authenticated = 0x00;
5696 			type = key->master ? SMP_LTK : SMP_LTK_SLAVE;
5697 			break;
5698 		case MGMT_LTK_AUTHENTICATED:
5699 			authenticated = 0x01;
5700 			type = key->master ? SMP_LTK : SMP_LTK_SLAVE;
5701 			break;
5702 		case MGMT_LTK_P256_UNAUTH:
5703 			authenticated = 0x00;
5704 			type = SMP_LTK_P256;
5705 			break;
5706 		case MGMT_LTK_P256_AUTH:
5707 			authenticated = 0x01;
5708 			type = SMP_LTK_P256;
5709 			break;
5710 		case MGMT_LTK_P256_DEBUG:
5711 			authenticated = 0x00;
5712 			type = SMP_LTK_P256_DEBUG;
5713 		default:
5714 			continue;
5715 		}
5716 
5717 		hci_add_ltk(hdev, &key->addr.bdaddr, addr_type, type,
5718 			    authenticated, key->val, key->enc_size, key->ediv,
5719 			    key->rand);
5720 	}
5721 
5722 	err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_LOAD_LONG_TERM_KEYS, 0,
5723 			   NULL, 0);
5724 
5725 	hci_dev_unlock(hdev);
5726 
5727 	return err;
5728 }
5729 
5730 static int conn_info_cmd_complete(struct mgmt_pending_cmd *cmd, u8 status)
5731 {
5732 	struct hci_conn *conn = cmd->user_data;
5733 	struct mgmt_rp_get_conn_info rp;
5734 	int err;
5735 
5736 	memcpy(&rp.addr, cmd->param, sizeof(rp.addr));
5737 
5738 	if (status == MGMT_STATUS_SUCCESS) {
5739 		rp.rssi = conn->rssi;
5740 		rp.tx_power = conn->tx_power;
5741 		rp.max_tx_power = conn->max_tx_power;
5742 	} else {
5743 		rp.rssi = HCI_RSSI_INVALID;
5744 		rp.tx_power = HCI_TX_POWER_INVALID;
5745 		rp.max_tx_power = HCI_TX_POWER_INVALID;
5746 	}
5747 
5748 	err = mgmt_cmd_complete(cmd->sk, cmd->index, MGMT_OP_GET_CONN_INFO,
5749 				status, &rp, sizeof(rp));
5750 
5751 	hci_conn_drop(conn);
5752 	hci_conn_put(conn);
5753 
5754 	return err;
5755 }
5756 
5757 static void conn_info_refresh_complete(struct hci_dev *hdev, u8 hci_status,
5758 				       u16 opcode)
5759 {
5760 	struct hci_cp_read_rssi *cp;
5761 	struct mgmt_pending_cmd *cmd;
5762 	struct hci_conn *conn;
5763 	u16 handle;
5764 	u8 status;
5765 
5766 	BT_DBG("status 0x%02x", hci_status);
5767 
5768 	hci_dev_lock(hdev);
5769 
5770 	/* Commands sent in request are either Read RSSI or Read Transmit Power
5771 	 * Level so we check which one was last sent to retrieve connection
5772 	 * handle.  Both commands have handle as first parameter so it's safe to
5773 	 * cast data on the same command struct.
5774 	 *
5775 	 * First command sent is always Read RSSI and we fail only if it fails.
5776 	 * In other case we simply override error to indicate success as we
5777 	 * already remembered if TX power value is actually valid.
5778 	 */
5779 	cp = hci_sent_cmd_data(hdev, HCI_OP_READ_RSSI);
5780 	if (!cp) {
5781 		cp = hci_sent_cmd_data(hdev, HCI_OP_READ_TX_POWER);
5782 		status = MGMT_STATUS_SUCCESS;
5783 	} else {
5784 		status = mgmt_status(hci_status);
5785 	}
5786 
5787 	if (!cp) {
5788 		BT_ERR("invalid sent_cmd in conn_info response");
5789 		goto unlock;
5790 	}
5791 
5792 	handle = __le16_to_cpu(cp->handle);
5793 	conn = hci_conn_hash_lookup_handle(hdev, handle);
5794 	if (!conn) {
5795 		BT_ERR("unknown handle (%d) in conn_info response", handle);
5796 		goto unlock;
5797 	}
5798 
5799 	cmd = pending_find_data(MGMT_OP_GET_CONN_INFO, hdev, conn);
5800 	if (!cmd)
5801 		goto unlock;
5802 
5803 	cmd->cmd_complete(cmd, status);
5804 	mgmt_pending_remove(cmd);
5805 
5806 unlock:
5807 	hci_dev_unlock(hdev);
5808 }
5809 
5810 static int get_conn_info(struct sock *sk, struct hci_dev *hdev, void *data,
5811 			 u16 len)
5812 {
5813 	struct mgmt_cp_get_conn_info *cp = data;
5814 	struct mgmt_rp_get_conn_info rp;
5815 	struct hci_conn *conn;
5816 	unsigned long conn_info_age;
5817 	int err = 0;
5818 
5819 	BT_DBG("%s", hdev->name);
5820 
5821 	memset(&rp, 0, sizeof(rp));
5822 	bacpy(&rp.addr.bdaddr, &cp->addr.bdaddr);
5823 	rp.addr.type = cp->addr.type;
5824 
5825 	if (!bdaddr_type_is_valid(cp->addr.type))
5826 		return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_GET_CONN_INFO,
5827 					 MGMT_STATUS_INVALID_PARAMS,
5828 					 &rp, sizeof(rp));
5829 
5830 	hci_dev_lock(hdev);
5831 
5832 	if (!hdev_is_powered(hdev)) {
5833 		err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_GET_CONN_INFO,
5834 					MGMT_STATUS_NOT_POWERED, &rp,
5835 					sizeof(rp));
5836 		goto unlock;
5837 	}
5838 
5839 	if (cp->addr.type == BDADDR_BREDR)
5840 		conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK,
5841 					       &cp->addr.bdaddr);
5842 	else
5843 		conn = hci_conn_hash_lookup_ba(hdev, LE_LINK, &cp->addr.bdaddr);
5844 
5845 	if (!conn || conn->state != BT_CONNECTED) {
5846 		err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_GET_CONN_INFO,
5847 					MGMT_STATUS_NOT_CONNECTED, &rp,
5848 					sizeof(rp));
5849 		goto unlock;
5850 	}
5851 
5852 	if (pending_find_data(MGMT_OP_GET_CONN_INFO, hdev, conn)) {
5853 		err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_GET_CONN_INFO,
5854 					MGMT_STATUS_BUSY, &rp, sizeof(rp));
5855 		goto unlock;
5856 	}
5857 
5858 	/* To avoid client trying to guess when to poll again for information we
5859 	 * calculate conn info age as random value between min/max set in hdev.
5860 	 */
5861 	conn_info_age = hdev->conn_info_min_age +
5862 			prandom_u32_max(hdev->conn_info_max_age -
5863 					hdev->conn_info_min_age);
5864 
5865 	/* Query controller to refresh cached values if they are too old or were
5866 	 * never read.
5867 	 */
5868 	if (time_after(jiffies, conn->conn_info_timestamp +
5869 		       msecs_to_jiffies(conn_info_age)) ||
5870 	    !conn->conn_info_timestamp) {
5871 		struct hci_request req;
5872 		struct hci_cp_read_tx_power req_txp_cp;
5873 		struct hci_cp_read_rssi req_rssi_cp;
5874 		struct mgmt_pending_cmd *cmd;
5875 
5876 		hci_req_init(&req, hdev);
5877 		req_rssi_cp.handle = cpu_to_le16(conn->handle);
5878 		hci_req_add(&req, HCI_OP_READ_RSSI, sizeof(req_rssi_cp),
5879 			    &req_rssi_cp);
5880 
5881 		/* For LE links TX power does not change thus we don't need to
5882 		 * query for it once value is known.
5883 		 */
5884 		if (!bdaddr_type_is_le(cp->addr.type) ||
5885 		    conn->tx_power == HCI_TX_POWER_INVALID) {
5886 			req_txp_cp.handle = cpu_to_le16(conn->handle);
5887 			req_txp_cp.type = 0x00;
5888 			hci_req_add(&req, HCI_OP_READ_TX_POWER,
5889 				    sizeof(req_txp_cp), &req_txp_cp);
5890 		}
5891 
5892 		/* Max TX power needs to be read only once per connection */
5893 		if (conn->max_tx_power == HCI_TX_POWER_INVALID) {
5894 			req_txp_cp.handle = cpu_to_le16(conn->handle);
5895 			req_txp_cp.type = 0x01;
5896 			hci_req_add(&req, HCI_OP_READ_TX_POWER,
5897 				    sizeof(req_txp_cp), &req_txp_cp);
5898 		}
5899 
5900 		err = hci_req_run(&req, conn_info_refresh_complete);
5901 		if (err < 0)
5902 			goto unlock;
5903 
5904 		cmd = mgmt_pending_add(sk, MGMT_OP_GET_CONN_INFO, hdev,
5905 				       data, len);
5906 		if (!cmd) {
5907 			err = -ENOMEM;
5908 			goto unlock;
5909 		}
5910 
5911 		hci_conn_hold(conn);
5912 		cmd->user_data = hci_conn_get(conn);
5913 		cmd->cmd_complete = conn_info_cmd_complete;
5914 
5915 		conn->conn_info_timestamp = jiffies;
5916 	} else {
5917 		/* Cache is valid, just reply with values cached in hci_conn */
5918 		rp.rssi = conn->rssi;
5919 		rp.tx_power = conn->tx_power;
5920 		rp.max_tx_power = conn->max_tx_power;
5921 
5922 		err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_GET_CONN_INFO,
5923 					MGMT_STATUS_SUCCESS, &rp, sizeof(rp));
5924 	}
5925 
5926 unlock:
5927 	hci_dev_unlock(hdev);
5928 	return err;
5929 }
5930 
5931 static int clock_info_cmd_complete(struct mgmt_pending_cmd *cmd, u8 status)
5932 {
5933 	struct hci_conn *conn = cmd->user_data;
5934 	struct mgmt_rp_get_clock_info rp;
5935 	struct hci_dev *hdev;
5936 	int err;
5937 
5938 	memset(&rp, 0, sizeof(rp));
5939 	memcpy(&rp.addr, &cmd->param, sizeof(rp.addr));
5940 
5941 	if (status)
5942 		goto complete;
5943 
5944 	hdev = hci_dev_get(cmd->index);
5945 	if (hdev) {
5946 		rp.local_clock = cpu_to_le32(hdev->clock);
5947 		hci_dev_put(hdev);
5948 	}
5949 
5950 	if (conn) {
5951 		rp.piconet_clock = cpu_to_le32(conn->clock);
5952 		rp.accuracy = cpu_to_le16(conn->clock_accuracy);
5953 	}
5954 
5955 complete:
5956 	err = mgmt_cmd_complete(cmd->sk, cmd->index, cmd->opcode, status, &rp,
5957 				sizeof(rp));
5958 
5959 	if (conn) {
5960 		hci_conn_drop(conn);
5961 		hci_conn_put(conn);
5962 	}
5963 
5964 	return err;
5965 }
5966 
5967 static void get_clock_info_complete(struct hci_dev *hdev, u8 status, u16 opcode)
5968 {
5969 	struct hci_cp_read_clock *hci_cp;
5970 	struct mgmt_pending_cmd *cmd;
5971 	struct hci_conn *conn;
5972 
5973 	BT_DBG("%s status %u", hdev->name, status);
5974 
5975 	hci_dev_lock(hdev);
5976 
5977 	hci_cp = hci_sent_cmd_data(hdev, HCI_OP_READ_CLOCK);
5978 	if (!hci_cp)
5979 		goto unlock;
5980 
5981 	if (hci_cp->which) {
5982 		u16 handle = __le16_to_cpu(hci_cp->handle);
5983 		conn = hci_conn_hash_lookup_handle(hdev, handle);
5984 	} else {
5985 		conn = NULL;
5986 	}
5987 
5988 	cmd = pending_find_data(MGMT_OP_GET_CLOCK_INFO, hdev, conn);
5989 	if (!cmd)
5990 		goto unlock;
5991 
5992 	cmd->cmd_complete(cmd, mgmt_status(status));
5993 	mgmt_pending_remove(cmd);
5994 
5995 unlock:
5996 	hci_dev_unlock(hdev);
5997 }
5998 
5999 static int get_clock_info(struct sock *sk, struct hci_dev *hdev, void *data,
6000 			 u16 len)
6001 {
6002 	struct mgmt_cp_get_clock_info *cp = data;
6003 	struct mgmt_rp_get_clock_info rp;
6004 	struct hci_cp_read_clock hci_cp;
6005 	struct mgmt_pending_cmd *cmd;
6006 	struct hci_request req;
6007 	struct hci_conn *conn;
6008 	int err;
6009 
6010 	BT_DBG("%s", hdev->name);
6011 
6012 	memset(&rp, 0, sizeof(rp));
6013 	bacpy(&rp.addr.bdaddr, &cp->addr.bdaddr);
6014 	rp.addr.type = cp->addr.type;
6015 
6016 	if (cp->addr.type != BDADDR_BREDR)
6017 		return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_GET_CLOCK_INFO,
6018 					 MGMT_STATUS_INVALID_PARAMS,
6019 					 &rp, sizeof(rp));
6020 
6021 	hci_dev_lock(hdev);
6022 
6023 	if (!hdev_is_powered(hdev)) {
6024 		err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_GET_CLOCK_INFO,
6025 					MGMT_STATUS_NOT_POWERED, &rp,
6026 					sizeof(rp));
6027 		goto unlock;
6028 	}
6029 
6030 	if (bacmp(&cp->addr.bdaddr, BDADDR_ANY)) {
6031 		conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK,
6032 					       &cp->addr.bdaddr);
6033 		if (!conn || conn->state != BT_CONNECTED) {
6034 			err = mgmt_cmd_complete(sk, hdev->id,
6035 						MGMT_OP_GET_CLOCK_INFO,
6036 						MGMT_STATUS_NOT_CONNECTED,
6037 						&rp, sizeof(rp));
6038 			goto unlock;
6039 		}
6040 	} else {
6041 		conn = NULL;
6042 	}
6043 
6044 	cmd = mgmt_pending_add(sk, MGMT_OP_GET_CLOCK_INFO, hdev, data, len);
6045 	if (!cmd) {
6046 		err = -ENOMEM;
6047 		goto unlock;
6048 	}
6049 
6050 	cmd->cmd_complete = clock_info_cmd_complete;
6051 
6052 	hci_req_init(&req, hdev);
6053 
6054 	memset(&hci_cp, 0, sizeof(hci_cp));
6055 	hci_req_add(&req, HCI_OP_READ_CLOCK, sizeof(hci_cp), &hci_cp);
6056 
6057 	if (conn) {
6058 		hci_conn_hold(conn);
6059 		cmd->user_data = hci_conn_get(conn);
6060 
6061 		hci_cp.handle = cpu_to_le16(conn->handle);
6062 		hci_cp.which = 0x01; /* Piconet clock */
6063 		hci_req_add(&req, HCI_OP_READ_CLOCK, sizeof(hci_cp), &hci_cp);
6064 	}
6065 
6066 	err = hci_req_run(&req, get_clock_info_complete);
6067 	if (err < 0)
6068 		mgmt_pending_remove(cmd);
6069 
6070 unlock:
6071 	hci_dev_unlock(hdev);
6072 	return err;
6073 }
6074 
6075 static bool is_connected(struct hci_dev *hdev, bdaddr_t *addr, u8 type)
6076 {
6077 	struct hci_conn *conn;
6078 
6079 	conn = hci_conn_hash_lookup_ba(hdev, LE_LINK, addr);
6080 	if (!conn)
6081 		return false;
6082 
6083 	if (conn->dst_type != type)
6084 		return false;
6085 
6086 	if (conn->state != BT_CONNECTED)
6087 		return false;
6088 
6089 	return true;
6090 }
6091 
6092 /* This function requires the caller holds hdev->lock */
6093 static int hci_conn_params_set(struct hci_request *req, bdaddr_t *addr,
6094 			       u8 addr_type, u8 auto_connect)
6095 {
6096 	struct hci_dev *hdev = req->hdev;
6097 	struct hci_conn_params *params;
6098 
6099 	params = hci_conn_params_add(hdev, addr, addr_type);
6100 	if (!params)
6101 		return -EIO;
6102 
6103 	if (params->auto_connect == auto_connect)
6104 		return 0;
6105 
6106 	list_del_init(&params->action);
6107 
6108 	switch (auto_connect) {
6109 	case HCI_AUTO_CONN_DISABLED:
6110 	case HCI_AUTO_CONN_LINK_LOSS:
6111 		/* If auto connect is being disabled when we're trying to
6112 		 * connect to device, keep connecting.
6113 		 */
6114 		if (params->explicit_connect)
6115 			list_add(&params->action, &hdev->pend_le_conns);
6116 
6117 		__hci_update_background_scan(req);
6118 		break;
6119 	case HCI_AUTO_CONN_REPORT:
6120 		list_add(&params->action, &hdev->pend_le_reports);
6121 		__hci_update_background_scan(req);
6122 		break;
6123 	case HCI_AUTO_CONN_DIRECT:
6124 	case HCI_AUTO_CONN_ALWAYS:
6125 		if (!is_connected(hdev, addr, addr_type)) {
6126 			list_add(&params->action, &hdev->pend_le_conns);
6127 			__hci_update_background_scan(req);
6128 		}
6129 		break;
6130 	}
6131 
6132 	params->auto_connect = auto_connect;
6133 
6134 	BT_DBG("addr %pMR (type %u) auto_connect %u", addr, addr_type,
6135 	       auto_connect);
6136 
6137 	return 0;
6138 }
6139 
6140 static void device_added(struct sock *sk, struct hci_dev *hdev,
6141 			 bdaddr_t *bdaddr, u8 type, u8 action)
6142 {
6143 	struct mgmt_ev_device_added ev;
6144 
6145 	bacpy(&ev.addr.bdaddr, bdaddr);
6146 	ev.addr.type = type;
6147 	ev.action = action;
6148 
6149 	mgmt_event(MGMT_EV_DEVICE_ADDED, hdev, &ev, sizeof(ev), sk);
6150 }
6151 
6152 static void add_device_complete(struct hci_dev *hdev, u8 status, u16 opcode)
6153 {
6154 	struct mgmt_pending_cmd *cmd;
6155 
6156 	BT_DBG("status 0x%02x", status);
6157 
6158 	hci_dev_lock(hdev);
6159 
6160 	cmd = pending_find(MGMT_OP_ADD_DEVICE, hdev);
6161 	if (!cmd)
6162 		goto unlock;
6163 
6164 	cmd->cmd_complete(cmd, mgmt_status(status));
6165 	mgmt_pending_remove(cmd);
6166 
6167 unlock:
6168 	hci_dev_unlock(hdev);
6169 }
6170 
6171 static int add_device(struct sock *sk, struct hci_dev *hdev,
6172 		      void *data, u16 len)
6173 {
6174 	struct mgmt_cp_add_device *cp = data;
6175 	struct mgmt_pending_cmd *cmd;
6176 	struct hci_request req;
6177 	u8 auto_conn, addr_type;
6178 	int err;
6179 
6180 	BT_DBG("%s", hdev->name);
6181 
6182 	if (!bdaddr_type_is_valid(cp->addr.type) ||
6183 	    !bacmp(&cp->addr.bdaddr, BDADDR_ANY))
6184 		return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_ADD_DEVICE,
6185 					 MGMT_STATUS_INVALID_PARAMS,
6186 					 &cp->addr, sizeof(cp->addr));
6187 
6188 	if (cp->action != 0x00 && cp->action != 0x01 && cp->action != 0x02)
6189 		return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_ADD_DEVICE,
6190 					 MGMT_STATUS_INVALID_PARAMS,
6191 					 &cp->addr, sizeof(cp->addr));
6192 
6193 	hci_req_init(&req, hdev);
6194 
6195 	hci_dev_lock(hdev);
6196 
6197 	cmd = mgmt_pending_add(sk, MGMT_OP_ADD_DEVICE, hdev, data, len);
6198 	if (!cmd) {
6199 		err = -ENOMEM;
6200 		goto unlock;
6201 	}
6202 
6203 	cmd->cmd_complete = addr_cmd_complete;
6204 
6205 	if (cp->addr.type == BDADDR_BREDR) {
6206 		/* Only incoming connections action is supported for now */
6207 		if (cp->action != 0x01) {
6208 			err = cmd->cmd_complete(cmd,
6209 						MGMT_STATUS_INVALID_PARAMS);
6210 			mgmt_pending_remove(cmd);
6211 			goto unlock;
6212 		}
6213 
6214 		err = hci_bdaddr_list_add(&hdev->whitelist, &cp->addr.bdaddr,
6215 					  cp->addr.type);
6216 		if (err)
6217 			goto unlock;
6218 
6219 		__hci_update_page_scan(&req);
6220 
6221 		goto added;
6222 	}
6223 
6224 	if (cp->addr.type == BDADDR_LE_PUBLIC)
6225 		addr_type = ADDR_LE_DEV_PUBLIC;
6226 	else
6227 		addr_type = ADDR_LE_DEV_RANDOM;
6228 
6229 	if (cp->action == 0x02)
6230 		auto_conn = HCI_AUTO_CONN_ALWAYS;
6231 	else if (cp->action == 0x01)
6232 		auto_conn = HCI_AUTO_CONN_DIRECT;
6233 	else
6234 		auto_conn = HCI_AUTO_CONN_REPORT;
6235 
6236 	/* Kernel internally uses conn_params with resolvable private
6237 	 * address, but Add Device allows only identity addresses.
6238 	 * Make sure it is enforced before calling
6239 	 * hci_conn_params_lookup.
6240 	 */
6241 	if (!hci_is_identity_address(&cp->addr.bdaddr, addr_type)) {
6242 		err = cmd->cmd_complete(cmd, MGMT_STATUS_INVALID_PARAMS);
6243 		mgmt_pending_remove(cmd);
6244 		goto unlock;
6245 	}
6246 
6247 	/* If the connection parameters don't exist for this device,
6248 	 * they will be created and configured with defaults.
6249 	 */
6250 	if (hci_conn_params_set(&req, &cp->addr.bdaddr, addr_type,
6251 				auto_conn) < 0) {
6252 		err = cmd->cmd_complete(cmd, MGMT_STATUS_FAILED);
6253 		mgmt_pending_remove(cmd);
6254 		goto unlock;
6255 	}
6256 
6257 added:
6258 	device_added(sk, hdev, &cp->addr.bdaddr, cp->addr.type, cp->action);
6259 
6260 	err = hci_req_run(&req, add_device_complete);
6261 	if (err < 0) {
6262 		/* ENODATA means no HCI commands were needed (e.g. if
6263 		 * the adapter is powered off).
6264 		 */
6265 		if (err == -ENODATA)
6266 			err = cmd->cmd_complete(cmd, MGMT_STATUS_SUCCESS);
6267 		mgmt_pending_remove(cmd);
6268 	}
6269 
6270 unlock:
6271 	hci_dev_unlock(hdev);
6272 	return err;
6273 }
6274 
6275 static void device_removed(struct sock *sk, struct hci_dev *hdev,
6276 			   bdaddr_t *bdaddr, u8 type)
6277 {
6278 	struct mgmt_ev_device_removed ev;
6279 
6280 	bacpy(&ev.addr.bdaddr, bdaddr);
6281 	ev.addr.type = type;
6282 
6283 	mgmt_event(MGMT_EV_DEVICE_REMOVED, hdev, &ev, sizeof(ev), sk);
6284 }
6285 
6286 static void remove_device_complete(struct hci_dev *hdev, u8 status, u16 opcode)
6287 {
6288 	struct mgmt_pending_cmd *cmd;
6289 
6290 	BT_DBG("status 0x%02x", status);
6291 
6292 	hci_dev_lock(hdev);
6293 
6294 	cmd = pending_find(MGMT_OP_REMOVE_DEVICE, hdev);
6295 	if (!cmd)
6296 		goto unlock;
6297 
6298 	cmd->cmd_complete(cmd, mgmt_status(status));
6299 	mgmt_pending_remove(cmd);
6300 
6301 unlock:
6302 	hci_dev_unlock(hdev);
6303 }
6304 
6305 static int remove_device(struct sock *sk, struct hci_dev *hdev,
6306 			 void *data, u16 len)
6307 {
6308 	struct mgmt_cp_remove_device *cp = data;
6309 	struct mgmt_pending_cmd *cmd;
6310 	struct hci_request req;
6311 	int err;
6312 
6313 	BT_DBG("%s", hdev->name);
6314 
6315 	hci_req_init(&req, hdev);
6316 
6317 	hci_dev_lock(hdev);
6318 
6319 	cmd = mgmt_pending_add(sk, MGMT_OP_REMOVE_DEVICE, hdev, data, len);
6320 	if (!cmd) {
6321 		err = -ENOMEM;
6322 		goto unlock;
6323 	}
6324 
6325 	cmd->cmd_complete = addr_cmd_complete;
6326 
6327 	if (bacmp(&cp->addr.bdaddr, BDADDR_ANY)) {
6328 		struct hci_conn_params *params;
6329 		u8 addr_type;
6330 
6331 		if (!bdaddr_type_is_valid(cp->addr.type)) {
6332 			err = cmd->cmd_complete(cmd,
6333 						MGMT_STATUS_INVALID_PARAMS);
6334 			mgmt_pending_remove(cmd);
6335 			goto unlock;
6336 		}
6337 
6338 		if (cp->addr.type == BDADDR_BREDR) {
6339 			err = hci_bdaddr_list_del(&hdev->whitelist,
6340 						  &cp->addr.bdaddr,
6341 						  cp->addr.type);
6342 			if (err) {
6343 				err = cmd->cmd_complete(cmd,
6344 							MGMT_STATUS_INVALID_PARAMS);
6345 				mgmt_pending_remove(cmd);
6346 				goto unlock;
6347 			}
6348 
6349 			__hci_update_page_scan(&req);
6350 
6351 			device_removed(sk, hdev, &cp->addr.bdaddr,
6352 				       cp->addr.type);
6353 			goto complete;
6354 		}
6355 
6356 		if (cp->addr.type == BDADDR_LE_PUBLIC)
6357 			addr_type = ADDR_LE_DEV_PUBLIC;
6358 		else
6359 			addr_type = ADDR_LE_DEV_RANDOM;
6360 
6361 		/* Kernel internally uses conn_params with resolvable private
6362 		 * address, but Remove Device allows only identity addresses.
6363 		 * Make sure it is enforced before calling
6364 		 * hci_conn_params_lookup.
6365 		 */
6366 		if (!hci_is_identity_address(&cp->addr.bdaddr, addr_type)) {
6367 			err = cmd->cmd_complete(cmd,
6368 						MGMT_STATUS_INVALID_PARAMS);
6369 			mgmt_pending_remove(cmd);
6370 			goto unlock;
6371 		}
6372 
6373 		params = hci_conn_params_lookup(hdev, &cp->addr.bdaddr,
6374 						addr_type);
6375 		if (!params) {
6376 			err = cmd->cmd_complete(cmd,
6377 						MGMT_STATUS_INVALID_PARAMS);
6378 			mgmt_pending_remove(cmd);
6379 			goto unlock;
6380 		}
6381 
6382 		if (params->auto_connect == HCI_AUTO_CONN_DISABLED) {
6383 			err = cmd->cmd_complete(cmd,
6384 						MGMT_STATUS_INVALID_PARAMS);
6385 			mgmt_pending_remove(cmd);
6386 			goto unlock;
6387 		}
6388 
6389 		list_del(&params->action);
6390 		list_del(&params->list);
6391 		kfree(params);
6392 		__hci_update_background_scan(&req);
6393 
6394 		device_removed(sk, hdev, &cp->addr.bdaddr, cp->addr.type);
6395 	} else {
6396 		struct hci_conn_params *p, *tmp;
6397 		struct bdaddr_list *b, *btmp;
6398 
6399 		if (cp->addr.type) {
6400 			err = cmd->cmd_complete(cmd,
6401 						MGMT_STATUS_INVALID_PARAMS);
6402 			mgmt_pending_remove(cmd);
6403 			goto unlock;
6404 		}
6405 
6406 		list_for_each_entry_safe(b, btmp, &hdev->whitelist, list) {
6407 			device_removed(sk, hdev, &b->bdaddr, b->bdaddr_type);
6408 			list_del(&b->list);
6409 			kfree(b);
6410 		}
6411 
6412 		__hci_update_page_scan(&req);
6413 
6414 		list_for_each_entry_safe(p, tmp, &hdev->le_conn_params, list) {
6415 			if (p->auto_connect == HCI_AUTO_CONN_DISABLED)
6416 				continue;
6417 			device_removed(sk, hdev, &p->addr, p->addr_type);
6418 			list_del(&p->action);
6419 			list_del(&p->list);
6420 			kfree(p);
6421 		}
6422 
6423 		BT_DBG("All LE connection parameters were removed");
6424 
6425 		__hci_update_background_scan(&req);
6426 	}
6427 
6428 complete:
6429 	err = hci_req_run(&req, remove_device_complete);
6430 	if (err < 0) {
6431 		/* ENODATA means no HCI commands were needed (e.g. if
6432 		 * the adapter is powered off).
6433 		 */
6434 		if (err == -ENODATA)
6435 			err = cmd->cmd_complete(cmd, MGMT_STATUS_SUCCESS);
6436 		mgmt_pending_remove(cmd);
6437 	}
6438 
6439 unlock:
6440 	hci_dev_unlock(hdev);
6441 	return err;
6442 }
6443 
6444 static int load_conn_param(struct sock *sk, struct hci_dev *hdev, void *data,
6445 			   u16 len)
6446 {
6447 	struct mgmt_cp_load_conn_param *cp = data;
6448 	const u16 max_param_count = ((U16_MAX - sizeof(*cp)) /
6449 				     sizeof(struct mgmt_conn_param));
6450 	u16 param_count, expected_len;
6451 	int i;
6452 
6453 	if (!lmp_le_capable(hdev))
6454 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_LOAD_CONN_PARAM,
6455 				       MGMT_STATUS_NOT_SUPPORTED);
6456 
6457 	param_count = __le16_to_cpu(cp->param_count);
6458 	if (param_count > max_param_count) {
6459 		BT_ERR("load_conn_param: too big param_count value %u",
6460 		       param_count);
6461 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_LOAD_CONN_PARAM,
6462 				       MGMT_STATUS_INVALID_PARAMS);
6463 	}
6464 
6465 	expected_len = sizeof(*cp) + param_count *
6466 					sizeof(struct mgmt_conn_param);
6467 	if (expected_len != len) {
6468 		BT_ERR("load_conn_param: expected %u bytes, got %u bytes",
6469 		       expected_len, len);
6470 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_LOAD_CONN_PARAM,
6471 				       MGMT_STATUS_INVALID_PARAMS);
6472 	}
6473 
6474 	BT_DBG("%s param_count %u", hdev->name, param_count);
6475 
6476 	hci_dev_lock(hdev);
6477 
6478 	hci_conn_params_clear_disabled(hdev);
6479 
6480 	for (i = 0; i < param_count; i++) {
6481 		struct mgmt_conn_param *param = &cp->params[i];
6482 		struct hci_conn_params *hci_param;
6483 		u16 min, max, latency, timeout;
6484 		u8 addr_type;
6485 
6486 		BT_DBG("Adding %pMR (type %u)", &param->addr.bdaddr,
6487 		       param->addr.type);
6488 
6489 		if (param->addr.type == BDADDR_LE_PUBLIC) {
6490 			addr_type = ADDR_LE_DEV_PUBLIC;
6491 		} else if (param->addr.type == BDADDR_LE_RANDOM) {
6492 			addr_type = ADDR_LE_DEV_RANDOM;
6493 		} else {
6494 			BT_ERR("Ignoring invalid connection parameters");
6495 			continue;
6496 		}
6497 
6498 		min = le16_to_cpu(param->min_interval);
6499 		max = le16_to_cpu(param->max_interval);
6500 		latency = le16_to_cpu(param->latency);
6501 		timeout = le16_to_cpu(param->timeout);
6502 
6503 		BT_DBG("min 0x%04x max 0x%04x latency 0x%04x timeout 0x%04x",
6504 		       min, max, latency, timeout);
6505 
6506 		if (hci_check_conn_params(min, max, latency, timeout) < 0) {
6507 			BT_ERR("Ignoring invalid connection parameters");
6508 			continue;
6509 		}
6510 
6511 		hci_param = hci_conn_params_add(hdev, &param->addr.bdaddr,
6512 						addr_type);
6513 		if (!hci_param) {
6514 			BT_ERR("Failed to add connection parameters");
6515 			continue;
6516 		}
6517 
6518 		hci_param->conn_min_interval = min;
6519 		hci_param->conn_max_interval = max;
6520 		hci_param->conn_latency = latency;
6521 		hci_param->supervision_timeout = timeout;
6522 	}
6523 
6524 	hci_dev_unlock(hdev);
6525 
6526 	return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_LOAD_CONN_PARAM, 0,
6527 				 NULL, 0);
6528 }
6529 
6530 static int set_external_config(struct sock *sk, struct hci_dev *hdev,
6531 			       void *data, u16 len)
6532 {
6533 	struct mgmt_cp_set_external_config *cp = data;
6534 	bool changed;
6535 	int err;
6536 
6537 	BT_DBG("%s", hdev->name);
6538 
6539 	if (hdev_is_powered(hdev))
6540 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_EXTERNAL_CONFIG,
6541 				       MGMT_STATUS_REJECTED);
6542 
6543 	if (cp->config != 0x00 && cp->config != 0x01)
6544 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_EXTERNAL_CONFIG,
6545 				         MGMT_STATUS_INVALID_PARAMS);
6546 
6547 	if (!test_bit(HCI_QUIRK_EXTERNAL_CONFIG, &hdev->quirks))
6548 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_EXTERNAL_CONFIG,
6549 				       MGMT_STATUS_NOT_SUPPORTED);
6550 
6551 	hci_dev_lock(hdev);
6552 
6553 	if (cp->config)
6554 		changed = !hci_dev_test_and_set_flag(hdev, HCI_EXT_CONFIGURED);
6555 	else
6556 		changed = hci_dev_test_and_clear_flag(hdev, HCI_EXT_CONFIGURED);
6557 
6558 	err = send_options_rsp(sk, MGMT_OP_SET_EXTERNAL_CONFIG, hdev);
6559 	if (err < 0)
6560 		goto unlock;
6561 
6562 	if (!changed)
6563 		goto unlock;
6564 
6565 	err = new_options(hdev, sk);
6566 
6567 	if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED) == is_configured(hdev)) {
6568 		mgmt_index_removed(hdev);
6569 
6570 		if (hci_dev_test_and_change_flag(hdev, HCI_UNCONFIGURED)) {
6571 			hci_dev_set_flag(hdev, HCI_CONFIG);
6572 			hci_dev_set_flag(hdev, HCI_AUTO_OFF);
6573 
6574 			queue_work(hdev->req_workqueue, &hdev->power_on);
6575 		} else {
6576 			set_bit(HCI_RAW, &hdev->flags);
6577 			mgmt_index_added(hdev);
6578 		}
6579 	}
6580 
6581 unlock:
6582 	hci_dev_unlock(hdev);
6583 	return err;
6584 }
6585 
6586 static int set_public_address(struct sock *sk, struct hci_dev *hdev,
6587 			      void *data, u16 len)
6588 {
6589 	struct mgmt_cp_set_public_address *cp = data;
6590 	bool changed;
6591 	int err;
6592 
6593 	BT_DBG("%s", hdev->name);
6594 
6595 	if (hdev_is_powered(hdev))
6596 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_PUBLIC_ADDRESS,
6597 				       MGMT_STATUS_REJECTED);
6598 
6599 	if (!bacmp(&cp->bdaddr, BDADDR_ANY))
6600 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_PUBLIC_ADDRESS,
6601 				       MGMT_STATUS_INVALID_PARAMS);
6602 
6603 	if (!hdev->set_bdaddr)
6604 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_PUBLIC_ADDRESS,
6605 				       MGMT_STATUS_NOT_SUPPORTED);
6606 
6607 	hci_dev_lock(hdev);
6608 
6609 	changed = !!bacmp(&hdev->public_addr, &cp->bdaddr);
6610 	bacpy(&hdev->public_addr, &cp->bdaddr);
6611 
6612 	err = send_options_rsp(sk, MGMT_OP_SET_PUBLIC_ADDRESS, hdev);
6613 	if (err < 0)
6614 		goto unlock;
6615 
6616 	if (!changed)
6617 		goto unlock;
6618 
6619 	if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED))
6620 		err = new_options(hdev, sk);
6621 
6622 	if (is_configured(hdev)) {
6623 		mgmt_index_removed(hdev);
6624 
6625 		hci_dev_clear_flag(hdev, HCI_UNCONFIGURED);
6626 
6627 		hci_dev_set_flag(hdev, HCI_CONFIG);
6628 		hci_dev_set_flag(hdev, HCI_AUTO_OFF);
6629 
6630 		queue_work(hdev->req_workqueue, &hdev->power_on);
6631 	}
6632 
6633 unlock:
6634 	hci_dev_unlock(hdev);
6635 	return err;
6636 }
6637 
6638 static inline u16 eir_append_data(u8 *eir, u16 eir_len, u8 type, u8 *data,
6639 				  u8 data_len)
6640 {
6641 	eir[eir_len++] = sizeof(type) + data_len;
6642 	eir[eir_len++] = type;
6643 	memcpy(&eir[eir_len], data, data_len);
6644 	eir_len += data_len;
6645 
6646 	return eir_len;
6647 }
6648 
6649 static void read_local_oob_ext_data_complete(struct hci_dev *hdev, u8 status,
6650 					     u16 opcode, struct sk_buff *skb)
6651 {
6652 	const struct mgmt_cp_read_local_oob_ext_data *mgmt_cp;
6653 	struct mgmt_rp_read_local_oob_ext_data *mgmt_rp;
6654 	u8 *h192, *r192, *h256, *r256;
6655 	struct mgmt_pending_cmd *cmd;
6656 	u16 eir_len;
6657 	int err;
6658 
6659 	BT_DBG("%s status %u", hdev->name, status);
6660 
6661 	cmd = pending_find(MGMT_OP_READ_LOCAL_OOB_EXT_DATA, hdev);
6662 	if (!cmd)
6663 		return;
6664 
6665 	mgmt_cp = cmd->param;
6666 
6667 	if (status) {
6668 		status = mgmt_status(status);
6669 		eir_len = 0;
6670 
6671 		h192 = NULL;
6672 		r192 = NULL;
6673 		h256 = NULL;
6674 		r256 = NULL;
6675 	} else if (opcode == HCI_OP_READ_LOCAL_OOB_DATA) {
6676 		struct hci_rp_read_local_oob_data *rp;
6677 
6678 		if (skb->len != sizeof(*rp)) {
6679 			status = MGMT_STATUS_FAILED;
6680 			eir_len = 0;
6681 		} else {
6682 			status = MGMT_STATUS_SUCCESS;
6683 			rp = (void *)skb->data;
6684 
6685 			eir_len = 5 + 18 + 18;
6686 			h192 = rp->hash;
6687 			r192 = rp->rand;
6688 			h256 = NULL;
6689 			r256 = NULL;
6690 		}
6691 	} else {
6692 		struct hci_rp_read_local_oob_ext_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 			if (hci_dev_test_flag(hdev, HCI_SC_ONLY)) {
6702 				eir_len = 5 + 18 + 18;
6703 				h192 = NULL;
6704 				r192 = NULL;
6705 			} else {
6706 				eir_len = 5 + 18 + 18 + 18 + 18;
6707 				h192 = rp->hash192;
6708 				r192 = rp->rand192;
6709 			}
6710 
6711 			h256 = rp->hash256;
6712 			r256 = rp->rand256;
6713 		}
6714 	}
6715 
6716 	mgmt_rp = kmalloc(sizeof(*mgmt_rp) + eir_len, GFP_KERNEL);
6717 	if (!mgmt_rp)
6718 		goto done;
6719 
6720 	if (status)
6721 		goto send_rsp;
6722 
6723 	eir_len = eir_append_data(mgmt_rp->eir, 0, EIR_CLASS_OF_DEV,
6724 				  hdev->dev_class, 3);
6725 
6726 	if (h192 && r192) {
6727 		eir_len = eir_append_data(mgmt_rp->eir, eir_len,
6728 					  EIR_SSP_HASH_C192, h192, 16);
6729 		eir_len = eir_append_data(mgmt_rp->eir, eir_len,
6730 					  EIR_SSP_RAND_R192, r192, 16);
6731 	}
6732 
6733 	if (h256 && r256) {
6734 		eir_len = eir_append_data(mgmt_rp->eir, eir_len,
6735 					  EIR_SSP_HASH_C256, h256, 16);
6736 		eir_len = eir_append_data(mgmt_rp->eir, eir_len,
6737 					  EIR_SSP_RAND_R256, r256, 16);
6738 	}
6739 
6740 send_rsp:
6741 	mgmt_rp->type = mgmt_cp->type;
6742 	mgmt_rp->eir_len = cpu_to_le16(eir_len);
6743 
6744 	err = mgmt_cmd_complete(cmd->sk, hdev->id,
6745 				MGMT_OP_READ_LOCAL_OOB_EXT_DATA, status,
6746 				mgmt_rp, sizeof(*mgmt_rp) + eir_len);
6747 	if (err < 0 || status)
6748 		goto done;
6749 
6750 	hci_sock_set_flag(cmd->sk, HCI_MGMT_OOB_DATA_EVENTS);
6751 
6752 	err = mgmt_limited_event(MGMT_EV_LOCAL_OOB_DATA_UPDATED, hdev,
6753 				 mgmt_rp, sizeof(*mgmt_rp) + eir_len,
6754 				 HCI_MGMT_OOB_DATA_EVENTS, cmd->sk);
6755 done:
6756 	kfree(mgmt_rp);
6757 	mgmt_pending_remove(cmd);
6758 }
6759 
6760 static int read_local_ssp_oob_req(struct hci_dev *hdev, struct sock *sk,
6761 				  struct mgmt_cp_read_local_oob_ext_data *cp)
6762 {
6763 	struct mgmt_pending_cmd *cmd;
6764 	struct hci_request req;
6765 	int err;
6766 
6767 	cmd = mgmt_pending_add(sk, MGMT_OP_READ_LOCAL_OOB_EXT_DATA, hdev,
6768 			       cp, sizeof(*cp));
6769 	if (!cmd)
6770 		return -ENOMEM;
6771 
6772 	hci_req_init(&req, hdev);
6773 
6774 	if (bredr_sc_enabled(hdev))
6775 		hci_req_add(&req, HCI_OP_READ_LOCAL_OOB_EXT_DATA, 0, NULL);
6776 	else
6777 		hci_req_add(&req, HCI_OP_READ_LOCAL_OOB_DATA, 0, NULL);
6778 
6779 	err = hci_req_run_skb(&req, read_local_oob_ext_data_complete);
6780 	if (err < 0) {
6781 		mgmt_pending_remove(cmd);
6782 		return err;
6783 	}
6784 
6785 	return 0;
6786 }
6787 
6788 static int read_local_oob_ext_data(struct sock *sk, struct hci_dev *hdev,
6789 				   void *data, u16 data_len)
6790 {
6791 	struct mgmt_cp_read_local_oob_ext_data *cp = data;
6792 	struct mgmt_rp_read_local_oob_ext_data *rp;
6793 	size_t rp_len;
6794 	u16 eir_len;
6795 	u8 status, flags, role, addr[7], hash[16], rand[16];
6796 	int err;
6797 
6798 	BT_DBG("%s", hdev->name);
6799 
6800 	if (hdev_is_powered(hdev)) {
6801 		switch (cp->type) {
6802 		case BIT(BDADDR_BREDR):
6803 			status = mgmt_bredr_support(hdev);
6804 			if (status)
6805 				eir_len = 0;
6806 			else
6807 				eir_len = 5;
6808 			break;
6809 		case (BIT(BDADDR_LE_PUBLIC) | BIT(BDADDR_LE_RANDOM)):
6810 			status = mgmt_le_support(hdev);
6811 			if (status)
6812 				eir_len = 0;
6813 			else
6814 				eir_len = 9 + 3 + 18 + 18 + 3;
6815 			break;
6816 		default:
6817 			status = MGMT_STATUS_INVALID_PARAMS;
6818 			eir_len = 0;
6819 			break;
6820 		}
6821 	} else {
6822 		status = MGMT_STATUS_NOT_POWERED;
6823 		eir_len = 0;
6824 	}
6825 
6826 	rp_len = sizeof(*rp) + eir_len;
6827 	rp = kmalloc(rp_len, GFP_ATOMIC);
6828 	if (!rp)
6829 		return -ENOMEM;
6830 
6831 	if (status)
6832 		goto complete;
6833 
6834 	hci_dev_lock(hdev);
6835 
6836 	eir_len = 0;
6837 	switch (cp->type) {
6838 	case BIT(BDADDR_BREDR):
6839 		if (hci_dev_test_flag(hdev, HCI_SSP_ENABLED)) {
6840 			err = read_local_ssp_oob_req(hdev, sk, cp);
6841 			hci_dev_unlock(hdev);
6842 			if (!err)
6843 				goto done;
6844 
6845 			status = MGMT_STATUS_FAILED;
6846 			goto complete;
6847 		} else {
6848 			eir_len = eir_append_data(rp->eir, eir_len,
6849 						  EIR_CLASS_OF_DEV,
6850 						  hdev->dev_class, 3);
6851 		}
6852 		break;
6853 	case (BIT(BDADDR_LE_PUBLIC) | BIT(BDADDR_LE_RANDOM)):
6854 		if (hci_dev_test_flag(hdev, HCI_SC_ENABLED) &&
6855 		    smp_generate_oob(hdev, hash, rand) < 0) {
6856 			hci_dev_unlock(hdev);
6857 			status = MGMT_STATUS_FAILED;
6858 			goto complete;
6859 		}
6860 
6861 		/* This should return the active RPA, but since the RPA
6862 		 * is only programmed on demand, it is really hard to fill
6863 		 * this in at the moment. For now disallow retrieving
6864 		 * local out-of-band data when privacy is in use.
6865 		 *
6866 		 * Returning the identity address will not help here since
6867 		 * pairing happens before the identity resolving key is
6868 		 * known and thus the connection establishment happens
6869 		 * based on the RPA and not the identity address.
6870 		 */
6871 		if (hci_dev_test_flag(hdev, HCI_PRIVACY)) {
6872 			hci_dev_unlock(hdev);
6873 			status = MGMT_STATUS_REJECTED;
6874 			goto complete;
6875 		}
6876 
6877 		if (hci_dev_test_flag(hdev, HCI_FORCE_STATIC_ADDR) ||
6878 		   !bacmp(&hdev->bdaddr, BDADDR_ANY) ||
6879 		   (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED) &&
6880 		    bacmp(&hdev->static_addr, BDADDR_ANY))) {
6881 			memcpy(addr, &hdev->static_addr, 6);
6882 			addr[6] = 0x01;
6883 		} else {
6884 			memcpy(addr, &hdev->bdaddr, 6);
6885 			addr[6] = 0x00;
6886 		}
6887 
6888 		eir_len = eir_append_data(rp->eir, eir_len, EIR_LE_BDADDR,
6889 					  addr, sizeof(addr));
6890 
6891 		if (hci_dev_test_flag(hdev, HCI_ADVERTISING))
6892 			role = 0x02;
6893 		else
6894 			role = 0x01;
6895 
6896 		eir_len = eir_append_data(rp->eir, eir_len, EIR_LE_ROLE,
6897 					  &role, sizeof(role));
6898 
6899 		if (hci_dev_test_flag(hdev, HCI_SC_ENABLED)) {
6900 			eir_len = eir_append_data(rp->eir, eir_len,
6901 						  EIR_LE_SC_CONFIRM,
6902 						  hash, sizeof(hash));
6903 
6904 			eir_len = eir_append_data(rp->eir, eir_len,
6905 						  EIR_LE_SC_RANDOM,
6906 						  rand, sizeof(rand));
6907 		}
6908 
6909 		flags = get_adv_discov_flags(hdev);
6910 
6911 		if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED))
6912 			flags |= LE_AD_NO_BREDR;
6913 
6914 		eir_len = eir_append_data(rp->eir, eir_len, EIR_FLAGS,
6915 					  &flags, sizeof(flags));
6916 		break;
6917 	}
6918 
6919 	hci_dev_unlock(hdev);
6920 
6921 	hci_sock_set_flag(sk, HCI_MGMT_OOB_DATA_EVENTS);
6922 
6923 	status = MGMT_STATUS_SUCCESS;
6924 
6925 complete:
6926 	rp->type = cp->type;
6927 	rp->eir_len = cpu_to_le16(eir_len);
6928 
6929 	err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_READ_LOCAL_OOB_EXT_DATA,
6930 				status, rp, sizeof(*rp) + eir_len);
6931 	if (err < 0 || status)
6932 		goto done;
6933 
6934 	err = mgmt_limited_event(MGMT_EV_LOCAL_OOB_DATA_UPDATED, hdev,
6935 				 rp, sizeof(*rp) + eir_len,
6936 				 HCI_MGMT_OOB_DATA_EVENTS, sk);
6937 
6938 done:
6939 	kfree(rp);
6940 
6941 	return err;
6942 }
6943 
6944 static u32 get_supported_adv_flags(struct hci_dev *hdev)
6945 {
6946 	u32 flags = 0;
6947 
6948 	flags |= MGMT_ADV_FLAG_CONNECTABLE;
6949 	flags |= MGMT_ADV_FLAG_DISCOV;
6950 	flags |= MGMT_ADV_FLAG_LIMITED_DISCOV;
6951 	flags |= MGMT_ADV_FLAG_MANAGED_FLAGS;
6952 
6953 	if (hdev->adv_tx_power != HCI_TX_POWER_INVALID)
6954 		flags |= MGMT_ADV_FLAG_TX_POWER;
6955 
6956 	return flags;
6957 }
6958 
6959 static int read_adv_features(struct sock *sk, struct hci_dev *hdev,
6960 			     void *data, u16 data_len)
6961 {
6962 	struct mgmt_rp_read_adv_features *rp;
6963 	size_t rp_len;
6964 	int err, i;
6965 	bool instance;
6966 	struct adv_info *adv_instance;
6967 	u32 supported_flags;
6968 
6969 	BT_DBG("%s", hdev->name);
6970 
6971 	if (!lmp_le_capable(hdev))
6972 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_READ_ADV_FEATURES,
6973 				       MGMT_STATUS_REJECTED);
6974 
6975 	hci_dev_lock(hdev);
6976 
6977 	rp_len = sizeof(*rp);
6978 
6979 	instance = hci_dev_test_flag(hdev, HCI_ADVERTISING_INSTANCE);
6980 	if (instance)
6981 		rp_len += hdev->adv_instance_cnt;
6982 
6983 	rp = kmalloc(rp_len, GFP_ATOMIC);
6984 	if (!rp) {
6985 		hci_dev_unlock(hdev);
6986 		return -ENOMEM;
6987 	}
6988 
6989 	supported_flags = get_supported_adv_flags(hdev);
6990 
6991 	rp->supported_flags = cpu_to_le32(supported_flags);
6992 	rp->max_adv_data_len = HCI_MAX_AD_LENGTH;
6993 	rp->max_scan_rsp_len = HCI_MAX_AD_LENGTH;
6994 	rp->max_instances = HCI_MAX_ADV_INSTANCES;
6995 
6996 	if (instance) {
6997 		i = 0;
6998 		list_for_each_entry(adv_instance, &hdev->adv_instances, list) {
6999 			if (i >= hdev->adv_instance_cnt)
7000 				break;
7001 
7002 			rp->instance[i] = adv_instance->instance;
7003 			i++;
7004 		}
7005 		rp->num_instances = hdev->adv_instance_cnt;
7006 	} else {
7007 		rp->num_instances = 0;
7008 	}
7009 
7010 	hci_dev_unlock(hdev);
7011 
7012 	err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_READ_ADV_FEATURES,
7013 				MGMT_STATUS_SUCCESS, rp, rp_len);
7014 
7015 	kfree(rp);
7016 
7017 	return err;
7018 }
7019 
7020 static bool tlv_data_is_valid(struct hci_dev *hdev, u32 adv_flags, u8 *data,
7021 			      u8 len, bool is_adv_data)
7022 {
7023 	u8 max_len = HCI_MAX_AD_LENGTH;
7024 	int i, cur_len;
7025 	bool flags_managed = false;
7026 	bool tx_power_managed = false;
7027 	u32 flags_params = MGMT_ADV_FLAG_DISCOV | MGMT_ADV_FLAG_LIMITED_DISCOV |
7028 			   MGMT_ADV_FLAG_MANAGED_FLAGS;
7029 
7030 	if (is_adv_data && (adv_flags & flags_params)) {
7031 		flags_managed = true;
7032 		max_len -= 3;
7033 	}
7034 
7035 	if (is_adv_data && (adv_flags & MGMT_ADV_FLAG_TX_POWER)) {
7036 		tx_power_managed = true;
7037 		max_len -= 3;
7038 	}
7039 
7040 	if (len > max_len)
7041 		return false;
7042 
7043 	/* Make sure that the data is correctly formatted. */
7044 	for (i = 0, cur_len = 0; i < len; i += (cur_len + 1)) {
7045 		cur_len = data[i];
7046 
7047 		if (flags_managed && data[i + 1] == EIR_FLAGS)
7048 			return false;
7049 
7050 		if (tx_power_managed && data[i + 1] == EIR_TX_POWER)
7051 			return false;
7052 
7053 		/* If the current field length would exceed the total data
7054 		 * length, then it's invalid.
7055 		 */
7056 		if (i + cur_len >= len)
7057 			return false;
7058 	}
7059 
7060 	return true;
7061 }
7062 
7063 static void add_advertising_complete(struct hci_dev *hdev, u8 status,
7064 				     u16 opcode)
7065 {
7066 	struct mgmt_pending_cmd *cmd;
7067 	struct mgmt_cp_add_advertising *cp;
7068 	struct mgmt_rp_add_advertising rp;
7069 	struct adv_info *adv_instance, *n;
7070 	u8 instance;
7071 
7072 	BT_DBG("status %d", status);
7073 
7074 	hci_dev_lock(hdev);
7075 
7076 	cmd = pending_find(MGMT_OP_ADD_ADVERTISING, hdev);
7077 
7078 	if (status)
7079 		hci_dev_clear_flag(hdev, HCI_ADVERTISING_INSTANCE);
7080 
7081 	list_for_each_entry_safe(adv_instance, n, &hdev->adv_instances, list) {
7082 		if (!adv_instance->pending)
7083 			continue;
7084 
7085 		if (!status) {
7086 			adv_instance->pending = false;
7087 			continue;
7088 		}
7089 
7090 		instance = adv_instance->instance;
7091 
7092 		if (hdev->cur_adv_instance == instance)
7093 			cancel_adv_timeout(hdev);
7094 
7095 		hci_remove_adv_instance(hdev, instance);
7096 		advertising_removed(cmd ? cmd->sk : NULL, hdev, instance);
7097 	}
7098 
7099 	if (!cmd)
7100 		goto unlock;
7101 
7102 	cp = cmd->param;
7103 	rp.instance = cp->instance;
7104 
7105 	if (status)
7106 		mgmt_cmd_status(cmd->sk, cmd->index, cmd->opcode,
7107 				mgmt_status(status));
7108 	else
7109 		mgmt_cmd_complete(cmd->sk, cmd->index, cmd->opcode,
7110 				  mgmt_status(status), &rp, sizeof(rp));
7111 
7112 	mgmt_pending_remove(cmd);
7113 
7114 unlock:
7115 	hci_dev_unlock(hdev);
7116 }
7117 
7118 void mgmt_adv_timeout_expired(struct hci_dev *hdev)
7119 {
7120 	u8 instance;
7121 	struct hci_request req;
7122 
7123 	hdev->adv_instance_timeout = 0;
7124 
7125 	instance = get_current_adv_instance(hdev);
7126 	if (instance == 0x00)
7127 		return;
7128 
7129 	hci_dev_lock(hdev);
7130 	hci_req_init(&req, hdev);
7131 
7132 	clear_adv_instance(hdev, &req, instance, false);
7133 
7134 	if (list_empty(&hdev->adv_instances))
7135 		disable_advertising(&req);
7136 
7137 	if (!skb_queue_empty(&req.cmd_q))
7138 		hci_req_run(&req, NULL);
7139 
7140 	hci_dev_unlock(hdev);
7141 }
7142 
7143 static int add_advertising(struct sock *sk, struct hci_dev *hdev,
7144 			   void *data, u16 data_len)
7145 {
7146 	struct mgmt_cp_add_advertising *cp = data;
7147 	struct mgmt_rp_add_advertising rp;
7148 	u32 flags;
7149 	u32 supported_flags;
7150 	u8 status;
7151 	u16 timeout, duration;
7152 	unsigned int prev_instance_cnt = hdev->adv_instance_cnt;
7153 	u8 schedule_instance = 0;
7154 	struct adv_info *next_instance;
7155 	int err;
7156 	struct mgmt_pending_cmd *cmd;
7157 	struct hci_request req;
7158 
7159 	BT_DBG("%s", hdev->name);
7160 
7161 	status = mgmt_le_support(hdev);
7162 	if (status)
7163 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_ADD_ADVERTISING,
7164 				       status);
7165 
7166 	flags = __le32_to_cpu(cp->flags);
7167 	timeout = __le16_to_cpu(cp->timeout);
7168 	duration = __le16_to_cpu(cp->duration);
7169 
7170 	/* The current implementation only supports a subset of the specified
7171 	 * flags.
7172 	 */
7173 	supported_flags = get_supported_adv_flags(hdev);
7174 	if (flags & ~supported_flags)
7175 		return mgmt_cmd_status(sk, hdev->id, MGMT_OP_ADD_ADVERTISING,
7176 				       MGMT_STATUS_INVALID_PARAMS);
7177 
7178 	hci_dev_lock(hdev);
7179 
7180 	if (timeout && !hdev_is_powered(hdev)) {
7181 		err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_ADD_ADVERTISING,
7182 				      MGMT_STATUS_REJECTED);
7183 		goto unlock;
7184 	}
7185 
7186 	if (pending_find(MGMT_OP_ADD_ADVERTISING, hdev) ||
7187 	    pending_find(MGMT_OP_REMOVE_ADVERTISING, hdev) ||
7188 	    pending_find(MGMT_OP_SET_LE, hdev)) {
7189 		err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_ADD_ADVERTISING,
7190 				      MGMT_STATUS_BUSY);
7191 		goto unlock;
7192 	}
7193 
7194 	if (!tlv_data_is_valid(hdev, flags, cp->data, cp->adv_data_len, true) ||
7195 	    !tlv_data_is_valid(hdev, flags, cp->data + cp->adv_data_len,
7196 			       cp->scan_rsp_len, false)) {
7197 		err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_ADD_ADVERTISING,
7198 				      MGMT_STATUS_INVALID_PARAMS);
7199 		goto unlock;
7200 	}
7201 
7202 	err = hci_add_adv_instance(hdev, cp->instance, flags,
7203 				   cp->adv_data_len, cp->data,
7204 				   cp->scan_rsp_len,
7205 				   cp->data + cp->adv_data_len,
7206 				   timeout, duration);
7207 	if (err < 0) {
7208 		err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_ADD_ADVERTISING,
7209 				      MGMT_STATUS_FAILED);
7210 		goto unlock;
7211 	}
7212 
7213 	/* Only trigger an advertising added event if a new instance was
7214 	 * actually added.
7215 	 */
7216 	if (hdev->adv_instance_cnt > prev_instance_cnt)
7217 		advertising_added(sk, hdev, cp->instance);
7218 
7219 	hci_dev_set_flag(hdev, HCI_ADVERTISING_INSTANCE);
7220 
7221 	if (hdev->cur_adv_instance == cp->instance) {
7222 		/* If the currently advertised instance is being changed then
7223 		 * cancel the current advertising and schedule the next
7224 		 * instance. If there is only one instance then the overridden
7225 		 * advertising data will be visible right away.
7226 		 */
7227 		cancel_adv_timeout(hdev);
7228 
7229 		next_instance = hci_get_next_instance(hdev, cp->instance);
7230 		if (next_instance)
7231 			schedule_instance = next_instance->instance;
7232 	} else if (!hdev->adv_instance_timeout) {
7233 		/* Immediately advertise the new instance if no other
7234 		 * instance is currently being advertised.
7235 		 */
7236 		schedule_instance = cp->instance;
7237 	}
7238 
7239 	/* If the HCI_ADVERTISING flag is set or the device isn't powered or
7240 	 * there is no instance to be advertised then we have no HCI
7241 	 * communication to make. Simply return.
7242 	 */
7243 	if (!hdev_is_powered(hdev) ||
7244 	    hci_dev_test_flag(hdev, HCI_ADVERTISING) ||
7245 	    !schedule_instance) {
7246 		rp.instance = cp->instance;
7247 		err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_ADD_ADVERTISING,
7248 					MGMT_STATUS_SUCCESS, &rp, sizeof(rp));
7249 		goto unlock;
7250 	}
7251 
7252 	/* We're good to go, update advertising data, parameters, and start
7253 	 * advertising.
7254 	 */
7255 	cmd = mgmt_pending_add(sk, MGMT_OP_ADD_ADVERTISING, hdev, data,
7256 			       data_len);
7257 	if (!cmd) {
7258 		err = -ENOMEM;
7259 		goto unlock;
7260 	}
7261 
7262 	hci_req_init(&req, hdev);
7263 
7264 	err = schedule_adv_instance(&req, schedule_instance, true);
7265 
7266 	if (!err)
7267 		err = hci_req_run(&req, add_advertising_complete);
7268 
7269 	if (err < 0)
7270 		mgmt_pending_remove(cmd);
7271 
7272 unlock:
7273 	hci_dev_unlock(hdev);
7274 
7275 	return err;
7276 }
7277 
7278 static void remove_advertising_complete(struct hci_dev *hdev, u8 status,
7279 					u16 opcode)
7280 {
7281 	struct mgmt_pending_cmd *cmd;
7282 	struct mgmt_cp_remove_advertising *cp;
7283 	struct mgmt_rp_remove_advertising rp;
7284 
7285 	BT_DBG("status %d", status);
7286 
7287 	hci_dev_lock(hdev);
7288 
7289 	/* A failure status here only means that we failed to disable
7290 	 * advertising. Otherwise, the advertising instance has been removed,
7291 	 * so report success.
7292 	 */
7293 	cmd = pending_find(MGMT_OP_REMOVE_ADVERTISING, hdev);
7294 	if (!cmd)
7295 		goto unlock;
7296 
7297 	cp = cmd->param;
7298 	rp.instance = cp->instance;
7299 
7300 	mgmt_cmd_complete(cmd->sk, cmd->index, cmd->opcode, MGMT_STATUS_SUCCESS,
7301 			  &rp, sizeof(rp));
7302 	mgmt_pending_remove(cmd);
7303 
7304 unlock:
7305 	hci_dev_unlock(hdev);
7306 }
7307 
7308 static int remove_advertising(struct sock *sk, struct hci_dev *hdev,
7309 			      void *data, u16 data_len)
7310 {
7311 	struct mgmt_cp_remove_advertising *cp = data;
7312 	struct mgmt_rp_remove_advertising rp;
7313 	struct mgmt_pending_cmd *cmd;
7314 	struct hci_request req;
7315 	int err;
7316 
7317 	BT_DBG("%s", hdev->name);
7318 
7319 	hci_dev_lock(hdev);
7320 
7321 	if (cp->instance && !hci_find_adv_instance(hdev, cp->instance)) {
7322 		err = mgmt_cmd_status(sk, hdev->id,
7323 				      MGMT_OP_REMOVE_ADVERTISING,
7324 				      MGMT_STATUS_INVALID_PARAMS);
7325 		goto unlock;
7326 	}
7327 
7328 	if (pending_find(MGMT_OP_ADD_ADVERTISING, hdev) ||
7329 	    pending_find(MGMT_OP_REMOVE_ADVERTISING, hdev) ||
7330 	    pending_find(MGMT_OP_SET_LE, hdev)) {
7331 		err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_REMOVE_ADVERTISING,
7332 				      MGMT_STATUS_BUSY);
7333 		goto unlock;
7334 	}
7335 
7336 	if (!hci_dev_test_flag(hdev, HCI_ADVERTISING_INSTANCE)) {
7337 		err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_REMOVE_ADVERTISING,
7338 				      MGMT_STATUS_INVALID_PARAMS);
7339 		goto unlock;
7340 	}
7341 
7342 	hci_req_init(&req, hdev);
7343 
7344 	clear_adv_instance(hdev, &req, cp->instance, true);
7345 
7346 	if (list_empty(&hdev->adv_instances))
7347 		disable_advertising(&req);
7348 
7349 	/* If no HCI commands have been collected so far or the HCI_ADVERTISING
7350 	 * flag is set or the device isn't powered then we have no HCI
7351 	 * communication to make. Simply return.
7352 	 */
7353 	if (skb_queue_empty(&req.cmd_q) ||
7354 	    !hdev_is_powered(hdev) ||
7355 	    hci_dev_test_flag(hdev, HCI_ADVERTISING)) {
7356 		rp.instance = cp->instance;
7357 		err = mgmt_cmd_complete(sk, hdev->id,
7358 					MGMT_OP_REMOVE_ADVERTISING,
7359 					MGMT_STATUS_SUCCESS, &rp, sizeof(rp));
7360 		goto unlock;
7361 	}
7362 
7363 	cmd = mgmt_pending_add(sk, MGMT_OP_REMOVE_ADVERTISING, hdev, data,
7364 			       data_len);
7365 	if (!cmd) {
7366 		err = -ENOMEM;
7367 		goto unlock;
7368 	}
7369 
7370 	err = hci_req_run(&req, remove_advertising_complete);
7371 	if (err < 0)
7372 		mgmt_pending_remove(cmd);
7373 
7374 unlock:
7375 	hci_dev_unlock(hdev);
7376 
7377 	return err;
7378 }
7379 
7380 static const struct hci_mgmt_handler mgmt_handlers[] = {
7381 	{ NULL }, /* 0x0000 (no command) */
7382 	{ read_version,            MGMT_READ_VERSION_SIZE,
7383 						HCI_MGMT_NO_HDEV |
7384 						HCI_MGMT_UNTRUSTED },
7385 	{ read_commands,           MGMT_READ_COMMANDS_SIZE,
7386 						HCI_MGMT_NO_HDEV |
7387 						HCI_MGMT_UNTRUSTED },
7388 	{ read_index_list,         MGMT_READ_INDEX_LIST_SIZE,
7389 						HCI_MGMT_NO_HDEV |
7390 						HCI_MGMT_UNTRUSTED },
7391 	{ read_controller_info,    MGMT_READ_INFO_SIZE,
7392 						HCI_MGMT_UNTRUSTED },
7393 	{ set_powered,             MGMT_SETTING_SIZE },
7394 	{ set_discoverable,        MGMT_SET_DISCOVERABLE_SIZE },
7395 	{ set_connectable,         MGMT_SETTING_SIZE },
7396 	{ set_fast_connectable,    MGMT_SETTING_SIZE },
7397 	{ set_bondable,            MGMT_SETTING_SIZE },
7398 	{ set_link_security,       MGMT_SETTING_SIZE },
7399 	{ set_ssp,                 MGMT_SETTING_SIZE },
7400 	{ set_hs,                  MGMT_SETTING_SIZE },
7401 	{ set_le,                  MGMT_SETTING_SIZE },
7402 	{ set_dev_class,           MGMT_SET_DEV_CLASS_SIZE },
7403 	{ set_local_name,          MGMT_SET_LOCAL_NAME_SIZE },
7404 	{ add_uuid,                MGMT_ADD_UUID_SIZE },
7405 	{ remove_uuid,             MGMT_REMOVE_UUID_SIZE },
7406 	{ load_link_keys,          MGMT_LOAD_LINK_KEYS_SIZE,
7407 						HCI_MGMT_VAR_LEN },
7408 	{ load_long_term_keys,     MGMT_LOAD_LONG_TERM_KEYS_SIZE,
7409 						HCI_MGMT_VAR_LEN },
7410 	{ disconnect,              MGMT_DISCONNECT_SIZE },
7411 	{ get_connections,         MGMT_GET_CONNECTIONS_SIZE },
7412 	{ pin_code_reply,          MGMT_PIN_CODE_REPLY_SIZE },
7413 	{ pin_code_neg_reply,      MGMT_PIN_CODE_NEG_REPLY_SIZE },
7414 	{ set_io_capability,       MGMT_SET_IO_CAPABILITY_SIZE },
7415 	{ pair_device,             MGMT_PAIR_DEVICE_SIZE },
7416 	{ cancel_pair_device,      MGMT_CANCEL_PAIR_DEVICE_SIZE },
7417 	{ unpair_device,           MGMT_UNPAIR_DEVICE_SIZE },
7418 	{ user_confirm_reply,      MGMT_USER_CONFIRM_REPLY_SIZE },
7419 	{ user_confirm_neg_reply,  MGMT_USER_CONFIRM_NEG_REPLY_SIZE },
7420 	{ user_passkey_reply,      MGMT_USER_PASSKEY_REPLY_SIZE },
7421 	{ user_passkey_neg_reply,  MGMT_USER_PASSKEY_NEG_REPLY_SIZE },
7422 	{ read_local_oob_data,     MGMT_READ_LOCAL_OOB_DATA_SIZE },
7423 	{ add_remote_oob_data,     MGMT_ADD_REMOTE_OOB_DATA_SIZE,
7424 						HCI_MGMT_VAR_LEN },
7425 	{ remove_remote_oob_data,  MGMT_REMOVE_REMOTE_OOB_DATA_SIZE },
7426 	{ start_discovery,         MGMT_START_DISCOVERY_SIZE },
7427 	{ stop_discovery,          MGMT_STOP_DISCOVERY_SIZE },
7428 	{ confirm_name,            MGMT_CONFIRM_NAME_SIZE },
7429 	{ block_device,            MGMT_BLOCK_DEVICE_SIZE },
7430 	{ unblock_device,          MGMT_UNBLOCK_DEVICE_SIZE },
7431 	{ set_device_id,           MGMT_SET_DEVICE_ID_SIZE },
7432 	{ set_advertising,         MGMT_SETTING_SIZE },
7433 	{ set_bredr,               MGMT_SETTING_SIZE },
7434 	{ set_static_address,      MGMT_SET_STATIC_ADDRESS_SIZE },
7435 	{ set_scan_params,         MGMT_SET_SCAN_PARAMS_SIZE },
7436 	{ set_secure_conn,         MGMT_SETTING_SIZE },
7437 	{ set_debug_keys,          MGMT_SETTING_SIZE },
7438 	{ set_privacy,             MGMT_SET_PRIVACY_SIZE },
7439 	{ load_irks,               MGMT_LOAD_IRKS_SIZE,
7440 						HCI_MGMT_VAR_LEN },
7441 	{ get_conn_info,           MGMT_GET_CONN_INFO_SIZE },
7442 	{ get_clock_info,          MGMT_GET_CLOCK_INFO_SIZE },
7443 	{ add_device,              MGMT_ADD_DEVICE_SIZE },
7444 	{ remove_device,           MGMT_REMOVE_DEVICE_SIZE },
7445 	{ load_conn_param,         MGMT_LOAD_CONN_PARAM_SIZE,
7446 						HCI_MGMT_VAR_LEN },
7447 	{ read_unconf_index_list,  MGMT_READ_UNCONF_INDEX_LIST_SIZE,
7448 						HCI_MGMT_NO_HDEV |
7449 						HCI_MGMT_UNTRUSTED },
7450 	{ read_config_info,        MGMT_READ_CONFIG_INFO_SIZE,
7451 						HCI_MGMT_UNCONFIGURED |
7452 						HCI_MGMT_UNTRUSTED },
7453 	{ set_external_config,     MGMT_SET_EXTERNAL_CONFIG_SIZE,
7454 						HCI_MGMT_UNCONFIGURED },
7455 	{ set_public_address,      MGMT_SET_PUBLIC_ADDRESS_SIZE,
7456 						HCI_MGMT_UNCONFIGURED },
7457 	{ start_service_discovery, MGMT_START_SERVICE_DISCOVERY_SIZE,
7458 						HCI_MGMT_VAR_LEN },
7459 	{ read_local_oob_ext_data, MGMT_READ_LOCAL_OOB_EXT_DATA_SIZE },
7460 	{ read_ext_index_list,     MGMT_READ_EXT_INDEX_LIST_SIZE,
7461 						HCI_MGMT_NO_HDEV |
7462 						HCI_MGMT_UNTRUSTED },
7463 	{ read_adv_features,       MGMT_READ_ADV_FEATURES_SIZE },
7464 	{ add_advertising,	   MGMT_ADD_ADVERTISING_SIZE,
7465 						HCI_MGMT_VAR_LEN },
7466 	{ remove_advertising,	   MGMT_REMOVE_ADVERTISING_SIZE },
7467 };
7468 
7469 void mgmt_index_added(struct hci_dev *hdev)
7470 {
7471 	struct mgmt_ev_ext_index ev;
7472 
7473 	if (test_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks))
7474 		return;
7475 
7476 	switch (hdev->dev_type) {
7477 	case HCI_BREDR:
7478 		if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED)) {
7479 			mgmt_index_event(MGMT_EV_UNCONF_INDEX_ADDED, hdev,
7480 					 NULL, 0, HCI_MGMT_UNCONF_INDEX_EVENTS);
7481 			ev.type = 0x01;
7482 		} else {
7483 			mgmt_index_event(MGMT_EV_INDEX_ADDED, hdev, NULL, 0,
7484 					 HCI_MGMT_INDEX_EVENTS);
7485 			ev.type = 0x00;
7486 		}
7487 		break;
7488 	case HCI_AMP:
7489 		ev.type = 0x02;
7490 		break;
7491 	default:
7492 		return;
7493 	}
7494 
7495 	ev.bus = hdev->bus;
7496 
7497 	mgmt_index_event(MGMT_EV_EXT_INDEX_ADDED, hdev, &ev, sizeof(ev),
7498 			 HCI_MGMT_EXT_INDEX_EVENTS);
7499 }
7500 
7501 void mgmt_index_removed(struct hci_dev *hdev)
7502 {
7503 	struct mgmt_ev_ext_index ev;
7504 	u8 status = MGMT_STATUS_INVALID_INDEX;
7505 
7506 	if (test_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks))
7507 		return;
7508 
7509 	switch (hdev->dev_type) {
7510 	case HCI_BREDR:
7511 		mgmt_pending_foreach(0, hdev, cmd_complete_rsp, &status);
7512 
7513 		if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED)) {
7514 			mgmt_index_event(MGMT_EV_UNCONF_INDEX_REMOVED, hdev,
7515 					 NULL, 0, HCI_MGMT_UNCONF_INDEX_EVENTS);
7516 			ev.type = 0x01;
7517 		} else {
7518 			mgmt_index_event(MGMT_EV_INDEX_REMOVED, hdev, NULL, 0,
7519 					 HCI_MGMT_INDEX_EVENTS);
7520 			ev.type = 0x00;
7521 		}
7522 		break;
7523 	case HCI_AMP:
7524 		ev.type = 0x02;
7525 		break;
7526 	default:
7527 		return;
7528 	}
7529 
7530 	ev.bus = hdev->bus;
7531 
7532 	mgmt_index_event(MGMT_EV_EXT_INDEX_REMOVED, hdev, &ev, sizeof(ev),
7533 			 HCI_MGMT_EXT_INDEX_EVENTS);
7534 }
7535 
7536 /* This function requires the caller holds hdev->lock */
7537 static void restart_le_actions(struct hci_request *req)
7538 {
7539 	struct hci_dev *hdev = req->hdev;
7540 	struct hci_conn_params *p;
7541 
7542 	list_for_each_entry(p, &hdev->le_conn_params, list) {
7543 		/* Needed for AUTO_OFF case where might not "really"
7544 		 * have been powered off.
7545 		 */
7546 		list_del_init(&p->action);
7547 
7548 		switch (p->auto_connect) {
7549 		case HCI_AUTO_CONN_DIRECT:
7550 		case HCI_AUTO_CONN_ALWAYS:
7551 			list_add(&p->action, &hdev->pend_le_conns);
7552 			break;
7553 		case HCI_AUTO_CONN_REPORT:
7554 			list_add(&p->action, &hdev->pend_le_reports);
7555 			break;
7556 		default:
7557 			break;
7558 		}
7559 	}
7560 
7561 	__hci_update_background_scan(req);
7562 }
7563 
7564 static void powered_complete(struct hci_dev *hdev, u8 status, u16 opcode)
7565 {
7566 	struct cmd_lookup match = { NULL, hdev };
7567 
7568 	BT_DBG("status 0x%02x", status);
7569 
7570 	if (!status) {
7571 		/* Register the available SMP channels (BR/EDR and LE) only
7572 		 * when successfully powering on the controller. This late
7573 		 * registration is required so that LE SMP can clearly
7574 		 * decide if the public address or static address is used.
7575 		 */
7576 		smp_register(hdev);
7577 	}
7578 
7579 	hci_dev_lock(hdev);
7580 
7581 	mgmt_pending_foreach(MGMT_OP_SET_POWERED, hdev, settings_rsp, &match);
7582 
7583 	new_settings(hdev, match.sk);
7584 
7585 	hci_dev_unlock(hdev);
7586 
7587 	if (match.sk)
7588 		sock_put(match.sk);
7589 }
7590 
7591 static int powered_update_hci(struct hci_dev *hdev)
7592 {
7593 	struct hci_request req;
7594 	struct adv_info *adv_instance;
7595 	u8 link_sec;
7596 
7597 	hci_req_init(&req, hdev);
7598 
7599 	if (hci_dev_test_flag(hdev, HCI_SSP_ENABLED) &&
7600 	    !lmp_host_ssp_capable(hdev)) {
7601 		u8 mode = 0x01;
7602 
7603 		hci_req_add(&req, HCI_OP_WRITE_SSP_MODE, sizeof(mode), &mode);
7604 
7605 		if (bredr_sc_enabled(hdev) && !lmp_host_sc_capable(hdev)) {
7606 			u8 support = 0x01;
7607 
7608 			hci_req_add(&req, HCI_OP_WRITE_SC_SUPPORT,
7609 				    sizeof(support), &support);
7610 		}
7611 	}
7612 
7613 	if (hci_dev_test_flag(hdev, HCI_LE_ENABLED) &&
7614 	    lmp_bredr_capable(hdev)) {
7615 		struct hci_cp_write_le_host_supported cp;
7616 
7617 		cp.le = 0x01;
7618 		cp.simul = 0x00;
7619 
7620 		/* Check first if we already have the right
7621 		 * host state (host features set)
7622 		 */
7623 		if (cp.le != lmp_host_le_capable(hdev) ||
7624 		    cp.simul != lmp_host_le_br_capable(hdev))
7625 			hci_req_add(&req, HCI_OP_WRITE_LE_HOST_SUPPORTED,
7626 				    sizeof(cp), &cp);
7627 	}
7628 
7629 	if (lmp_le_capable(hdev)) {
7630 		/* Make sure the controller has a good default for
7631 		 * advertising data. This also applies to the case
7632 		 * where BR/EDR was toggled during the AUTO_OFF phase.
7633 		 */
7634 		if (hci_dev_test_flag(hdev, HCI_LE_ENABLED) &&
7635 		    (hci_dev_test_flag(hdev, HCI_ADVERTISING) ||
7636 		     !hci_dev_test_flag(hdev, HCI_ADVERTISING_INSTANCE))) {
7637 			update_adv_data(&req);
7638 			update_scan_rsp_data(&req);
7639 		}
7640 
7641 		if (hci_dev_test_flag(hdev, HCI_ADVERTISING_INSTANCE) &&
7642 		    hdev->cur_adv_instance == 0x00 &&
7643 		    !list_empty(&hdev->adv_instances)) {
7644 			adv_instance = list_first_entry(&hdev->adv_instances,
7645 							struct adv_info, list);
7646 			hdev->cur_adv_instance = adv_instance->instance;
7647 		}
7648 
7649 		if (hci_dev_test_flag(hdev, HCI_ADVERTISING))
7650 			enable_advertising(&req);
7651 		else if (hci_dev_test_flag(hdev, HCI_ADVERTISING_INSTANCE) &&
7652 			 hdev->cur_adv_instance)
7653 			schedule_adv_instance(&req, hdev->cur_adv_instance,
7654 					      true);
7655 
7656 		restart_le_actions(&req);
7657 	}
7658 
7659 	link_sec = hci_dev_test_flag(hdev, HCI_LINK_SECURITY);
7660 	if (link_sec != test_bit(HCI_AUTH, &hdev->flags))
7661 		hci_req_add(&req, HCI_OP_WRITE_AUTH_ENABLE,
7662 			    sizeof(link_sec), &link_sec);
7663 
7664 	if (lmp_bredr_capable(hdev)) {
7665 		if (hci_dev_test_flag(hdev, HCI_FAST_CONNECTABLE))
7666 			write_fast_connectable(&req, true);
7667 		else
7668 			write_fast_connectable(&req, false);
7669 		__hci_update_page_scan(&req);
7670 		update_class(&req);
7671 		update_name(&req);
7672 		update_eir(&req);
7673 	}
7674 
7675 	return hci_req_run(&req, powered_complete);
7676 }
7677 
7678 int mgmt_powered(struct hci_dev *hdev, u8 powered)
7679 {
7680 	struct cmd_lookup match = { NULL, hdev };
7681 	u8 status, zero_cod[] = { 0, 0, 0 };
7682 	int err;
7683 
7684 	if (!hci_dev_test_flag(hdev, HCI_MGMT))
7685 		return 0;
7686 
7687 	if (powered) {
7688 		if (powered_update_hci(hdev) == 0)
7689 			return 0;
7690 
7691 		mgmt_pending_foreach(MGMT_OP_SET_POWERED, hdev, settings_rsp,
7692 				     &match);
7693 		goto new_settings;
7694 	}
7695 
7696 	mgmt_pending_foreach(MGMT_OP_SET_POWERED, hdev, settings_rsp, &match);
7697 
7698 	/* If the power off is because of hdev unregistration let
7699 	 * use the appropriate INVALID_INDEX status. Otherwise use
7700 	 * NOT_POWERED. We cover both scenarios here since later in
7701 	 * mgmt_index_removed() any hci_conn callbacks will have already
7702 	 * been triggered, potentially causing misleading DISCONNECTED
7703 	 * status responses.
7704 	 */
7705 	if (hci_dev_test_flag(hdev, HCI_UNREGISTER))
7706 		status = MGMT_STATUS_INVALID_INDEX;
7707 	else
7708 		status = MGMT_STATUS_NOT_POWERED;
7709 
7710 	mgmt_pending_foreach(0, hdev, cmd_complete_rsp, &status);
7711 
7712 	if (memcmp(hdev->dev_class, zero_cod, sizeof(zero_cod)) != 0)
7713 		mgmt_generic_event(MGMT_EV_CLASS_OF_DEV_CHANGED, hdev,
7714 				   zero_cod, sizeof(zero_cod), NULL);
7715 
7716 new_settings:
7717 	err = new_settings(hdev, match.sk);
7718 
7719 	if (match.sk)
7720 		sock_put(match.sk);
7721 
7722 	return err;
7723 }
7724 
7725 void mgmt_set_powered_failed(struct hci_dev *hdev, int err)
7726 {
7727 	struct mgmt_pending_cmd *cmd;
7728 	u8 status;
7729 
7730 	cmd = pending_find(MGMT_OP_SET_POWERED, hdev);
7731 	if (!cmd)
7732 		return;
7733 
7734 	if (err == -ERFKILL)
7735 		status = MGMT_STATUS_RFKILLED;
7736 	else
7737 		status = MGMT_STATUS_FAILED;
7738 
7739 	mgmt_cmd_status(cmd->sk, hdev->id, MGMT_OP_SET_POWERED, status);
7740 
7741 	mgmt_pending_remove(cmd);
7742 }
7743 
7744 void mgmt_discoverable_timeout(struct hci_dev *hdev)
7745 {
7746 	struct hci_request req;
7747 
7748 	hci_dev_lock(hdev);
7749 
7750 	/* When discoverable timeout triggers, then just make sure
7751 	 * the limited discoverable flag is cleared. Even in the case
7752 	 * of a timeout triggered from general discoverable, it is
7753 	 * safe to unconditionally clear the flag.
7754 	 */
7755 	hci_dev_clear_flag(hdev, HCI_LIMITED_DISCOVERABLE);
7756 	hci_dev_clear_flag(hdev, HCI_DISCOVERABLE);
7757 
7758 	hci_req_init(&req, hdev);
7759 	if (hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) {
7760 		u8 scan = SCAN_PAGE;
7761 		hci_req_add(&req, HCI_OP_WRITE_SCAN_ENABLE,
7762 			    sizeof(scan), &scan);
7763 	}
7764 	update_class(&req);
7765 
7766 	/* Advertising instances don't use the global discoverable setting, so
7767 	 * only update AD if advertising was enabled using Set Advertising.
7768 	 */
7769 	if (hci_dev_test_flag(hdev, HCI_ADVERTISING))
7770 		update_adv_data(&req);
7771 
7772 	hci_req_run(&req, NULL);
7773 
7774 	hdev->discov_timeout = 0;
7775 
7776 	new_settings(hdev, NULL);
7777 
7778 	hci_dev_unlock(hdev);
7779 }
7780 
7781 void mgmt_new_link_key(struct hci_dev *hdev, struct link_key *key,
7782 		       bool persistent)
7783 {
7784 	struct mgmt_ev_new_link_key ev;
7785 
7786 	memset(&ev, 0, sizeof(ev));
7787 
7788 	ev.store_hint = persistent;
7789 	bacpy(&ev.key.addr.bdaddr, &key->bdaddr);
7790 	ev.key.addr.type = BDADDR_BREDR;
7791 	ev.key.type = key->type;
7792 	memcpy(ev.key.val, key->val, HCI_LINK_KEY_SIZE);
7793 	ev.key.pin_len = key->pin_len;
7794 
7795 	mgmt_event(MGMT_EV_NEW_LINK_KEY, hdev, &ev, sizeof(ev), NULL);
7796 }
7797 
7798 static u8 mgmt_ltk_type(struct smp_ltk *ltk)
7799 {
7800 	switch (ltk->type) {
7801 	case SMP_LTK:
7802 	case SMP_LTK_SLAVE:
7803 		if (ltk->authenticated)
7804 			return MGMT_LTK_AUTHENTICATED;
7805 		return MGMT_LTK_UNAUTHENTICATED;
7806 	case SMP_LTK_P256:
7807 		if (ltk->authenticated)
7808 			return MGMT_LTK_P256_AUTH;
7809 		return MGMT_LTK_P256_UNAUTH;
7810 	case SMP_LTK_P256_DEBUG:
7811 		return MGMT_LTK_P256_DEBUG;
7812 	}
7813 
7814 	return MGMT_LTK_UNAUTHENTICATED;
7815 }
7816 
7817 void mgmt_new_ltk(struct hci_dev *hdev, struct smp_ltk *key, bool persistent)
7818 {
7819 	struct mgmt_ev_new_long_term_key ev;
7820 
7821 	memset(&ev, 0, sizeof(ev));
7822 
7823 	/* Devices using resolvable or non-resolvable random addresses
7824 	 * without providing an identity resolving key don't require
7825 	 * to store long term keys. Their addresses will change the
7826 	 * next time around.
7827 	 *
7828 	 * Only when a remote device provides an identity address
7829 	 * make sure the long term key is stored. If the remote
7830 	 * identity is known, the long term keys are internally
7831 	 * mapped to the identity address. So allow static random
7832 	 * and public addresses here.
7833 	 */
7834 	if (key->bdaddr_type == ADDR_LE_DEV_RANDOM &&
7835 	    (key->bdaddr.b[5] & 0xc0) != 0xc0)
7836 		ev.store_hint = 0x00;
7837 	else
7838 		ev.store_hint = persistent;
7839 
7840 	bacpy(&ev.key.addr.bdaddr, &key->bdaddr);
7841 	ev.key.addr.type = link_to_bdaddr(LE_LINK, key->bdaddr_type);
7842 	ev.key.type = mgmt_ltk_type(key);
7843 	ev.key.enc_size = key->enc_size;
7844 	ev.key.ediv = key->ediv;
7845 	ev.key.rand = key->rand;
7846 
7847 	if (key->type == SMP_LTK)
7848 		ev.key.master = 1;
7849 
7850 	/* Make sure we copy only the significant bytes based on the
7851 	 * encryption key size, and set the rest of the value to zeroes.
7852 	 */
7853 	memcpy(ev.key.val, key->val, key->enc_size);
7854 	memset(ev.key.val + key->enc_size, 0,
7855 	       sizeof(ev.key.val) - key->enc_size);
7856 
7857 	mgmt_event(MGMT_EV_NEW_LONG_TERM_KEY, hdev, &ev, sizeof(ev), NULL);
7858 }
7859 
7860 void mgmt_new_irk(struct hci_dev *hdev, struct smp_irk *irk)
7861 {
7862 	struct mgmt_ev_new_irk ev;
7863 
7864 	memset(&ev, 0, sizeof(ev));
7865 
7866 	/* For identity resolving keys from devices that are already
7867 	 * using a public address or static random address, do not
7868 	 * ask for storing this key. The identity resolving key really
7869 	 * is only mandatory for devices using resolvable random
7870 	 * addresses.
7871 	 *
7872 	 * Storing all identity resolving keys has the downside that
7873 	 * they will be also loaded on next boot of they system. More
7874 	 * identity resolving keys, means more time during scanning is
7875 	 * needed to actually resolve these addresses.
7876 	 */
7877 	if (bacmp(&irk->rpa, BDADDR_ANY))
7878 		ev.store_hint = 0x01;
7879 	else
7880 		ev.store_hint = 0x00;
7881 
7882 	bacpy(&ev.rpa, &irk->rpa);
7883 	bacpy(&ev.irk.addr.bdaddr, &irk->bdaddr);
7884 	ev.irk.addr.type = link_to_bdaddr(LE_LINK, irk->addr_type);
7885 	memcpy(ev.irk.val, irk->val, sizeof(irk->val));
7886 
7887 	mgmt_event(MGMT_EV_NEW_IRK, hdev, &ev, sizeof(ev), NULL);
7888 }
7889 
7890 void mgmt_new_csrk(struct hci_dev *hdev, struct smp_csrk *csrk,
7891 		   bool persistent)
7892 {
7893 	struct mgmt_ev_new_csrk ev;
7894 
7895 	memset(&ev, 0, sizeof(ev));
7896 
7897 	/* Devices using resolvable or non-resolvable random addresses
7898 	 * without providing an identity resolving key don't require
7899 	 * to store signature resolving keys. Their addresses will change
7900 	 * the next time around.
7901 	 *
7902 	 * Only when a remote device provides an identity address
7903 	 * make sure the signature resolving key is stored. So allow
7904 	 * static random and public addresses here.
7905 	 */
7906 	if (csrk->bdaddr_type == ADDR_LE_DEV_RANDOM &&
7907 	    (csrk->bdaddr.b[5] & 0xc0) != 0xc0)
7908 		ev.store_hint = 0x00;
7909 	else
7910 		ev.store_hint = persistent;
7911 
7912 	bacpy(&ev.key.addr.bdaddr, &csrk->bdaddr);
7913 	ev.key.addr.type = link_to_bdaddr(LE_LINK, csrk->bdaddr_type);
7914 	ev.key.type = csrk->type;
7915 	memcpy(ev.key.val, csrk->val, sizeof(csrk->val));
7916 
7917 	mgmt_event(MGMT_EV_NEW_CSRK, hdev, &ev, sizeof(ev), NULL);
7918 }
7919 
7920 void mgmt_new_conn_param(struct hci_dev *hdev, bdaddr_t *bdaddr,
7921 			 u8 bdaddr_type, u8 store_hint, u16 min_interval,
7922 			 u16 max_interval, u16 latency, u16 timeout)
7923 {
7924 	struct mgmt_ev_new_conn_param ev;
7925 
7926 	if (!hci_is_identity_address(bdaddr, bdaddr_type))
7927 		return;
7928 
7929 	memset(&ev, 0, sizeof(ev));
7930 	bacpy(&ev.addr.bdaddr, bdaddr);
7931 	ev.addr.type = link_to_bdaddr(LE_LINK, bdaddr_type);
7932 	ev.store_hint = store_hint;
7933 	ev.min_interval = cpu_to_le16(min_interval);
7934 	ev.max_interval = cpu_to_le16(max_interval);
7935 	ev.latency = cpu_to_le16(latency);
7936 	ev.timeout = cpu_to_le16(timeout);
7937 
7938 	mgmt_event(MGMT_EV_NEW_CONN_PARAM, hdev, &ev, sizeof(ev), NULL);
7939 }
7940 
7941 void mgmt_device_connected(struct hci_dev *hdev, struct hci_conn *conn,
7942 			   u32 flags, u8 *name, u8 name_len)
7943 {
7944 	char buf[512];
7945 	struct mgmt_ev_device_connected *ev = (void *) buf;
7946 	u16 eir_len = 0;
7947 
7948 	bacpy(&ev->addr.bdaddr, &conn->dst);
7949 	ev->addr.type = link_to_bdaddr(conn->type, conn->dst_type);
7950 
7951 	ev->flags = __cpu_to_le32(flags);
7952 
7953 	/* We must ensure that the EIR Data fields are ordered and
7954 	 * unique. Keep it simple for now and avoid the problem by not
7955 	 * adding any BR/EDR data to the LE adv.
7956 	 */
7957 	if (conn->le_adv_data_len > 0) {
7958 		memcpy(&ev->eir[eir_len],
7959 		       conn->le_adv_data, conn->le_adv_data_len);
7960 		eir_len = conn->le_adv_data_len;
7961 	} else {
7962 		if (name_len > 0)
7963 			eir_len = eir_append_data(ev->eir, 0, EIR_NAME_COMPLETE,
7964 						  name, name_len);
7965 
7966 		if (memcmp(conn->dev_class, "\0\0\0", 3) != 0)
7967 			eir_len = eir_append_data(ev->eir, eir_len,
7968 						  EIR_CLASS_OF_DEV,
7969 						  conn->dev_class, 3);
7970 	}
7971 
7972 	ev->eir_len = cpu_to_le16(eir_len);
7973 
7974 	mgmt_event(MGMT_EV_DEVICE_CONNECTED, hdev, buf,
7975 		    sizeof(*ev) + eir_len, NULL);
7976 }
7977 
7978 static void disconnect_rsp(struct mgmt_pending_cmd *cmd, void *data)
7979 {
7980 	struct sock **sk = data;
7981 
7982 	cmd->cmd_complete(cmd, 0);
7983 
7984 	*sk = cmd->sk;
7985 	sock_hold(*sk);
7986 
7987 	mgmt_pending_remove(cmd);
7988 }
7989 
7990 static void unpair_device_rsp(struct mgmt_pending_cmd *cmd, void *data)
7991 {
7992 	struct hci_dev *hdev = data;
7993 	struct mgmt_cp_unpair_device *cp = cmd->param;
7994 
7995 	device_unpaired(hdev, &cp->addr.bdaddr, cp->addr.type, cmd->sk);
7996 
7997 	cmd->cmd_complete(cmd, 0);
7998 	mgmt_pending_remove(cmd);
7999 }
8000 
8001 bool mgmt_powering_down(struct hci_dev *hdev)
8002 {
8003 	struct mgmt_pending_cmd *cmd;
8004 	struct mgmt_mode *cp;
8005 
8006 	cmd = pending_find(MGMT_OP_SET_POWERED, hdev);
8007 	if (!cmd)
8008 		return false;
8009 
8010 	cp = cmd->param;
8011 	if (!cp->val)
8012 		return true;
8013 
8014 	return false;
8015 }
8016 
8017 void mgmt_device_disconnected(struct hci_dev *hdev, bdaddr_t *bdaddr,
8018 			      u8 link_type, u8 addr_type, u8 reason,
8019 			      bool mgmt_connected)
8020 {
8021 	struct mgmt_ev_device_disconnected ev;
8022 	struct sock *sk = NULL;
8023 
8024 	/* The connection is still in hci_conn_hash so test for 1
8025 	 * instead of 0 to know if this is the last one.
8026 	 */
8027 	if (mgmt_powering_down(hdev) && hci_conn_count(hdev) == 1) {
8028 		cancel_delayed_work(&hdev->power_off);
8029 		queue_work(hdev->req_workqueue, &hdev->power_off.work);
8030 	}
8031 
8032 	if (!mgmt_connected)
8033 		return;
8034 
8035 	if (link_type != ACL_LINK && link_type != LE_LINK)
8036 		return;
8037 
8038 	mgmt_pending_foreach(MGMT_OP_DISCONNECT, hdev, disconnect_rsp, &sk);
8039 
8040 	bacpy(&ev.addr.bdaddr, bdaddr);
8041 	ev.addr.type = link_to_bdaddr(link_type, addr_type);
8042 	ev.reason = reason;
8043 
8044 	mgmt_event(MGMT_EV_DEVICE_DISCONNECTED, hdev, &ev, sizeof(ev), sk);
8045 
8046 	if (sk)
8047 		sock_put(sk);
8048 
8049 	mgmt_pending_foreach(MGMT_OP_UNPAIR_DEVICE, hdev, unpair_device_rsp,
8050 			     hdev);
8051 }
8052 
8053 void mgmt_disconnect_failed(struct hci_dev *hdev, bdaddr_t *bdaddr,
8054 			    u8 link_type, u8 addr_type, u8 status)
8055 {
8056 	u8 bdaddr_type = link_to_bdaddr(link_type, addr_type);
8057 	struct mgmt_cp_disconnect *cp;
8058 	struct mgmt_pending_cmd *cmd;
8059 
8060 	mgmt_pending_foreach(MGMT_OP_UNPAIR_DEVICE, hdev, unpair_device_rsp,
8061 			     hdev);
8062 
8063 	cmd = pending_find(MGMT_OP_DISCONNECT, hdev);
8064 	if (!cmd)
8065 		return;
8066 
8067 	cp = cmd->param;
8068 
8069 	if (bacmp(bdaddr, &cp->addr.bdaddr))
8070 		return;
8071 
8072 	if (cp->addr.type != bdaddr_type)
8073 		return;
8074 
8075 	cmd->cmd_complete(cmd, mgmt_status(status));
8076 	mgmt_pending_remove(cmd);
8077 }
8078 
8079 void mgmt_connect_failed(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
8080 			 u8 addr_type, u8 status)
8081 {
8082 	struct mgmt_ev_connect_failed ev;
8083 
8084 	/* The connection is still in hci_conn_hash so test for 1
8085 	 * instead of 0 to know if this is the last one.
8086 	 */
8087 	if (mgmt_powering_down(hdev) && hci_conn_count(hdev) == 1) {
8088 		cancel_delayed_work(&hdev->power_off);
8089 		queue_work(hdev->req_workqueue, &hdev->power_off.work);
8090 	}
8091 
8092 	bacpy(&ev.addr.bdaddr, bdaddr);
8093 	ev.addr.type = link_to_bdaddr(link_type, addr_type);
8094 	ev.status = mgmt_status(status);
8095 
8096 	mgmt_event(MGMT_EV_CONNECT_FAILED, hdev, &ev, sizeof(ev), NULL);
8097 }
8098 
8099 void mgmt_pin_code_request(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 secure)
8100 {
8101 	struct mgmt_ev_pin_code_request ev;
8102 
8103 	bacpy(&ev.addr.bdaddr, bdaddr);
8104 	ev.addr.type = BDADDR_BREDR;
8105 	ev.secure = secure;
8106 
8107 	mgmt_event(MGMT_EV_PIN_CODE_REQUEST, hdev, &ev, sizeof(ev), NULL);
8108 }
8109 
8110 void mgmt_pin_code_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
8111 				  u8 status)
8112 {
8113 	struct mgmt_pending_cmd *cmd;
8114 
8115 	cmd = pending_find(MGMT_OP_PIN_CODE_REPLY, hdev);
8116 	if (!cmd)
8117 		return;
8118 
8119 	cmd->cmd_complete(cmd, mgmt_status(status));
8120 	mgmt_pending_remove(cmd);
8121 }
8122 
8123 void mgmt_pin_code_neg_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
8124 				      u8 status)
8125 {
8126 	struct mgmt_pending_cmd *cmd;
8127 
8128 	cmd = pending_find(MGMT_OP_PIN_CODE_NEG_REPLY, hdev);
8129 	if (!cmd)
8130 		return;
8131 
8132 	cmd->cmd_complete(cmd, mgmt_status(status));
8133 	mgmt_pending_remove(cmd);
8134 }
8135 
8136 int mgmt_user_confirm_request(struct hci_dev *hdev, bdaddr_t *bdaddr,
8137 			      u8 link_type, u8 addr_type, u32 value,
8138 			      u8 confirm_hint)
8139 {
8140 	struct mgmt_ev_user_confirm_request ev;
8141 
8142 	BT_DBG("%s", hdev->name);
8143 
8144 	bacpy(&ev.addr.bdaddr, bdaddr);
8145 	ev.addr.type = link_to_bdaddr(link_type, addr_type);
8146 	ev.confirm_hint = confirm_hint;
8147 	ev.value = cpu_to_le32(value);
8148 
8149 	return mgmt_event(MGMT_EV_USER_CONFIRM_REQUEST, hdev, &ev, sizeof(ev),
8150 			  NULL);
8151 }
8152 
8153 int mgmt_user_passkey_request(struct hci_dev *hdev, bdaddr_t *bdaddr,
8154 			      u8 link_type, u8 addr_type)
8155 {
8156 	struct mgmt_ev_user_passkey_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 
8163 	return mgmt_event(MGMT_EV_USER_PASSKEY_REQUEST, hdev, &ev, sizeof(ev),
8164 			  NULL);
8165 }
8166 
8167 static int user_pairing_resp_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
8168 				      u8 link_type, u8 addr_type, u8 status,
8169 				      u8 opcode)
8170 {
8171 	struct mgmt_pending_cmd *cmd;
8172 
8173 	cmd = pending_find(opcode, hdev);
8174 	if (!cmd)
8175 		return -ENOENT;
8176 
8177 	cmd->cmd_complete(cmd, mgmt_status(status));
8178 	mgmt_pending_remove(cmd);
8179 
8180 	return 0;
8181 }
8182 
8183 int mgmt_user_confirm_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
8184 				     u8 link_type, u8 addr_type, u8 status)
8185 {
8186 	return user_pairing_resp_complete(hdev, bdaddr, link_type, addr_type,
8187 					  status, MGMT_OP_USER_CONFIRM_REPLY);
8188 }
8189 
8190 int mgmt_user_confirm_neg_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
8191 					 u8 link_type, u8 addr_type, u8 status)
8192 {
8193 	return user_pairing_resp_complete(hdev, bdaddr, link_type, addr_type,
8194 					  status,
8195 					  MGMT_OP_USER_CONFIRM_NEG_REPLY);
8196 }
8197 
8198 int mgmt_user_passkey_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
8199 				     u8 link_type, u8 addr_type, u8 status)
8200 {
8201 	return user_pairing_resp_complete(hdev, bdaddr, link_type, addr_type,
8202 					  status, MGMT_OP_USER_PASSKEY_REPLY);
8203 }
8204 
8205 int mgmt_user_passkey_neg_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
8206 					 u8 link_type, u8 addr_type, u8 status)
8207 {
8208 	return user_pairing_resp_complete(hdev, bdaddr, link_type, addr_type,
8209 					  status,
8210 					  MGMT_OP_USER_PASSKEY_NEG_REPLY);
8211 }
8212 
8213 int mgmt_user_passkey_notify(struct hci_dev *hdev, bdaddr_t *bdaddr,
8214 			     u8 link_type, u8 addr_type, u32 passkey,
8215 			     u8 entered)
8216 {
8217 	struct mgmt_ev_passkey_notify ev;
8218 
8219 	BT_DBG("%s", hdev->name);
8220 
8221 	bacpy(&ev.addr.bdaddr, bdaddr);
8222 	ev.addr.type = link_to_bdaddr(link_type, addr_type);
8223 	ev.passkey = __cpu_to_le32(passkey);
8224 	ev.entered = entered;
8225 
8226 	return mgmt_event(MGMT_EV_PASSKEY_NOTIFY, hdev, &ev, sizeof(ev), NULL);
8227 }
8228 
8229 void mgmt_auth_failed(struct hci_conn *conn, u8 hci_status)
8230 {
8231 	struct mgmt_ev_auth_failed ev;
8232 	struct mgmt_pending_cmd *cmd;
8233 	u8 status = mgmt_status(hci_status);
8234 
8235 	bacpy(&ev.addr.bdaddr, &conn->dst);
8236 	ev.addr.type = link_to_bdaddr(conn->type, conn->dst_type);
8237 	ev.status = status;
8238 
8239 	cmd = find_pairing(conn);
8240 
8241 	mgmt_event(MGMT_EV_AUTH_FAILED, conn->hdev, &ev, sizeof(ev),
8242 		    cmd ? cmd->sk : NULL);
8243 
8244 	if (cmd) {
8245 		cmd->cmd_complete(cmd, status);
8246 		mgmt_pending_remove(cmd);
8247 	}
8248 }
8249 
8250 void mgmt_auth_enable_complete(struct hci_dev *hdev, u8 status)
8251 {
8252 	struct cmd_lookup match = { NULL, hdev };
8253 	bool changed;
8254 
8255 	if (status) {
8256 		u8 mgmt_err = mgmt_status(status);
8257 		mgmt_pending_foreach(MGMT_OP_SET_LINK_SECURITY, hdev,
8258 				     cmd_status_rsp, &mgmt_err);
8259 		return;
8260 	}
8261 
8262 	if (test_bit(HCI_AUTH, &hdev->flags))
8263 		changed = !hci_dev_test_and_set_flag(hdev, HCI_LINK_SECURITY);
8264 	else
8265 		changed = hci_dev_test_and_clear_flag(hdev, HCI_LINK_SECURITY);
8266 
8267 	mgmt_pending_foreach(MGMT_OP_SET_LINK_SECURITY, hdev, settings_rsp,
8268 			     &match);
8269 
8270 	if (changed)
8271 		new_settings(hdev, match.sk);
8272 
8273 	if (match.sk)
8274 		sock_put(match.sk);
8275 }
8276 
8277 static void clear_eir(struct hci_request *req)
8278 {
8279 	struct hci_dev *hdev = req->hdev;
8280 	struct hci_cp_write_eir cp;
8281 
8282 	if (!lmp_ext_inq_capable(hdev))
8283 		return;
8284 
8285 	memset(hdev->eir, 0, sizeof(hdev->eir));
8286 
8287 	memset(&cp, 0, sizeof(cp));
8288 
8289 	hci_req_add(req, HCI_OP_WRITE_EIR, sizeof(cp), &cp);
8290 }
8291 
8292 void mgmt_ssp_enable_complete(struct hci_dev *hdev, u8 enable, u8 status)
8293 {
8294 	struct cmd_lookup match = { NULL, hdev };
8295 	struct hci_request req;
8296 	bool changed = false;
8297 
8298 	if (status) {
8299 		u8 mgmt_err = mgmt_status(status);
8300 
8301 		if (enable && hci_dev_test_and_clear_flag(hdev,
8302 							  HCI_SSP_ENABLED)) {
8303 			hci_dev_clear_flag(hdev, HCI_HS_ENABLED);
8304 			new_settings(hdev, NULL);
8305 		}
8306 
8307 		mgmt_pending_foreach(MGMT_OP_SET_SSP, hdev, cmd_status_rsp,
8308 				     &mgmt_err);
8309 		return;
8310 	}
8311 
8312 	if (enable) {
8313 		changed = !hci_dev_test_and_set_flag(hdev, HCI_SSP_ENABLED);
8314 	} else {
8315 		changed = hci_dev_test_and_clear_flag(hdev, HCI_SSP_ENABLED);
8316 		if (!changed)
8317 			changed = hci_dev_test_and_clear_flag(hdev,
8318 							      HCI_HS_ENABLED);
8319 		else
8320 			hci_dev_clear_flag(hdev, HCI_HS_ENABLED);
8321 	}
8322 
8323 	mgmt_pending_foreach(MGMT_OP_SET_SSP, hdev, settings_rsp, &match);
8324 
8325 	if (changed)
8326 		new_settings(hdev, match.sk);
8327 
8328 	if (match.sk)
8329 		sock_put(match.sk);
8330 
8331 	hci_req_init(&req, hdev);
8332 
8333 	if (hci_dev_test_flag(hdev, HCI_SSP_ENABLED)) {
8334 		if (hci_dev_test_flag(hdev, HCI_USE_DEBUG_KEYS))
8335 			hci_req_add(&req, HCI_OP_WRITE_SSP_DEBUG_MODE,
8336 				    sizeof(enable), &enable);
8337 		update_eir(&req);
8338 	} else {
8339 		clear_eir(&req);
8340 	}
8341 
8342 	hci_req_run(&req, NULL);
8343 }
8344 
8345 static void sk_lookup(struct mgmt_pending_cmd *cmd, void *data)
8346 {
8347 	struct cmd_lookup *match = data;
8348 
8349 	if (match->sk == NULL) {
8350 		match->sk = cmd->sk;
8351 		sock_hold(match->sk);
8352 	}
8353 }
8354 
8355 void mgmt_set_class_of_dev_complete(struct hci_dev *hdev, u8 *dev_class,
8356 				    u8 status)
8357 {
8358 	struct cmd_lookup match = { NULL, hdev, mgmt_status(status) };
8359 
8360 	mgmt_pending_foreach(MGMT_OP_SET_DEV_CLASS, hdev, sk_lookup, &match);
8361 	mgmt_pending_foreach(MGMT_OP_ADD_UUID, hdev, sk_lookup, &match);
8362 	mgmt_pending_foreach(MGMT_OP_REMOVE_UUID, hdev, sk_lookup, &match);
8363 
8364 	if (!status)
8365 		mgmt_generic_event(MGMT_EV_CLASS_OF_DEV_CHANGED, hdev,
8366 				   dev_class, 3, NULL);
8367 
8368 	if (match.sk)
8369 		sock_put(match.sk);
8370 }
8371 
8372 void mgmt_set_local_name_complete(struct hci_dev *hdev, u8 *name, u8 status)
8373 {
8374 	struct mgmt_cp_set_local_name ev;
8375 	struct mgmt_pending_cmd *cmd;
8376 
8377 	if (status)
8378 		return;
8379 
8380 	memset(&ev, 0, sizeof(ev));
8381 	memcpy(ev.name, name, HCI_MAX_NAME_LENGTH);
8382 	memcpy(ev.short_name, hdev->short_name, HCI_MAX_SHORT_NAME_LENGTH);
8383 
8384 	cmd = pending_find(MGMT_OP_SET_LOCAL_NAME, hdev);
8385 	if (!cmd) {
8386 		memcpy(hdev->dev_name, name, sizeof(hdev->dev_name));
8387 
8388 		/* If this is a HCI command related to powering on the
8389 		 * HCI dev don't send any mgmt signals.
8390 		 */
8391 		if (pending_find(MGMT_OP_SET_POWERED, hdev))
8392 			return;
8393 	}
8394 
8395 	mgmt_generic_event(MGMT_EV_LOCAL_NAME_CHANGED, hdev, &ev, sizeof(ev),
8396 			   cmd ? cmd->sk : NULL);
8397 }
8398 
8399 static inline bool has_uuid(u8 *uuid, u16 uuid_count, u8 (*uuids)[16])
8400 {
8401 	int i;
8402 
8403 	for (i = 0; i < uuid_count; i++) {
8404 		if (!memcmp(uuid, uuids[i], 16))
8405 			return true;
8406 	}
8407 
8408 	return false;
8409 }
8410 
8411 static bool eir_has_uuids(u8 *eir, u16 eir_len, u16 uuid_count, u8 (*uuids)[16])
8412 {
8413 	u16 parsed = 0;
8414 
8415 	while (parsed < eir_len) {
8416 		u8 field_len = eir[0];
8417 		u8 uuid[16];
8418 		int i;
8419 
8420 		if (field_len == 0)
8421 			break;
8422 
8423 		if (eir_len - parsed < field_len + 1)
8424 			break;
8425 
8426 		switch (eir[1]) {
8427 		case EIR_UUID16_ALL:
8428 		case EIR_UUID16_SOME:
8429 			for (i = 0; i + 3 <= field_len; i += 2) {
8430 				memcpy(uuid, bluetooth_base_uuid, 16);
8431 				uuid[13] = eir[i + 3];
8432 				uuid[12] = eir[i + 2];
8433 				if (has_uuid(uuid, uuid_count, uuids))
8434 					return true;
8435 			}
8436 			break;
8437 		case EIR_UUID32_ALL:
8438 		case EIR_UUID32_SOME:
8439 			for (i = 0; i + 5 <= field_len; i += 4) {
8440 				memcpy(uuid, bluetooth_base_uuid, 16);
8441 				uuid[15] = eir[i + 5];
8442 				uuid[14] = eir[i + 4];
8443 				uuid[13] = eir[i + 3];
8444 				uuid[12] = eir[i + 2];
8445 				if (has_uuid(uuid, uuid_count, uuids))
8446 					return true;
8447 			}
8448 			break;
8449 		case EIR_UUID128_ALL:
8450 		case EIR_UUID128_SOME:
8451 			for (i = 0; i + 17 <= field_len; i += 16) {
8452 				memcpy(uuid, eir + i + 2, 16);
8453 				if (has_uuid(uuid, uuid_count, uuids))
8454 					return true;
8455 			}
8456 			break;
8457 		}
8458 
8459 		parsed += field_len + 1;
8460 		eir += field_len + 1;
8461 	}
8462 
8463 	return false;
8464 }
8465 
8466 static void restart_le_scan(struct hci_dev *hdev)
8467 {
8468 	/* If controller is not scanning we are done. */
8469 	if (!hci_dev_test_flag(hdev, HCI_LE_SCAN))
8470 		return;
8471 
8472 	if (time_after(jiffies + DISCOV_LE_RESTART_DELAY,
8473 		       hdev->discovery.scan_start +
8474 		       hdev->discovery.scan_duration))
8475 		return;
8476 
8477 	queue_delayed_work(hdev->workqueue, &hdev->le_scan_restart,
8478 			   DISCOV_LE_RESTART_DELAY);
8479 }
8480 
8481 static bool is_filter_match(struct hci_dev *hdev, s8 rssi, u8 *eir,
8482 			    u16 eir_len, u8 *scan_rsp, u8 scan_rsp_len)
8483 {
8484 	/* If a RSSI threshold has been specified, and
8485 	 * HCI_QUIRK_STRICT_DUPLICATE_FILTER is not set, then all results with
8486 	 * a RSSI smaller than the RSSI threshold will be dropped. If the quirk
8487 	 * is set, let it through for further processing, as we might need to
8488 	 * restart the scan.
8489 	 *
8490 	 * For BR/EDR devices (pre 1.2) providing no RSSI during inquiry,
8491 	 * the results are also dropped.
8492 	 */
8493 	if (hdev->discovery.rssi != HCI_RSSI_INVALID &&
8494 	    (rssi == HCI_RSSI_INVALID ||
8495 	    (rssi < hdev->discovery.rssi &&
8496 	     !test_bit(HCI_QUIRK_STRICT_DUPLICATE_FILTER, &hdev->quirks))))
8497 		return  false;
8498 
8499 	if (hdev->discovery.uuid_count != 0) {
8500 		/* If a list of UUIDs is provided in filter, results with no
8501 		 * matching UUID should be dropped.
8502 		 */
8503 		if (!eir_has_uuids(eir, eir_len, hdev->discovery.uuid_count,
8504 				   hdev->discovery.uuids) &&
8505 		    !eir_has_uuids(scan_rsp, scan_rsp_len,
8506 				   hdev->discovery.uuid_count,
8507 				   hdev->discovery.uuids))
8508 			return false;
8509 	}
8510 
8511 	/* If duplicate filtering does not report RSSI changes, then restart
8512 	 * scanning to ensure updated result with updated RSSI values.
8513 	 */
8514 	if (test_bit(HCI_QUIRK_STRICT_DUPLICATE_FILTER, &hdev->quirks)) {
8515 		restart_le_scan(hdev);
8516 
8517 		/* Validate RSSI value against the RSSI threshold once more. */
8518 		if (hdev->discovery.rssi != HCI_RSSI_INVALID &&
8519 		    rssi < hdev->discovery.rssi)
8520 			return false;
8521 	}
8522 
8523 	return true;
8524 }
8525 
8526 void mgmt_device_found(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
8527 		       u8 addr_type, u8 *dev_class, s8 rssi, u32 flags,
8528 		       u8 *eir, u16 eir_len, u8 *scan_rsp, u8 scan_rsp_len)
8529 {
8530 	char buf[512];
8531 	struct mgmt_ev_device_found *ev = (void *)buf;
8532 	size_t ev_size;
8533 
8534 	/* Don't send events for a non-kernel initiated discovery. With
8535 	 * LE one exception is if we have pend_le_reports > 0 in which
8536 	 * case we're doing passive scanning and want these events.
8537 	 */
8538 	if (!hci_discovery_active(hdev)) {
8539 		if (link_type == ACL_LINK)
8540 			return;
8541 		if (link_type == LE_LINK && list_empty(&hdev->pend_le_reports))
8542 			return;
8543 	}
8544 
8545 	if (hdev->discovery.result_filtering) {
8546 		/* We are using service discovery */
8547 		if (!is_filter_match(hdev, rssi, eir, eir_len, scan_rsp,
8548 				     scan_rsp_len))
8549 			return;
8550 	}
8551 
8552 	/* Make sure that the buffer is big enough. The 5 extra bytes
8553 	 * are for the potential CoD field.
8554 	 */
8555 	if (sizeof(*ev) + eir_len + scan_rsp_len + 5 > sizeof(buf))
8556 		return;
8557 
8558 	memset(buf, 0, sizeof(buf));
8559 
8560 	/* In case of device discovery with BR/EDR devices (pre 1.2), the
8561 	 * RSSI value was reported as 0 when not available. This behavior
8562 	 * is kept when using device discovery. This is required for full
8563 	 * backwards compatibility with the API.
8564 	 *
8565 	 * However when using service discovery, the value 127 will be
8566 	 * returned when the RSSI is not available.
8567 	 */
8568 	if (rssi == HCI_RSSI_INVALID && !hdev->discovery.report_invalid_rssi &&
8569 	    link_type == ACL_LINK)
8570 		rssi = 0;
8571 
8572 	bacpy(&ev->addr.bdaddr, bdaddr);
8573 	ev->addr.type = link_to_bdaddr(link_type, addr_type);
8574 	ev->rssi = rssi;
8575 	ev->flags = cpu_to_le32(flags);
8576 
8577 	if (eir_len > 0)
8578 		/* Copy EIR or advertising data into event */
8579 		memcpy(ev->eir, eir, eir_len);
8580 
8581 	if (dev_class && !eir_has_data_type(ev->eir, eir_len, EIR_CLASS_OF_DEV))
8582 		eir_len = eir_append_data(ev->eir, eir_len, EIR_CLASS_OF_DEV,
8583 					  dev_class, 3);
8584 
8585 	if (scan_rsp_len > 0)
8586 		/* Append scan response data to event */
8587 		memcpy(ev->eir + eir_len, scan_rsp, scan_rsp_len);
8588 
8589 	ev->eir_len = cpu_to_le16(eir_len + scan_rsp_len);
8590 	ev_size = sizeof(*ev) + eir_len + scan_rsp_len;
8591 
8592 	mgmt_event(MGMT_EV_DEVICE_FOUND, hdev, ev, ev_size, NULL);
8593 }
8594 
8595 void mgmt_remote_name(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
8596 		      u8 addr_type, s8 rssi, u8 *name, u8 name_len)
8597 {
8598 	struct mgmt_ev_device_found *ev;
8599 	char buf[sizeof(*ev) + HCI_MAX_NAME_LENGTH + 2];
8600 	u16 eir_len;
8601 
8602 	ev = (struct mgmt_ev_device_found *) buf;
8603 
8604 	memset(buf, 0, sizeof(buf));
8605 
8606 	bacpy(&ev->addr.bdaddr, bdaddr);
8607 	ev->addr.type = link_to_bdaddr(link_type, addr_type);
8608 	ev->rssi = rssi;
8609 
8610 	eir_len = eir_append_data(ev->eir, 0, EIR_NAME_COMPLETE, name,
8611 				  name_len);
8612 
8613 	ev->eir_len = cpu_to_le16(eir_len);
8614 
8615 	mgmt_event(MGMT_EV_DEVICE_FOUND, hdev, ev, sizeof(*ev) + eir_len, NULL);
8616 }
8617 
8618 void mgmt_discovering(struct hci_dev *hdev, u8 discovering)
8619 {
8620 	struct mgmt_ev_discovering ev;
8621 
8622 	BT_DBG("%s discovering %u", hdev->name, discovering);
8623 
8624 	memset(&ev, 0, sizeof(ev));
8625 	ev.type = hdev->discovery.type;
8626 	ev.discovering = discovering;
8627 
8628 	mgmt_event(MGMT_EV_DISCOVERING, hdev, &ev, sizeof(ev), NULL);
8629 }
8630 
8631 static void adv_enable_complete(struct hci_dev *hdev, u8 status, u16 opcode)
8632 {
8633 	BT_DBG("%s status %u", hdev->name, status);
8634 }
8635 
8636 void mgmt_reenable_advertising(struct hci_dev *hdev)
8637 {
8638 	struct hci_request req;
8639 	u8 instance;
8640 
8641 	if (!hci_dev_test_flag(hdev, HCI_ADVERTISING) &&
8642 	    !hci_dev_test_flag(hdev, HCI_ADVERTISING_INSTANCE))
8643 		return;
8644 
8645 	instance = get_current_adv_instance(hdev);
8646 
8647 	hci_req_init(&req, hdev);
8648 
8649 	if (instance) {
8650 		schedule_adv_instance(&req, instance, true);
8651 	} else {
8652 		update_adv_data(&req);
8653 		update_scan_rsp_data(&req);
8654 		enable_advertising(&req);
8655 	}
8656 
8657 	hci_req_run(&req, adv_enable_complete);
8658 }
8659 
8660 static struct hci_mgmt_chan chan = {
8661 	.channel	= HCI_CHANNEL_CONTROL,
8662 	.handler_count	= ARRAY_SIZE(mgmt_handlers),
8663 	.handlers	= mgmt_handlers,
8664 	.hdev_init	= mgmt_init_hdev,
8665 };
8666 
8667 int mgmt_init(void)
8668 {
8669 	return hci_mgmt_chan_register(&chan);
8670 }
8671 
8672 void mgmt_exit(void)
8673 {
8674 	hci_mgmt_chan_unregister(&chan);
8675 }
8676