xref: /linux/net/bluetooth/mgmt.c (revision 3932b9ca55b0be314a36d3e84faff3e823c081f5)
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/l2cap.h>
33 #include <net/bluetooth/mgmt.h>
34 
35 #include "smp.h"
36 
37 #define MGMT_VERSION	1
38 #define MGMT_REVISION	7
39 
40 static const u16 mgmt_commands[] = {
41 	MGMT_OP_READ_INDEX_LIST,
42 	MGMT_OP_READ_INFO,
43 	MGMT_OP_SET_POWERED,
44 	MGMT_OP_SET_DISCOVERABLE,
45 	MGMT_OP_SET_CONNECTABLE,
46 	MGMT_OP_SET_FAST_CONNECTABLE,
47 	MGMT_OP_SET_BONDABLE,
48 	MGMT_OP_SET_LINK_SECURITY,
49 	MGMT_OP_SET_SSP,
50 	MGMT_OP_SET_HS,
51 	MGMT_OP_SET_LE,
52 	MGMT_OP_SET_DEV_CLASS,
53 	MGMT_OP_SET_LOCAL_NAME,
54 	MGMT_OP_ADD_UUID,
55 	MGMT_OP_REMOVE_UUID,
56 	MGMT_OP_LOAD_LINK_KEYS,
57 	MGMT_OP_LOAD_LONG_TERM_KEYS,
58 	MGMT_OP_DISCONNECT,
59 	MGMT_OP_GET_CONNECTIONS,
60 	MGMT_OP_PIN_CODE_REPLY,
61 	MGMT_OP_PIN_CODE_NEG_REPLY,
62 	MGMT_OP_SET_IO_CAPABILITY,
63 	MGMT_OP_PAIR_DEVICE,
64 	MGMT_OP_CANCEL_PAIR_DEVICE,
65 	MGMT_OP_UNPAIR_DEVICE,
66 	MGMT_OP_USER_CONFIRM_REPLY,
67 	MGMT_OP_USER_CONFIRM_NEG_REPLY,
68 	MGMT_OP_USER_PASSKEY_REPLY,
69 	MGMT_OP_USER_PASSKEY_NEG_REPLY,
70 	MGMT_OP_READ_LOCAL_OOB_DATA,
71 	MGMT_OP_ADD_REMOTE_OOB_DATA,
72 	MGMT_OP_REMOVE_REMOTE_OOB_DATA,
73 	MGMT_OP_START_DISCOVERY,
74 	MGMT_OP_STOP_DISCOVERY,
75 	MGMT_OP_CONFIRM_NAME,
76 	MGMT_OP_BLOCK_DEVICE,
77 	MGMT_OP_UNBLOCK_DEVICE,
78 	MGMT_OP_SET_DEVICE_ID,
79 	MGMT_OP_SET_ADVERTISING,
80 	MGMT_OP_SET_BREDR,
81 	MGMT_OP_SET_STATIC_ADDRESS,
82 	MGMT_OP_SET_SCAN_PARAMS,
83 	MGMT_OP_SET_SECURE_CONN,
84 	MGMT_OP_SET_DEBUG_KEYS,
85 	MGMT_OP_SET_PRIVACY,
86 	MGMT_OP_LOAD_IRKS,
87 	MGMT_OP_GET_CONN_INFO,
88 	MGMT_OP_GET_CLOCK_INFO,
89 	MGMT_OP_ADD_DEVICE,
90 	MGMT_OP_REMOVE_DEVICE,
91 	MGMT_OP_LOAD_CONN_PARAM,
92 	MGMT_OP_READ_UNCONF_INDEX_LIST,
93 	MGMT_OP_READ_CONFIG_INFO,
94 	MGMT_OP_SET_EXTERNAL_CONFIG,
95 	MGMT_OP_SET_PUBLIC_ADDRESS,
96 };
97 
98 static const u16 mgmt_events[] = {
99 	MGMT_EV_CONTROLLER_ERROR,
100 	MGMT_EV_INDEX_ADDED,
101 	MGMT_EV_INDEX_REMOVED,
102 	MGMT_EV_NEW_SETTINGS,
103 	MGMT_EV_CLASS_OF_DEV_CHANGED,
104 	MGMT_EV_LOCAL_NAME_CHANGED,
105 	MGMT_EV_NEW_LINK_KEY,
106 	MGMT_EV_NEW_LONG_TERM_KEY,
107 	MGMT_EV_DEVICE_CONNECTED,
108 	MGMT_EV_DEVICE_DISCONNECTED,
109 	MGMT_EV_CONNECT_FAILED,
110 	MGMT_EV_PIN_CODE_REQUEST,
111 	MGMT_EV_USER_CONFIRM_REQUEST,
112 	MGMT_EV_USER_PASSKEY_REQUEST,
113 	MGMT_EV_AUTH_FAILED,
114 	MGMT_EV_DEVICE_FOUND,
115 	MGMT_EV_DISCOVERING,
116 	MGMT_EV_DEVICE_BLOCKED,
117 	MGMT_EV_DEVICE_UNBLOCKED,
118 	MGMT_EV_DEVICE_UNPAIRED,
119 	MGMT_EV_PASSKEY_NOTIFY,
120 	MGMT_EV_NEW_IRK,
121 	MGMT_EV_NEW_CSRK,
122 	MGMT_EV_DEVICE_ADDED,
123 	MGMT_EV_DEVICE_REMOVED,
124 	MGMT_EV_NEW_CONN_PARAM,
125 	MGMT_EV_UNCONF_INDEX_ADDED,
126 	MGMT_EV_UNCONF_INDEX_REMOVED,
127 	MGMT_EV_NEW_CONFIG_OPTIONS,
128 };
129 
130 #define CACHE_TIMEOUT	msecs_to_jiffies(2 * 1000)
131 
132 #define hdev_is_powered(hdev) (test_bit(HCI_UP, &hdev->flags) && \
133 				!test_bit(HCI_AUTO_OFF, &hdev->dev_flags))
134 
135 struct pending_cmd {
136 	struct list_head list;
137 	u16 opcode;
138 	int index;
139 	void *param;
140 	struct sock *sk;
141 	void *user_data;
142 };
143 
144 /* HCI to MGMT error code conversion table */
145 static u8 mgmt_status_table[] = {
146 	MGMT_STATUS_SUCCESS,
147 	MGMT_STATUS_UNKNOWN_COMMAND,	/* Unknown Command */
148 	MGMT_STATUS_NOT_CONNECTED,	/* No Connection */
149 	MGMT_STATUS_FAILED,		/* Hardware Failure */
150 	MGMT_STATUS_CONNECT_FAILED,	/* Page Timeout */
151 	MGMT_STATUS_AUTH_FAILED,	/* Authentication Failed */
152 	MGMT_STATUS_AUTH_FAILED,	/* PIN or Key Missing */
153 	MGMT_STATUS_NO_RESOURCES,	/* Memory Full */
154 	MGMT_STATUS_TIMEOUT,		/* Connection Timeout */
155 	MGMT_STATUS_NO_RESOURCES,	/* Max Number of Connections */
156 	MGMT_STATUS_NO_RESOURCES,	/* Max Number of SCO Connections */
157 	MGMT_STATUS_ALREADY_CONNECTED,	/* ACL Connection Exists */
158 	MGMT_STATUS_BUSY,		/* Command Disallowed */
159 	MGMT_STATUS_NO_RESOURCES,	/* Rejected Limited Resources */
160 	MGMT_STATUS_REJECTED,		/* Rejected Security */
161 	MGMT_STATUS_REJECTED,		/* Rejected Personal */
162 	MGMT_STATUS_TIMEOUT,		/* Host Timeout */
163 	MGMT_STATUS_NOT_SUPPORTED,	/* Unsupported Feature */
164 	MGMT_STATUS_INVALID_PARAMS,	/* Invalid Parameters */
165 	MGMT_STATUS_DISCONNECTED,	/* OE User Ended Connection */
166 	MGMT_STATUS_NO_RESOURCES,	/* OE Low Resources */
167 	MGMT_STATUS_DISCONNECTED,	/* OE Power Off */
168 	MGMT_STATUS_DISCONNECTED,	/* Connection Terminated */
169 	MGMT_STATUS_BUSY,		/* Repeated Attempts */
170 	MGMT_STATUS_REJECTED,		/* Pairing Not Allowed */
171 	MGMT_STATUS_FAILED,		/* Unknown LMP PDU */
172 	MGMT_STATUS_NOT_SUPPORTED,	/* Unsupported Remote Feature */
173 	MGMT_STATUS_REJECTED,		/* SCO Offset Rejected */
174 	MGMT_STATUS_REJECTED,		/* SCO Interval Rejected */
175 	MGMT_STATUS_REJECTED,		/* Air Mode Rejected */
176 	MGMT_STATUS_INVALID_PARAMS,	/* Invalid LMP Parameters */
177 	MGMT_STATUS_FAILED,		/* Unspecified Error */
178 	MGMT_STATUS_NOT_SUPPORTED,	/* Unsupported LMP Parameter Value */
179 	MGMT_STATUS_FAILED,		/* Role Change Not Allowed */
180 	MGMT_STATUS_TIMEOUT,		/* LMP Response Timeout */
181 	MGMT_STATUS_FAILED,		/* LMP Error Transaction Collision */
182 	MGMT_STATUS_FAILED,		/* LMP PDU Not Allowed */
183 	MGMT_STATUS_REJECTED,		/* Encryption Mode Not Accepted */
184 	MGMT_STATUS_FAILED,		/* Unit Link Key Used */
185 	MGMT_STATUS_NOT_SUPPORTED,	/* QoS Not Supported */
186 	MGMT_STATUS_TIMEOUT,		/* Instant Passed */
187 	MGMT_STATUS_NOT_SUPPORTED,	/* Pairing Not Supported */
188 	MGMT_STATUS_FAILED,		/* Transaction Collision */
189 	MGMT_STATUS_INVALID_PARAMS,	/* Unacceptable Parameter */
190 	MGMT_STATUS_REJECTED,		/* QoS Rejected */
191 	MGMT_STATUS_NOT_SUPPORTED,	/* Classification Not Supported */
192 	MGMT_STATUS_REJECTED,		/* Insufficient Security */
193 	MGMT_STATUS_INVALID_PARAMS,	/* Parameter Out Of Range */
194 	MGMT_STATUS_BUSY,		/* Role Switch Pending */
195 	MGMT_STATUS_FAILED,		/* Slot Violation */
196 	MGMT_STATUS_FAILED,		/* Role Switch Failed */
197 	MGMT_STATUS_INVALID_PARAMS,	/* EIR Too Large */
198 	MGMT_STATUS_NOT_SUPPORTED,	/* Simple Pairing Not Supported */
199 	MGMT_STATUS_BUSY,		/* Host Busy Pairing */
200 	MGMT_STATUS_REJECTED,		/* Rejected, No Suitable Channel */
201 	MGMT_STATUS_BUSY,		/* Controller Busy */
202 	MGMT_STATUS_INVALID_PARAMS,	/* Unsuitable Connection Interval */
203 	MGMT_STATUS_TIMEOUT,		/* Directed Advertising Timeout */
204 	MGMT_STATUS_AUTH_FAILED,	/* Terminated Due to MIC Failure */
205 	MGMT_STATUS_CONNECT_FAILED,	/* Connection Establishment Failed */
206 	MGMT_STATUS_CONNECT_FAILED,	/* MAC Connection Failed */
207 };
208 
209 static u8 mgmt_status(u8 hci_status)
210 {
211 	if (hci_status < ARRAY_SIZE(mgmt_status_table))
212 		return mgmt_status_table[hci_status];
213 
214 	return MGMT_STATUS_FAILED;
215 }
216 
217 static int mgmt_event(u16 event, struct hci_dev *hdev, void *data, u16 data_len,
218 		      struct sock *skip_sk)
219 {
220 	struct sk_buff *skb;
221 	struct mgmt_hdr *hdr;
222 
223 	skb = alloc_skb(sizeof(*hdr) + data_len, GFP_KERNEL);
224 	if (!skb)
225 		return -ENOMEM;
226 
227 	hdr = (void *) skb_put(skb, sizeof(*hdr));
228 	hdr->opcode = cpu_to_le16(event);
229 	if (hdev)
230 		hdr->index = cpu_to_le16(hdev->id);
231 	else
232 		hdr->index = cpu_to_le16(MGMT_INDEX_NONE);
233 	hdr->len = cpu_to_le16(data_len);
234 
235 	if (data)
236 		memcpy(skb_put(skb, data_len), data, data_len);
237 
238 	/* Time stamp */
239 	__net_timestamp(skb);
240 
241 	hci_send_to_control(skb, skip_sk);
242 	kfree_skb(skb);
243 
244 	return 0;
245 }
246 
247 static int cmd_status(struct sock *sk, u16 index, u16 cmd, u8 status)
248 {
249 	struct sk_buff *skb;
250 	struct mgmt_hdr *hdr;
251 	struct mgmt_ev_cmd_status *ev;
252 	int err;
253 
254 	BT_DBG("sock %p, index %u, cmd %u, status %u", sk, index, cmd, status);
255 
256 	skb = alloc_skb(sizeof(*hdr) + sizeof(*ev), GFP_KERNEL);
257 	if (!skb)
258 		return -ENOMEM;
259 
260 	hdr = (void *) skb_put(skb, sizeof(*hdr));
261 
262 	hdr->opcode = cpu_to_le16(MGMT_EV_CMD_STATUS);
263 	hdr->index = cpu_to_le16(index);
264 	hdr->len = cpu_to_le16(sizeof(*ev));
265 
266 	ev = (void *) skb_put(skb, sizeof(*ev));
267 	ev->status = status;
268 	ev->opcode = cpu_to_le16(cmd);
269 
270 	err = sock_queue_rcv_skb(sk, skb);
271 	if (err < 0)
272 		kfree_skb(skb);
273 
274 	return err;
275 }
276 
277 static int cmd_complete(struct sock *sk, u16 index, u16 cmd, u8 status,
278 			void *rp, size_t rp_len)
279 {
280 	struct sk_buff *skb;
281 	struct mgmt_hdr *hdr;
282 	struct mgmt_ev_cmd_complete *ev;
283 	int err;
284 
285 	BT_DBG("sock %p", sk);
286 
287 	skb = alloc_skb(sizeof(*hdr) + sizeof(*ev) + rp_len, GFP_KERNEL);
288 	if (!skb)
289 		return -ENOMEM;
290 
291 	hdr = (void *) skb_put(skb, sizeof(*hdr));
292 
293 	hdr->opcode = cpu_to_le16(MGMT_EV_CMD_COMPLETE);
294 	hdr->index = cpu_to_le16(index);
295 	hdr->len = cpu_to_le16(sizeof(*ev) + rp_len);
296 
297 	ev = (void *) skb_put(skb, sizeof(*ev) + rp_len);
298 	ev->opcode = cpu_to_le16(cmd);
299 	ev->status = status;
300 
301 	if (rp)
302 		memcpy(ev->data, rp, rp_len);
303 
304 	err = sock_queue_rcv_skb(sk, skb);
305 	if (err < 0)
306 		kfree_skb(skb);
307 
308 	return err;
309 }
310 
311 static int read_version(struct sock *sk, struct hci_dev *hdev, void *data,
312 			u16 data_len)
313 {
314 	struct mgmt_rp_read_version rp;
315 
316 	BT_DBG("sock %p", sk);
317 
318 	rp.version = MGMT_VERSION;
319 	rp.revision = cpu_to_le16(MGMT_REVISION);
320 
321 	return cmd_complete(sk, MGMT_INDEX_NONE, MGMT_OP_READ_VERSION, 0, &rp,
322 			    sizeof(rp));
323 }
324 
325 static int read_commands(struct sock *sk, struct hci_dev *hdev, void *data,
326 			 u16 data_len)
327 {
328 	struct mgmt_rp_read_commands *rp;
329 	const u16 num_commands = ARRAY_SIZE(mgmt_commands);
330 	const u16 num_events = ARRAY_SIZE(mgmt_events);
331 	__le16 *opcode;
332 	size_t rp_size;
333 	int i, err;
334 
335 	BT_DBG("sock %p", sk);
336 
337 	rp_size = sizeof(*rp) + ((num_commands + num_events) * sizeof(u16));
338 
339 	rp = kmalloc(rp_size, GFP_KERNEL);
340 	if (!rp)
341 		return -ENOMEM;
342 
343 	rp->num_commands = cpu_to_le16(num_commands);
344 	rp->num_events = cpu_to_le16(num_events);
345 
346 	for (i = 0, opcode = rp->opcodes; i < num_commands; i++, opcode++)
347 		put_unaligned_le16(mgmt_commands[i], opcode);
348 
349 	for (i = 0; i < num_events; i++, opcode++)
350 		put_unaligned_le16(mgmt_events[i], opcode);
351 
352 	err = cmd_complete(sk, MGMT_INDEX_NONE, MGMT_OP_READ_COMMANDS, 0, rp,
353 			   rp_size);
354 	kfree(rp);
355 
356 	return err;
357 }
358 
359 static int read_index_list(struct sock *sk, struct hci_dev *hdev, void *data,
360 			   u16 data_len)
361 {
362 	struct mgmt_rp_read_index_list *rp;
363 	struct hci_dev *d;
364 	size_t rp_len;
365 	u16 count;
366 	int err;
367 
368 	BT_DBG("sock %p", sk);
369 
370 	read_lock(&hci_dev_list_lock);
371 
372 	count = 0;
373 	list_for_each_entry(d, &hci_dev_list, list) {
374 		if (d->dev_type == HCI_BREDR &&
375 		    !test_bit(HCI_UNCONFIGURED, &d->dev_flags))
376 			count++;
377 	}
378 
379 	rp_len = sizeof(*rp) + (2 * count);
380 	rp = kmalloc(rp_len, GFP_ATOMIC);
381 	if (!rp) {
382 		read_unlock(&hci_dev_list_lock);
383 		return -ENOMEM;
384 	}
385 
386 	count = 0;
387 	list_for_each_entry(d, &hci_dev_list, list) {
388 		if (test_bit(HCI_SETUP, &d->dev_flags) ||
389 		    test_bit(HCI_CONFIG, &d->dev_flags) ||
390 		    test_bit(HCI_USER_CHANNEL, &d->dev_flags))
391 			continue;
392 
393 		/* Devices marked as raw-only are neither configured
394 		 * nor unconfigured controllers.
395 		 */
396 		if (test_bit(HCI_QUIRK_RAW_DEVICE, &d->quirks))
397 			continue;
398 
399 		if (d->dev_type == HCI_BREDR &&
400 		    !test_bit(HCI_UNCONFIGURED, &d->dev_flags)) {
401 			rp->index[count++] = cpu_to_le16(d->id);
402 			BT_DBG("Added hci%u", d->id);
403 		}
404 	}
405 
406 	rp->num_controllers = cpu_to_le16(count);
407 	rp_len = sizeof(*rp) + (2 * count);
408 
409 	read_unlock(&hci_dev_list_lock);
410 
411 	err = cmd_complete(sk, MGMT_INDEX_NONE, MGMT_OP_READ_INDEX_LIST, 0, rp,
412 			   rp_len);
413 
414 	kfree(rp);
415 
416 	return err;
417 }
418 
419 static int read_unconf_index_list(struct sock *sk, struct hci_dev *hdev,
420 				  void *data, u16 data_len)
421 {
422 	struct mgmt_rp_read_unconf_index_list *rp;
423 	struct hci_dev *d;
424 	size_t rp_len;
425 	u16 count;
426 	int err;
427 
428 	BT_DBG("sock %p", sk);
429 
430 	read_lock(&hci_dev_list_lock);
431 
432 	count = 0;
433 	list_for_each_entry(d, &hci_dev_list, list) {
434 		if (d->dev_type == HCI_BREDR &&
435 		    test_bit(HCI_UNCONFIGURED, &d->dev_flags))
436 			count++;
437 	}
438 
439 	rp_len = sizeof(*rp) + (2 * count);
440 	rp = kmalloc(rp_len, GFP_ATOMIC);
441 	if (!rp) {
442 		read_unlock(&hci_dev_list_lock);
443 		return -ENOMEM;
444 	}
445 
446 	count = 0;
447 	list_for_each_entry(d, &hci_dev_list, list) {
448 		if (test_bit(HCI_SETUP, &d->dev_flags) ||
449 		    test_bit(HCI_CONFIG, &d->dev_flags) ||
450 		    test_bit(HCI_USER_CHANNEL, &d->dev_flags))
451 			continue;
452 
453 		/* Devices marked as raw-only are neither configured
454 		 * nor unconfigured controllers.
455 		 */
456 		if (test_bit(HCI_QUIRK_RAW_DEVICE, &d->quirks))
457 			continue;
458 
459 		if (d->dev_type == HCI_BREDR &&
460 		    test_bit(HCI_UNCONFIGURED, &d->dev_flags)) {
461 			rp->index[count++] = cpu_to_le16(d->id);
462 			BT_DBG("Added hci%u", d->id);
463 		}
464 	}
465 
466 	rp->num_controllers = cpu_to_le16(count);
467 	rp_len = sizeof(*rp) + (2 * count);
468 
469 	read_unlock(&hci_dev_list_lock);
470 
471 	err = cmd_complete(sk, MGMT_INDEX_NONE, MGMT_OP_READ_UNCONF_INDEX_LIST,
472 			   0, rp, rp_len);
473 
474 	kfree(rp);
475 
476 	return err;
477 }
478 
479 static bool is_configured(struct hci_dev *hdev)
480 {
481 	if (test_bit(HCI_QUIRK_EXTERNAL_CONFIG, &hdev->quirks) &&
482 	    !test_bit(HCI_EXT_CONFIGURED, &hdev->dev_flags))
483 		return false;
484 
485 	if (test_bit(HCI_QUIRK_INVALID_BDADDR, &hdev->quirks) &&
486 	    !bacmp(&hdev->public_addr, BDADDR_ANY))
487 		return false;
488 
489 	return true;
490 }
491 
492 static __le32 get_missing_options(struct hci_dev *hdev)
493 {
494 	u32 options = 0;
495 
496 	if (test_bit(HCI_QUIRK_EXTERNAL_CONFIG, &hdev->quirks) &&
497 	    !test_bit(HCI_EXT_CONFIGURED, &hdev->dev_flags))
498 		options |= MGMT_OPTION_EXTERNAL_CONFIG;
499 
500 	if (test_bit(HCI_QUIRK_INVALID_BDADDR, &hdev->quirks) &&
501 	    !bacmp(&hdev->public_addr, BDADDR_ANY))
502 		options |= MGMT_OPTION_PUBLIC_ADDRESS;
503 
504 	return cpu_to_le32(options);
505 }
506 
507 static int new_options(struct hci_dev *hdev, struct sock *skip)
508 {
509 	__le32 options = get_missing_options(hdev);
510 
511 	return mgmt_event(MGMT_EV_NEW_CONFIG_OPTIONS, hdev, &options,
512 			  sizeof(options), skip);
513 }
514 
515 static int send_options_rsp(struct sock *sk, u16 opcode, struct hci_dev *hdev)
516 {
517 	__le32 options = get_missing_options(hdev);
518 
519 	return cmd_complete(sk, hdev->id, opcode, 0, &options,
520 			    sizeof(options));
521 }
522 
523 static int read_config_info(struct sock *sk, struct hci_dev *hdev,
524 			    void *data, u16 data_len)
525 {
526 	struct mgmt_rp_read_config_info rp;
527 	u32 options = 0;
528 
529 	BT_DBG("sock %p %s", sk, hdev->name);
530 
531 	hci_dev_lock(hdev);
532 
533 	memset(&rp, 0, sizeof(rp));
534 	rp.manufacturer = cpu_to_le16(hdev->manufacturer);
535 
536 	if (test_bit(HCI_QUIRK_EXTERNAL_CONFIG, &hdev->quirks))
537 		options |= MGMT_OPTION_EXTERNAL_CONFIG;
538 
539 	if (hdev->set_bdaddr)
540 		options |= MGMT_OPTION_PUBLIC_ADDRESS;
541 
542 	rp.supported_options = cpu_to_le32(options);
543 	rp.missing_options = get_missing_options(hdev);
544 
545 	hci_dev_unlock(hdev);
546 
547 	return cmd_complete(sk, hdev->id, MGMT_OP_READ_CONFIG_INFO, 0, &rp,
548 			    sizeof(rp));
549 }
550 
551 static u32 get_supported_settings(struct hci_dev *hdev)
552 {
553 	u32 settings = 0;
554 
555 	settings |= MGMT_SETTING_POWERED;
556 	settings |= MGMT_SETTING_BONDABLE;
557 	settings |= MGMT_SETTING_DEBUG_KEYS;
558 	settings |= MGMT_SETTING_CONNECTABLE;
559 	settings |= MGMT_SETTING_DISCOVERABLE;
560 
561 	if (lmp_bredr_capable(hdev)) {
562 		if (hdev->hci_ver >= BLUETOOTH_VER_1_2)
563 			settings |= MGMT_SETTING_FAST_CONNECTABLE;
564 		settings |= MGMT_SETTING_BREDR;
565 		settings |= MGMT_SETTING_LINK_SECURITY;
566 
567 		if (lmp_ssp_capable(hdev)) {
568 			settings |= MGMT_SETTING_SSP;
569 			settings |= MGMT_SETTING_HS;
570 		}
571 
572 		if (lmp_sc_capable(hdev) ||
573 		    test_bit(HCI_FORCE_SC, &hdev->dbg_flags))
574 			settings |= MGMT_SETTING_SECURE_CONN;
575 	}
576 
577 	if (lmp_le_capable(hdev)) {
578 		settings |= MGMT_SETTING_LE;
579 		settings |= MGMT_SETTING_ADVERTISING;
580 		settings |= MGMT_SETTING_PRIVACY;
581 	}
582 
583 	if (test_bit(HCI_QUIRK_EXTERNAL_CONFIG, &hdev->quirks) ||
584 	    hdev->set_bdaddr)
585 		settings |= MGMT_SETTING_CONFIGURATION;
586 
587 	return settings;
588 }
589 
590 static u32 get_current_settings(struct hci_dev *hdev)
591 {
592 	u32 settings = 0;
593 
594 	if (hdev_is_powered(hdev))
595 		settings |= MGMT_SETTING_POWERED;
596 
597 	if (test_bit(HCI_CONNECTABLE, &hdev->dev_flags))
598 		settings |= MGMT_SETTING_CONNECTABLE;
599 
600 	if (test_bit(HCI_FAST_CONNECTABLE, &hdev->dev_flags))
601 		settings |= MGMT_SETTING_FAST_CONNECTABLE;
602 
603 	if (test_bit(HCI_DISCOVERABLE, &hdev->dev_flags))
604 		settings |= MGMT_SETTING_DISCOVERABLE;
605 
606 	if (test_bit(HCI_BONDABLE, &hdev->dev_flags))
607 		settings |= MGMT_SETTING_BONDABLE;
608 
609 	if (test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags))
610 		settings |= MGMT_SETTING_BREDR;
611 
612 	if (test_bit(HCI_LE_ENABLED, &hdev->dev_flags))
613 		settings |= MGMT_SETTING_LE;
614 
615 	if (test_bit(HCI_LINK_SECURITY, &hdev->dev_flags))
616 		settings |= MGMT_SETTING_LINK_SECURITY;
617 
618 	if (test_bit(HCI_SSP_ENABLED, &hdev->dev_flags))
619 		settings |= MGMT_SETTING_SSP;
620 
621 	if (test_bit(HCI_HS_ENABLED, &hdev->dev_flags))
622 		settings |= MGMT_SETTING_HS;
623 
624 	if (test_bit(HCI_ADVERTISING, &hdev->dev_flags))
625 		settings |= MGMT_SETTING_ADVERTISING;
626 
627 	if (test_bit(HCI_SC_ENABLED, &hdev->dev_flags))
628 		settings |= MGMT_SETTING_SECURE_CONN;
629 
630 	if (test_bit(HCI_KEEP_DEBUG_KEYS, &hdev->dev_flags))
631 		settings |= MGMT_SETTING_DEBUG_KEYS;
632 
633 	if (test_bit(HCI_PRIVACY, &hdev->dev_flags))
634 		settings |= MGMT_SETTING_PRIVACY;
635 
636 	return settings;
637 }
638 
639 #define PNP_INFO_SVCLASS_ID		0x1200
640 
641 static u8 *create_uuid16_list(struct hci_dev *hdev, u8 *data, ptrdiff_t len)
642 {
643 	u8 *ptr = data, *uuids_start = NULL;
644 	struct bt_uuid *uuid;
645 
646 	if (len < 4)
647 		return ptr;
648 
649 	list_for_each_entry(uuid, &hdev->uuids, list) {
650 		u16 uuid16;
651 
652 		if (uuid->size != 16)
653 			continue;
654 
655 		uuid16 = get_unaligned_le16(&uuid->uuid[12]);
656 		if (uuid16 < 0x1100)
657 			continue;
658 
659 		if (uuid16 == PNP_INFO_SVCLASS_ID)
660 			continue;
661 
662 		if (!uuids_start) {
663 			uuids_start = ptr;
664 			uuids_start[0] = 1;
665 			uuids_start[1] = EIR_UUID16_ALL;
666 			ptr += 2;
667 		}
668 
669 		/* Stop if not enough space to put next UUID */
670 		if ((ptr - data) + sizeof(u16) > len) {
671 			uuids_start[1] = EIR_UUID16_SOME;
672 			break;
673 		}
674 
675 		*ptr++ = (uuid16 & 0x00ff);
676 		*ptr++ = (uuid16 & 0xff00) >> 8;
677 		uuids_start[0] += sizeof(uuid16);
678 	}
679 
680 	return ptr;
681 }
682 
683 static u8 *create_uuid32_list(struct hci_dev *hdev, u8 *data, ptrdiff_t len)
684 {
685 	u8 *ptr = data, *uuids_start = NULL;
686 	struct bt_uuid *uuid;
687 
688 	if (len < 6)
689 		return ptr;
690 
691 	list_for_each_entry(uuid, &hdev->uuids, list) {
692 		if (uuid->size != 32)
693 			continue;
694 
695 		if (!uuids_start) {
696 			uuids_start = ptr;
697 			uuids_start[0] = 1;
698 			uuids_start[1] = EIR_UUID32_ALL;
699 			ptr += 2;
700 		}
701 
702 		/* Stop if not enough space to put next UUID */
703 		if ((ptr - data) + sizeof(u32) > len) {
704 			uuids_start[1] = EIR_UUID32_SOME;
705 			break;
706 		}
707 
708 		memcpy(ptr, &uuid->uuid[12], sizeof(u32));
709 		ptr += sizeof(u32);
710 		uuids_start[0] += sizeof(u32);
711 	}
712 
713 	return ptr;
714 }
715 
716 static u8 *create_uuid128_list(struct hci_dev *hdev, u8 *data, ptrdiff_t len)
717 {
718 	u8 *ptr = data, *uuids_start = NULL;
719 	struct bt_uuid *uuid;
720 
721 	if (len < 18)
722 		return ptr;
723 
724 	list_for_each_entry(uuid, &hdev->uuids, list) {
725 		if (uuid->size != 128)
726 			continue;
727 
728 		if (!uuids_start) {
729 			uuids_start = ptr;
730 			uuids_start[0] = 1;
731 			uuids_start[1] = EIR_UUID128_ALL;
732 			ptr += 2;
733 		}
734 
735 		/* Stop if not enough space to put next UUID */
736 		if ((ptr - data) + 16 > len) {
737 			uuids_start[1] = EIR_UUID128_SOME;
738 			break;
739 		}
740 
741 		memcpy(ptr, uuid->uuid, 16);
742 		ptr += 16;
743 		uuids_start[0] += 16;
744 	}
745 
746 	return ptr;
747 }
748 
749 static struct pending_cmd *mgmt_pending_find(u16 opcode, struct hci_dev *hdev)
750 {
751 	struct pending_cmd *cmd;
752 
753 	list_for_each_entry(cmd, &hdev->mgmt_pending, list) {
754 		if (cmd->opcode == opcode)
755 			return cmd;
756 	}
757 
758 	return NULL;
759 }
760 
761 static struct pending_cmd *mgmt_pending_find_data(u16 opcode,
762 						  struct hci_dev *hdev,
763 						  const void *data)
764 {
765 	struct pending_cmd *cmd;
766 
767 	list_for_each_entry(cmd, &hdev->mgmt_pending, list) {
768 		if (cmd->user_data != data)
769 			continue;
770 		if (cmd->opcode == opcode)
771 			return cmd;
772 	}
773 
774 	return NULL;
775 }
776 
777 static u8 create_scan_rsp_data(struct hci_dev *hdev, u8 *ptr)
778 {
779 	u8 ad_len = 0;
780 	size_t name_len;
781 
782 	name_len = strlen(hdev->dev_name);
783 	if (name_len > 0) {
784 		size_t max_len = HCI_MAX_AD_LENGTH - ad_len - 2;
785 
786 		if (name_len > max_len) {
787 			name_len = max_len;
788 			ptr[1] = EIR_NAME_SHORT;
789 		} else
790 			ptr[1] = EIR_NAME_COMPLETE;
791 
792 		ptr[0] = name_len + 1;
793 
794 		memcpy(ptr + 2, hdev->dev_name, name_len);
795 
796 		ad_len += (name_len + 2);
797 		ptr += (name_len + 2);
798 	}
799 
800 	return ad_len;
801 }
802 
803 static void update_scan_rsp_data(struct hci_request *req)
804 {
805 	struct hci_dev *hdev = req->hdev;
806 	struct hci_cp_le_set_scan_rsp_data cp;
807 	u8 len;
808 
809 	if (!test_bit(HCI_LE_ENABLED, &hdev->dev_flags))
810 		return;
811 
812 	memset(&cp, 0, sizeof(cp));
813 
814 	len = create_scan_rsp_data(hdev, cp.data);
815 
816 	if (hdev->scan_rsp_data_len == len &&
817 	    memcmp(cp.data, hdev->scan_rsp_data, len) == 0)
818 		return;
819 
820 	memcpy(hdev->scan_rsp_data, cp.data, sizeof(cp.data));
821 	hdev->scan_rsp_data_len = len;
822 
823 	cp.length = len;
824 
825 	hci_req_add(req, HCI_OP_LE_SET_SCAN_RSP_DATA, sizeof(cp), &cp);
826 }
827 
828 static u8 get_adv_discov_flags(struct hci_dev *hdev)
829 {
830 	struct pending_cmd *cmd;
831 
832 	/* If there's a pending mgmt command the flags will not yet have
833 	 * their final values, so check for this first.
834 	 */
835 	cmd = mgmt_pending_find(MGMT_OP_SET_DISCOVERABLE, hdev);
836 	if (cmd) {
837 		struct mgmt_mode *cp = cmd->param;
838 		if (cp->val == 0x01)
839 			return LE_AD_GENERAL;
840 		else if (cp->val == 0x02)
841 			return LE_AD_LIMITED;
842 	} else {
843 		if (test_bit(HCI_LIMITED_DISCOVERABLE, &hdev->dev_flags))
844 			return LE_AD_LIMITED;
845 		else if (test_bit(HCI_DISCOVERABLE, &hdev->dev_flags))
846 			return LE_AD_GENERAL;
847 	}
848 
849 	return 0;
850 }
851 
852 static u8 create_adv_data(struct hci_dev *hdev, u8 *ptr)
853 {
854 	u8 ad_len = 0, flags = 0;
855 
856 	flags |= get_adv_discov_flags(hdev);
857 
858 	if (!test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags))
859 		flags |= LE_AD_NO_BREDR;
860 
861 	if (flags) {
862 		BT_DBG("adv flags 0x%02x", flags);
863 
864 		ptr[0] = 2;
865 		ptr[1] = EIR_FLAGS;
866 		ptr[2] = flags;
867 
868 		ad_len += 3;
869 		ptr += 3;
870 	}
871 
872 	if (hdev->adv_tx_power != HCI_TX_POWER_INVALID) {
873 		ptr[0] = 2;
874 		ptr[1] = EIR_TX_POWER;
875 		ptr[2] = (u8) hdev->adv_tx_power;
876 
877 		ad_len += 3;
878 		ptr += 3;
879 	}
880 
881 	return ad_len;
882 }
883 
884 static void update_adv_data(struct hci_request *req)
885 {
886 	struct hci_dev *hdev = req->hdev;
887 	struct hci_cp_le_set_adv_data cp;
888 	u8 len;
889 
890 	if (!test_bit(HCI_LE_ENABLED, &hdev->dev_flags))
891 		return;
892 
893 	memset(&cp, 0, sizeof(cp));
894 
895 	len = create_adv_data(hdev, cp.data);
896 
897 	if (hdev->adv_data_len == len &&
898 	    memcmp(cp.data, hdev->adv_data, len) == 0)
899 		return;
900 
901 	memcpy(hdev->adv_data, cp.data, sizeof(cp.data));
902 	hdev->adv_data_len = len;
903 
904 	cp.length = len;
905 
906 	hci_req_add(req, HCI_OP_LE_SET_ADV_DATA, sizeof(cp), &cp);
907 }
908 
909 int mgmt_update_adv_data(struct hci_dev *hdev)
910 {
911 	struct hci_request req;
912 
913 	hci_req_init(&req, hdev);
914 	update_adv_data(&req);
915 
916 	return hci_req_run(&req, NULL);
917 }
918 
919 static void create_eir(struct hci_dev *hdev, u8 *data)
920 {
921 	u8 *ptr = data;
922 	size_t name_len;
923 
924 	name_len = strlen(hdev->dev_name);
925 
926 	if (name_len > 0) {
927 		/* EIR Data type */
928 		if (name_len > 48) {
929 			name_len = 48;
930 			ptr[1] = EIR_NAME_SHORT;
931 		} else
932 			ptr[1] = EIR_NAME_COMPLETE;
933 
934 		/* EIR Data length */
935 		ptr[0] = name_len + 1;
936 
937 		memcpy(ptr + 2, hdev->dev_name, name_len);
938 
939 		ptr += (name_len + 2);
940 	}
941 
942 	if (hdev->inq_tx_power != HCI_TX_POWER_INVALID) {
943 		ptr[0] = 2;
944 		ptr[1] = EIR_TX_POWER;
945 		ptr[2] = (u8) hdev->inq_tx_power;
946 
947 		ptr += 3;
948 	}
949 
950 	if (hdev->devid_source > 0) {
951 		ptr[0] = 9;
952 		ptr[1] = EIR_DEVICE_ID;
953 
954 		put_unaligned_le16(hdev->devid_source, ptr + 2);
955 		put_unaligned_le16(hdev->devid_vendor, ptr + 4);
956 		put_unaligned_le16(hdev->devid_product, ptr + 6);
957 		put_unaligned_le16(hdev->devid_version, ptr + 8);
958 
959 		ptr += 10;
960 	}
961 
962 	ptr = create_uuid16_list(hdev, ptr, HCI_MAX_EIR_LENGTH - (ptr - data));
963 	ptr = create_uuid32_list(hdev, ptr, HCI_MAX_EIR_LENGTH - (ptr - data));
964 	ptr = create_uuid128_list(hdev, ptr, HCI_MAX_EIR_LENGTH - (ptr - data));
965 }
966 
967 static void update_eir(struct hci_request *req)
968 {
969 	struct hci_dev *hdev = req->hdev;
970 	struct hci_cp_write_eir cp;
971 
972 	if (!hdev_is_powered(hdev))
973 		return;
974 
975 	if (!lmp_ext_inq_capable(hdev))
976 		return;
977 
978 	if (!test_bit(HCI_SSP_ENABLED, &hdev->dev_flags))
979 		return;
980 
981 	if (test_bit(HCI_SERVICE_CACHE, &hdev->dev_flags))
982 		return;
983 
984 	memset(&cp, 0, sizeof(cp));
985 
986 	create_eir(hdev, cp.data);
987 
988 	if (memcmp(cp.data, hdev->eir, sizeof(cp.data)) == 0)
989 		return;
990 
991 	memcpy(hdev->eir, cp.data, sizeof(cp.data));
992 
993 	hci_req_add(req, HCI_OP_WRITE_EIR, sizeof(cp), &cp);
994 }
995 
996 static u8 get_service_classes(struct hci_dev *hdev)
997 {
998 	struct bt_uuid *uuid;
999 	u8 val = 0;
1000 
1001 	list_for_each_entry(uuid, &hdev->uuids, list)
1002 		val |= uuid->svc_hint;
1003 
1004 	return val;
1005 }
1006 
1007 static void update_class(struct hci_request *req)
1008 {
1009 	struct hci_dev *hdev = req->hdev;
1010 	u8 cod[3];
1011 
1012 	BT_DBG("%s", hdev->name);
1013 
1014 	if (!hdev_is_powered(hdev))
1015 		return;
1016 
1017 	if (!test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags))
1018 		return;
1019 
1020 	if (test_bit(HCI_SERVICE_CACHE, &hdev->dev_flags))
1021 		return;
1022 
1023 	cod[0] = hdev->minor_class;
1024 	cod[1] = hdev->major_class;
1025 	cod[2] = get_service_classes(hdev);
1026 
1027 	if (test_bit(HCI_LIMITED_DISCOVERABLE, &hdev->dev_flags))
1028 		cod[1] |= 0x20;
1029 
1030 	if (memcmp(cod, hdev->dev_class, 3) == 0)
1031 		return;
1032 
1033 	hci_req_add(req, HCI_OP_WRITE_CLASS_OF_DEV, sizeof(cod), cod);
1034 }
1035 
1036 static bool get_connectable(struct hci_dev *hdev)
1037 {
1038 	struct pending_cmd *cmd;
1039 
1040 	/* If there's a pending mgmt command the flag will not yet have
1041 	 * it's final value, so check for this first.
1042 	 */
1043 	cmd = mgmt_pending_find(MGMT_OP_SET_CONNECTABLE, hdev);
1044 	if (cmd) {
1045 		struct mgmt_mode *cp = cmd->param;
1046 		return cp->val;
1047 	}
1048 
1049 	return test_bit(HCI_CONNECTABLE, &hdev->dev_flags);
1050 }
1051 
1052 static void disable_advertising(struct hci_request *req)
1053 {
1054 	u8 enable = 0x00;
1055 
1056 	hci_req_add(req, HCI_OP_LE_SET_ADV_ENABLE, sizeof(enable), &enable);
1057 }
1058 
1059 static void enable_advertising(struct hci_request *req)
1060 {
1061 	struct hci_dev *hdev = req->hdev;
1062 	struct hci_cp_le_set_adv_param cp;
1063 	u8 own_addr_type, enable = 0x01;
1064 	bool connectable;
1065 
1066 	if (hci_conn_num(hdev, LE_LINK) > 0)
1067 		return;
1068 
1069 	if (test_bit(HCI_LE_ADV, &hdev->dev_flags))
1070 		disable_advertising(req);
1071 
1072 	/* Clear the HCI_LE_ADV bit temporarily so that the
1073 	 * hci_update_random_address knows that it's safe to go ahead
1074 	 * and write a new random address. The flag will be set back on
1075 	 * as soon as the SET_ADV_ENABLE HCI command completes.
1076 	 */
1077 	clear_bit(HCI_LE_ADV, &hdev->dev_flags);
1078 
1079 	connectable = get_connectable(hdev);
1080 
1081 	/* Set require_privacy to true only when non-connectable
1082 	 * advertising is used. In that case it is fine to use a
1083 	 * non-resolvable private address.
1084 	 */
1085 	if (hci_update_random_address(req, !connectable, &own_addr_type) < 0)
1086 		return;
1087 
1088 	memset(&cp, 0, sizeof(cp));
1089 	cp.min_interval = cpu_to_le16(hdev->le_adv_min_interval);
1090 	cp.max_interval = cpu_to_le16(hdev->le_adv_max_interval);
1091 	cp.type = connectable ? LE_ADV_IND : LE_ADV_NONCONN_IND;
1092 	cp.own_address_type = own_addr_type;
1093 	cp.channel_map = hdev->le_adv_channel_map;
1094 
1095 	hci_req_add(req, HCI_OP_LE_SET_ADV_PARAM, sizeof(cp), &cp);
1096 
1097 	hci_req_add(req, HCI_OP_LE_SET_ADV_ENABLE, sizeof(enable), &enable);
1098 }
1099 
1100 static void service_cache_off(struct work_struct *work)
1101 {
1102 	struct hci_dev *hdev = container_of(work, struct hci_dev,
1103 					    service_cache.work);
1104 	struct hci_request req;
1105 
1106 	if (!test_and_clear_bit(HCI_SERVICE_CACHE, &hdev->dev_flags))
1107 		return;
1108 
1109 	hci_req_init(&req, hdev);
1110 
1111 	hci_dev_lock(hdev);
1112 
1113 	update_eir(&req);
1114 	update_class(&req);
1115 
1116 	hci_dev_unlock(hdev);
1117 
1118 	hci_req_run(&req, NULL);
1119 }
1120 
1121 static void rpa_expired(struct work_struct *work)
1122 {
1123 	struct hci_dev *hdev = container_of(work, struct hci_dev,
1124 					    rpa_expired.work);
1125 	struct hci_request req;
1126 
1127 	BT_DBG("");
1128 
1129 	set_bit(HCI_RPA_EXPIRED, &hdev->dev_flags);
1130 
1131 	if (!test_bit(HCI_ADVERTISING, &hdev->dev_flags))
1132 		return;
1133 
1134 	/* The generation of a new RPA and programming it into the
1135 	 * controller happens in the enable_advertising() function.
1136 	 */
1137 	hci_req_init(&req, hdev);
1138 	enable_advertising(&req);
1139 	hci_req_run(&req, NULL);
1140 }
1141 
1142 static void mgmt_init_hdev(struct sock *sk, struct hci_dev *hdev)
1143 {
1144 	if (test_and_set_bit(HCI_MGMT, &hdev->dev_flags))
1145 		return;
1146 
1147 	INIT_DELAYED_WORK(&hdev->service_cache, service_cache_off);
1148 	INIT_DELAYED_WORK(&hdev->rpa_expired, rpa_expired);
1149 
1150 	/* Non-mgmt controlled devices get this bit set
1151 	 * implicitly so that pairing works for them, however
1152 	 * for mgmt we require user-space to explicitly enable
1153 	 * it
1154 	 */
1155 	clear_bit(HCI_BONDABLE, &hdev->dev_flags);
1156 }
1157 
1158 static int read_controller_info(struct sock *sk, struct hci_dev *hdev,
1159 				void *data, u16 data_len)
1160 {
1161 	struct mgmt_rp_read_info rp;
1162 
1163 	BT_DBG("sock %p %s", sk, hdev->name);
1164 
1165 	hci_dev_lock(hdev);
1166 
1167 	memset(&rp, 0, sizeof(rp));
1168 
1169 	bacpy(&rp.bdaddr, &hdev->bdaddr);
1170 
1171 	rp.version = hdev->hci_ver;
1172 	rp.manufacturer = cpu_to_le16(hdev->manufacturer);
1173 
1174 	rp.supported_settings = cpu_to_le32(get_supported_settings(hdev));
1175 	rp.current_settings = cpu_to_le32(get_current_settings(hdev));
1176 
1177 	memcpy(rp.dev_class, hdev->dev_class, 3);
1178 
1179 	memcpy(rp.name, hdev->dev_name, sizeof(hdev->dev_name));
1180 	memcpy(rp.short_name, hdev->short_name, sizeof(hdev->short_name));
1181 
1182 	hci_dev_unlock(hdev);
1183 
1184 	return cmd_complete(sk, hdev->id, MGMT_OP_READ_INFO, 0, &rp,
1185 			    sizeof(rp));
1186 }
1187 
1188 static void mgmt_pending_free(struct pending_cmd *cmd)
1189 {
1190 	sock_put(cmd->sk);
1191 	kfree(cmd->param);
1192 	kfree(cmd);
1193 }
1194 
1195 static struct pending_cmd *mgmt_pending_add(struct sock *sk, u16 opcode,
1196 					    struct hci_dev *hdev, void *data,
1197 					    u16 len)
1198 {
1199 	struct pending_cmd *cmd;
1200 
1201 	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
1202 	if (!cmd)
1203 		return NULL;
1204 
1205 	cmd->opcode = opcode;
1206 	cmd->index = hdev->id;
1207 
1208 	cmd->param = kmalloc(len, GFP_KERNEL);
1209 	if (!cmd->param) {
1210 		kfree(cmd);
1211 		return NULL;
1212 	}
1213 
1214 	if (data)
1215 		memcpy(cmd->param, data, len);
1216 
1217 	cmd->sk = sk;
1218 	sock_hold(sk);
1219 
1220 	list_add(&cmd->list, &hdev->mgmt_pending);
1221 
1222 	return cmd;
1223 }
1224 
1225 static void mgmt_pending_foreach(u16 opcode, struct hci_dev *hdev,
1226 				 void (*cb)(struct pending_cmd *cmd,
1227 					    void *data),
1228 				 void *data)
1229 {
1230 	struct pending_cmd *cmd, *tmp;
1231 
1232 	list_for_each_entry_safe(cmd, tmp, &hdev->mgmt_pending, list) {
1233 		if (opcode > 0 && cmd->opcode != opcode)
1234 			continue;
1235 
1236 		cb(cmd, data);
1237 	}
1238 }
1239 
1240 static void mgmt_pending_remove(struct pending_cmd *cmd)
1241 {
1242 	list_del(&cmd->list);
1243 	mgmt_pending_free(cmd);
1244 }
1245 
1246 static int send_settings_rsp(struct sock *sk, u16 opcode, struct hci_dev *hdev)
1247 {
1248 	__le32 settings = cpu_to_le32(get_current_settings(hdev));
1249 
1250 	return cmd_complete(sk, hdev->id, opcode, 0, &settings,
1251 			    sizeof(settings));
1252 }
1253 
1254 static void clean_up_hci_complete(struct hci_dev *hdev, u8 status)
1255 {
1256 	BT_DBG("%s status 0x%02x", hdev->name, status);
1257 
1258 	if (hci_conn_count(hdev) == 0) {
1259 		cancel_delayed_work(&hdev->power_off);
1260 		queue_work(hdev->req_workqueue, &hdev->power_off.work);
1261 	}
1262 }
1263 
1264 static bool hci_stop_discovery(struct hci_request *req)
1265 {
1266 	struct hci_dev *hdev = req->hdev;
1267 	struct hci_cp_remote_name_req_cancel cp;
1268 	struct inquiry_entry *e;
1269 
1270 	switch (hdev->discovery.state) {
1271 	case DISCOVERY_FINDING:
1272 		if (test_bit(HCI_INQUIRY, &hdev->flags)) {
1273 			hci_req_add(req, HCI_OP_INQUIRY_CANCEL, 0, NULL);
1274 		} else {
1275 			cancel_delayed_work(&hdev->le_scan_disable);
1276 			hci_req_add_le_scan_disable(req);
1277 		}
1278 
1279 		return true;
1280 
1281 	case DISCOVERY_RESOLVING:
1282 		e = hci_inquiry_cache_lookup_resolve(hdev, BDADDR_ANY,
1283 						     NAME_PENDING);
1284 		if (!e)
1285 			break;
1286 
1287 		bacpy(&cp.bdaddr, &e->data.bdaddr);
1288 		hci_req_add(req, HCI_OP_REMOTE_NAME_REQ_CANCEL, sizeof(cp),
1289 			    &cp);
1290 
1291 		return true;
1292 
1293 	default:
1294 		/* Passive scanning */
1295 		if (test_bit(HCI_LE_SCAN, &hdev->dev_flags)) {
1296 			hci_req_add_le_scan_disable(req);
1297 			return true;
1298 		}
1299 
1300 		break;
1301 	}
1302 
1303 	return false;
1304 }
1305 
1306 static int clean_up_hci_state(struct hci_dev *hdev)
1307 {
1308 	struct hci_request req;
1309 	struct hci_conn *conn;
1310 	bool discov_stopped;
1311 	int err;
1312 
1313 	hci_req_init(&req, hdev);
1314 
1315 	if (test_bit(HCI_ISCAN, &hdev->flags) ||
1316 	    test_bit(HCI_PSCAN, &hdev->flags)) {
1317 		u8 scan = 0x00;
1318 		hci_req_add(&req, HCI_OP_WRITE_SCAN_ENABLE, 1, &scan);
1319 	}
1320 
1321 	if (test_bit(HCI_LE_ADV, &hdev->dev_flags))
1322 		disable_advertising(&req);
1323 
1324 	discov_stopped = hci_stop_discovery(&req);
1325 
1326 	list_for_each_entry(conn, &hdev->conn_hash.list, list) {
1327 		struct hci_cp_disconnect dc;
1328 		struct hci_cp_reject_conn_req rej;
1329 
1330 		switch (conn->state) {
1331 		case BT_CONNECTED:
1332 		case BT_CONFIG:
1333 			dc.handle = cpu_to_le16(conn->handle);
1334 			dc.reason = 0x15; /* Terminated due to Power Off */
1335 			hci_req_add(&req, HCI_OP_DISCONNECT, sizeof(dc), &dc);
1336 			break;
1337 		case BT_CONNECT:
1338 			if (conn->type == LE_LINK)
1339 				hci_req_add(&req, HCI_OP_LE_CREATE_CONN_CANCEL,
1340 					    0, NULL);
1341 			else if (conn->type == ACL_LINK)
1342 				hci_req_add(&req, HCI_OP_CREATE_CONN_CANCEL,
1343 					    6, &conn->dst);
1344 			break;
1345 		case BT_CONNECT2:
1346 			bacpy(&rej.bdaddr, &conn->dst);
1347 			rej.reason = 0x15; /* Terminated due to Power Off */
1348 			if (conn->type == ACL_LINK)
1349 				hci_req_add(&req, HCI_OP_REJECT_CONN_REQ,
1350 					    sizeof(rej), &rej);
1351 			else if (conn->type == SCO_LINK)
1352 				hci_req_add(&req, HCI_OP_REJECT_SYNC_CONN_REQ,
1353 					    sizeof(rej), &rej);
1354 			break;
1355 		}
1356 	}
1357 
1358 	err = hci_req_run(&req, clean_up_hci_complete);
1359 	if (!err && discov_stopped)
1360 		hci_discovery_set_state(hdev, DISCOVERY_STOPPING);
1361 
1362 	return err;
1363 }
1364 
1365 static int set_powered(struct sock *sk, struct hci_dev *hdev, void *data,
1366 		       u16 len)
1367 {
1368 	struct mgmt_mode *cp = data;
1369 	struct pending_cmd *cmd;
1370 	int err;
1371 
1372 	BT_DBG("request for %s", hdev->name);
1373 
1374 	if (cp->val != 0x00 && cp->val != 0x01)
1375 		return cmd_status(sk, hdev->id, MGMT_OP_SET_POWERED,
1376 				  MGMT_STATUS_INVALID_PARAMS);
1377 
1378 	hci_dev_lock(hdev);
1379 
1380 	if (mgmt_pending_find(MGMT_OP_SET_POWERED, hdev)) {
1381 		err = cmd_status(sk, hdev->id, MGMT_OP_SET_POWERED,
1382 				 MGMT_STATUS_BUSY);
1383 		goto failed;
1384 	}
1385 
1386 	if (test_and_clear_bit(HCI_AUTO_OFF, &hdev->dev_flags)) {
1387 		cancel_delayed_work(&hdev->power_off);
1388 
1389 		if (cp->val) {
1390 			mgmt_pending_add(sk, MGMT_OP_SET_POWERED, hdev,
1391 					 data, len);
1392 			err = mgmt_powered(hdev, 1);
1393 			goto failed;
1394 		}
1395 	}
1396 
1397 	if (!!cp->val == hdev_is_powered(hdev)) {
1398 		err = send_settings_rsp(sk, MGMT_OP_SET_POWERED, hdev);
1399 		goto failed;
1400 	}
1401 
1402 	cmd = mgmt_pending_add(sk, MGMT_OP_SET_POWERED, hdev, data, len);
1403 	if (!cmd) {
1404 		err = -ENOMEM;
1405 		goto failed;
1406 	}
1407 
1408 	if (cp->val) {
1409 		queue_work(hdev->req_workqueue, &hdev->power_on);
1410 		err = 0;
1411 	} else {
1412 		/* Disconnect connections, stop scans, etc */
1413 		err = clean_up_hci_state(hdev);
1414 		if (!err)
1415 			queue_delayed_work(hdev->req_workqueue, &hdev->power_off,
1416 					   HCI_POWER_OFF_TIMEOUT);
1417 
1418 		/* ENODATA means there were no HCI commands queued */
1419 		if (err == -ENODATA) {
1420 			cancel_delayed_work(&hdev->power_off);
1421 			queue_work(hdev->req_workqueue, &hdev->power_off.work);
1422 			err = 0;
1423 		}
1424 	}
1425 
1426 failed:
1427 	hci_dev_unlock(hdev);
1428 	return err;
1429 }
1430 
1431 static int new_settings(struct hci_dev *hdev, struct sock *skip)
1432 {
1433 	__le32 ev;
1434 
1435 	ev = cpu_to_le32(get_current_settings(hdev));
1436 
1437 	return mgmt_event(MGMT_EV_NEW_SETTINGS, hdev, &ev, sizeof(ev), skip);
1438 }
1439 
1440 int mgmt_new_settings(struct hci_dev *hdev)
1441 {
1442 	return new_settings(hdev, NULL);
1443 }
1444 
1445 struct cmd_lookup {
1446 	struct sock *sk;
1447 	struct hci_dev *hdev;
1448 	u8 mgmt_status;
1449 };
1450 
1451 static void settings_rsp(struct pending_cmd *cmd, void *data)
1452 {
1453 	struct cmd_lookup *match = data;
1454 
1455 	send_settings_rsp(cmd->sk, cmd->opcode, match->hdev);
1456 
1457 	list_del(&cmd->list);
1458 
1459 	if (match->sk == NULL) {
1460 		match->sk = cmd->sk;
1461 		sock_hold(match->sk);
1462 	}
1463 
1464 	mgmt_pending_free(cmd);
1465 }
1466 
1467 static void cmd_status_rsp(struct pending_cmd *cmd, void *data)
1468 {
1469 	u8 *status = data;
1470 
1471 	cmd_status(cmd->sk, cmd->index, cmd->opcode, *status);
1472 	mgmt_pending_remove(cmd);
1473 }
1474 
1475 static u8 mgmt_bredr_support(struct hci_dev *hdev)
1476 {
1477 	if (!lmp_bredr_capable(hdev))
1478 		return MGMT_STATUS_NOT_SUPPORTED;
1479 	else if (!test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags))
1480 		return MGMT_STATUS_REJECTED;
1481 	else
1482 		return MGMT_STATUS_SUCCESS;
1483 }
1484 
1485 static u8 mgmt_le_support(struct hci_dev *hdev)
1486 {
1487 	if (!lmp_le_capable(hdev))
1488 		return MGMT_STATUS_NOT_SUPPORTED;
1489 	else if (!test_bit(HCI_LE_ENABLED, &hdev->dev_flags))
1490 		return MGMT_STATUS_REJECTED;
1491 	else
1492 		return MGMT_STATUS_SUCCESS;
1493 }
1494 
1495 static void set_discoverable_complete(struct hci_dev *hdev, u8 status)
1496 {
1497 	struct pending_cmd *cmd;
1498 	struct mgmt_mode *cp;
1499 	struct hci_request req;
1500 	bool changed;
1501 
1502 	BT_DBG("status 0x%02x", status);
1503 
1504 	hci_dev_lock(hdev);
1505 
1506 	cmd = mgmt_pending_find(MGMT_OP_SET_DISCOVERABLE, hdev);
1507 	if (!cmd)
1508 		goto unlock;
1509 
1510 	if (status) {
1511 		u8 mgmt_err = mgmt_status(status);
1512 		cmd_status(cmd->sk, cmd->index, cmd->opcode, mgmt_err);
1513 		clear_bit(HCI_LIMITED_DISCOVERABLE, &hdev->dev_flags);
1514 		goto remove_cmd;
1515 	}
1516 
1517 	cp = cmd->param;
1518 	if (cp->val) {
1519 		changed = !test_and_set_bit(HCI_DISCOVERABLE,
1520 					    &hdev->dev_flags);
1521 
1522 		if (hdev->discov_timeout > 0) {
1523 			int to = msecs_to_jiffies(hdev->discov_timeout * 1000);
1524 			queue_delayed_work(hdev->workqueue, &hdev->discov_off,
1525 					   to);
1526 		}
1527 	} else {
1528 		changed = test_and_clear_bit(HCI_DISCOVERABLE,
1529 					     &hdev->dev_flags);
1530 	}
1531 
1532 	send_settings_rsp(cmd->sk, MGMT_OP_SET_DISCOVERABLE, hdev);
1533 
1534 	if (changed)
1535 		new_settings(hdev, cmd->sk);
1536 
1537 	/* When the discoverable mode gets changed, make sure
1538 	 * that class of device has the limited discoverable
1539 	 * bit correctly set.
1540 	 */
1541 	hci_req_init(&req, hdev);
1542 	update_class(&req);
1543 	hci_req_run(&req, NULL);
1544 
1545 remove_cmd:
1546 	mgmt_pending_remove(cmd);
1547 
1548 unlock:
1549 	hci_dev_unlock(hdev);
1550 }
1551 
1552 static int set_discoverable(struct sock *sk, struct hci_dev *hdev, void *data,
1553 			    u16 len)
1554 {
1555 	struct mgmt_cp_set_discoverable *cp = data;
1556 	struct pending_cmd *cmd;
1557 	struct hci_request req;
1558 	u16 timeout;
1559 	u8 scan;
1560 	int err;
1561 
1562 	BT_DBG("request for %s", hdev->name);
1563 
1564 	if (!test_bit(HCI_LE_ENABLED, &hdev->dev_flags) &&
1565 	    !test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags))
1566 		return cmd_status(sk, hdev->id, MGMT_OP_SET_DISCOVERABLE,
1567 				  MGMT_STATUS_REJECTED);
1568 
1569 	if (cp->val != 0x00 && cp->val != 0x01 && cp->val != 0x02)
1570 		return cmd_status(sk, hdev->id, MGMT_OP_SET_DISCOVERABLE,
1571 				  MGMT_STATUS_INVALID_PARAMS);
1572 
1573 	timeout = __le16_to_cpu(cp->timeout);
1574 
1575 	/* Disabling discoverable requires that no timeout is set,
1576 	 * and enabling limited discoverable requires a timeout.
1577 	 */
1578 	if ((cp->val == 0x00 && timeout > 0) ||
1579 	    (cp->val == 0x02 && timeout == 0))
1580 		return cmd_status(sk, hdev->id, MGMT_OP_SET_DISCOVERABLE,
1581 				  MGMT_STATUS_INVALID_PARAMS);
1582 
1583 	hci_dev_lock(hdev);
1584 
1585 	if (!hdev_is_powered(hdev) && timeout > 0) {
1586 		err = cmd_status(sk, hdev->id, MGMT_OP_SET_DISCOVERABLE,
1587 				 MGMT_STATUS_NOT_POWERED);
1588 		goto failed;
1589 	}
1590 
1591 	if (mgmt_pending_find(MGMT_OP_SET_DISCOVERABLE, hdev) ||
1592 	    mgmt_pending_find(MGMT_OP_SET_CONNECTABLE, hdev)) {
1593 		err = cmd_status(sk, hdev->id, MGMT_OP_SET_DISCOVERABLE,
1594 				 MGMT_STATUS_BUSY);
1595 		goto failed;
1596 	}
1597 
1598 	if (!test_bit(HCI_CONNECTABLE, &hdev->dev_flags)) {
1599 		err = cmd_status(sk, hdev->id, MGMT_OP_SET_DISCOVERABLE,
1600 				 MGMT_STATUS_REJECTED);
1601 		goto failed;
1602 	}
1603 
1604 	if (!hdev_is_powered(hdev)) {
1605 		bool changed = false;
1606 
1607 		/* Setting limited discoverable when powered off is
1608 		 * not a valid operation since it requires a timeout
1609 		 * and so no need to check HCI_LIMITED_DISCOVERABLE.
1610 		 */
1611 		if (!!cp->val != test_bit(HCI_DISCOVERABLE, &hdev->dev_flags)) {
1612 			change_bit(HCI_DISCOVERABLE, &hdev->dev_flags);
1613 			changed = true;
1614 		}
1615 
1616 		err = send_settings_rsp(sk, MGMT_OP_SET_DISCOVERABLE, hdev);
1617 		if (err < 0)
1618 			goto failed;
1619 
1620 		if (changed)
1621 			err = new_settings(hdev, sk);
1622 
1623 		goto failed;
1624 	}
1625 
1626 	/* If the current mode is the same, then just update the timeout
1627 	 * value with the new value. And if only the timeout gets updated,
1628 	 * then no need for any HCI transactions.
1629 	 */
1630 	if (!!cp->val == test_bit(HCI_DISCOVERABLE, &hdev->dev_flags) &&
1631 	    (cp->val == 0x02) == test_bit(HCI_LIMITED_DISCOVERABLE,
1632 					  &hdev->dev_flags)) {
1633 		cancel_delayed_work(&hdev->discov_off);
1634 		hdev->discov_timeout = timeout;
1635 
1636 		if (cp->val && hdev->discov_timeout > 0) {
1637 			int to = msecs_to_jiffies(hdev->discov_timeout * 1000);
1638 			queue_delayed_work(hdev->workqueue, &hdev->discov_off,
1639 					   to);
1640 		}
1641 
1642 		err = send_settings_rsp(sk, MGMT_OP_SET_DISCOVERABLE, hdev);
1643 		goto failed;
1644 	}
1645 
1646 	cmd = mgmt_pending_add(sk, MGMT_OP_SET_DISCOVERABLE, hdev, data, len);
1647 	if (!cmd) {
1648 		err = -ENOMEM;
1649 		goto failed;
1650 	}
1651 
1652 	/* Cancel any potential discoverable timeout that might be
1653 	 * still active and store new timeout value. The arming of
1654 	 * the timeout happens in the complete handler.
1655 	 */
1656 	cancel_delayed_work(&hdev->discov_off);
1657 	hdev->discov_timeout = timeout;
1658 
1659 	/* Limited discoverable mode */
1660 	if (cp->val == 0x02)
1661 		set_bit(HCI_LIMITED_DISCOVERABLE, &hdev->dev_flags);
1662 	else
1663 		clear_bit(HCI_LIMITED_DISCOVERABLE, &hdev->dev_flags);
1664 
1665 	hci_req_init(&req, hdev);
1666 
1667 	/* The procedure for LE-only controllers is much simpler - just
1668 	 * update the advertising data.
1669 	 */
1670 	if (!test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags))
1671 		goto update_ad;
1672 
1673 	scan = SCAN_PAGE;
1674 
1675 	if (cp->val) {
1676 		struct hci_cp_write_current_iac_lap hci_cp;
1677 
1678 		if (cp->val == 0x02) {
1679 			/* Limited discoverable mode */
1680 			hci_cp.num_iac = min_t(u8, hdev->num_iac, 2);
1681 			hci_cp.iac_lap[0] = 0x00;	/* LIAC */
1682 			hci_cp.iac_lap[1] = 0x8b;
1683 			hci_cp.iac_lap[2] = 0x9e;
1684 			hci_cp.iac_lap[3] = 0x33;	/* GIAC */
1685 			hci_cp.iac_lap[4] = 0x8b;
1686 			hci_cp.iac_lap[5] = 0x9e;
1687 		} else {
1688 			/* General discoverable mode */
1689 			hci_cp.num_iac = 1;
1690 			hci_cp.iac_lap[0] = 0x33;	/* GIAC */
1691 			hci_cp.iac_lap[1] = 0x8b;
1692 			hci_cp.iac_lap[2] = 0x9e;
1693 		}
1694 
1695 		hci_req_add(&req, HCI_OP_WRITE_CURRENT_IAC_LAP,
1696 			    (hci_cp.num_iac * 3) + 1, &hci_cp);
1697 
1698 		scan |= SCAN_INQUIRY;
1699 	} else {
1700 		clear_bit(HCI_LIMITED_DISCOVERABLE, &hdev->dev_flags);
1701 	}
1702 
1703 	hci_req_add(&req, HCI_OP_WRITE_SCAN_ENABLE, sizeof(scan), &scan);
1704 
1705 update_ad:
1706 	update_adv_data(&req);
1707 
1708 	err = hci_req_run(&req, set_discoverable_complete);
1709 	if (err < 0)
1710 		mgmt_pending_remove(cmd);
1711 
1712 failed:
1713 	hci_dev_unlock(hdev);
1714 	return err;
1715 }
1716 
1717 static void write_fast_connectable(struct hci_request *req, bool enable)
1718 {
1719 	struct hci_dev *hdev = req->hdev;
1720 	struct hci_cp_write_page_scan_activity acp;
1721 	u8 type;
1722 
1723 	if (!test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags))
1724 		return;
1725 
1726 	if (hdev->hci_ver < BLUETOOTH_VER_1_2)
1727 		return;
1728 
1729 	if (enable) {
1730 		type = PAGE_SCAN_TYPE_INTERLACED;
1731 
1732 		/* 160 msec page scan interval */
1733 		acp.interval = cpu_to_le16(0x0100);
1734 	} else {
1735 		type = PAGE_SCAN_TYPE_STANDARD;	/* default */
1736 
1737 		/* default 1.28 sec page scan */
1738 		acp.interval = cpu_to_le16(0x0800);
1739 	}
1740 
1741 	acp.window = cpu_to_le16(0x0012);
1742 
1743 	if (__cpu_to_le16(hdev->page_scan_interval) != acp.interval ||
1744 	    __cpu_to_le16(hdev->page_scan_window) != acp.window)
1745 		hci_req_add(req, HCI_OP_WRITE_PAGE_SCAN_ACTIVITY,
1746 			    sizeof(acp), &acp);
1747 
1748 	if (hdev->page_scan_type != type)
1749 		hci_req_add(req, HCI_OP_WRITE_PAGE_SCAN_TYPE, 1, &type);
1750 }
1751 
1752 static void set_connectable_complete(struct hci_dev *hdev, u8 status)
1753 {
1754 	struct pending_cmd *cmd;
1755 	struct mgmt_mode *cp;
1756 	bool conn_changed, discov_changed;
1757 
1758 	BT_DBG("status 0x%02x", status);
1759 
1760 	hci_dev_lock(hdev);
1761 
1762 	cmd = mgmt_pending_find(MGMT_OP_SET_CONNECTABLE, hdev);
1763 	if (!cmd)
1764 		goto unlock;
1765 
1766 	if (status) {
1767 		u8 mgmt_err = mgmt_status(status);
1768 		cmd_status(cmd->sk, cmd->index, cmd->opcode, mgmt_err);
1769 		goto remove_cmd;
1770 	}
1771 
1772 	cp = cmd->param;
1773 	if (cp->val) {
1774 		conn_changed = !test_and_set_bit(HCI_CONNECTABLE,
1775 						 &hdev->dev_flags);
1776 		discov_changed = false;
1777 	} else {
1778 		conn_changed = test_and_clear_bit(HCI_CONNECTABLE,
1779 						  &hdev->dev_flags);
1780 		discov_changed = test_and_clear_bit(HCI_DISCOVERABLE,
1781 						    &hdev->dev_flags);
1782 	}
1783 
1784 	send_settings_rsp(cmd->sk, MGMT_OP_SET_CONNECTABLE, hdev);
1785 
1786 	if (conn_changed || discov_changed) {
1787 		new_settings(hdev, cmd->sk);
1788 		if (discov_changed)
1789 			mgmt_update_adv_data(hdev);
1790 		hci_update_background_scan(hdev);
1791 	}
1792 
1793 remove_cmd:
1794 	mgmt_pending_remove(cmd);
1795 
1796 unlock:
1797 	hci_dev_unlock(hdev);
1798 }
1799 
1800 static int set_connectable_update_settings(struct hci_dev *hdev,
1801 					   struct sock *sk, u8 val)
1802 {
1803 	bool changed = false;
1804 	int err;
1805 
1806 	if (!!val != test_bit(HCI_CONNECTABLE, &hdev->dev_flags))
1807 		changed = true;
1808 
1809 	if (val) {
1810 		set_bit(HCI_CONNECTABLE, &hdev->dev_flags);
1811 	} else {
1812 		clear_bit(HCI_CONNECTABLE, &hdev->dev_flags);
1813 		clear_bit(HCI_DISCOVERABLE, &hdev->dev_flags);
1814 	}
1815 
1816 	err = send_settings_rsp(sk, MGMT_OP_SET_CONNECTABLE, hdev);
1817 	if (err < 0)
1818 		return err;
1819 
1820 	if (changed) {
1821 		hci_update_background_scan(hdev);
1822 		return new_settings(hdev, sk);
1823 	}
1824 
1825 	return 0;
1826 }
1827 
1828 static int set_connectable(struct sock *sk, struct hci_dev *hdev, void *data,
1829 			   u16 len)
1830 {
1831 	struct mgmt_mode *cp = data;
1832 	struct pending_cmd *cmd;
1833 	struct hci_request req;
1834 	u8 scan;
1835 	int err;
1836 
1837 	BT_DBG("request for %s", hdev->name);
1838 
1839 	if (!test_bit(HCI_LE_ENABLED, &hdev->dev_flags) &&
1840 	    !test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags))
1841 		return cmd_status(sk, hdev->id, MGMT_OP_SET_CONNECTABLE,
1842 				  MGMT_STATUS_REJECTED);
1843 
1844 	if (cp->val != 0x00 && cp->val != 0x01)
1845 		return cmd_status(sk, hdev->id, MGMT_OP_SET_CONNECTABLE,
1846 				  MGMT_STATUS_INVALID_PARAMS);
1847 
1848 	hci_dev_lock(hdev);
1849 
1850 	if (!hdev_is_powered(hdev)) {
1851 		err = set_connectable_update_settings(hdev, sk, cp->val);
1852 		goto failed;
1853 	}
1854 
1855 	if (mgmt_pending_find(MGMT_OP_SET_DISCOVERABLE, hdev) ||
1856 	    mgmt_pending_find(MGMT_OP_SET_CONNECTABLE, hdev)) {
1857 		err = cmd_status(sk, hdev->id, MGMT_OP_SET_CONNECTABLE,
1858 				 MGMT_STATUS_BUSY);
1859 		goto failed;
1860 	}
1861 
1862 	cmd = mgmt_pending_add(sk, MGMT_OP_SET_CONNECTABLE, hdev, data, len);
1863 	if (!cmd) {
1864 		err = -ENOMEM;
1865 		goto failed;
1866 	}
1867 
1868 	hci_req_init(&req, hdev);
1869 
1870 	/* If BR/EDR is not enabled and we disable advertising as a
1871 	 * by-product of disabling connectable, we need to update the
1872 	 * advertising flags.
1873 	 */
1874 	if (!test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags)) {
1875 		if (!cp->val) {
1876 			clear_bit(HCI_LIMITED_DISCOVERABLE, &hdev->dev_flags);
1877 			clear_bit(HCI_DISCOVERABLE, &hdev->dev_flags);
1878 		}
1879 		update_adv_data(&req);
1880 	} else if (cp->val != test_bit(HCI_PSCAN, &hdev->flags)) {
1881 		if (cp->val) {
1882 			scan = SCAN_PAGE;
1883 		} else {
1884 			/* If we don't have any whitelist entries just
1885 			 * disable all scanning. If there are entries
1886 			 * and we had both page and inquiry scanning
1887 			 * enabled then fall back to only page scanning.
1888 			 * Otherwise no changes are needed.
1889 			 */
1890 			if (list_empty(&hdev->whitelist))
1891 				scan = SCAN_DISABLED;
1892 			else if (test_bit(HCI_ISCAN, &hdev->flags))
1893 				scan = SCAN_PAGE;
1894 			else
1895 				goto no_scan_update;
1896 
1897 			if (test_bit(HCI_ISCAN, &hdev->flags) &&
1898 			    hdev->discov_timeout > 0)
1899 				cancel_delayed_work(&hdev->discov_off);
1900 		}
1901 
1902 		hci_req_add(&req, HCI_OP_WRITE_SCAN_ENABLE, 1, &scan);
1903 	}
1904 
1905 no_scan_update:
1906 	/* If we're going from non-connectable to connectable or
1907 	 * vice-versa when fast connectable is enabled ensure that fast
1908 	 * connectable gets disabled. write_fast_connectable won't do
1909 	 * anything if the page scan parameters are already what they
1910 	 * should be.
1911 	 */
1912 	if (cp->val || test_bit(HCI_FAST_CONNECTABLE, &hdev->dev_flags))
1913 		write_fast_connectable(&req, false);
1914 
1915 	/* Update the advertising parameters if necessary */
1916 	if (test_bit(HCI_ADVERTISING, &hdev->dev_flags))
1917 		enable_advertising(&req);
1918 
1919 	err = hci_req_run(&req, set_connectable_complete);
1920 	if (err < 0) {
1921 		mgmt_pending_remove(cmd);
1922 		if (err == -ENODATA)
1923 			err = set_connectable_update_settings(hdev, sk,
1924 							      cp->val);
1925 		goto failed;
1926 	}
1927 
1928 failed:
1929 	hci_dev_unlock(hdev);
1930 	return err;
1931 }
1932 
1933 static int set_bondable(struct sock *sk, struct hci_dev *hdev, void *data,
1934 			u16 len)
1935 {
1936 	struct mgmt_mode *cp = data;
1937 	bool changed;
1938 	int err;
1939 
1940 	BT_DBG("request for %s", hdev->name);
1941 
1942 	if (cp->val != 0x00 && cp->val != 0x01)
1943 		return cmd_status(sk, hdev->id, MGMT_OP_SET_BONDABLE,
1944 				  MGMT_STATUS_INVALID_PARAMS);
1945 
1946 	hci_dev_lock(hdev);
1947 
1948 	if (cp->val)
1949 		changed = !test_and_set_bit(HCI_BONDABLE, &hdev->dev_flags);
1950 	else
1951 		changed = test_and_clear_bit(HCI_BONDABLE, &hdev->dev_flags);
1952 
1953 	err = send_settings_rsp(sk, MGMT_OP_SET_BONDABLE, hdev);
1954 	if (err < 0)
1955 		goto unlock;
1956 
1957 	if (changed)
1958 		err = new_settings(hdev, sk);
1959 
1960 unlock:
1961 	hci_dev_unlock(hdev);
1962 	return err;
1963 }
1964 
1965 static int set_link_security(struct sock *sk, struct hci_dev *hdev, void *data,
1966 			     u16 len)
1967 {
1968 	struct mgmt_mode *cp = data;
1969 	struct pending_cmd *cmd;
1970 	u8 val, status;
1971 	int err;
1972 
1973 	BT_DBG("request for %s", hdev->name);
1974 
1975 	status = mgmt_bredr_support(hdev);
1976 	if (status)
1977 		return cmd_status(sk, hdev->id, MGMT_OP_SET_LINK_SECURITY,
1978 				  status);
1979 
1980 	if (cp->val != 0x00 && cp->val != 0x01)
1981 		return cmd_status(sk, hdev->id, MGMT_OP_SET_LINK_SECURITY,
1982 				  MGMT_STATUS_INVALID_PARAMS);
1983 
1984 	hci_dev_lock(hdev);
1985 
1986 	if (!hdev_is_powered(hdev)) {
1987 		bool changed = false;
1988 
1989 		if (!!cp->val != test_bit(HCI_LINK_SECURITY,
1990 					  &hdev->dev_flags)) {
1991 			change_bit(HCI_LINK_SECURITY, &hdev->dev_flags);
1992 			changed = true;
1993 		}
1994 
1995 		err = send_settings_rsp(sk, MGMT_OP_SET_LINK_SECURITY, hdev);
1996 		if (err < 0)
1997 			goto failed;
1998 
1999 		if (changed)
2000 			err = new_settings(hdev, sk);
2001 
2002 		goto failed;
2003 	}
2004 
2005 	if (mgmt_pending_find(MGMT_OP_SET_LINK_SECURITY, hdev)) {
2006 		err = cmd_status(sk, hdev->id, MGMT_OP_SET_LINK_SECURITY,
2007 				 MGMT_STATUS_BUSY);
2008 		goto failed;
2009 	}
2010 
2011 	val = !!cp->val;
2012 
2013 	if (test_bit(HCI_AUTH, &hdev->flags) == val) {
2014 		err = send_settings_rsp(sk, MGMT_OP_SET_LINK_SECURITY, hdev);
2015 		goto failed;
2016 	}
2017 
2018 	cmd = mgmt_pending_add(sk, MGMT_OP_SET_LINK_SECURITY, hdev, data, len);
2019 	if (!cmd) {
2020 		err = -ENOMEM;
2021 		goto failed;
2022 	}
2023 
2024 	err = hci_send_cmd(hdev, HCI_OP_WRITE_AUTH_ENABLE, sizeof(val), &val);
2025 	if (err < 0) {
2026 		mgmt_pending_remove(cmd);
2027 		goto failed;
2028 	}
2029 
2030 failed:
2031 	hci_dev_unlock(hdev);
2032 	return err;
2033 }
2034 
2035 static int set_ssp(struct sock *sk, struct hci_dev *hdev, void *data, u16 len)
2036 {
2037 	struct mgmt_mode *cp = data;
2038 	struct pending_cmd *cmd;
2039 	u8 status;
2040 	int err;
2041 
2042 	BT_DBG("request for %s", hdev->name);
2043 
2044 	status = mgmt_bredr_support(hdev);
2045 	if (status)
2046 		return cmd_status(sk, hdev->id, MGMT_OP_SET_SSP, status);
2047 
2048 	if (!lmp_ssp_capable(hdev))
2049 		return cmd_status(sk, hdev->id, MGMT_OP_SET_SSP,
2050 				  MGMT_STATUS_NOT_SUPPORTED);
2051 
2052 	if (cp->val != 0x00 && cp->val != 0x01)
2053 		return cmd_status(sk, hdev->id, MGMT_OP_SET_SSP,
2054 				  MGMT_STATUS_INVALID_PARAMS);
2055 
2056 	hci_dev_lock(hdev);
2057 
2058 	if (!hdev_is_powered(hdev)) {
2059 		bool changed;
2060 
2061 		if (cp->val) {
2062 			changed = !test_and_set_bit(HCI_SSP_ENABLED,
2063 						    &hdev->dev_flags);
2064 		} else {
2065 			changed = test_and_clear_bit(HCI_SSP_ENABLED,
2066 						     &hdev->dev_flags);
2067 			if (!changed)
2068 				changed = test_and_clear_bit(HCI_HS_ENABLED,
2069 							     &hdev->dev_flags);
2070 			else
2071 				clear_bit(HCI_HS_ENABLED, &hdev->dev_flags);
2072 		}
2073 
2074 		err = send_settings_rsp(sk, MGMT_OP_SET_SSP, hdev);
2075 		if (err < 0)
2076 			goto failed;
2077 
2078 		if (changed)
2079 			err = new_settings(hdev, sk);
2080 
2081 		goto failed;
2082 	}
2083 
2084 	if (mgmt_pending_find(MGMT_OP_SET_SSP, hdev) ||
2085 	    mgmt_pending_find(MGMT_OP_SET_HS, hdev)) {
2086 		err = cmd_status(sk, hdev->id, MGMT_OP_SET_SSP,
2087 				 MGMT_STATUS_BUSY);
2088 		goto failed;
2089 	}
2090 
2091 	if (!!cp->val == test_bit(HCI_SSP_ENABLED, &hdev->dev_flags)) {
2092 		err = send_settings_rsp(sk, MGMT_OP_SET_SSP, hdev);
2093 		goto failed;
2094 	}
2095 
2096 	cmd = mgmt_pending_add(sk, MGMT_OP_SET_SSP, hdev, data, len);
2097 	if (!cmd) {
2098 		err = -ENOMEM;
2099 		goto failed;
2100 	}
2101 
2102 	if (!cp->val && test_bit(HCI_USE_DEBUG_KEYS, &hdev->dev_flags))
2103 		hci_send_cmd(hdev, HCI_OP_WRITE_SSP_DEBUG_MODE,
2104 			     sizeof(cp->val), &cp->val);
2105 
2106 	err = hci_send_cmd(hdev, HCI_OP_WRITE_SSP_MODE, 1, &cp->val);
2107 	if (err < 0) {
2108 		mgmt_pending_remove(cmd);
2109 		goto failed;
2110 	}
2111 
2112 failed:
2113 	hci_dev_unlock(hdev);
2114 	return err;
2115 }
2116 
2117 static int set_hs(struct sock *sk, struct hci_dev *hdev, void *data, u16 len)
2118 {
2119 	struct mgmt_mode *cp = data;
2120 	bool changed;
2121 	u8 status;
2122 	int err;
2123 
2124 	BT_DBG("request for %s", hdev->name);
2125 
2126 	status = mgmt_bredr_support(hdev);
2127 	if (status)
2128 		return cmd_status(sk, hdev->id, MGMT_OP_SET_HS, status);
2129 
2130 	if (!lmp_ssp_capable(hdev))
2131 		return cmd_status(sk, hdev->id, MGMT_OP_SET_HS,
2132 				  MGMT_STATUS_NOT_SUPPORTED);
2133 
2134 	if (!test_bit(HCI_SSP_ENABLED, &hdev->dev_flags))
2135 		return cmd_status(sk, hdev->id, MGMT_OP_SET_HS,
2136 				  MGMT_STATUS_REJECTED);
2137 
2138 	if (cp->val != 0x00 && cp->val != 0x01)
2139 		return cmd_status(sk, hdev->id, MGMT_OP_SET_HS,
2140 				  MGMT_STATUS_INVALID_PARAMS);
2141 
2142 	hci_dev_lock(hdev);
2143 
2144 	if (cp->val) {
2145 		changed = !test_and_set_bit(HCI_HS_ENABLED, &hdev->dev_flags);
2146 	} else {
2147 		if (hdev_is_powered(hdev)) {
2148 			err = cmd_status(sk, hdev->id, MGMT_OP_SET_HS,
2149 					 MGMT_STATUS_REJECTED);
2150 			goto unlock;
2151 		}
2152 
2153 		changed = test_and_clear_bit(HCI_HS_ENABLED, &hdev->dev_flags);
2154 	}
2155 
2156 	err = send_settings_rsp(sk, MGMT_OP_SET_HS, hdev);
2157 	if (err < 0)
2158 		goto unlock;
2159 
2160 	if (changed)
2161 		err = new_settings(hdev, sk);
2162 
2163 unlock:
2164 	hci_dev_unlock(hdev);
2165 	return err;
2166 }
2167 
2168 static void le_enable_complete(struct hci_dev *hdev, u8 status)
2169 {
2170 	struct cmd_lookup match = { NULL, hdev };
2171 
2172 	if (status) {
2173 		u8 mgmt_err = mgmt_status(status);
2174 
2175 		mgmt_pending_foreach(MGMT_OP_SET_LE, hdev, cmd_status_rsp,
2176 				     &mgmt_err);
2177 		return;
2178 	}
2179 
2180 	mgmt_pending_foreach(MGMT_OP_SET_LE, hdev, settings_rsp, &match);
2181 
2182 	new_settings(hdev, match.sk);
2183 
2184 	if (match.sk)
2185 		sock_put(match.sk);
2186 
2187 	/* Make sure the controller has a good default for
2188 	 * advertising data. Restrict the update to when LE
2189 	 * has actually been enabled. During power on, the
2190 	 * update in powered_update_hci will take care of it.
2191 	 */
2192 	if (test_bit(HCI_LE_ENABLED, &hdev->dev_flags)) {
2193 		struct hci_request req;
2194 
2195 		hci_dev_lock(hdev);
2196 
2197 		hci_req_init(&req, hdev);
2198 		update_adv_data(&req);
2199 		update_scan_rsp_data(&req);
2200 		hci_req_run(&req, NULL);
2201 
2202 		hci_update_background_scan(hdev);
2203 
2204 		hci_dev_unlock(hdev);
2205 	}
2206 }
2207 
2208 static int set_le(struct sock *sk, struct hci_dev *hdev, void *data, u16 len)
2209 {
2210 	struct mgmt_mode *cp = data;
2211 	struct hci_cp_write_le_host_supported hci_cp;
2212 	struct pending_cmd *cmd;
2213 	struct hci_request req;
2214 	int err;
2215 	u8 val, enabled;
2216 
2217 	BT_DBG("request for %s", hdev->name);
2218 
2219 	if (!lmp_le_capable(hdev))
2220 		return cmd_status(sk, hdev->id, MGMT_OP_SET_LE,
2221 				  MGMT_STATUS_NOT_SUPPORTED);
2222 
2223 	if (cp->val != 0x00 && cp->val != 0x01)
2224 		return cmd_status(sk, hdev->id, MGMT_OP_SET_LE,
2225 				  MGMT_STATUS_INVALID_PARAMS);
2226 
2227 	/* LE-only devices do not allow toggling LE on/off */
2228 	if (!test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags))
2229 		return cmd_status(sk, hdev->id, MGMT_OP_SET_LE,
2230 				  MGMT_STATUS_REJECTED);
2231 
2232 	hci_dev_lock(hdev);
2233 
2234 	val = !!cp->val;
2235 	enabled = lmp_host_le_capable(hdev);
2236 
2237 	if (!hdev_is_powered(hdev) || val == enabled) {
2238 		bool changed = false;
2239 
2240 		if (val != test_bit(HCI_LE_ENABLED, &hdev->dev_flags)) {
2241 			change_bit(HCI_LE_ENABLED, &hdev->dev_flags);
2242 			changed = true;
2243 		}
2244 
2245 		if (!val && test_bit(HCI_ADVERTISING, &hdev->dev_flags)) {
2246 			clear_bit(HCI_ADVERTISING, &hdev->dev_flags);
2247 			changed = true;
2248 		}
2249 
2250 		err = send_settings_rsp(sk, MGMT_OP_SET_LE, hdev);
2251 		if (err < 0)
2252 			goto unlock;
2253 
2254 		if (changed)
2255 			err = new_settings(hdev, sk);
2256 
2257 		goto unlock;
2258 	}
2259 
2260 	if (mgmt_pending_find(MGMT_OP_SET_LE, hdev) ||
2261 	    mgmt_pending_find(MGMT_OP_SET_ADVERTISING, hdev)) {
2262 		err = cmd_status(sk, hdev->id, MGMT_OP_SET_LE,
2263 				 MGMT_STATUS_BUSY);
2264 		goto unlock;
2265 	}
2266 
2267 	cmd = mgmt_pending_add(sk, MGMT_OP_SET_LE, hdev, data, len);
2268 	if (!cmd) {
2269 		err = -ENOMEM;
2270 		goto unlock;
2271 	}
2272 
2273 	hci_req_init(&req, hdev);
2274 
2275 	memset(&hci_cp, 0, sizeof(hci_cp));
2276 
2277 	if (val) {
2278 		hci_cp.le = val;
2279 		hci_cp.simul = 0x00;
2280 	} else {
2281 		if (test_bit(HCI_LE_ADV, &hdev->dev_flags))
2282 			disable_advertising(&req);
2283 	}
2284 
2285 	hci_req_add(&req, HCI_OP_WRITE_LE_HOST_SUPPORTED, sizeof(hci_cp),
2286 		    &hci_cp);
2287 
2288 	err = hci_req_run(&req, le_enable_complete);
2289 	if (err < 0)
2290 		mgmt_pending_remove(cmd);
2291 
2292 unlock:
2293 	hci_dev_unlock(hdev);
2294 	return err;
2295 }
2296 
2297 /* This is a helper function to test for pending mgmt commands that can
2298  * cause CoD or EIR HCI commands. We can only allow one such pending
2299  * mgmt command at a time since otherwise we cannot easily track what
2300  * the current values are, will be, and based on that calculate if a new
2301  * HCI command needs to be sent and if yes with what value.
2302  */
2303 static bool pending_eir_or_class(struct hci_dev *hdev)
2304 {
2305 	struct pending_cmd *cmd;
2306 
2307 	list_for_each_entry(cmd, &hdev->mgmt_pending, list) {
2308 		switch (cmd->opcode) {
2309 		case MGMT_OP_ADD_UUID:
2310 		case MGMT_OP_REMOVE_UUID:
2311 		case MGMT_OP_SET_DEV_CLASS:
2312 		case MGMT_OP_SET_POWERED:
2313 			return true;
2314 		}
2315 	}
2316 
2317 	return false;
2318 }
2319 
2320 static const u8 bluetooth_base_uuid[] = {
2321 			0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80,
2322 			0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2323 };
2324 
2325 static u8 get_uuid_size(const u8 *uuid)
2326 {
2327 	u32 val;
2328 
2329 	if (memcmp(uuid, bluetooth_base_uuid, 12))
2330 		return 128;
2331 
2332 	val = get_unaligned_le32(&uuid[12]);
2333 	if (val > 0xffff)
2334 		return 32;
2335 
2336 	return 16;
2337 }
2338 
2339 static void mgmt_class_complete(struct hci_dev *hdev, u16 mgmt_op, u8 status)
2340 {
2341 	struct pending_cmd *cmd;
2342 
2343 	hci_dev_lock(hdev);
2344 
2345 	cmd = mgmt_pending_find(mgmt_op, hdev);
2346 	if (!cmd)
2347 		goto unlock;
2348 
2349 	cmd_complete(cmd->sk, cmd->index, cmd->opcode, mgmt_status(status),
2350 		     hdev->dev_class, 3);
2351 
2352 	mgmt_pending_remove(cmd);
2353 
2354 unlock:
2355 	hci_dev_unlock(hdev);
2356 }
2357 
2358 static void add_uuid_complete(struct hci_dev *hdev, u8 status)
2359 {
2360 	BT_DBG("status 0x%02x", status);
2361 
2362 	mgmt_class_complete(hdev, MGMT_OP_ADD_UUID, status);
2363 }
2364 
2365 static int add_uuid(struct sock *sk, struct hci_dev *hdev, void *data, u16 len)
2366 {
2367 	struct mgmt_cp_add_uuid *cp = data;
2368 	struct pending_cmd *cmd;
2369 	struct hci_request req;
2370 	struct bt_uuid *uuid;
2371 	int err;
2372 
2373 	BT_DBG("request for %s", hdev->name);
2374 
2375 	hci_dev_lock(hdev);
2376 
2377 	if (pending_eir_or_class(hdev)) {
2378 		err = cmd_status(sk, hdev->id, MGMT_OP_ADD_UUID,
2379 				 MGMT_STATUS_BUSY);
2380 		goto failed;
2381 	}
2382 
2383 	uuid = kmalloc(sizeof(*uuid), GFP_KERNEL);
2384 	if (!uuid) {
2385 		err = -ENOMEM;
2386 		goto failed;
2387 	}
2388 
2389 	memcpy(uuid->uuid, cp->uuid, 16);
2390 	uuid->svc_hint = cp->svc_hint;
2391 	uuid->size = get_uuid_size(cp->uuid);
2392 
2393 	list_add_tail(&uuid->list, &hdev->uuids);
2394 
2395 	hci_req_init(&req, hdev);
2396 
2397 	update_class(&req);
2398 	update_eir(&req);
2399 
2400 	err = hci_req_run(&req, add_uuid_complete);
2401 	if (err < 0) {
2402 		if (err != -ENODATA)
2403 			goto failed;
2404 
2405 		err = cmd_complete(sk, hdev->id, MGMT_OP_ADD_UUID, 0,
2406 				   hdev->dev_class, 3);
2407 		goto failed;
2408 	}
2409 
2410 	cmd = mgmt_pending_add(sk, MGMT_OP_ADD_UUID, hdev, data, len);
2411 	if (!cmd) {
2412 		err = -ENOMEM;
2413 		goto failed;
2414 	}
2415 
2416 	err = 0;
2417 
2418 failed:
2419 	hci_dev_unlock(hdev);
2420 	return err;
2421 }
2422 
2423 static bool enable_service_cache(struct hci_dev *hdev)
2424 {
2425 	if (!hdev_is_powered(hdev))
2426 		return false;
2427 
2428 	if (!test_and_set_bit(HCI_SERVICE_CACHE, &hdev->dev_flags)) {
2429 		queue_delayed_work(hdev->workqueue, &hdev->service_cache,
2430 				   CACHE_TIMEOUT);
2431 		return true;
2432 	}
2433 
2434 	return false;
2435 }
2436 
2437 static void remove_uuid_complete(struct hci_dev *hdev, u8 status)
2438 {
2439 	BT_DBG("status 0x%02x", status);
2440 
2441 	mgmt_class_complete(hdev, MGMT_OP_REMOVE_UUID, status);
2442 }
2443 
2444 static int remove_uuid(struct sock *sk, struct hci_dev *hdev, void *data,
2445 		       u16 len)
2446 {
2447 	struct mgmt_cp_remove_uuid *cp = data;
2448 	struct pending_cmd *cmd;
2449 	struct bt_uuid *match, *tmp;
2450 	u8 bt_uuid_any[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
2451 	struct hci_request req;
2452 	int err, found;
2453 
2454 	BT_DBG("request for %s", hdev->name);
2455 
2456 	hci_dev_lock(hdev);
2457 
2458 	if (pending_eir_or_class(hdev)) {
2459 		err = cmd_status(sk, hdev->id, MGMT_OP_REMOVE_UUID,
2460 				 MGMT_STATUS_BUSY);
2461 		goto unlock;
2462 	}
2463 
2464 	if (memcmp(cp->uuid, bt_uuid_any, 16) == 0) {
2465 		hci_uuids_clear(hdev);
2466 
2467 		if (enable_service_cache(hdev)) {
2468 			err = cmd_complete(sk, hdev->id, MGMT_OP_REMOVE_UUID,
2469 					   0, hdev->dev_class, 3);
2470 			goto unlock;
2471 		}
2472 
2473 		goto update_class;
2474 	}
2475 
2476 	found = 0;
2477 
2478 	list_for_each_entry_safe(match, tmp, &hdev->uuids, list) {
2479 		if (memcmp(match->uuid, cp->uuid, 16) != 0)
2480 			continue;
2481 
2482 		list_del(&match->list);
2483 		kfree(match);
2484 		found++;
2485 	}
2486 
2487 	if (found == 0) {
2488 		err = cmd_status(sk, hdev->id, MGMT_OP_REMOVE_UUID,
2489 				 MGMT_STATUS_INVALID_PARAMS);
2490 		goto unlock;
2491 	}
2492 
2493 update_class:
2494 	hci_req_init(&req, hdev);
2495 
2496 	update_class(&req);
2497 	update_eir(&req);
2498 
2499 	err = hci_req_run(&req, remove_uuid_complete);
2500 	if (err < 0) {
2501 		if (err != -ENODATA)
2502 			goto unlock;
2503 
2504 		err = cmd_complete(sk, hdev->id, MGMT_OP_REMOVE_UUID, 0,
2505 				   hdev->dev_class, 3);
2506 		goto unlock;
2507 	}
2508 
2509 	cmd = mgmt_pending_add(sk, MGMT_OP_REMOVE_UUID, hdev, data, len);
2510 	if (!cmd) {
2511 		err = -ENOMEM;
2512 		goto unlock;
2513 	}
2514 
2515 	err = 0;
2516 
2517 unlock:
2518 	hci_dev_unlock(hdev);
2519 	return err;
2520 }
2521 
2522 static void set_class_complete(struct hci_dev *hdev, u8 status)
2523 {
2524 	BT_DBG("status 0x%02x", status);
2525 
2526 	mgmt_class_complete(hdev, MGMT_OP_SET_DEV_CLASS, status);
2527 }
2528 
2529 static int set_dev_class(struct sock *sk, struct hci_dev *hdev, void *data,
2530 			 u16 len)
2531 {
2532 	struct mgmt_cp_set_dev_class *cp = data;
2533 	struct pending_cmd *cmd;
2534 	struct hci_request req;
2535 	int err;
2536 
2537 	BT_DBG("request for %s", hdev->name);
2538 
2539 	if (!lmp_bredr_capable(hdev))
2540 		return cmd_status(sk, hdev->id, MGMT_OP_SET_DEV_CLASS,
2541 				  MGMT_STATUS_NOT_SUPPORTED);
2542 
2543 	hci_dev_lock(hdev);
2544 
2545 	if (pending_eir_or_class(hdev)) {
2546 		err = cmd_status(sk, hdev->id, MGMT_OP_SET_DEV_CLASS,
2547 				 MGMT_STATUS_BUSY);
2548 		goto unlock;
2549 	}
2550 
2551 	if ((cp->minor & 0x03) != 0 || (cp->major & 0xe0) != 0) {
2552 		err = cmd_status(sk, hdev->id, MGMT_OP_SET_DEV_CLASS,
2553 				 MGMT_STATUS_INVALID_PARAMS);
2554 		goto unlock;
2555 	}
2556 
2557 	hdev->major_class = cp->major;
2558 	hdev->minor_class = cp->minor;
2559 
2560 	if (!hdev_is_powered(hdev)) {
2561 		err = cmd_complete(sk, hdev->id, MGMT_OP_SET_DEV_CLASS, 0,
2562 				   hdev->dev_class, 3);
2563 		goto unlock;
2564 	}
2565 
2566 	hci_req_init(&req, hdev);
2567 
2568 	if (test_and_clear_bit(HCI_SERVICE_CACHE, &hdev->dev_flags)) {
2569 		hci_dev_unlock(hdev);
2570 		cancel_delayed_work_sync(&hdev->service_cache);
2571 		hci_dev_lock(hdev);
2572 		update_eir(&req);
2573 	}
2574 
2575 	update_class(&req);
2576 
2577 	err = hci_req_run(&req, set_class_complete);
2578 	if (err < 0) {
2579 		if (err != -ENODATA)
2580 			goto unlock;
2581 
2582 		err = cmd_complete(sk, hdev->id, MGMT_OP_SET_DEV_CLASS, 0,
2583 				   hdev->dev_class, 3);
2584 		goto unlock;
2585 	}
2586 
2587 	cmd = mgmt_pending_add(sk, MGMT_OP_SET_DEV_CLASS, hdev, data, len);
2588 	if (!cmd) {
2589 		err = -ENOMEM;
2590 		goto unlock;
2591 	}
2592 
2593 	err = 0;
2594 
2595 unlock:
2596 	hci_dev_unlock(hdev);
2597 	return err;
2598 }
2599 
2600 static int load_link_keys(struct sock *sk, struct hci_dev *hdev, void *data,
2601 			  u16 len)
2602 {
2603 	struct mgmt_cp_load_link_keys *cp = data;
2604 	const u16 max_key_count = ((U16_MAX - sizeof(*cp)) /
2605 				   sizeof(struct mgmt_link_key_info));
2606 	u16 key_count, expected_len;
2607 	bool changed;
2608 	int i;
2609 
2610 	BT_DBG("request for %s", hdev->name);
2611 
2612 	if (!lmp_bredr_capable(hdev))
2613 		return cmd_status(sk, hdev->id, MGMT_OP_LOAD_LINK_KEYS,
2614 				  MGMT_STATUS_NOT_SUPPORTED);
2615 
2616 	key_count = __le16_to_cpu(cp->key_count);
2617 	if (key_count > max_key_count) {
2618 		BT_ERR("load_link_keys: too big key_count value %u",
2619 		       key_count);
2620 		return cmd_status(sk, hdev->id, MGMT_OP_LOAD_LINK_KEYS,
2621 				  MGMT_STATUS_INVALID_PARAMS);
2622 	}
2623 
2624 	expected_len = sizeof(*cp) + key_count *
2625 					sizeof(struct mgmt_link_key_info);
2626 	if (expected_len != len) {
2627 		BT_ERR("load_link_keys: expected %u bytes, got %u bytes",
2628 		       expected_len, len);
2629 		return cmd_status(sk, hdev->id, MGMT_OP_LOAD_LINK_KEYS,
2630 				  MGMT_STATUS_INVALID_PARAMS);
2631 	}
2632 
2633 	if (cp->debug_keys != 0x00 && cp->debug_keys != 0x01)
2634 		return cmd_status(sk, hdev->id, MGMT_OP_LOAD_LINK_KEYS,
2635 				  MGMT_STATUS_INVALID_PARAMS);
2636 
2637 	BT_DBG("%s debug_keys %u key_count %u", hdev->name, cp->debug_keys,
2638 	       key_count);
2639 
2640 	for (i = 0; i < key_count; i++) {
2641 		struct mgmt_link_key_info *key = &cp->keys[i];
2642 
2643 		if (key->addr.type != BDADDR_BREDR || key->type > 0x08)
2644 			return cmd_status(sk, hdev->id, MGMT_OP_LOAD_LINK_KEYS,
2645 					  MGMT_STATUS_INVALID_PARAMS);
2646 	}
2647 
2648 	hci_dev_lock(hdev);
2649 
2650 	hci_link_keys_clear(hdev);
2651 
2652 	if (cp->debug_keys)
2653 		changed = !test_and_set_bit(HCI_KEEP_DEBUG_KEYS,
2654 					    &hdev->dev_flags);
2655 	else
2656 		changed = test_and_clear_bit(HCI_KEEP_DEBUG_KEYS,
2657 					     &hdev->dev_flags);
2658 
2659 	if (changed)
2660 		new_settings(hdev, NULL);
2661 
2662 	for (i = 0; i < key_count; i++) {
2663 		struct mgmt_link_key_info *key = &cp->keys[i];
2664 
2665 		/* Always ignore debug keys and require a new pairing if
2666 		 * the user wants to use them.
2667 		 */
2668 		if (key->type == HCI_LK_DEBUG_COMBINATION)
2669 			continue;
2670 
2671 		hci_add_link_key(hdev, NULL, &key->addr.bdaddr, key->val,
2672 				 key->type, key->pin_len, NULL);
2673 	}
2674 
2675 	cmd_complete(sk, hdev->id, MGMT_OP_LOAD_LINK_KEYS, 0, NULL, 0);
2676 
2677 	hci_dev_unlock(hdev);
2678 
2679 	return 0;
2680 }
2681 
2682 static int device_unpaired(struct hci_dev *hdev, bdaddr_t *bdaddr,
2683 			   u8 addr_type, struct sock *skip_sk)
2684 {
2685 	struct mgmt_ev_device_unpaired ev;
2686 
2687 	bacpy(&ev.addr.bdaddr, bdaddr);
2688 	ev.addr.type = addr_type;
2689 
2690 	return mgmt_event(MGMT_EV_DEVICE_UNPAIRED, hdev, &ev, sizeof(ev),
2691 			  skip_sk);
2692 }
2693 
2694 static int unpair_device(struct sock *sk, struct hci_dev *hdev, void *data,
2695 			 u16 len)
2696 {
2697 	struct mgmt_cp_unpair_device *cp = data;
2698 	struct mgmt_rp_unpair_device rp;
2699 	struct hci_cp_disconnect dc;
2700 	struct pending_cmd *cmd;
2701 	struct hci_conn *conn;
2702 	int err;
2703 
2704 	memset(&rp, 0, sizeof(rp));
2705 	bacpy(&rp.addr.bdaddr, &cp->addr.bdaddr);
2706 	rp.addr.type = cp->addr.type;
2707 
2708 	if (!bdaddr_type_is_valid(cp->addr.type))
2709 		return cmd_complete(sk, hdev->id, MGMT_OP_UNPAIR_DEVICE,
2710 				    MGMT_STATUS_INVALID_PARAMS,
2711 				    &rp, sizeof(rp));
2712 
2713 	if (cp->disconnect != 0x00 && cp->disconnect != 0x01)
2714 		return cmd_complete(sk, hdev->id, MGMT_OP_UNPAIR_DEVICE,
2715 				    MGMT_STATUS_INVALID_PARAMS,
2716 				    &rp, sizeof(rp));
2717 
2718 	hci_dev_lock(hdev);
2719 
2720 	if (!hdev_is_powered(hdev)) {
2721 		err = cmd_complete(sk, hdev->id, MGMT_OP_UNPAIR_DEVICE,
2722 				   MGMT_STATUS_NOT_POWERED, &rp, sizeof(rp));
2723 		goto unlock;
2724 	}
2725 
2726 	if (cp->addr.type == BDADDR_BREDR) {
2727 		err = hci_remove_link_key(hdev, &cp->addr.bdaddr);
2728 	} else {
2729 		u8 addr_type;
2730 
2731 		if (cp->addr.type == BDADDR_LE_PUBLIC)
2732 			addr_type = ADDR_LE_DEV_PUBLIC;
2733 		else
2734 			addr_type = ADDR_LE_DEV_RANDOM;
2735 
2736 		hci_remove_irk(hdev, &cp->addr.bdaddr, addr_type);
2737 
2738 		hci_conn_params_del(hdev, &cp->addr.bdaddr, addr_type);
2739 
2740 		err = hci_remove_ltk(hdev, &cp->addr.bdaddr, addr_type);
2741 	}
2742 
2743 	if (err < 0) {
2744 		err = cmd_complete(sk, hdev->id, MGMT_OP_UNPAIR_DEVICE,
2745 				   MGMT_STATUS_NOT_PAIRED, &rp, sizeof(rp));
2746 		goto unlock;
2747 	}
2748 
2749 	if (cp->disconnect) {
2750 		if (cp->addr.type == BDADDR_BREDR)
2751 			conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK,
2752 						       &cp->addr.bdaddr);
2753 		else
2754 			conn = hci_conn_hash_lookup_ba(hdev, LE_LINK,
2755 						       &cp->addr.bdaddr);
2756 	} else {
2757 		conn = NULL;
2758 	}
2759 
2760 	if (!conn) {
2761 		err = cmd_complete(sk, hdev->id, MGMT_OP_UNPAIR_DEVICE, 0,
2762 				   &rp, sizeof(rp));
2763 		device_unpaired(hdev, &cp->addr.bdaddr, cp->addr.type, sk);
2764 		goto unlock;
2765 	}
2766 
2767 	cmd = mgmt_pending_add(sk, MGMT_OP_UNPAIR_DEVICE, hdev, cp,
2768 			       sizeof(*cp));
2769 	if (!cmd) {
2770 		err = -ENOMEM;
2771 		goto unlock;
2772 	}
2773 
2774 	dc.handle = cpu_to_le16(conn->handle);
2775 	dc.reason = 0x13; /* Remote User Terminated Connection */
2776 	err = hci_send_cmd(hdev, HCI_OP_DISCONNECT, sizeof(dc), &dc);
2777 	if (err < 0)
2778 		mgmt_pending_remove(cmd);
2779 
2780 unlock:
2781 	hci_dev_unlock(hdev);
2782 	return err;
2783 }
2784 
2785 static int disconnect(struct sock *sk, struct hci_dev *hdev, void *data,
2786 		      u16 len)
2787 {
2788 	struct mgmt_cp_disconnect *cp = data;
2789 	struct mgmt_rp_disconnect rp;
2790 	struct hci_cp_disconnect dc;
2791 	struct pending_cmd *cmd;
2792 	struct hci_conn *conn;
2793 	int err;
2794 
2795 	BT_DBG("");
2796 
2797 	memset(&rp, 0, sizeof(rp));
2798 	bacpy(&rp.addr.bdaddr, &cp->addr.bdaddr);
2799 	rp.addr.type = cp->addr.type;
2800 
2801 	if (!bdaddr_type_is_valid(cp->addr.type))
2802 		return cmd_complete(sk, hdev->id, MGMT_OP_DISCONNECT,
2803 				    MGMT_STATUS_INVALID_PARAMS,
2804 				    &rp, sizeof(rp));
2805 
2806 	hci_dev_lock(hdev);
2807 
2808 	if (!test_bit(HCI_UP, &hdev->flags)) {
2809 		err = cmd_complete(sk, hdev->id, MGMT_OP_DISCONNECT,
2810 				   MGMT_STATUS_NOT_POWERED, &rp, sizeof(rp));
2811 		goto failed;
2812 	}
2813 
2814 	if (mgmt_pending_find(MGMT_OP_DISCONNECT, hdev)) {
2815 		err = cmd_complete(sk, hdev->id, MGMT_OP_DISCONNECT,
2816 				   MGMT_STATUS_BUSY, &rp, sizeof(rp));
2817 		goto failed;
2818 	}
2819 
2820 	if (cp->addr.type == BDADDR_BREDR)
2821 		conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK,
2822 					       &cp->addr.bdaddr);
2823 	else
2824 		conn = hci_conn_hash_lookup_ba(hdev, LE_LINK, &cp->addr.bdaddr);
2825 
2826 	if (!conn || conn->state == BT_OPEN || conn->state == BT_CLOSED) {
2827 		err = cmd_complete(sk, hdev->id, MGMT_OP_DISCONNECT,
2828 				   MGMT_STATUS_NOT_CONNECTED, &rp, sizeof(rp));
2829 		goto failed;
2830 	}
2831 
2832 	cmd = mgmt_pending_add(sk, MGMT_OP_DISCONNECT, hdev, data, len);
2833 	if (!cmd) {
2834 		err = -ENOMEM;
2835 		goto failed;
2836 	}
2837 
2838 	dc.handle = cpu_to_le16(conn->handle);
2839 	dc.reason = HCI_ERROR_REMOTE_USER_TERM;
2840 
2841 	err = hci_send_cmd(hdev, HCI_OP_DISCONNECT, sizeof(dc), &dc);
2842 	if (err < 0)
2843 		mgmt_pending_remove(cmd);
2844 
2845 failed:
2846 	hci_dev_unlock(hdev);
2847 	return err;
2848 }
2849 
2850 static u8 link_to_bdaddr(u8 link_type, u8 addr_type)
2851 {
2852 	switch (link_type) {
2853 	case LE_LINK:
2854 		switch (addr_type) {
2855 		case ADDR_LE_DEV_PUBLIC:
2856 			return BDADDR_LE_PUBLIC;
2857 
2858 		default:
2859 			/* Fallback to LE Random address type */
2860 			return BDADDR_LE_RANDOM;
2861 		}
2862 
2863 	default:
2864 		/* Fallback to BR/EDR type */
2865 		return BDADDR_BREDR;
2866 	}
2867 }
2868 
2869 static int get_connections(struct sock *sk, struct hci_dev *hdev, void *data,
2870 			   u16 data_len)
2871 {
2872 	struct mgmt_rp_get_connections *rp;
2873 	struct hci_conn *c;
2874 	size_t rp_len;
2875 	int err;
2876 	u16 i;
2877 
2878 	BT_DBG("");
2879 
2880 	hci_dev_lock(hdev);
2881 
2882 	if (!hdev_is_powered(hdev)) {
2883 		err = cmd_status(sk, hdev->id, MGMT_OP_GET_CONNECTIONS,
2884 				 MGMT_STATUS_NOT_POWERED);
2885 		goto unlock;
2886 	}
2887 
2888 	i = 0;
2889 	list_for_each_entry(c, &hdev->conn_hash.list, list) {
2890 		if (test_bit(HCI_CONN_MGMT_CONNECTED, &c->flags))
2891 			i++;
2892 	}
2893 
2894 	rp_len = sizeof(*rp) + (i * sizeof(struct mgmt_addr_info));
2895 	rp = kmalloc(rp_len, GFP_KERNEL);
2896 	if (!rp) {
2897 		err = -ENOMEM;
2898 		goto unlock;
2899 	}
2900 
2901 	i = 0;
2902 	list_for_each_entry(c, &hdev->conn_hash.list, list) {
2903 		if (!test_bit(HCI_CONN_MGMT_CONNECTED, &c->flags))
2904 			continue;
2905 		bacpy(&rp->addr[i].bdaddr, &c->dst);
2906 		rp->addr[i].type = link_to_bdaddr(c->type, c->dst_type);
2907 		if (c->type == SCO_LINK || c->type == ESCO_LINK)
2908 			continue;
2909 		i++;
2910 	}
2911 
2912 	rp->conn_count = cpu_to_le16(i);
2913 
2914 	/* Recalculate length in case of filtered SCO connections, etc */
2915 	rp_len = sizeof(*rp) + (i * sizeof(struct mgmt_addr_info));
2916 
2917 	err = cmd_complete(sk, hdev->id, MGMT_OP_GET_CONNECTIONS, 0, rp,
2918 			   rp_len);
2919 
2920 	kfree(rp);
2921 
2922 unlock:
2923 	hci_dev_unlock(hdev);
2924 	return err;
2925 }
2926 
2927 static int send_pin_code_neg_reply(struct sock *sk, struct hci_dev *hdev,
2928 				   struct mgmt_cp_pin_code_neg_reply *cp)
2929 {
2930 	struct pending_cmd *cmd;
2931 	int err;
2932 
2933 	cmd = mgmt_pending_add(sk, MGMT_OP_PIN_CODE_NEG_REPLY, hdev, cp,
2934 			       sizeof(*cp));
2935 	if (!cmd)
2936 		return -ENOMEM;
2937 
2938 	err = hci_send_cmd(hdev, HCI_OP_PIN_CODE_NEG_REPLY,
2939 			   sizeof(cp->addr.bdaddr), &cp->addr.bdaddr);
2940 	if (err < 0)
2941 		mgmt_pending_remove(cmd);
2942 
2943 	return err;
2944 }
2945 
2946 static int pin_code_reply(struct sock *sk, struct hci_dev *hdev, void *data,
2947 			  u16 len)
2948 {
2949 	struct hci_conn *conn;
2950 	struct mgmt_cp_pin_code_reply *cp = data;
2951 	struct hci_cp_pin_code_reply reply;
2952 	struct pending_cmd *cmd;
2953 	int err;
2954 
2955 	BT_DBG("");
2956 
2957 	hci_dev_lock(hdev);
2958 
2959 	if (!hdev_is_powered(hdev)) {
2960 		err = cmd_status(sk, hdev->id, MGMT_OP_PIN_CODE_REPLY,
2961 				 MGMT_STATUS_NOT_POWERED);
2962 		goto failed;
2963 	}
2964 
2965 	conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->addr.bdaddr);
2966 	if (!conn) {
2967 		err = cmd_status(sk, hdev->id, MGMT_OP_PIN_CODE_REPLY,
2968 				 MGMT_STATUS_NOT_CONNECTED);
2969 		goto failed;
2970 	}
2971 
2972 	if (conn->pending_sec_level == BT_SECURITY_HIGH && cp->pin_len != 16) {
2973 		struct mgmt_cp_pin_code_neg_reply ncp;
2974 
2975 		memcpy(&ncp.addr, &cp->addr, sizeof(ncp.addr));
2976 
2977 		BT_ERR("PIN code is not 16 bytes long");
2978 
2979 		err = send_pin_code_neg_reply(sk, hdev, &ncp);
2980 		if (err >= 0)
2981 			err = cmd_status(sk, hdev->id, MGMT_OP_PIN_CODE_REPLY,
2982 					 MGMT_STATUS_INVALID_PARAMS);
2983 
2984 		goto failed;
2985 	}
2986 
2987 	cmd = mgmt_pending_add(sk, MGMT_OP_PIN_CODE_REPLY, hdev, data, len);
2988 	if (!cmd) {
2989 		err = -ENOMEM;
2990 		goto failed;
2991 	}
2992 
2993 	bacpy(&reply.bdaddr, &cp->addr.bdaddr);
2994 	reply.pin_len = cp->pin_len;
2995 	memcpy(reply.pin_code, cp->pin_code, sizeof(reply.pin_code));
2996 
2997 	err = hci_send_cmd(hdev, HCI_OP_PIN_CODE_REPLY, sizeof(reply), &reply);
2998 	if (err < 0)
2999 		mgmt_pending_remove(cmd);
3000 
3001 failed:
3002 	hci_dev_unlock(hdev);
3003 	return err;
3004 }
3005 
3006 static int set_io_capability(struct sock *sk, struct hci_dev *hdev, void *data,
3007 			     u16 len)
3008 {
3009 	struct mgmt_cp_set_io_capability *cp = data;
3010 
3011 	BT_DBG("");
3012 
3013 	if (cp->io_capability > SMP_IO_KEYBOARD_DISPLAY)
3014 		return cmd_complete(sk, hdev->id, MGMT_OP_SET_IO_CAPABILITY,
3015 				    MGMT_STATUS_INVALID_PARAMS, NULL, 0);
3016 
3017 	hci_dev_lock(hdev);
3018 
3019 	hdev->io_capability = cp->io_capability;
3020 
3021 	BT_DBG("%s IO capability set to 0x%02x", hdev->name,
3022 	       hdev->io_capability);
3023 
3024 	hci_dev_unlock(hdev);
3025 
3026 	return cmd_complete(sk, hdev->id, MGMT_OP_SET_IO_CAPABILITY, 0, NULL,
3027 			    0);
3028 }
3029 
3030 static struct pending_cmd *find_pairing(struct hci_conn *conn)
3031 {
3032 	struct hci_dev *hdev = conn->hdev;
3033 	struct pending_cmd *cmd;
3034 
3035 	list_for_each_entry(cmd, &hdev->mgmt_pending, list) {
3036 		if (cmd->opcode != MGMT_OP_PAIR_DEVICE)
3037 			continue;
3038 
3039 		if (cmd->user_data != conn)
3040 			continue;
3041 
3042 		return cmd;
3043 	}
3044 
3045 	return NULL;
3046 }
3047 
3048 static void pairing_complete(struct pending_cmd *cmd, u8 status)
3049 {
3050 	struct mgmt_rp_pair_device rp;
3051 	struct hci_conn *conn = cmd->user_data;
3052 
3053 	bacpy(&rp.addr.bdaddr, &conn->dst);
3054 	rp.addr.type = link_to_bdaddr(conn->type, conn->dst_type);
3055 
3056 	cmd_complete(cmd->sk, cmd->index, MGMT_OP_PAIR_DEVICE, status,
3057 		     &rp, sizeof(rp));
3058 
3059 	/* So we don't get further callbacks for this connection */
3060 	conn->connect_cfm_cb = NULL;
3061 	conn->security_cfm_cb = NULL;
3062 	conn->disconn_cfm_cb = NULL;
3063 
3064 	hci_conn_drop(conn);
3065 
3066 	mgmt_pending_remove(cmd);
3067 }
3068 
3069 void mgmt_smp_complete(struct hci_conn *conn, bool complete)
3070 {
3071 	u8 status = complete ? MGMT_STATUS_SUCCESS : MGMT_STATUS_FAILED;
3072 	struct pending_cmd *cmd;
3073 
3074 	cmd = find_pairing(conn);
3075 	if (cmd)
3076 		pairing_complete(cmd, status);
3077 }
3078 
3079 static void pairing_complete_cb(struct hci_conn *conn, u8 status)
3080 {
3081 	struct pending_cmd *cmd;
3082 
3083 	BT_DBG("status %u", status);
3084 
3085 	cmd = find_pairing(conn);
3086 	if (!cmd)
3087 		BT_DBG("Unable to find a pending command");
3088 	else
3089 		pairing_complete(cmd, mgmt_status(status));
3090 }
3091 
3092 static void le_pairing_complete_cb(struct hci_conn *conn, u8 status)
3093 {
3094 	struct pending_cmd *cmd;
3095 
3096 	BT_DBG("status %u", status);
3097 
3098 	if (!status)
3099 		return;
3100 
3101 	cmd = find_pairing(conn);
3102 	if (!cmd)
3103 		BT_DBG("Unable to find a pending command");
3104 	else
3105 		pairing_complete(cmd, mgmt_status(status));
3106 }
3107 
3108 static int pair_device(struct sock *sk, struct hci_dev *hdev, void *data,
3109 		       u16 len)
3110 {
3111 	struct mgmt_cp_pair_device *cp = data;
3112 	struct mgmt_rp_pair_device rp;
3113 	struct pending_cmd *cmd;
3114 	u8 sec_level, auth_type;
3115 	struct hci_conn *conn;
3116 	int err;
3117 
3118 	BT_DBG("");
3119 
3120 	memset(&rp, 0, sizeof(rp));
3121 	bacpy(&rp.addr.bdaddr, &cp->addr.bdaddr);
3122 	rp.addr.type = cp->addr.type;
3123 
3124 	if (!bdaddr_type_is_valid(cp->addr.type))
3125 		return cmd_complete(sk, hdev->id, MGMT_OP_PAIR_DEVICE,
3126 				    MGMT_STATUS_INVALID_PARAMS,
3127 				    &rp, sizeof(rp));
3128 
3129 	if (cp->io_cap > SMP_IO_KEYBOARD_DISPLAY)
3130 		return cmd_complete(sk, hdev->id, MGMT_OP_PAIR_DEVICE,
3131 				    MGMT_STATUS_INVALID_PARAMS,
3132 				    &rp, sizeof(rp));
3133 
3134 	hci_dev_lock(hdev);
3135 
3136 	if (!hdev_is_powered(hdev)) {
3137 		err = cmd_complete(sk, hdev->id, MGMT_OP_PAIR_DEVICE,
3138 				   MGMT_STATUS_NOT_POWERED, &rp, sizeof(rp));
3139 		goto unlock;
3140 	}
3141 
3142 	sec_level = BT_SECURITY_MEDIUM;
3143 	auth_type = HCI_AT_DEDICATED_BONDING;
3144 
3145 	if (cp->addr.type == BDADDR_BREDR) {
3146 		conn = hci_connect_acl(hdev, &cp->addr.bdaddr, sec_level,
3147 				       auth_type);
3148 	} else {
3149 		u8 addr_type;
3150 
3151 		/* Convert from L2CAP channel address type to HCI address type
3152 		 */
3153 		if (cp->addr.type == BDADDR_LE_PUBLIC)
3154 			addr_type = ADDR_LE_DEV_PUBLIC;
3155 		else
3156 			addr_type = ADDR_LE_DEV_RANDOM;
3157 
3158 		/* When pairing a new device, it is expected to remember
3159 		 * this device for future connections. Adding the connection
3160 		 * parameter information ahead of time allows tracking
3161 		 * of the slave preferred values and will speed up any
3162 		 * further connection establishment.
3163 		 *
3164 		 * If connection parameters already exist, then they
3165 		 * will be kept and this function does nothing.
3166 		 */
3167 		hci_conn_params_add(hdev, &cp->addr.bdaddr, addr_type);
3168 
3169 		conn = hci_connect_le(hdev, &cp->addr.bdaddr, addr_type,
3170 				      sec_level, HCI_LE_CONN_TIMEOUT,
3171 				      HCI_ROLE_MASTER);
3172 	}
3173 
3174 	if (IS_ERR(conn)) {
3175 		int status;
3176 
3177 		if (PTR_ERR(conn) == -EBUSY)
3178 			status = MGMT_STATUS_BUSY;
3179 		else
3180 			status = MGMT_STATUS_CONNECT_FAILED;
3181 
3182 		err = cmd_complete(sk, hdev->id, MGMT_OP_PAIR_DEVICE,
3183 				   status, &rp,
3184 				   sizeof(rp));
3185 		goto unlock;
3186 	}
3187 
3188 	if (conn->connect_cfm_cb) {
3189 		hci_conn_drop(conn);
3190 		err = cmd_complete(sk, hdev->id, MGMT_OP_PAIR_DEVICE,
3191 				   MGMT_STATUS_BUSY, &rp, sizeof(rp));
3192 		goto unlock;
3193 	}
3194 
3195 	cmd = mgmt_pending_add(sk, MGMT_OP_PAIR_DEVICE, hdev, data, len);
3196 	if (!cmd) {
3197 		err = -ENOMEM;
3198 		hci_conn_drop(conn);
3199 		goto unlock;
3200 	}
3201 
3202 	/* For LE, just connecting isn't a proof that the pairing finished */
3203 	if (cp->addr.type == BDADDR_BREDR) {
3204 		conn->connect_cfm_cb = pairing_complete_cb;
3205 		conn->security_cfm_cb = pairing_complete_cb;
3206 		conn->disconn_cfm_cb = pairing_complete_cb;
3207 	} else {
3208 		conn->connect_cfm_cb = le_pairing_complete_cb;
3209 		conn->security_cfm_cb = le_pairing_complete_cb;
3210 		conn->disconn_cfm_cb = le_pairing_complete_cb;
3211 	}
3212 
3213 	conn->io_capability = cp->io_cap;
3214 	cmd->user_data = conn;
3215 
3216 	if ((conn->state == BT_CONNECTED || conn->state == BT_CONFIG) &&
3217 	    hci_conn_security(conn, sec_level, auth_type, true))
3218 		pairing_complete(cmd, 0);
3219 
3220 	err = 0;
3221 
3222 unlock:
3223 	hci_dev_unlock(hdev);
3224 	return err;
3225 }
3226 
3227 static int cancel_pair_device(struct sock *sk, struct hci_dev *hdev, void *data,
3228 			      u16 len)
3229 {
3230 	struct mgmt_addr_info *addr = data;
3231 	struct pending_cmd *cmd;
3232 	struct hci_conn *conn;
3233 	int err;
3234 
3235 	BT_DBG("");
3236 
3237 	hci_dev_lock(hdev);
3238 
3239 	if (!hdev_is_powered(hdev)) {
3240 		err = cmd_status(sk, hdev->id, MGMT_OP_CANCEL_PAIR_DEVICE,
3241 				 MGMT_STATUS_NOT_POWERED);
3242 		goto unlock;
3243 	}
3244 
3245 	cmd = mgmt_pending_find(MGMT_OP_PAIR_DEVICE, hdev);
3246 	if (!cmd) {
3247 		err = cmd_status(sk, hdev->id, MGMT_OP_CANCEL_PAIR_DEVICE,
3248 				 MGMT_STATUS_INVALID_PARAMS);
3249 		goto unlock;
3250 	}
3251 
3252 	conn = cmd->user_data;
3253 
3254 	if (bacmp(&addr->bdaddr, &conn->dst) != 0) {
3255 		err = cmd_status(sk, hdev->id, MGMT_OP_CANCEL_PAIR_DEVICE,
3256 				 MGMT_STATUS_INVALID_PARAMS);
3257 		goto unlock;
3258 	}
3259 
3260 	pairing_complete(cmd, MGMT_STATUS_CANCELLED);
3261 
3262 	err = cmd_complete(sk, hdev->id, MGMT_OP_CANCEL_PAIR_DEVICE, 0,
3263 			   addr, sizeof(*addr));
3264 unlock:
3265 	hci_dev_unlock(hdev);
3266 	return err;
3267 }
3268 
3269 static int user_pairing_resp(struct sock *sk, struct hci_dev *hdev,
3270 			     struct mgmt_addr_info *addr, u16 mgmt_op,
3271 			     u16 hci_op, __le32 passkey)
3272 {
3273 	struct pending_cmd *cmd;
3274 	struct hci_conn *conn;
3275 	int err;
3276 
3277 	hci_dev_lock(hdev);
3278 
3279 	if (!hdev_is_powered(hdev)) {
3280 		err = cmd_complete(sk, hdev->id, mgmt_op,
3281 				   MGMT_STATUS_NOT_POWERED, addr,
3282 				   sizeof(*addr));
3283 		goto done;
3284 	}
3285 
3286 	if (addr->type == BDADDR_BREDR)
3287 		conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &addr->bdaddr);
3288 	else
3289 		conn = hci_conn_hash_lookup_ba(hdev, LE_LINK, &addr->bdaddr);
3290 
3291 	if (!conn) {
3292 		err = cmd_complete(sk, hdev->id, mgmt_op,
3293 				   MGMT_STATUS_NOT_CONNECTED, addr,
3294 				   sizeof(*addr));
3295 		goto done;
3296 	}
3297 
3298 	if (addr->type == BDADDR_LE_PUBLIC || addr->type == BDADDR_LE_RANDOM) {
3299 		err = smp_user_confirm_reply(conn, mgmt_op, passkey);
3300 		if (!err)
3301 			err = cmd_complete(sk, hdev->id, mgmt_op,
3302 					   MGMT_STATUS_SUCCESS, addr,
3303 					   sizeof(*addr));
3304 		else
3305 			err = cmd_complete(sk, hdev->id, mgmt_op,
3306 					   MGMT_STATUS_FAILED, addr,
3307 					   sizeof(*addr));
3308 
3309 		goto done;
3310 	}
3311 
3312 	cmd = mgmt_pending_add(sk, mgmt_op, hdev, addr, sizeof(*addr));
3313 	if (!cmd) {
3314 		err = -ENOMEM;
3315 		goto done;
3316 	}
3317 
3318 	/* Continue with pairing via HCI */
3319 	if (hci_op == HCI_OP_USER_PASSKEY_REPLY) {
3320 		struct hci_cp_user_passkey_reply cp;
3321 
3322 		bacpy(&cp.bdaddr, &addr->bdaddr);
3323 		cp.passkey = passkey;
3324 		err = hci_send_cmd(hdev, hci_op, sizeof(cp), &cp);
3325 	} else
3326 		err = hci_send_cmd(hdev, hci_op, sizeof(addr->bdaddr),
3327 				   &addr->bdaddr);
3328 
3329 	if (err < 0)
3330 		mgmt_pending_remove(cmd);
3331 
3332 done:
3333 	hci_dev_unlock(hdev);
3334 	return err;
3335 }
3336 
3337 static int pin_code_neg_reply(struct sock *sk, struct hci_dev *hdev,
3338 			      void *data, u16 len)
3339 {
3340 	struct mgmt_cp_pin_code_neg_reply *cp = data;
3341 
3342 	BT_DBG("");
3343 
3344 	return user_pairing_resp(sk, hdev, &cp->addr,
3345 				MGMT_OP_PIN_CODE_NEG_REPLY,
3346 				HCI_OP_PIN_CODE_NEG_REPLY, 0);
3347 }
3348 
3349 static int user_confirm_reply(struct sock *sk, struct hci_dev *hdev, void *data,
3350 			      u16 len)
3351 {
3352 	struct mgmt_cp_user_confirm_reply *cp = data;
3353 
3354 	BT_DBG("");
3355 
3356 	if (len != sizeof(*cp))
3357 		return cmd_status(sk, hdev->id, MGMT_OP_USER_CONFIRM_REPLY,
3358 				  MGMT_STATUS_INVALID_PARAMS);
3359 
3360 	return user_pairing_resp(sk, hdev, &cp->addr,
3361 				 MGMT_OP_USER_CONFIRM_REPLY,
3362 				 HCI_OP_USER_CONFIRM_REPLY, 0);
3363 }
3364 
3365 static int user_confirm_neg_reply(struct sock *sk, struct hci_dev *hdev,
3366 				  void *data, u16 len)
3367 {
3368 	struct mgmt_cp_user_confirm_neg_reply *cp = data;
3369 
3370 	BT_DBG("");
3371 
3372 	return user_pairing_resp(sk, hdev, &cp->addr,
3373 				 MGMT_OP_USER_CONFIRM_NEG_REPLY,
3374 				 HCI_OP_USER_CONFIRM_NEG_REPLY, 0);
3375 }
3376 
3377 static int user_passkey_reply(struct sock *sk, struct hci_dev *hdev, void *data,
3378 			      u16 len)
3379 {
3380 	struct mgmt_cp_user_passkey_reply *cp = data;
3381 
3382 	BT_DBG("");
3383 
3384 	return user_pairing_resp(sk, hdev, &cp->addr,
3385 				 MGMT_OP_USER_PASSKEY_REPLY,
3386 				 HCI_OP_USER_PASSKEY_REPLY, cp->passkey);
3387 }
3388 
3389 static int user_passkey_neg_reply(struct sock *sk, struct hci_dev *hdev,
3390 				  void *data, u16 len)
3391 {
3392 	struct mgmt_cp_user_passkey_neg_reply *cp = data;
3393 
3394 	BT_DBG("");
3395 
3396 	return user_pairing_resp(sk, hdev, &cp->addr,
3397 				 MGMT_OP_USER_PASSKEY_NEG_REPLY,
3398 				 HCI_OP_USER_PASSKEY_NEG_REPLY, 0);
3399 }
3400 
3401 static void update_name(struct hci_request *req)
3402 {
3403 	struct hci_dev *hdev = req->hdev;
3404 	struct hci_cp_write_local_name cp;
3405 
3406 	memcpy(cp.name, hdev->dev_name, sizeof(cp.name));
3407 
3408 	hci_req_add(req, HCI_OP_WRITE_LOCAL_NAME, sizeof(cp), &cp);
3409 }
3410 
3411 static void set_name_complete(struct hci_dev *hdev, u8 status)
3412 {
3413 	struct mgmt_cp_set_local_name *cp;
3414 	struct pending_cmd *cmd;
3415 
3416 	BT_DBG("status 0x%02x", status);
3417 
3418 	hci_dev_lock(hdev);
3419 
3420 	cmd = mgmt_pending_find(MGMT_OP_SET_LOCAL_NAME, hdev);
3421 	if (!cmd)
3422 		goto unlock;
3423 
3424 	cp = cmd->param;
3425 
3426 	if (status)
3427 		cmd_status(cmd->sk, hdev->id, MGMT_OP_SET_LOCAL_NAME,
3428 			   mgmt_status(status));
3429 	else
3430 		cmd_complete(cmd->sk, hdev->id, MGMT_OP_SET_LOCAL_NAME, 0,
3431 			     cp, sizeof(*cp));
3432 
3433 	mgmt_pending_remove(cmd);
3434 
3435 unlock:
3436 	hci_dev_unlock(hdev);
3437 }
3438 
3439 static int set_local_name(struct sock *sk, struct hci_dev *hdev, void *data,
3440 			  u16 len)
3441 {
3442 	struct mgmt_cp_set_local_name *cp = data;
3443 	struct pending_cmd *cmd;
3444 	struct hci_request req;
3445 	int err;
3446 
3447 	BT_DBG("");
3448 
3449 	hci_dev_lock(hdev);
3450 
3451 	/* If the old values are the same as the new ones just return a
3452 	 * direct command complete event.
3453 	 */
3454 	if (!memcmp(hdev->dev_name, cp->name, sizeof(hdev->dev_name)) &&
3455 	    !memcmp(hdev->short_name, cp->short_name,
3456 		    sizeof(hdev->short_name))) {
3457 		err = cmd_complete(sk, hdev->id, MGMT_OP_SET_LOCAL_NAME, 0,
3458 				   data, len);
3459 		goto failed;
3460 	}
3461 
3462 	memcpy(hdev->short_name, cp->short_name, sizeof(hdev->short_name));
3463 
3464 	if (!hdev_is_powered(hdev)) {
3465 		memcpy(hdev->dev_name, cp->name, sizeof(hdev->dev_name));
3466 
3467 		err = cmd_complete(sk, hdev->id, MGMT_OP_SET_LOCAL_NAME, 0,
3468 				   data, len);
3469 		if (err < 0)
3470 			goto failed;
3471 
3472 		err = mgmt_event(MGMT_EV_LOCAL_NAME_CHANGED, hdev, data, len,
3473 				 sk);
3474 
3475 		goto failed;
3476 	}
3477 
3478 	cmd = mgmt_pending_add(sk, MGMT_OP_SET_LOCAL_NAME, hdev, data, len);
3479 	if (!cmd) {
3480 		err = -ENOMEM;
3481 		goto failed;
3482 	}
3483 
3484 	memcpy(hdev->dev_name, cp->name, sizeof(hdev->dev_name));
3485 
3486 	hci_req_init(&req, hdev);
3487 
3488 	if (lmp_bredr_capable(hdev)) {
3489 		update_name(&req);
3490 		update_eir(&req);
3491 	}
3492 
3493 	/* The name is stored in the scan response data and so
3494 	 * no need to udpate the advertising data here.
3495 	 */
3496 	if (lmp_le_capable(hdev))
3497 		update_scan_rsp_data(&req);
3498 
3499 	err = hci_req_run(&req, set_name_complete);
3500 	if (err < 0)
3501 		mgmt_pending_remove(cmd);
3502 
3503 failed:
3504 	hci_dev_unlock(hdev);
3505 	return err;
3506 }
3507 
3508 static int read_local_oob_data(struct sock *sk, struct hci_dev *hdev,
3509 			       void *data, u16 data_len)
3510 {
3511 	struct pending_cmd *cmd;
3512 	int err;
3513 
3514 	BT_DBG("%s", hdev->name);
3515 
3516 	hci_dev_lock(hdev);
3517 
3518 	if (!hdev_is_powered(hdev)) {
3519 		err = cmd_status(sk, hdev->id, MGMT_OP_READ_LOCAL_OOB_DATA,
3520 				 MGMT_STATUS_NOT_POWERED);
3521 		goto unlock;
3522 	}
3523 
3524 	if (!lmp_ssp_capable(hdev)) {
3525 		err = cmd_status(sk, hdev->id, MGMT_OP_READ_LOCAL_OOB_DATA,
3526 				 MGMT_STATUS_NOT_SUPPORTED);
3527 		goto unlock;
3528 	}
3529 
3530 	if (mgmt_pending_find(MGMT_OP_READ_LOCAL_OOB_DATA, hdev)) {
3531 		err = cmd_status(sk, hdev->id, MGMT_OP_READ_LOCAL_OOB_DATA,
3532 				 MGMT_STATUS_BUSY);
3533 		goto unlock;
3534 	}
3535 
3536 	cmd = mgmt_pending_add(sk, MGMT_OP_READ_LOCAL_OOB_DATA, hdev, NULL, 0);
3537 	if (!cmd) {
3538 		err = -ENOMEM;
3539 		goto unlock;
3540 	}
3541 
3542 	if (test_bit(HCI_SC_ENABLED, &hdev->dev_flags))
3543 		err = hci_send_cmd(hdev, HCI_OP_READ_LOCAL_OOB_EXT_DATA,
3544 				   0, NULL);
3545 	else
3546 		err = hci_send_cmd(hdev, HCI_OP_READ_LOCAL_OOB_DATA, 0, NULL);
3547 
3548 	if (err < 0)
3549 		mgmt_pending_remove(cmd);
3550 
3551 unlock:
3552 	hci_dev_unlock(hdev);
3553 	return err;
3554 }
3555 
3556 static int add_remote_oob_data(struct sock *sk, struct hci_dev *hdev,
3557 			       void *data, u16 len)
3558 {
3559 	int err;
3560 
3561 	BT_DBG("%s ", hdev->name);
3562 
3563 	hci_dev_lock(hdev);
3564 
3565 	if (len == MGMT_ADD_REMOTE_OOB_DATA_SIZE) {
3566 		struct mgmt_cp_add_remote_oob_data *cp = data;
3567 		u8 status;
3568 
3569 		err = hci_add_remote_oob_data(hdev, &cp->addr.bdaddr,
3570 					      cp->hash, cp->randomizer);
3571 		if (err < 0)
3572 			status = MGMT_STATUS_FAILED;
3573 		else
3574 			status = MGMT_STATUS_SUCCESS;
3575 
3576 		err = cmd_complete(sk, hdev->id, MGMT_OP_ADD_REMOTE_OOB_DATA,
3577 				   status, &cp->addr, sizeof(cp->addr));
3578 	} else if (len == MGMT_ADD_REMOTE_OOB_EXT_DATA_SIZE) {
3579 		struct mgmt_cp_add_remote_oob_ext_data *cp = data;
3580 		u8 status;
3581 
3582 		err = hci_add_remote_oob_ext_data(hdev, &cp->addr.bdaddr,
3583 						  cp->hash192,
3584 						  cp->randomizer192,
3585 						  cp->hash256,
3586 						  cp->randomizer256);
3587 		if (err < 0)
3588 			status = MGMT_STATUS_FAILED;
3589 		else
3590 			status = MGMT_STATUS_SUCCESS;
3591 
3592 		err = cmd_complete(sk, hdev->id, MGMT_OP_ADD_REMOTE_OOB_DATA,
3593 				   status, &cp->addr, sizeof(cp->addr));
3594 	} else {
3595 		BT_ERR("add_remote_oob_data: invalid length of %u bytes", len);
3596 		err = cmd_status(sk, hdev->id, MGMT_OP_ADD_REMOTE_OOB_DATA,
3597 				 MGMT_STATUS_INVALID_PARAMS);
3598 	}
3599 
3600 	hci_dev_unlock(hdev);
3601 	return err;
3602 }
3603 
3604 static int remove_remote_oob_data(struct sock *sk, struct hci_dev *hdev,
3605 				  void *data, u16 len)
3606 {
3607 	struct mgmt_cp_remove_remote_oob_data *cp = data;
3608 	u8 status;
3609 	int err;
3610 
3611 	BT_DBG("%s", hdev->name);
3612 
3613 	hci_dev_lock(hdev);
3614 
3615 	err = hci_remove_remote_oob_data(hdev, &cp->addr.bdaddr);
3616 	if (err < 0)
3617 		status = MGMT_STATUS_INVALID_PARAMS;
3618 	else
3619 		status = MGMT_STATUS_SUCCESS;
3620 
3621 	err = cmd_complete(sk, hdev->id, MGMT_OP_REMOVE_REMOTE_OOB_DATA,
3622 			   status, &cp->addr, sizeof(cp->addr));
3623 
3624 	hci_dev_unlock(hdev);
3625 	return err;
3626 }
3627 
3628 static int mgmt_start_discovery_failed(struct hci_dev *hdev, u8 status)
3629 {
3630 	struct pending_cmd *cmd;
3631 	u8 type;
3632 	int err;
3633 
3634 	hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
3635 
3636 	cmd = mgmt_pending_find(MGMT_OP_START_DISCOVERY, hdev);
3637 	if (!cmd)
3638 		return -ENOENT;
3639 
3640 	type = hdev->discovery.type;
3641 
3642 	err = cmd_complete(cmd->sk, hdev->id, cmd->opcode, mgmt_status(status),
3643 			   &type, sizeof(type));
3644 	mgmt_pending_remove(cmd);
3645 
3646 	return err;
3647 }
3648 
3649 static void start_discovery_complete(struct hci_dev *hdev, u8 status)
3650 {
3651 	unsigned long timeout = 0;
3652 
3653 	BT_DBG("status %d", status);
3654 
3655 	if (status) {
3656 		hci_dev_lock(hdev);
3657 		mgmt_start_discovery_failed(hdev, status);
3658 		hci_dev_unlock(hdev);
3659 		return;
3660 	}
3661 
3662 	hci_dev_lock(hdev);
3663 	hci_discovery_set_state(hdev, DISCOVERY_FINDING);
3664 	hci_dev_unlock(hdev);
3665 
3666 	switch (hdev->discovery.type) {
3667 	case DISCOV_TYPE_LE:
3668 		timeout = msecs_to_jiffies(DISCOV_LE_TIMEOUT);
3669 		break;
3670 
3671 	case DISCOV_TYPE_INTERLEAVED:
3672 		timeout = msecs_to_jiffies(hdev->discov_interleaved_timeout);
3673 		break;
3674 
3675 	case DISCOV_TYPE_BREDR:
3676 		break;
3677 
3678 	default:
3679 		BT_ERR("Invalid discovery type %d", hdev->discovery.type);
3680 	}
3681 
3682 	if (!timeout)
3683 		return;
3684 
3685 	queue_delayed_work(hdev->workqueue, &hdev->le_scan_disable, timeout);
3686 }
3687 
3688 static int start_discovery(struct sock *sk, struct hci_dev *hdev,
3689 			   void *data, u16 len)
3690 {
3691 	struct mgmt_cp_start_discovery *cp = data;
3692 	struct pending_cmd *cmd;
3693 	struct hci_cp_le_set_scan_param param_cp;
3694 	struct hci_cp_le_set_scan_enable enable_cp;
3695 	struct hci_cp_inquiry inq_cp;
3696 	struct hci_request req;
3697 	/* General inquiry access code (GIAC) */
3698 	u8 lap[3] = { 0x33, 0x8b, 0x9e };
3699 	u8 status, own_addr_type;
3700 	int err;
3701 
3702 	BT_DBG("%s", hdev->name);
3703 
3704 	hci_dev_lock(hdev);
3705 
3706 	if (!hdev_is_powered(hdev)) {
3707 		err = cmd_status(sk, hdev->id, MGMT_OP_START_DISCOVERY,
3708 				 MGMT_STATUS_NOT_POWERED);
3709 		goto failed;
3710 	}
3711 
3712 	if (test_bit(HCI_PERIODIC_INQ, &hdev->dev_flags)) {
3713 		err = cmd_status(sk, hdev->id, MGMT_OP_START_DISCOVERY,
3714 				 MGMT_STATUS_BUSY);
3715 		goto failed;
3716 	}
3717 
3718 	if (hdev->discovery.state != DISCOVERY_STOPPED) {
3719 		err = cmd_status(sk, hdev->id, MGMT_OP_START_DISCOVERY,
3720 				 MGMT_STATUS_BUSY);
3721 		goto failed;
3722 	}
3723 
3724 	cmd = mgmt_pending_add(sk, MGMT_OP_START_DISCOVERY, hdev, NULL, 0);
3725 	if (!cmd) {
3726 		err = -ENOMEM;
3727 		goto failed;
3728 	}
3729 
3730 	hdev->discovery.type = cp->type;
3731 
3732 	hci_req_init(&req, hdev);
3733 
3734 	switch (hdev->discovery.type) {
3735 	case DISCOV_TYPE_BREDR:
3736 		status = mgmt_bredr_support(hdev);
3737 		if (status) {
3738 			err = cmd_status(sk, hdev->id, MGMT_OP_START_DISCOVERY,
3739 					 status);
3740 			mgmt_pending_remove(cmd);
3741 			goto failed;
3742 		}
3743 
3744 		if (test_bit(HCI_INQUIRY, &hdev->flags)) {
3745 			err = cmd_status(sk, hdev->id, MGMT_OP_START_DISCOVERY,
3746 					 MGMT_STATUS_BUSY);
3747 			mgmt_pending_remove(cmd);
3748 			goto failed;
3749 		}
3750 
3751 		hci_inquiry_cache_flush(hdev);
3752 
3753 		memset(&inq_cp, 0, sizeof(inq_cp));
3754 		memcpy(&inq_cp.lap, lap, sizeof(inq_cp.lap));
3755 		inq_cp.length = DISCOV_BREDR_INQUIRY_LEN;
3756 		hci_req_add(&req, HCI_OP_INQUIRY, sizeof(inq_cp), &inq_cp);
3757 		break;
3758 
3759 	case DISCOV_TYPE_LE:
3760 	case DISCOV_TYPE_INTERLEAVED:
3761 		status = mgmt_le_support(hdev);
3762 		if (status) {
3763 			err = cmd_status(sk, hdev->id, MGMT_OP_START_DISCOVERY,
3764 					 status);
3765 			mgmt_pending_remove(cmd);
3766 			goto failed;
3767 		}
3768 
3769 		if (hdev->discovery.type == DISCOV_TYPE_INTERLEAVED &&
3770 		    !test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags)) {
3771 			err = cmd_status(sk, hdev->id, MGMT_OP_START_DISCOVERY,
3772 					 MGMT_STATUS_NOT_SUPPORTED);
3773 			mgmt_pending_remove(cmd);
3774 			goto failed;
3775 		}
3776 
3777 		if (test_bit(HCI_LE_ADV, &hdev->dev_flags)) {
3778 			/* Don't let discovery abort an outgoing
3779 			 * connection attempt that's using directed
3780 			 * advertising.
3781 			 */
3782 			if (hci_conn_hash_lookup_state(hdev, LE_LINK,
3783 						       BT_CONNECT)) {
3784 				err = cmd_status(sk, hdev->id,
3785 						 MGMT_OP_START_DISCOVERY,
3786 						 MGMT_STATUS_REJECTED);
3787 				mgmt_pending_remove(cmd);
3788 				goto failed;
3789 			}
3790 
3791 			disable_advertising(&req);
3792 		}
3793 
3794 		/* If controller is scanning, it means the background scanning
3795 		 * is running. Thus, we should temporarily stop it in order to
3796 		 * set the discovery scanning parameters.
3797 		 */
3798 		if (test_bit(HCI_LE_SCAN, &hdev->dev_flags))
3799 			hci_req_add_le_scan_disable(&req);
3800 
3801 		memset(&param_cp, 0, sizeof(param_cp));
3802 
3803 		/* All active scans will be done with either a resolvable
3804 		 * private address (when privacy feature has been enabled)
3805 		 * or unresolvable private address.
3806 		 */
3807 		err = hci_update_random_address(&req, true, &own_addr_type);
3808 		if (err < 0) {
3809 			err = cmd_status(sk, hdev->id, MGMT_OP_START_DISCOVERY,
3810 					 MGMT_STATUS_FAILED);
3811 			mgmt_pending_remove(cmd);
3812 			goto failed;
3813 		}
3814 
3815 		param_cp.type = LE_SCAN_ACTIVE;
3816 		param_cp.interval = cpu_to_le16(DISCOV_LE_SCAN_INT);
3817 		param_cp.window = cpu_to_le16(DISCOV_LE_SCAN_WIN);
3818 		param_cp.own_address_type = own_addr_type;
3819 		hci_req_add(&req, HCI_OP_LE_SET_SCAN_PARAM, sizeof(param_cp),
3820 			    &param_cp);
3821 
3822 		memset(&enable_cp, 0, sizeof(enable_cp));
3823 		enable_cp.enable = LE_SCAN_ENABLE;
3824 		enable_cp.filter_dup = LE_SCAN_FILTER_DUP_ENABLE;
3825 		hci_req_add(&req, HCI_OP_LE_SET_SCAN_ENABLE, sizeof(enable_cp),
3826 			    &enable_cp);
3827 		break;
3828 
3829 	default:
3830 		err = cmd_status(sk, hdev->id, MGMT_OP_START_DISCOVERY,
3831 				 MGMT_STATUS_INVALID_PARAMS);
3832 		mgmt_pending_remove(cmd);
3833 		goto failed;
3834 	}
3835 
3836 	err = hci_req_run(&req, start_discovery_complete);
3837 	if (err < 0)
3838 		mgmt_pending_remove(cmd);
3839 	else
3840 		hci_discovery_set_state(hdev, DISCOVERY_STARTING);
3841 
3842 failed:
3843 	hci_dev_unlock(hdev);
3844 	return err;
3845 }
3846 
3847 static int mgmt_stop_discovery_failed(struct hci_dev *hdev, u8 status)
3848 {
3849 	struct pending_cmd *cmd;
3850 	int err;
3851 
3852 	cmd = mgmt_pending_find(MGMT_OP_STOP_DISCOVERY, hdev);
3853 	if (!cmd)
3854 		return -ENOENT;
3855 
3856 	err = cmd_complete(cmd->sk, hdev->id, cmd->opcode, mgmt_status(status),
3857 			   &hdev->discovery.type, sizeof(hdev->discovery.type));
3858 	mgmt_pending_remove(cmd);
3859 
3860 	return err;
3861 }
3862 
3863 static void stop_discovery_complete(struct hci_dev *hdev, u8 status)
3864 {
3865 	BT_DBG("status %d", status);
3866 
3867 	hci_dev_lock(hdev);
3868 
3869 	if (status) {
3870 		mgmt_stop_discovery_failed(hdev, status);
3871 		goto unlock;
3872 	}
3873 
3874 	hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
3875 
3876 unlock:
3877 	hci_dev_unlock(hdev);
3878 }
3879 
3880 static int stop_discovery(struct sock *sk, struct hci_dev *hdev, void *data,
3881 			  u16 len)
3882 {
3883 	struct mgmt_cp_stop_discovery *mgmt_cp = data;
3884 	struct pending_cmd *cmd;
3885 	struct hci_request req;
3886 	int err;
3887 
3888 	BT_DBG("%s", hdev->name);
3889 
3890 	hci_dev_lock(hdev);
3891 
3892 	if (!hci_discovery_active(hdev)) {
3893 		err = cmd_complete(sk, hdev->id, MGMT_OP_STOP_DISCOVERY,
3894 				   MGMT_STATUS_REJECTED, &mgmt_cp->type,
3895 				   sizeof(mgmt_cp->type));
3896 		goto unlock;
3897 	}
3898 
3899 	if (hdev->discovery.type != mgmt_cp->type) {
3900 		err = cmd_complete(sk, hdev->id, MGMT_OP_STOP_DISCOVERY,
3901 				   MGMT_STATUS_INVALID_PARAMS, &mgmt_cp->type,
3902 				   sizeof(mgmt_cp->type));
3903 		goto unlock;
3904 	}
3905 
3906 	cmd = mgmt_pending_add(sk, MGMT_OP_STOP_DISCOVERY, hdev, NULL, 0);
3907 	if (!cmd) {
3908 		err = -ENOMEM;
3909 		goto unlock;
3910 	}
3911 
3912 	hci_req_init(&req, hdev);
3913 
3914 	hci_stop_discovery(&req);
3915 
3916 	err = hci_req_run(&req, stop_discovery_complete);
3917 	if (!err) {
3918 		hci_discovery_set_state(hdev, DISCOVERY_STOPPING);
3919 		goto unlock;
3920 	}
3921 
3922 	mgmt_pending_remove(cmd);
3923 
3924 	/* If no HCI commands were sent we're done */
3925 	if (err == -ENODATA) {
3926 		err = cmd_complete(sk, hdev->id, MGMT_OP_STOP_DISCOVERY, 0,
3927 				   &mgmt_cp->type, sizeof(mgmt_cp->type));
3928 		hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
3929 	}
3930 
3931 unlock:
3932 	hci_dev_unlock(hdev);
3933 	return err;
3934 }
3935 
3936 static int confirm_name(struct sock *sk, struct hci_dev *hdev, void *data,
3937 			u16 len)
3938 {
3939 	struct mgmt_cp_confirm_name *cp = data;
3940 	struct inquiry_entry *e;
3941 	int err;
3942 
3943 	BT_DBG("%s", hdev->name);
3944 
3945 	hci_dev_lock(hdev);
3946 
3947 	if (!hci_discovery_active(hdev)) {
3948 		err = cmd_complete(sk, hdev->id, MGMT_OP_CONFIRM_NAME,
3949 				   MGMT_STATUS_FAILED, &cp->addr,
3950 				   sizeof(cp->addr));
3951 		goto failed;
3952 	}
3953 
3954 	e = hci_inquiry_cache_lookup_unknown(hdev, &cp->addr.bdaddr);
3955 	if (!e) {
3956 		err = cmd_complete(sk, hdev->id, MGMT_OP_CONFIRM_NAME,
3957 				   MGMT_STATUS_INVALID_PARAMS, &cp->addr,
3958 				   sizeof(cp->addr));
3959 		goto failed;
3960 	}
3961 
3962 	if (cp->name_known) {
3963 		e->name_state = NAME_KNOWN;
3964 		list_del(&e->list);
3965 	} else {
3966 		e->name_state = NAME_NEEDED;
3967 		hci_inquiry_cache_update_resolve(hdev, e);
3968 	}
3969 
3970 	err = cmd_complete(sk, hdev->id, MGMT_OP_CONFIRM_NAME, 0, &cp->addr,
3971 			   sizeof(cp->addr));
3972 
3973 failed:
3974 	hci_dev_unlock(hdev);
3975 	return err;
3976 }
3977 
3978 static int block_device(struct sock *sk, struct hci_dev *hdev, void *data,
3979 			u16 len)
3980 {
3981 	struct mgmt_cp_block_device *cp = data;
3982 	u8 status;
3983 	int err;
3984 
3985 	BT_DBG("%s", hdev->name);
3986 
3987 	if (!bdaddr_type_is_valid(cp->addr.type))
3988 		return cmd_complete(sk, hdev->id, MGMT_OP_BLOCK_DEVICE,
3989 				    MGMT_STATUS_INVALID_PARAMS,
3990 				    &cp->addr, sizeof(cp->addr));
3991 
3992 	hci_dev_lock(hdev);
3993 
3994 	err = hci_bdaddr_list_add(&hdev->blacklist, &cp->addr.bdaddr,
3995 				  cp->addr.type);
3996 	if (err < 0) {
3997 		status = MGMT_STATUS_FAILED;
3998 		goto done;
3999 	}
4000 
4001 	mgmt_event(MGMT_EV_DEVICE_BLOCKED, hdev, &cp->addr, sizeof(cp->addr),
4002 		   sk);
4003 	status = MGMT_STATUS_SUCCESS;
4004 
4005 done:
4006 	err = cmd_complete(sk, hdev->id, MGMT_OP_BLOCK_DEVICE, status,
4007 			   &cp->addr, sizeof(cp->addr));
4008 
4009 	hci_dev_unlock(hdev);
4010 
4011 	return err;
4012 }
4013 
4014 static int unblock_device(struct sock *sk, struct hci_dev *hdev, void *data,
4015 			  u16 len)
4016 {
4017 	struct mgmt_cp_unblock_device *cp = data;
4018 	u8 status;
4019 	int err;
4020 
4021 	BT_DBG("%s", hdev->name);
4022 
4023 	if (!bdaddr_type_is_valid(cp->addr.type))
4024 		return cmd_complete(sk, hdev->id, MGMT_OP_UNBLOCK_DEVICE,
4025 				    MGMT_STATUS_INVALID_PARAMS,
4026 				    &cp->addr, sizeof(cp->addr));
4027 
4028 	hci_dev_lock(hdev);
4029 
4030 	err = hci_bdaddr_list_del(&hdev->blacklist, &cp->addr.bdaddr,
4031 				  cp->addr.type);
4032 	if (err < 0) {
4033 		status = MGMT_STATUS_INVALID_PARAMS;
4034 		goto done;
4035 	}
4036 
4037 	mgmt_event(MGMT_EV_DEVICE_UNBLOCKED, hdev, &cp->addr, sizeof(cp->addr),
4038 		   sk);
4039 	status = MGMT_STATUS_SUCCESS;
4040 
4041 done:
4042 	err = cmd_complete(sk, hdev->id, MGMT_OP_UNBLOCK_DEVICE, status,
4043 			   &cp->addr, sizeof(cp->addr));
4044 
4045 	hci_dev_unlock(hdev);
4046 
4047 	return err;
4048 }
4049 
4050 static int set_device_id(struct sock *sk, struct hci_dev *hdev, void *data,
4051 			 u16 len)
4052 {
4053 	struct mgmt_cp_set_device_id *cp = data;
4054 	struct hci_request req;
4055 	int err;
4056 	__u16 source;
4057 
4058 	BT_DBG("%s", hdev->name);
4059 
4060 	source = __le16_to_cpu(cp->source);
4061 
4062 	if (source > 0x0002)
4063 		return cmd_status(sk, hdev->id, MGMT_OP_SET_DEVICE_ID,
4064 				  MGMT_STATUS_INVALID_PARAMS);
4065 
4066 	hci_dev_lock(hdev);
4067 
4068 	hdev->devid_source = source;
4069 	hdev->devid_vendor = __le16_to_cpu(cp->vendor);
4070 	hdev->devid_product = __le16_to_cpu(cp->product);
4071 	hdev->devid_version = __le16_to_cpu(cp->version);
4072 
4073 	err = cmd_complete(sk, hdev->id, MGMT_OP_SET_DEVICE_ID, 0, NULL, 0);
4074 
4075 	hci_req_init(&req, hdev);
4076 	update_eir(&req);
4077 	hci_req_run(&req, NULL);
4078 
4079 	hci_dev_unlock(hdev);
4080 
4081 	return err;
4082 }
4083 
4084 static void set_advertising_complete(struct hci_dev *hdev, u8 status)
4085 {
4086 	struct cmd_lookup match = { NULL, hdev };
4087 
4088 	if (status) {
4089 		u8 mgmt_err = mgmt_status(status);
4090 
4091 		mgmt_pending_foreach(MGMT_OP_SET_ADVERTISING, hdev,
4092 				     cmd_status_rsp, &mgmt_err);
4093 		return;
4094 	}
4095 
4096 	if (test_bit(HCI_LE_ADV, &hdev->dev_flags))
4097 		set_bit(HCI_ADVERTISING, &hdev->dev_flags);
4098 	else
4099 		clear_bit(HCI_ADVERTISING, &hdev->dev_flags);
4100 
4101 	mgmt_pending_foreach(MGMT_OP_SET_ADVERTISING, hdev, settings_rsp,
4102 			     &match);
4103 
4104 	new_settings(hdev, match.sk);
4105 
4106 	if (match.sk)
4107 		sock_put(match.sk);
4108 }
4109 
4110 static int set_advertising(struct sock *sk, struct hci_dev *hdev, void *data,
4111 			   u16 len)
4112 {
4113 	struct mgmt_mode *cp = data;
4114 	struct pending_cmd *cmd;
4115 	struct hci_request req;
4116 	u8 val, enabled, status;
4117 	int err;
4118 
4119 	BT_DBG("request for %s", hdev->name);
4120 
4121 	status = mgmt_le_support(hdev);
4122 	if (status)
4123 		return cmd_status(sk, hdev->id, MGMT_OP_SET_ADVERTISING,
4124 				  status);
4125 
4126 	if (cp->val != 0x00 && cp->val != 0x01)
4127 		return cmd_status(sk, hdev->id, MGMT_OP_SET_ADVERTISING,
4128 				  MGMT_STATUS_INVALID_PARAMS);
4129 
4130 	hci_dev_lock(hdev);
4131 
4132 	val = !!cp->val;
4133 	enabled = test_bit(HCI_ADVERTISING, &hdev->dev_flags);
4134 
4135 	/* The following conditions are ones which mean that we should
4136 	 * not do any HCI communication but directly send a mgmt
4137 	 * response to user space (after toggling the flag if
4138 	 * necessary).
4139 	 */
4140 	if (!hdev_is_powered(hdev) || val == enabled ||
4141 	    hci_conn_num(hdev, LE_LINK) > 0 ||
4142 	    (test_bit(HCI_LE_SCAN, &hdev->dev_flags) &&
4143 	     hdev->le_scan_type == LE_SCAN_ACTIVE)) {
4144 		bool changed = false;
4145 
4146 		if (val != test_bit(HCI_ADVERTISING, &hdev->dev_flags)) {
4147 			change_bit(HCI_ADVERTISING, &hdev->dev_flags);
4148 			changed = true;
4149 		}
4150 
4151 		err = send_settings_rsp(sk, MGMT_OP_SET_ADVERTISING, hdev);
4152 		if (err < 0)
4153 			goto unlock;
4154 
4155 		if (changed)
4156 			err = new_settings(hdev, sk);
4157 
4158 		goto unlock;
4159 	}
4160 
4161 	if (mgmt_pending_find(MGMT_OP_SET_ADVERTISING, hdev) ||
4162 	    mgmt_pending_find(MGMT_OP_SET_LE, hdev)) {
4163 		err = cmd_status(sk, hdev->id, MGMT_OP_SET_ADVERTISING,
4164 				 MGMT_STATUS_BUSY);
4165 		goto unlock;
4166 	}
4167 
4168 	cmd = mgmt_pending_add(sk, MGMT_OP_SET_ADVERTISING, hdev, data, len);
4169 	if (!cmd) {
4170 		err = -ENOMEM;
4171 		goto unlock;
4172 	}
4173 
4174 	hci_req_init(&req, hdev);
4175 
4176 	if (val)
4177 		enable_advertising(&req);
4178 	else
4179 		disable_advertising(&req);
4180 
4181 	err = hci_req_run(&req, set_advertising_complete);
4182 	if (err < 0)
4183 		mgmt_pending_remove(cmd);
4184 
4185 unlock:
4186 	hci_dev_unlock(hdev);
4187 	return err;
4188 }
4189 
4190 static int set_static_address(struct sock *sk, struct hci_dev *hdev,
4191 			      void *data, u16 len)
4192 {
4193 	struct mgmt_cp_set_static_address *cp = data;
4194 	int err;
4195 
4196 	BT_DBG("%s", hdev->name);
4197 
4198 	if (!lmp_le_capable(hdev))
4199 		return cmd_status(sk, hdev->id, MGMT_OP_SET_STATIC_ADDRESS,
4200 				  MGMT_STATUS_NOT_SUPPORTED);
4201 
4202 	if (hdev_is_powered(hdev))
4203 		return cmd_status(sk, hdev->id, MGMT_OP_SET_STATIC_ADDRESS,
4204 				  MGMT_STATUS_REJECTED);
4205 
4206 	if (bacmp(&cp->bdaddr, BDADDR_ANY)) {
4207 		if (!bacmp(&cp->bdaddr, BDADDR_NONE))
4208 			return cmd_status(sk, hdev->id,
4209 					  MGMT_OP_SET_STATIC_ADDRESS,
4210 					  MGMT_STATUS_INVALID_PARAMS);
4211 
4212 		/* Two most significant bits shall be set */
4213 		if ((cp->bdaddr.b[5] & 0xc0) != 0xc0)
4214 			return cmd_status(sk, hdev->id,
4215 					  MGMT_OP_SET_STATIC_ADDRESS,
4216 					  MGMT_STATUS_INVALID_PARAMS);
4217 	}
4218 
4219 	hci_dev_lock(hdev);
4220 
4221 	bacpy(&hdev->static_addr, &cp->bdaddr);
4222 
4223 	err = cmd_complete(sk, hdev->id, MGMT_OP_SET_STATIC_ADDRESS, 0, NULL, 0);
4224 
4225 	hci_dev_unlock(hdev);
4226 
4227 	return err;
4228 }
4229 
4230 static int set_scan_params(struct sock *sk, struct hci_dev *hdev,
4231 			   void *data, u16 len)
4232 {
4233 	struct mgmt_cp_set_scan_params *cp = data;
4234 	__u16 interval, window;
4235 	int err;
4236 
4237 	BT_DBG("%s", hdev->name);
4238 
4239 	if (!lmp_le_capable(hdev))
4240 		return cmd_status(sk, hdev->id, MGMT_OP_SET_SCAN_PARAMS,
4241 				  MGMT_STATUS_NOT_SUPPORTED);
4242 
4243 	interval = __le16_to_cpu(cp->interval);
4244 
4245 	if (interval < 0x0004 || interval > 0x4000)
4246 		return cmd_status(sk, hdev->id, MGMT_OP_SET_SCAN_PARAMS,
4247 				  MGMT_STATUS_INVALID_PARAMS);
4248 
4249 	window = __le16_to_cpu(cp->window);
4250 
4251 	if (window < 0x0004 || window > 0x4000)
4252 		return cmd_status(sk, hdev->id, MGMT_OP_SET_SCAN_PARAMS,
4253 				  MGMT_STATUS_INVALID_PARAMS);
4254 
4255 	if (window > interval)
4256 		return cmd_status(sk, hdev->id, MGMT_OP_SET_SCAN_PARAMS,
4257 				  MGMT_STATUS_INVALID_PARAMS);
4258 
4259 	hci_dev_lock(hdev);
4260 
4261 	hdev->le_scan_interval = interval;
4262 	hdev->le_scan_window = window;
4263 
4264 	err = cmd_complete(sk, hdev->id, MGMT_OP_SET_SCAN_PARAMS, 0, NULL, 0);
4265 
4266 	/* If background scan is running, restart it so new parameters are
4267 	 * loaded.
4268 	 */
4269 	if (test_bit(HCI_LE_SCAN, &hdev->dev_flags) &&
4270 	    hdev->discovery.state == DISCOVERY_STOPPED) {
4271 		struct hci_request req;
4272 
4273 		hci_req_init(&req, hdev);
4274 
4275 		hci_req_add_le_scan_disable(&req);
4276 		hci_req_add_le_passive_scan(&req);
4277 
4278 		hci_req_run(&req, NULL);
4279 	}
4280 
4281 	hci_dev_unlock(hdev);
4282 
4283 	return err;
4284 }
4285 
4286 static void fast_connectable_complete(struct hci_dev *hdev, u8 status)
4287 {
4288 	struct pending_cmd *cmd;
4289 
4290 	BT_DBG("status 0x%02x", status);
4291 
4292 	hci_dev_lock(hdev);
4293 
4294 	cmd = mgmt_pending_find(MGMT_OP_SET_FAST_CONNECTABLE, hdev);
4295 	if (!cmd)
4296 		goto unlock;
4297 
4298 	if (status) {
4299 		cmd_status(cmd->sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE,
4300 			   mgmt_status(status));
4301 	} else {
4302 		struct mgmt_mode *cp = cmd->param;
4303 
4304 		if (cp->val)
4305 			set_bit(HCI_FAST_CONNECTABLE, &hdev->dev_flags);
4306 		else
4307 			clear_bit(HCI_FAST_CONNECTABLE, &hdev->dev_flags);
4308 
4309 		send_settings_rsp(cmd->sk, MGMT_OP_SET_FAST_CONNECTABLE, hdev);
4310 		new_settings(hdev, cmd->sk);
4311 	}
4312 
4313 	mgmt_pending_remove(cmd);
4314 
4315 unlock:
4316 	hci_dev_unlock(hdev);
4317 }
4318 
4319 static int set_fast_connectable(struct sock *sk, struct hci_dev *hdev,
4320 				void *data, u16 len)
4321 {
4322 	struct mgmt_mode *cp = data;
4323 	struct pending_cmd *cmd;
4324 	struct hci_request req;
4325 	int err;
4326 
4327 	BT_DBG("%s", hdev->name);
4328 
4329 	if (!test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags) ||
4330 	    hdev->hci_ver < BLUETOOTH_VER_1_2)
4331 		return cmd_status(sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE,
4332 				  MGMT_STATUS_NOT_SUPPORTED);
4333 
4334 	if (cp->val != 0x00 && cp->val != 0x01)
4335 		return cmd_status(sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE,
4336 				  MGMT_STATUS_INVALID_PARAMS);
4337 
4338 	if (!hdev_is_powered(hdev))
4339 		return cmd_status(sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE,
4340 				  MGMT_STATUS_NOT_POWERED);
4341 
4342 	if (!test_bit(HCI_CONNECTABLE, &hdev->dev_flags))
4343 		return cmd_status(sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE,
4344 				  MGMT_STATUS_REJECTED);
4345 
4346 	hci_dev_lock(hdev);
4347 
4348 	if (mgmt_pending_find(MGMT_OP_SET_FAST_CONNECTABLE, hdev)) {
4349 		err = cmd_status(sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE,
4350 				 MGMT_STATUS_BUSY);
4351 		goto unlock;
4352 	}
4353 
4354 	if (!!cp->val == test_bit(HCI_FAST_CONNECTABLE, &hdev->dev_flags)) {
4355 		err = send_settings_rsp(sk, MGMT_OP_SET_FAST_CONNECTABLE,
4356 					hdev);
4357 		goto unlock;
4358 	}
4359 
4360 	cmd = mgmt_pending_add(sk, MGMT_OP_SET_FAST_CONNECTABLE, hdev,
4361 			       data, len);
4362 	if (!cmd) {
4363 		err = -ENOMEM;
4364 		goto unlock;
4365 	}
4366 
4367 	hci_req_init(&req, hdev);
4368 
4369 	write_fast_connectable(&req, cp->val);
4370 
4371 	err = hci_req_run(&req, fast_connectable_complete);
4372 	if (err < 0) {
4373 		err = cmd_status(sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE,
4374 				 MGMT_STATUS_FAILED);
4375 		mgmt_pending_remove(cmd);
4376 	}
4377 
4378 unlock:
4379 	hci_dev_unlock(hdev);
4380 
4381 	return err;
4382 }
4383 
4384 static void set_bredr_scan(struct hci_request *req)
4385 {
4386 	struct hci_dev *hdev = req->hdev;
4387 	u8 scan = 0;
4388 
4389 	/* Ensure that fast connectable is disabled. This function will
4390 	 * not do anything if the page scan parameters are already what
4391 	 * they should be.
4392 	 */
4393 	write_fast_connectable(req, false);
4394 
4395 	if (test_bit(HCI_CONNECTABLE, &hdev->dev_flags) ||
4396 	    !list_empty(&hdev->whitelist))
4397 		scan |= SCAN_PAGE;
4398 	if (test_bit(HCI_DISCOVERABLE, &hdev->dev_flags))
4399 		scan |= SCAN_INQUIRY;
4400 
4401 	if (scan)
4402 		hci_req_add(req, HCI_OP_WRITE_SCAN_ENABLE, 1, &scan);
4403 }
4404 
4405 static void set_bredr_complete(struct hci_dev *hdev, u8 status)
4406 {
4407 	struct pending_cmd *cmd;
4408 
4409 	BT_DBG("status 0x%02x", status);
4410 
4411 	hci_dev_lock(hdev);
4412 
4413 	cmd = mgmt_pending_find(MGMT_OP_SET_BREDR, hdev);
4414 	if (!cmd)
4415 		goto unlock;
4416 
4417 	if (status) {
4418 		u8 mgmt_err = mgmt_status(status);
4419 
4420 		/* We need to restore the flag if related HCI commands
4421 		 * failed.
4422 		 */
4423 		clear_bit(HCI_BREDR_ENABLED, &hdev->dev_flags);
4424 
4425 		cmd_status(cmd->sk, cmd->index, cmd->opcode, mgmt_err);
4426 	} else {
4427 		send_settings_rsp(cmd->sk, MGMT_OP_SET_BREDR, hdev);
4428 		new_settings(hdev, cmd->sk);
4429 	}
4430 
4431 	mgmt_pending_remove(cmd);
4432 
4433 unlock:
4434 	hci_dev_unlock(hdev);
4435 }
4436 
4437 static int set_bredr(struct sock *sk, struct hci_dev *hdev, void *data, u16 len)
4438 {
4439 	struct mgmt_mode *cp = data;
4440 	struct pending_cmd *cmd;
4441 	struct hci_request req;
4442 	int err;
4443 
4444 	BT_DBG("request for %s", hdev->name);
4445 
4446 	if (!lmp_bredr_capable(hdev) || !lmp_le_capable(hdev))
4447 		return cmd_status(sk, hdev->id, MGMT_OP_SET_BREDR,
4448 				  MGMT_STATUS_NOT_SUPPORTED);
4449 
4450 	if (!test_bit(HCI_LE_ENABLED, &hdev->dev_flags))
4451 		return cmd_status(sk, hdev->id, MGMT_OP_SET_BREDR,
4452 				  MGMT_STATUS_REJECTED);
4453 
4454 	if (cp->val != 0x00 && cp->val != 0x01)
4455 		return cmd_status(sk, hdev->id, MGMT_OP_SET_BREDR,
4456 				  MGMT_STATUS_INVALID_PARAMS);
4457 
4458 	hci_dev_lock(hdev);
4459 
4460 	if (cp->val == test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags)) {
4461 		err = send_settings_rsp(sk, MGMT_OP_SET_BREDR, hdev);
4462 		goto unlock;
4463 	}
4464 
4465 	if (!hdev_is_powered(hdev)) {
4466 		if (!cp->val) {
4467 			clear_bit(HCI_DISCOVERABLE, &hdev->dev_flags);
4468 			clear_bit(HCI_SSP_ENABLED, &hdev->dev_flags);
4469 			clear_bit(HCI_LINK_SECURITY, &hdev->dev_flags);
4470 			clear_bit(HCI_FAST_CONNECTABLE, &hdev->dev_flags);
4471 			clear_bit(HCI_HS_ENABLED, &hdev->dev_flags);
4472 		}
4473 
4474 		change_bit(HCI_BREDR_ENABLED, &hdev->dev_flags);
4475 
4476 		err = send_settings_rsp(sk, MGMT_OP_SET_BREDR, hdev);
4477 		if (err < 0)
4478 			goto unlock;
4479 
4480 		err = new_settings(hdev, sk);
4481 		goto unlock;
4482 	}
4483 
4484 	/* Reject disabling when powered on */
4485 	if (!cp->val) {
4486 		err = cmd_status(sk, hdev->id, MGMT_OP_SET_BREDR,
4487 				 MGMT_STATUS_REJECTED);
4488 		goto unlock;
4489 	}
4490 
4491 	if (mgmt_pending_find(MGMT_OP_SET_BREDR, hdev)) {
4492 		err = cmd_status(sk, hdev->id, MGMT_OP_SET_BREDR,
4493 				 MGMT_STATUS_BUSY);
4494 		goto unlock;
4495 	}
4496 
4497 	cmd = mgmt_pending_add(sk, MGMT_OP_SET_BREDR, hdev, data, len);
4498 	if (!cmd) {
4499 		err = -ENOMEM;
4500 		goto unlock;
4501 	}
4502 
4503 	/* We need to flip the bit already here so that update_adv_data
4504 	 * generates the correct flags.
4505 	 */
4506 	set_bit(HCI_BREDR_ENABLED, &hdev->dev_flags);
4507 
4508 	hci_req_init(&req, hdev);
4509 
4510 	if (test_bit(HCI_CONNECTABLE, &hdev->dev_flags) ||
4511 	    !list_empty(&hdev->whitelist))
4512 		set_bredr_scan(&req);
4513 
4514 	/* Since only the advertising data flags will change, there
4515 	 * is no need to update the scan response data.
4516 	 */
4517 	update_adv_data(&req);
4518 
4519 	err = hci_req_run(&req, set_bredr_complete);
4520 	if (err < 0)
4521 		mgmt_pending_remove(cmd);
4522 
4523 unlock:
4524 	hci_dev_unlock(hdev);
4525 	return err;
4526 }
4527 
4528 static int set_secure_conn(struct sock *sk, struct hci_dev *hdev,
4529 			   void *data, u16 len)
4530 {
4531 	struct mgmt_mode *cp = data;
4532 	struct pending_cmd *cmd;
4533 	u8 val, status;
4534 	int err;
4535 
4536 	BT_DBG("request for %s", hdev->name);
4537 
4538 	status = mgmt_bredr_support(hdev);
4539 	if (status)
4540 		return cmd_status(sk, hdev->id, MGMT_OP_SET_SECURE_CONN,
4541 				  status);
4542 
4543 	if (!lmp_sc_capable(hdev) &&
4544 	    !test_bit(HCI_FORCE_SC, &hdev->dbg_flags))
4545 		return cmd_status(sk, hdev->id, MGMT_OP_SET_SECURE_CONN,
4546 				  MGMT_STATUS_NOT_SUPPORTED);
4547 
4548 	if (cp->val != 0x00 && cp->val != 0x01 && cp->val != 0x02)
4549 		return cmd_status(sk, hdev->id, MGMT_OP_SET_SECURE_CONN,
4550 				  MGMT_STATUS_INVALID_PARAMS);
4551 
4552 	hci_dev_lock(hdev);
4553 
4554 	if (!hdev_is_powered(hdev)) {
4555 		bool changed;
4556 
4557 		if (cp->val) {
4558 			changed = !test_and_set_bit(HCI_SC_ENABLED,
4559 						    &hdev->dev_flags);
4560 			if (cp->val == 0x02)
4561 				set_bit(HCI_SC_ONLY, &hdev->dev_flags);
4562 			else
4563 				clear_bit(HCI_SC_ONLY, &hdev->dev_flags);
4564 		} else {
4565 			changed = test_and_clear_bit(HCI_SC_ENABLED,
4566 						     &hdev->dev_flags);
4567 			clear_bit(HCI_SC_ONLY, &hdev->dev_flags);
4568 		}
4569 
4570 		err = send_settings_rsp(sk, MGMT_OP_SET_SECURE_CONN, hdev);
4571 		if (err < 0)
4572 			goto failed;
4573 
4574 		if (changed)
4575 			err = new_settings(hdev, sk);
4576 
4577 		goto failed;
4578 	}
4579 
4580 	if (mgmt_pending_find(MGMT_OP_SET_SECURE_CONN, hdev)) {
4581 		err = cmd_status(sk, hdev->id, MGMT_OP_SET_SECURE_CONN,
4582 				 MGMT_STATUS_BUSY);
4583 		goto failed;
4584 	}
4585 
4586 	val = !!cp->val;
4587 
4588 	if (val == test_bit(HCI_SC_ENABLED, &hdev->dev_flags) &&
4589 	    (cp->val == 0x02) == test_bit(HCI_SC_ONLY, &hdev->dev_flags)) {
4590 		err = send_settings_rsp(sk, MGMT_OP_SET_SECURE_CONN, hdev);
4591 		goto failed;
4592 	}
4593 
4594 	cmd = mgmt_pending_add(sk, MGMT_OP_SET_SECURE_CONN, hdev, data, len);
4595 	if (!cmd) {
4596 		err = -ENOMEM;
4597 		goto failed;
4598 	}
4599 
4600 	err = hci_send_cmd(hdev, HCI_OP_WRITE_SC_SUPPORT, 1, &val);
4601 	if (err < 0) {
4602 		mgmt_pending_remove(cmd);
4603 		goto failed;
4604 	}
4605 
4606 	if (cp->val == 0x02)
4607 		set_bit(HCI_SC_ONLY, &hdev->dev_flags);
4608 	else
4609 		clear_bit(HCI_SC_ONLY, &hdev->dev_flags);
4610 
4611 failed:
4612 	hci_dev_unlock(hdev);
4613 	return err;
4614 }
4615 
4616 static int set_debug_keys(struct sock *sk, struct hci_dev *hdev,
4617 			  void *data, u16 len)
4618 {
4619 	struct mgmt_mode *cp = data;
4620 	bool changed, use_changed;
4621 	int err;
4622 
4623 	BT_DBG("request for %s", hdev->name);
4624 
4625 	if (cp->val != 0x00 && cp->val != 0x01 && cp->val != 0x02)
4626 		return cmd_status(sk, hdev->id, MGMT_OP_SET_DEBUG_KEYS,
4627 				  MGMT_STATUS_INVALID_PARAMS);
4628 
4629 	hci_dev_lock(hdev);
4630 
4631 	if (cp->val)
4632 		changed = !test_and_set_bit(HCI_KEEP_DEBUG_KEYS,
4633 					    &hdev->dev_flags);
4634 	else
4635 		changed = test_and_clear_bit(HCI_KEEP_DEBUG_KEYS,
4636 					     &hdev->dev_flags);
4637 
4638 	if (cp->val == 0x02)
4639 		use_changed = !test_and_set_bit(HCI_USE_DEBUG_KEYS,
4640 						&hdev->dev_flags);
4641 	else
4642 		use_changed = test_and_clear_bit(HCI_USE_DEBUG_KEYS,
4643 						 &hdev->dev_flags);
4644 
4645 	if (hdev_is_powered(hdev) && use_changed &&
4646 	    test_bit(HCI_SSP_ENABLED, &hdev->dev_flags)) {
4647 		u8 mode = (cp->val == 0x02) ? 0x01 : 0x00;
4648 		hci_send_cmd(hdev, HCI_OP_WRITE_SSP_DEBUG_MODE,
4649 			     sizeof(mode), &mode);
4650 	}
4651 
4652 	err = send_settings_rsp(sk, MGMT_OP_SET_DEBUG_KEYS, hdev);
4653 	if (err < 0)
4654 		goto unlock;
4655 
4656 	if (changed)
4657 		err = new_settings(hdev, sk);
4658 
4659 unlock:
4660 	hci_dev_unlock(hdev);
4661 	return err;
4662 }
4663 
4664 static int set_privacy(struct sock *sk, struct hci_dev *hdev, void *cp_data,
4665 		       u16 len)
4666 {
4667 	struct mgmt_cp_set_privacy *cp = cp_data;
4668 	bool changed;
4669 	int err;
4670 
4671 	BT_DBG("request for %s", hdev->name);
4672 
4673 	if (!lmp_le_capable(hdev))
4674 		return cmd_status(sk, hdev->id, MGMT_OP_SET_PRIVACY,
4675 				  MGMT_STATUS_NOT_SUPPORTED);
4676 
4677 	if (cp->privacy != 0x00 && cp->privacy != 0x01)
4678 		return cmd_status(sk, hdev->id, MGMT_OP_SET_PRIVACY,
4679 				  MGMT_STATUS_INVALID_PARAMS);
4680 
4681 	if (hdev_is_powered(hdev))
4682 		return cmd_status(sk, hdev->id, MGMT_OP_SET_PRIVACY,
4683 				  MGMT_STATUS_REJECTED);
4684 
4685 	hci_dev_lock(hdev);
4686 
4687 	/* If user space supports this command it is also expected to
4688 	 * handle IRKs. Therefore, set the HCI_RPA_RESOLVING flag.
4689 	 */
4690 	set_bit(HCI_RPA_RESOLVING, &hdev->dev_flags);
4691 
4692 	if (cp->privacy) {
4693 		changed = !test_and_set_bit(HCI_PRIVACY, &hdev->dev_flags);
4694 		memcpy(hdev->irk, cp->irk, sizeof(hdev->irk));
4695 		set_bit(HCI_RPA_EXPIRED, &hdev->dev_flags);
4696 	} else {
4697 		changed = test_and_clear_bit(HCI_PRIVACY, &hdev->dev_flags);
4698 		memset(hdev->irk, 0, sizeof(hdev->irk));
4699 		clear_bit(HCI_RPA_EXPIRED, &hdev->dev_flags);
4700 	}
4701 
4702 	err = send_settings_rsp(sk, MGMT_OP_SET_PRIVACY, hdev);
4703 	if (err < 0)
4704 		goto unlock;
4705 
4706 	if (changed)
4707 		err = new_settings(hdev, sk);
4708 
4709 unlock:
4710 	hci_dev_unlock(hdev);
4711 	return err;
4712 }
4713 
4714 static bool irk_is_valid(struct mgmt_irk_info *irk)
4715 {
4716 	switch (irk->addr.type) {
4717 	case BDADDR_LE_PUBLIC:
4718 		return true;
4719 
4720 	case BDADDR_LE_RANDOM:
4721 		/* Two most significant bits shall be set */
4722 		if ((irk->addr.bdaddr.b[5] & 0xc0) != 0xc0)
4723 			return false;
4724 		return true;
4725 	}
4726 
4727 	return false;
4728 }
4729 
4730 static int load_irks(struct sock *sk, struct hci_dev *hdev, void *cp_data,
4731 		     u16 len)
4732 {
4733 	struct mgmt_cp_load_irks *cp = cp_data;
4734 	const u16 max_irk_count = ((U16_MAX - sizeof(*cp)) /
4735 				   sizeof(struct mgmt_irk_info));
4736 	u16 irk_count, expected_len;
4737 	int i, err;
4738 
4739 	BT_DBG("request for %s", hdev->name);
4740 
4741 	if (!lmp_le_capable(hdev))
4742 		return cmd_status(sk, hdev->id, MGMT_OP_LOAD_IRKS,
4743 				  MGMT_STATUS_NOT_SUPPORTED);
4744 
4745 	irk_count = __le16_to_cpu(cp->irk_count);
4746 	if (irk_count > max_irk_count) {
4747 		BT_ERR("load_irks: too big irk_count value %u", irk_count);
4748 		return cmd_status(sk, hdev->id, MGMT_OP_LOAD_IRKS,
4749 				  MGMT_STATUS_INVALID_PARAMS);
4750 	}
4751 
4752 	expected_len = sizeof(*cp) + irk_count * sizeof(struct mgmt_irk_info);
4753 	if (expected_len != len) {
4754 		BT_ERR("load_irks: expected %u bytes, got %u bytes",
4755 		       expected_len, len);
4756 		return cmd_status(sk, hdev->id, MGMT_OP_LOAD_IRKS,
4757 				  MGMT_STATUS_INVALID_PARAMS);
4758 	}
4759 
4760 	BT_DBG("%s irk_count %u", hdev->name, irk_count);
4761 
4762 	for (i = 0; i < irk_count; i++) {
4763 		struct mgmt_irk_info *key = &cp->irks[i];
4764 
4765 		if (!irk_is_valid(key))
4766 			return cmd_status(sk, hdev->id,
4767 					  MGMT_OP_LOAD_IRKS,
4768 					  MGMT_STATUS_INVALID_PARAMS);
4769 	}
4770 
4771 	hci_dev_lock(hdev);
4772 
4773 	hci_smp_irks_clear(hdev);
4774 
4775 	for (i = 0; i < irk_count; i++) {
4776 		struct mgmt_irk_info *irk = &cp->irks[i];
4777 		u8 addr_type;
4778 
4779 		if (irk->addr.type == BDADDR_LE_PUBLIC)
4780 			addr_type = ADDR_LE_DEV_PUBLIC;
4781 		else
4782 			addr_type = ADDR_LE_DEV_RANDOM;
4783 
4784 		hci_add_irk(hdev, &irk->addr.bdaddr, addr_type, irk->val,
4785 			    BDADDR_ANY);
4786 	}
4787 
4788 	set_bit(HCI_RPA_RESOLVING, &hdev->dev_flags);
4789 
4790 	err = cmd_complete(sk, hdev->id, MGMT_OP_LOAD_IRKS, 0, NULL, 0);
4791 
4792 	hci_dev_unlock(hdev);
4793 
4794 	return err;
4795 }
4796 
4797 static bool ltk_is_valid(struct mgmt_ltk_info *key)
4798 {
4799 	if (key->master != 0x00 && key->master != 0x01)
4800 		return false;
4801 
4802 	switch (key->addr.type) {
4803 	case BDADDR_LE_PUBLIC:
4804 		return true;
4805 
4806 	case BDADDR_LE_RANDOM:
4807 		/* Two most significant bits shall be set */
4808 		if ((key->addr.bdaddr.b[5] & 0xc0) != 0xc0)
4809 			return false;
4810 		return true;
4811 	}
4812 
4813 	return false;
4814 }
4815 
4816 static int load_long_term_keys(struct sock *sk, struct hci_dev *hdev,
4817 			       void *cp_data, u16 len)
4818 {
4819 	struct mgmt_cp_load_long_term_keys *cp = cp_data;
4820 	const u16 max_key_count = ((U16_MAX - sizeof(*cp)) /
4821 				   sizeof(struct mgmt_ltk_info));
4822 	u16 key_count, expected_len;
4823 	int i, err;
4824 
4825 	BT_DBG("request for %s", hdev->name);
4826 
4827 	if (!lmp_le_capable(hdev))
4828 		return cmd_status(sk, hdev->id, MGMT_OP_LOAD_LONG_TERM_KEYS,
4829 				  MGMT_STATUS_NOT_SUPPORTED);
4830 
4831 	key_count = __le16_to_cpu(cp->key_count);
4832 	if (key_count > max_key_count) {
4833 		BT_ERR("load_ltks: too big key_count value %u", key_count);
4834 		return cmd_status(sk, hdev->id, MGMT_OP_LOAD_LONG_TERM_KEYS,
4835 				  MGMT_STATUS_INVALID_PARAMS);
4836 	}
4837 
4838 	expected_len = sizeof(*cp) + key_count *
4839 					sizeof(struct mgmt_ltk_info);
4840 	if (expected_len != len) {
4841 		BT_ERR("load_keys: expected %u bytes, got %u bytes",
4842 		       expected_len, len);
4843 		return cmd_status(sk, hdev->id, MGMT_OP_LOAD_LONG_TERM_KEYS,
4844 				  MGMT_STATUS_INVALID_PARAMS);
4845 	}
4846 
4847 	BT_DBG("%s key_count %u", hdev->name, key_count);
4848 
4849 	for (i = 0; i < key_count; i++) {
4850 		struct mgmt_ltk_info *key = &cp->keys[i];
4851 
4852 		if (!ltk_is_valid(key))
4853 			return cmd_status(sk, hdev->id,
4854 					  MGMT_OP_LOAD_LONG_TERM_KEYS,
4855 					  MGMT_STATUS_INVALID_PARAMS);
4856 	}
4857 
4858 	hci_dev_lock(hdev);
4859 
4860 	hci_smp_ltks_clear(hdev);
4861 
4862 	for (i = 0; i < key_count; i++) {
4863 		struct mgmt_ltk_info *key = &cp->keys[i];
4864 		u8 type, addr_type, authenticated;
4865 
4866 		if (key->addr.type == BDADDR_LE_PUBLIC)
4867 			addr_type = ADDR_LE_DEV_PUBLIC;
4868 		else
4869 			addr_type = ADDR_LE_DEV_RANDOM;
4870 
4871 		if (key->master)
4872 			type = SMP_LTK;
4873 		else
4874 			type = SMP_LTK_SLAVE;
4875 
4876 		switch (key->type) {
4877 		case MGMT_LTK_UNAUTHENTICATED:
4878 			authenticated = 0x00;
4879 			break;
4880 		case MGMT_LTK_AUTHENTICATED:
4881 			authenticated = 0x01;
4882 			break;
4883 		default:
4884 			continue;
4885 		}
4886 
4887 		hci_add_ltk(hdev, &key->addr.bdaddr, addr_type, type,
4888 			    authenticated, key->val, key->enc_size, key->ediv,
4889 			    key->rand);
4890 	}
4891 
4892 	err = cmd_complete(sk, hdev->id, MGMT_OP_LOAD_LONG_TERM_KEYS, 0,
4893 			   NULL, 0);
4894 
4895 	hci_dev_unlock(hdev);
4896 
4897 	return err;
4898 }
4899 
4900 struct cmd_conn_lookup {
4901 	struct hci_conn *conn;
4902 	bool valid_tx_power;
4903 	u8 mgmt_status;
4904 };
4905 
4906 static void get_conn_info_complete(struct pending_cmd *cmd, void *data)
4907 {
4908 	struct cmd_conn_lookup *match = data;
4909 	struct mgmt_cp_get_conn_info *cp;
4910 	struct mgmt_rp_get_conn_info rp;
4911 	struct hci_conn *conn = cmd->user_data;
4912 
4913 	if (conn != match->conn)
4914 		return;
4915 
4916 	cp = (struct mgmt_cp_get_conn_info *) cmd->param;
4917 
4918 	memset(&rp, 0, sizeof(rp));
4919 	bacpy(&rp.addr.bdaddr, &cp->addr.bdaddr);
4920 	rp.addr.type = cp->addr.type;
4921 
4922 	if (!match->mgmt_status) {
4923 		rp.rssi = conn->rssi;
4924 
4925 		if (match->valid_tx_power) {
4926 			rp.tx_power = conn->tx_power;
4927 			rp.max_tx_power = conn->max_tx_power;
4928 		} else {
4929 			rp.tx_power = HCI_TX_POWER_INVALID;
4930 			rp.max_tx_power = HCI_TX_POWER_INVALID;
4931 		}
4932 	}
4933 
4934 	cmd_complete(cmd->sk, cmd->index, MGMT_OP_GET_CONN_INFO,
4935 		     match->mgmt_status, &rp, sizeof(rp));
4936 
4937 	hci_conn_drop(conn);
4938 
4939 	mgmt_pending_remove(cmd);
4940 }
4941 
4942 static void conn_info_refresh_complete(struct hci_dev *hdev, u8 status)
4943 {
4944 	struct hci_cp_read_rssi *cp;
4945 	struct hci_conn *conn;
4946 	struct cmd_conn_lookup match;
4947 	u16 handle;
4948 
4949 	BT_DBG("status 0x%02x", status);
4950 
4951 	hci_dev_lock(hdev);
4952 
4953 	/* TX power data is valid in case request completed successfully,
4954 	 * otherwise we assume it's not valid. At the moment we assume that
4955 	 * either both or none of current and max values are valid to keep code
4956 	 * simple.
4957 	 */
4958 	match.valid_tx_power = !status;
4959 
4960 	/* Commands sent in request are either Read RSSI or Read Transmit Power
4961 	 * Level so we check which one was last sent to retrieve connection
4962 	 * handle.  Both commands have handle as first parameter so it's safe to
4963 	 * cast data on the same command struct.
4964 	 *
4965 	 * First command sent is always Read RSSI and we fail only if it fails.
4966 	 * In other case we simply override error to indicate success as we
4967 	 * already remembered if TX power value is actually valid.
4968 	 */
4969 	cp = hci_sent_cmd_data(hdev, HCI_OP_READ_RSSI);
4970 	if (!cp) {
4971 		cp = hci_sent_cmd_data(hdev, HCI_OP_READ_TX_POWER);
4972 		status = 0;
4973 	}
4974 
4975 	if (!cp) {
4976 		BT_ERR("invalid sent_cmd in response");
4977 		goto unlock;
4978 	}
4979 
4980 	handle = __le16_to_cpu(cp->handle);
4981 	conn = hci_conn_hash_lookup_handle(hdev, handle);
4982 	if (!conn) {
4983 		BT_ERR("unknown handle (%d) in response", handle);
4984 		goto unlock;
4985 	}
4986 
4987 	match.conn = conn;
4988 	match.mgmt_status = mgmt_status(status);
4989 
4990 	/* Cache refresh is complete, now reply for mgmt request for given
4991 	 * connection only.
4992 	 */
4993 	mgmt_pending_foreach(MGMT_OP_GET_CONN_INFO, hdev,
4994 			     get_conn_info_complete, &match);
4995 
4996 unlock:
4997 	hci_dev_unlock(hdev);
4998 }
4999 
5000 static int get_conn_info(struct sock *sk, struct hci_dev *hdev, void *data,
5001 			 u16 len)
5002 {
5003 	struct mgmt_cp_get_conn_info *cp = data;
5004 	struct mgmt_rp_get_conn_info rp;
5005 	struct hci_conn *conn;
5006 	unsigned long conn_info_age;
5007 	int err = 0;
5008 
5009 	BT_DBG("%s", hdev->name);
5010 
5011 	memset(&rp, 0, sizeof(rp));
5012 	bacpy(&rp.addr.bdaddr, &cp->addr.bdaddr);
5013 	rp.addr.type = cp->addr.type;
5014 
5015 	if (!bdaddr_type_is_valid(cp->addr.type))
5016 		return cmd_complete(sk, hdev->id, MGMT_OP_GET_CONN_INFO,
5017 				    MGMT_STATUS_INVALID_PARAMS,
5018 				    &rp, sizeof(rp));
5019 
5020 	hci_dev_lock(hdev);
5021 
5022 	if (!hdev_is_powered(hdev)) {
5023 		err = cmd_complete(sk, hdev->id, MGMT_OP_GET_CONN_INFO,
5024 				   MGMT_STATUS_NOT_POWERED, &rp, sizeof(rp));
5025 		goto unlock;
5026 	}
5027 
5028 	if (cp->addr.type == BDADDR_BREDR)
5029 		conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK,
5030 					       &cp->addr.bdaddr);
5031 	else
5032 		conn = hci_conn_hash_lookup_ba(hdev, LE_LINK, &cp->addr.bdaddr);
5033 
5034 	if (!conn || conn->state != BT_CONNECTED) {
5035 		err = cmd_complete(sk, hdev->id, MGMT_OP_GET_CONN_INFO,
5036 				   MGMT_STATUS_NOT_CONNECTED, &rp, sizeof(rp));
5037 		goto unlock;
5038 	}
5039 
5040 	/* To avoid client trying to guess when to poll again for information we
5041 	 * calculate conn info age as random value between min/max set in hdev.
5042 	 */
5043 	conn_info_age = hdev->conn_info_min_age +
5044 			prandom_u32_max(hdev->conn_info_max_age -
5045 					hdev->conn_info_min_age);
5046 
5047 	/* Query controller to refresh cached values if they are too old or were
5048 	 * never read.
5049 	 */
5050 	if (time_after(jiffies, conn->conn_info_timestamp +
5051 		       msecs_to_jiffies(conn_info_age)) ||
5052 	    !conn->conn_info_timestamp) {
5053 		struct hci_request req;
5054 		struct hci_cp_read_tx_power req_txp_cp;
5055 		struct hci_cp_read_rssi req_rssi_cp;
5056 		struct pending_cmd *cmd;
5057 
5058 		hci_req_init(&req, hdev);
5059 		req_rssi_cp.handle = cpu_to_le16(conn->handle);
5060 		hci_req_add(&req, HCI_OP_READ_RSSI, sizeof(req_rssi_cp),
5061 			    &req_rssi_cp);
5062 
5063 		/* For LE links TX power does not change thus we don't need to
5064 		 * query for it once value is known.
5065 		 */
5066 		if (!bdaddr_type_is_le(cp->addr.type) ||
5067 		    conn->tx_power == HCI_TX_POWER_INVALID) {
5068 			req_txp_cp.handle = cpu_to_le16(conn->handle);
5069 			req_txp_cp.type = 0x00;
5070 			hci_req_add(&req, HCI_OP_READ_TX_POWER,
5071 				    sizeof(req_txp_cp), &req_txp_cp);
5072 		}
5073 
5074 		/* Max TX power needs to be read only once per connection */
5075 		if (conn->max_tx_power == HCI_TX_POWER_INVALID) {
5076 			req_txp_cp.handle = cpu_to_le16(conn->handle);
5077 			req_txp_cp.type = 0x01;
5078 			hci_req_add(&req, HCI_OP_READ_TX_POWER,
5079 				    sizeof(req_txp_cp), &req_txp_cp);
5080 		}
5081 
5082 		err = hci_req_run(&req, conn_info_refresh_complete);
5083 		if (err < 0)
5084 			goto unlock;
5085 
5086 		cmd = mgmt_pending_add(sk, MGMT_OP_GET_CONN_INFO, hdev,
5087 				       data, len);
5088 		if (!cmd) {
5089 			err = -ENOMEM;
5090 			goto unlock;
5091 		}
5092 
5093 		hci_conn_hold(conn);
5094 		cmd->user_data = conn;
5095 
5096 		conn->conn_info_timestamp = jiffies;
5097 	} else {
5098 		/* Cache is valid, just reply with values cached in hci_conn */
5099 		rp.rssi = conn->rssi;
5100 		rp.tx_power = conn->tx_power;
5101 		rp.max_tx_power = conn->max_tx_power;
5102 
5103 		err = cmd_complete(sk, hdev->id, MGMT_OP_GET_CONN_INFO,
5104 				   MGMT_STATUS_SUCCESS, &rp, sizeof(rp));
5105 	}
5106 
5107 unlock:
5108 	hci_dev_unlock(hdev);
5109 	return err;
5110 }
5111 
5112 static void get_clock_info_complete(struct hci_dev *hdev, u8 status)
5113 {
5114 	struct mgmt_cp_get_clock_info *cp;
5115 	struct mgmt_rp_get_clock_info rp;
5116 	struct hci_cp_read_clock *hci_cp;
5117 	struct pending_cmd *cmd;
5118 	struct hci_conn *conn;
5119 
5120 	BT_DBG("%s status %u", hdev->name, status);
5121 
5122 	hci_dev_lock(hdev);
5123 
5124 	hci_cp = hci_sent_cmd_data(hdev, HCI_OP_READ_CLOCK);
5125 	if (!hci_cp)
5126 		goto unlock;
5127 
5128 	if (hci_cp->which) {
5129 		u16 handle = __le16_to_cpu(hci_cp->handle);
5130 		conn = hci_conn_hash_lookup_handle(hdev, handle);
5131 	} else {
5132 		conn = NULL;
5133 	}
5134 
5135 	cmd = mgmt_pending_find_data(MGMT_OP_GET_CLOCK_INFO, hdev, conn);
5136 	if (!cmd)
5137 		goto unlock;
5138 
5139 	cp = cmd->param;
5140 
5141 	memset(&rp, 0, sizeof(rp));
5142 	memcpy(&rp.addr, &cp->addr, sizeof(rp.addr));
5143 
5144 	if (status)
5145 		goto send_rsp;
5146 
5147 	rp.local_clock = cpu_to_le32(hdev->clock);
5148 
5149 	if (conn) {
5150 		rp.piconet_clock = cpu_to_le32(conn->clock);
5151 		rp.accuracy = cpu_to_le16(conn->clock_accuracy);
5152 	}
5153 
5154 send_rsp:
5155 	cmd_complete(cmd->sk, cmd->index, cmd->opcode, mgmt_status(status),
5156 		     &rp, sizeof(rp));
5157 	mgmt_pending_remove(cmd);
5158 	if (conn)
5159 		hci_conn_drop(conn);
5160 
5161 unlock:
5162 	hci_dev_unlock(hdev);
5163 }
5164 
5165 static int get_clock_info(struct sock *sk, struct hci_dev *hdev, void *data,
5166 			 u16 len)
5167 {
5168 	struct mgmt_cp_get_clock_info *cp = data;
5169 	struct mgmt_rp_get_clock_info rp;
5170 	struct hci_cp_read_clock hci_cp;
5171 	struct pending_cmd *cmd;
5172 	struct hci_request req;
5173 	struct hci_conn *conn;
5174 	int err;
5175 
5176 	BT_DBG("%s", hdev->name);
5177 
5178 	memset(&rp, 0, sizeof(rp));
5179 	bacpy(&rp.addr.bdaddr, &cp->addr.bdaddr);
5180 	rp.addr.type = cp->addr.type;
5181 
5182 	if (cp->addr.type != BDADDR_BREDR)
5183 		return cmd_complete(sk, hdev->id, MGMT_OP_GET_CLOCK_INFO,
5184 				    MGMT_STATUS_INVALID_PARAMS,
5185 				    &rp, sizeof(rp));
5186 
5187 	hci_dev_lock(hdev);
5188 
5189 	if (!hdev_is_powered(hdev)) {
5190 		err = cmd_complete(sk, hdev->id, MGMT_OP_GET_CLOCK_INFO,
5191 				   MGMT_STATUS_NOT_POWERED, &rp, sizeof(rp));
5192 		goto unlock;
5193 	}
5194 
5195 	if (bacmp(&cp->addr.bdaddr, BDADDR_ANY)) {
5196 		conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK,
5197 					       &cp->addr.bdaddr);
5198 		if (!conn || conn->state != BT_CONNECTED) {
5199 			err = cmd_complete(sk, hdev->id,
5200 					   MGMT_OP_GET_CLOCK_INFO,
5201 					   MGMT_STATUS_NOT_CONNECTED,
5202 					   &rp, sizeof(rp));
5203 			goto unlock;
5204 		}
5205 	} else {
5206 		conn = NULL;
5207 	}
5208 
5209 	cmd = mgmt_pending_add(sk, MGMT_OP_GET_CLOCK_INFO, hdev, data, len);
5210 	if (!cmd) {
5211 		err = -ENOMEM;
5212 		goto unlock;
5213 	}
5214 
5215 	hci_req_init(&req, hdev);
5216 
5217 	memset(&hci_cp, 0, sizeof(hci_cp));
5218 	hci_req_add(&req, HCI_OP_READ_CLOCK, sizeof(hci_cp), &hci_cp);
5219 
5220 	if (conn) {
5221 		hci_conn_hold(conn);
5222 		cmd->user_data = conn;
5223 
5224 		hci_cp.handle = cpu_to_le16(conn->handle);
5225 		hci_cp.which = 0x01; /* Piconet clock */
5226 		hci_req_add(&req, HCI_OP_READ_CLOCK, sizeof(hci_cp), &hci_cp);
5227 	}
5228 
5229 	err = hci_req_run(&req, get_clock_info_complete);
5230 	if (err < 0)
5231 		mgmt_pending_remove(cmd);
5232 
5233 unlock:
5234 	hci_dev_unlock(hdev);
5235 	return err;
5236 }
5237 
5238 /* Helper for Add/Remove Device commands */
5239 static void update_page_scan(struct hci_dev *hdev, u8 scan)
5240 {
5241 	if (!test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags))
5242 		return;
5243 
5244 	if (!hdev_is_powered(hdev))
5245 		return;
5246 
5247 	/* If HCI_CONNECTABLE is set then Add/Remove Device should not
5248 	 * make any changes to page scanning.
5249 	 */
5250 	if (test_bit(HCI_CONNECTABLE, &hdev->dev_flags))
5251 		return;
5252 
5253 	if (test_bit(HCI_DISCOVERABLE, &hdev->dev_flags))
5254 		scan |= SCAN_INQUIRY;
5255 
5256 	hci_send_cmd(hdev, HCI_OP_WRITE_SCAN_ENABLE, 1, &scan);
5257 }
5258 
5259 static void device_added(struct sock *sk, struct hci_dev *hdev,
5260 			 bdaddr_t *bdaddr, u8 type, u8 action)
5261 {
5262 	struct mgmt_ev_device_added ev;
5263 
5264 	bacpy(&ev.addr.bdaddr, bdaddr);
5265 	ev.addr.type = type;
5266 	ev.action = action;
5267 
5268 	mgmt_event(MGMT_EV_DEVICE_ADDED, hdev, &ev, sizeof(ev), sk);
5269 }
5270 
5271 static int add_device(struct sock *sk, struct hci_dev *hdev,
5272 		      void *data, u16 len)
5273 {
5274 	struct mgmt_cp_add_device *cp = data;
5275 	u8 auto_conn, addr_type;
5276 	int err;
5277 
5278 	BT_DBG("%s", hdev->name);
5279 
5280 	if (!bdaddr_type_is_valid(cp->addr.type) ||
5281 	    !bacmp(&cp->addr.bdaddr, BDADDR_ANY))
5282 		return cmd_complete(sk, hdev->id, MGMT_OP_ADD_DEVICE,
5283 				    MGMT_STATUS_INVALID_PARAMS,
5284 				    &cp->addr, sizeof(cp->addr));
5285 
5286 	if (cp->action != 0x00 && cp->action != 0x01 && cp->action != 0x02)
5287 		return cmd_complete(sk, hdev->id, MGMT_OP_ADD_DEVICE,
5288 				    MGMT_STATUS_INVALID_PARAMS,
5289 				    &cp->addr, sizeof(cp->addr));
5290 
5291 	hci_dev_lock(hdev);
5292 
5293 	if (cp->addr.type == BDADDR_BREDR) {
5294 		bool update_scan;
5295 
5296 		/* Only incoming connections action is supported for now */
5297 		if (cp->action != 0x01) {
5298 			err = cmd_complete(sk, hdev->id, MGMT_OP_ADD_DEVICE,
5299 					   MGMT_STATUS_INVALID_PARAMS,
5300 					   &cp->addr, sizeof(cp->addr));
5301 			goto unlock;
5302 		}
5303 
5304 		update_scan = list_empty(&hdev->whitelist);
5305 
5306 		err = hci_bdaddr_list_add(&hdev->whitelist, &cp->addr.bdaddr,
5307 					  cp->addr.type);
5308 		if (err)
5309 			goto unlock;
5310 
5311 		if (update_scan)
5312 			update_page_scan(hdev, SCAN_PAGE);
5313 
5314 		goto added;
5315 	}
5316 
5317 	if (cp->addr.type == BDADDR_LE_PUBLIC)
5318 		addr_type = ADDR_LE_DEV_PUBLIC;
5319 	else
5320 		addr_type = ADDR_LE_DEV_RANDOM;
5321 
5322 	if (cp->action == 0x02)
5323 		auto_conn = HCI_AUTO_CONN_ALWAYS;
5324 	else if (cp->action == 0x01)
5325 		auto_conn = HCI_AUTO_CONN_DIRECT;
5326 	else
5327 		auto_conn = HCI_AUTO_CONN_REPORT;
5328 
5329 	/* If the connection parameters don't exist for this device,
5330 	 * they will be created and configured with defaults.
5331 	 */
5332 	if (hci_conn_params_set(hdev, &cp->addr.bdaddr, addr_type,
5333 				auto_conn) < 0) {
5334 		err = cmd_complete(sk, hdev->id, MGMT_OP_ADD_DEVICE,
5335 				   MGMT_STATUS_FAILED,
5336 				   &cp->addr, sizeof(cp->addr));
5337 		goto unlock;
5338 	}
5339 
5340 added:
5341 	device_added(sk, hdev, &cp->addr.bdaddr, cp->addr.type, cp->action);
5342 
5343 	err = cmd_complete(sk, hdev->id, MGMT_OP_ADD_DEVICE,
5344 			   MGMT_STATUS_SUCCESS, &cp->addr, sizeof(cp->addr));
5345 
5346 unlock:
5347 	hci_dev_unlock(hdev);
5348 	return err;
5349 }
5350 
5351 static void device_removed(struct sock *sk, struct hci_dev *hdev,
5352 			   bdaddr_t *bdaddr, u8 type)
5353 {
5354 	struct mgmt_ev_device_removed ev;
5355 
5356 	bacpy(&ev.addr.bdaddr, bdaddr);
5357 	ev.addr.type = type;
5358 
5359 	mgmt_event(MGMT_EV_DEVICE_REMOVED, hdev, &ev, sizeof(ev), sk);
5360 }
5361 
5362 static int remove_device(struct sock *sk, struct hci_dev *hdev,
5363 			 void *data, u16 len)
5364 {
5365 	struct mgmt_cp_remove_device *cp = data;
5366 	int err;
5367 
5368 	BT_DBG("%s", hdev->name);
5369 
5370 	hci_dev_lock(hdev);
5371 
5372 	if (bacmp(&cp->addr.bdaddr, BDADDR_ANY)) {
5373 		struct hci_conn_params *params;
5374 		u8 addr_type;
5375 
5376 		if (!bdaddr_type_is_valid(cp->addr.type)) {
5377 			err = cmd_complete(sk, hdev->id, MGMT_OP_REMOVE_DEVICE,
5378 					   MGMT_STATUS_INVALID_PARAMS,
5379 					   &cp->addr, sizeof(cp->addr));
5380 			goto unlock;
5381 		}
5382 
5383 		if (cp->addr.type == BDADDR_BREDR) {
5384 			err = hci_bdaddr_list_del(&hdev->whitelist,
5385 						  &cp->addr.bdaddr,
5386 						  cp->addr.type);
5387 			if (err) {
5388 				err = cmd_complete(sk, hdev->id,
5389 						   MGMT_OP_REMOVE_DEVICE,
5390 						   MGMT_STATUS_INVALID_PARAMS,
5391 						   &cp->addr, sizeof(cp->addr));
5392 				goto unlock;
5393 			}
5394 
5395 			if (list_empty(&hdev->whitelist))
5396 				update_page_scan(hdev, SCAN_DISABLED);
5397 
5398 			device_removed(sk, hdev, &cp->addr.bdaddr,
5399 				       cp->addr.type);
5400 			goto complete;
5401 		}
5402 
5403 		if (cp->addr.type == BDADDR_LE_PUBLIC)
5404 			addr_type = ADDR_LE_DEV_PUBLIC;
5405 		else
5406 			addr_type = ADDR_LE_DEV_RANDOM;
5407 
5408 		params = hci_conn_params_lookup(hdev, &cp->addr.bdaddr,
5409 						addr_type);
5410 		if (!params) {
5411 			err = cmd_complete(sk, hdev->id, MGMT_OP_REMOVE_DEVICE,
5412 					   MGMT_STATUS_INVALID_PARAMS,
5413 					   &cp->addr, sizeof(cp->addr));
5414 			goto unlock;
5415 		}
5416 
5417 		if (params->auto_connect == HCI_AUTO_CONN_DISABLED) {
5418 			err = cmd_complete(sk, hdev->id, MGMT_OP_REMOVE_DEVICE,
5419 					   MGMT_STATUS_INVALID_PARAMS,
5420 					   &cp->addr, sizeof(cp->addr));
5421 			goto unlock;
5422 		}
5423 
5424 		list_del(&params->action);
5425 		list_del(&params->list);
5426 		kfree(params);
5427 		hci_update_background_scan(hdev);
5428 
5429 		device_removed(sk, hdev, &cp->addr.bdaddr, cp->addr.type);
5430 	} else {
5431 		struct hci_conn_params *p, *tmp;
5432 		struct bdaddr_list *b, *btmp;
5433 
5434 		if (cp->addr.type) {
5435 			err = cmd_complete(sk, hdev->id, MGMT_OP_REMOVE_DEVICE,
5436 					   MGMT_STATUS_INVALID_PARAMS,
5437 					   &cp->addr, sizeof(cp->addr));
5438 			goto unlock;
5439 		}
5440 
5441 		list_for_each_entry_safe(b, btmp, &hdev->whitelist, list) {
5442 			device_removed(sk, hdev, &b->bdaddr, b->bdaddr_type);
5443 			list_del(&b->list);
5444 			kfree(b);
5445 		}
5446 
5447 		update_page_scan(hdev, SCAN_DISABLED);
5448 
5449 		list_for_each_entry_safe(p, tmp, &hdev->le_conn_params, list) {
5450 			if (p->auto_connect == HCI_AUTO_CONN_DISABLED)
5451 				continue;
5452 			device_removed(sk, hdev, &p->addr, p->addr_type);
5453 			list_del(&p->action);
5454 			list_del(&p->list);
5455 			kfree(p);
5456 		}
5457 
5458 		BT_DBG("All LE connection parameters were removed");
5459 
5460 		hci_update_background_scan(hdev);
5461 	}
5462 
5463 complete:
5464 	err = cmd_complete(sk, hdev->id, MGMT_OP_REMOVE_DEVICE,
5465 			   MGMT_STATUS_SUCCESS, &cp->addr, sizeof(cp->addr));
5466 
5467 unlock:
5468 	hci_dev_unlock(hdev);
5469 	return err;
5470 }
5471 
5472 static int load_conn_param(struct sock *sk, struct hci_dev *hdev, void *data,
5473 			   u16 len)
5474 {
5475 	struct mgmt_cp_load_conn_param *cp = data;
5476 	const u16 max_param_count = ((U16_MAX - sizeof(*cp)) /
5477 				     sizeof(struct mgmt_conn_param));
5478 	u16 param_count, expected_len;
5479 	int i;
5480 
5481 	if (!lmp_le_capable(hdev))
5482 		return cmd_status(sk, hdev->id, MGMT_OP_LOAD_CONN_PARAM,
5483 				  MGMT_STATUS_NOT_SUPPORTED);
5484 
5485 	param_count = __le16_to_cpu(cp->param_count);
5486 	if (param_count > max_param_count) {
5487 		BT_ERR("load_conn_param: too big param_count value %u",
5488 		       param_count);
5489 		return cmd_status(sk, hdev->id, MGMT_OP_LOAD_CONN_PARAM,
5490 				  MGMT_STATUS_INVALID_PARAMS);
5491 	}
5492 
5493 	expected_len = sizeof(*cp) + param_count *
5494 					sizeof(struct mgmt_conn_param);
5495 	if (expected_len != len) {
5496 		BT_ERR("load_conn_param: expected %u bytes, got %u bytes",
5497 		       expected_len, len);
5498 		return cmd_status(sk, hdev->id, MGMT_OP_LOAD_CONN_PARAM,
5499 				  MGMT_STATUS_INVALID_PARAMS);
5500 	}
5501 
5502 	BT_DBG("%s param_count %u", hdev->name, param_count);
5503 
5504 	hci_dev_lock(hdev);
5505 
5506 	hci_conn_params_clear_disabled(hdev);
5507 
5508 	for (i = 0; i < param_count; i++) {
5509 		struct mgmt_conn_param *param = &cp->params[i];
5510 		struct hci_conn_params *hci_param;
5511 		u16 min, max, latency, timeout;
5512 		u8 addr_type;
5513 
5514 		BT_DBG("Adding %pMR (type %u)", &param->addr.bdaddr,
5515 		       param->addr.type);
5516 
5517 		if (param->addr.type == BDADDR_LE_PUBLIC) {
5518 			addr_type = ADDR_LE_DEV_PUBLIC;
5519 		} else if (param->addr.type == BDADDR_LE_RANDOM) {
5520 			addr_type = ADDR_LE_DEV_RANDOM;
5521 		} else {
5522 			BT_ERR("Ignoring invalid connection parameters");
5523 			continue;
5524 		}
5525 
5526 		min = le16_to_cpu(param->min_interval);
5527 		max = le16_to_cpu(param->max_interval);
5528 		latency = le16_to_cpu(param->latency);
5529 		timeout = le16_to_cpu(param->timeout);
5530 
5531 		BT_DBG("min 0x%04x max 0x%04x latency 0x%04x timeout 0x%04x",
5532 		       min, max, latency, timeout);
5533 
5534 		if (hci_check_conn_params(min, max, latency, timeout) < 0) {
5535 			BT_ERR("Ignoring invalid connection parameters");
5536 			continue;
5537 		}
5538 
5539 		hci_param = hci_conn_params_add(hdev, &param->addr.bdaddr,
5540 						addr_type);
5541 		if (!hci_param) {
5542 			BT_ERR("Failed to add connection parameters");
5543 			continue;
5544 		}
5545 
5546 		hci_param->conn_min_interval = min;
5547 		hci_param->conn_max_interval = max;
5548 		hci_param->conn_latency = latency;
5549 		hci_param->supervision_timeout = timeout;
5550 	}
5551 
5552 	hci_dev_unlock(hdev);
5553 
5554 	return cmd_complete(sk, hdev->id, MGMT_OP_LOAD_CONN_PARAM, 0, NULL, 0);
5555 }
5556 
5557 static int set_external_config(struct sock *sk, struct hci_dev *hdev,
5558 			       void *data, u16 len)
5559 {
5560 	struct mgmt_cp_set_external_config *cp = data;
5561 	bool changed;
5562 	int err;
5563 
5564 	BT_DBG("%s", hdev->name);
5565 
5566 	if (hdev_is_powered(hdev))
5567 		return cmd_status(sk, hdev->id, MGMT_OP_SET_EXTERNAL_CONFIG,
5568 				  MGMT_STATUS_REJECTED);
5569 
5570 	if (cp->config != 0x00 && cp->config != 0x01)
5571 		return cmd_status(sk, hdev->id, MGMT_OP_SET_EXTERNAL_CONFIG,
5572 				    MGMT_STATUS_INVALID_PARAMS);
5573 
5574 	if (!test_bit(HCI_QUIRK_EXTERNAL_CONFIG, &hdev->quirks))
5575 		return cmd_status(sk, hdev->id, MGMT_OP_SET_EXTERNAL_CONFIG,
5576 				  MGMT_STATUS_NOT_SUPPORTED);
5577 
5578 	hci_dev_lock(hdev);
5579 
5580 	if (cp->config)
5581 		changed = !test_and_set_bit(HCI_EXT_CONFIGURED,
5582 					    &hdev->dev_flags);
5583 	else
5584 		changed = test_and_clear_bit(HCI_EXT_CONFIGURED,
5585 					     &hdev->dev_flags);
5586 
5587 	err = send_options_rsp(sk, MGMT_OP_SET_EXTERNAL_CONFIG, hdev);
5588 	if (err < 0)
5589 		goto unlock;
5590 
5591 	if (!changed)
5592 		goto unlock;
5593 
5594 	err = new_options(hdev, sk);
5595 
5596 	if (test_bit(HCI_UNCONFIGURED, &hdev->dev_flags) == is_configured(hdev)) {
5597 		mgmt_index_removed(hdev);
5598 
5599 		if (test_and_change_bit(HCI_UNCONFIGURED, &hdev->dev_flags)) {
5600 			set_bit(HCI_CONFIG, &hdev->dev_flags);
5601 			set_bit(HCI_AUTO_OFF, &hdev->dev_flags);
5602 
5603 			queue_work(hdev->req_workqueue, &hdev->power_on);
5604 		} else {
5605 			set_bit(HCI_RAW, &hdev->flags);
5606 			mgmt_index_added(hdev);
5607 		}
5608 	}
5609 
5610 unlock:
5611 	hci_dev_unlock(hdev);
5612 	return err;
5613 }
5614 
5615 static int set_public_address(struct sock *sk, struct hci_dev *hdev,
5616 			      void *data, u16 len)
5617 {
5618 	struct mgmt_cp_set_public_address *cp = data;
5619 	bool changed;
5620 	int err;
5621 
5622 	BT_DBG("%s", hdev->name);
5623 
5624 	if (hdev_is_powered(hdev))
5625 		return cmd_status(sk, hdev->id, MGMT_OP_SET_PUBLIC_ADDRESS,
5626 				  MGMT_STATUS_REJECTED);
5627 
5628 	if (!bacmp(&cp->bdaddr, BDADDR_ANY))
5629 		return cmd_status(sk, hdev->id, MGMT_OP_SET_PUBLIC_ADDRESS,
5630 				  MGMT_STATUS_INVALID_PARAMS);
5631 
5632 	if (!hdev->set_bdaddr)
5633 		return cmd_status(sk, hdev->id, MGMT_OP_SET_PUBLIC_ADDRESS,
5634 				  MGMT_STATUS_NOT_SUPPORTED);
5635 
5636 	hci_dev_lock(hdev);
5637 
5638 	changed = !!bacmp(&hdev->public_addr, &cp->bdaddr);
5639 	bacpy(&hdev->public_addr, &cp->bdaddr);
5640 
5641 	err = send_options_rsp(sk, MGMT_OP_SET_PUBLIC_ADDRESS, hdev);
5642 	if (err < 0)
5643 		goto unlock;
5644 
5645 	if (!changed)
5646 		goto unlock;
5647 
5648 	if (test_bit(HCI_UNCONFIGURED, &hdev->dev_flags))
5649 		err = new_options(hdev, sk);
5650 
5651 	if (is_configured(hdev)) {
5652 		mgmt_index_removed(hdev);
5653 
5654 		clear_bit(HCI_UNCONFIGURED, &hdev->dev_flags);
5655 
5656 		set_bit(HCI_CONFIG, &hdev->dev_flags);
5657 		set_bit(HCI_AUTO_OFF, &hdev->dev_flags);
5658 
5659 		queue_work(hdev->req_workqueue, &hdev->power_on);
5660 	}
5661 
5662 unlock:
5663 	hci_dev_unlock(hdev);
5664 	return err;
5665 }
5666 
5667 static const struct mgmt_handler {
5668 	int (*func) (struct sock *sk, struct hci_dev *hdev, void *data,
5669 		     u16 data_len);
5670 	bool var_len;
5671 	size_t data_len;
5672 } mgmt_handlers[] = {
5673 	{ NULL }, /* 0x0000 (no command) */
5674 	{ read_version,           false, MGMT_READ_VERSION_SIZE },
5675 	{ read_commands,          false, MGMT_READ_COMMANDS_SIZE },
5676 	{ read_index_list,        false, MGMT_READ_INDEX_LIST_SIZE },
5677 	{ read_controller_info,   false, MGMT_READ_INFO_SIZE },
5678 	{ set_powered,            false, MGMT_SETTING_SIZE },
5679 	{ set_discoverable,       false, MGMT_SET_DISCOVERABLE_SIZE },
5680 	{ set_connectable,        false, MGMT_SETTING_SIZE },
5681 	{ set_fast_connectable,   false, MGMT_SETTING_SIZE },
5682 	{ set_bondable,           false, MGMT_SETTING_SIZE },
5683 	{ set_link_security,      false, MGMT_SETTING_SIZE },
5684 	{ set_ssp,                false, MGMT_SETTING_SIZE },
5685 	{ set_hs,                 false, MGMT_SETTING_SIZE },
5686 	{ set_le,                 false, MGMT_SETTING_SIZE },
5687 	{ set_dev_class,          false, MGMT_SET_DEV_CLASS_SIZE },
5688 	{ set_local_name,         false, MGMT_SET_LOCAL_NAME_SIZE },
5689 	{ add_uuid,               false, MGMT_ADD_UUID_SIZE },
5690 	{ remove_uuid,            false, MGMT_REMOVE_UUID_SIZE },
5691 	{ load_link_keys,         true,  MGMT_LOAD_LINK_KEYS_SIZE },
5692 	{ load_long_term_keys,    true,  MGMT_LOAD_LONG_TERM_KEYS_SIZE },
5693 	{ disconnect,             false, MGMT_DISCONNECT_SIZE },
5694 	{ get_connections,        false, MGMT_GET_CONNECTIONS_SIZE },
5695 	{ pin_code_reply,         false, MGMT_PIN_CODE_REPLY_SIZE },
5696 	{ pin_code_neg_reply,     false, MGMT_PIN_CODE_NEG_REPLY_SIZE },
5697 	{ set_io_capability,      false, MGMT_SET_IO_CAPABILITY_SIZE },
5698 	{ pair_device,            false, MGMT_PAIR_DEVICE_SIZE },
5699 	{ cancel_pair_device,     false, MGMT_CANCEL_PAIR_DEVICE_SIZE },
5700 	{ unpair_device,          false, MGMT_UNPAIR_DEVICE_SIZE },
5701 	{ user_confirm_reply,     false, MGMT_USER_CONFIRM_REPLY_SIZE },
5702 	{ user_confirm_neg_reply, false, MGMT_USER_CONFIRM_NEG_REPLY_SIZE },
5703 	{ user_passkey_reply,     false, MGMT_USER_PASSKEY_REPLY_SIZE },
5704 	{ user_passkey_neg_reply, false, MGMT_USER_PASSKEY_NEG_REPLY_SIZE },
5705 	{ read_local_oob_data,    false, MGMT_READ_LOCAL_OOB_DATA_SIZE },
5706 	{ add_remote_oob_data,    true,  MGMT_ADD_REMOTE_OOB_DATA_SIZE },
5707 	{ remove_remote_oob_data, false, MGMT_REMOVE_REMOTE_OOB_DATA_SIZE },
5708 	{ start_discovery,        false, MGMT_START_DISCOVERY_SIZE },
5709 	{ stop_discovery,         false, MGMT_STOP_DISCOVERY_SIZE },
5710 	{ confirm_name,           false, MGMT_CONFIRM_NAME_SIZE },
5711 	{ block_device,           false, MGMT_BLOCK_DEVICE_SIZE },
5712 	{ unblock_device,         false, MGMT_UNBLOCK_DEVICE_SIZE },
5713 	{ set_device_id,          false, MGMT_SET_DEVICE_ID_SIZE },
5714 	{ set_advertising,        false, MGMT_SETTING_SIZE },
5715 	{ set_bredr,              false, MGMT_SETTING_SIZE },
5716 	{ set_static_address,     false, MGMT_SET_STATIC_ADDRESS_SIZE },
5717 	{ set_scan_params,        false, MGMT_SET_SCAN_PARAMS_SIZE },
5718 	{ set_secure_conn,        false, MGMT_SETTING_SIZE },
5719 	{ set_debug_keys,         false, MGMT_SETTING_SIZE },
5720 	{ set_privacy,            false, MGMT_SET_PRIVACY_SIZE },
5721 	{ load_irks,              true,  MGMT_LOAD_IRKS_SIZE },
5722 	{ get_conn_info,          false, MGMT_GET_CONN_INFO_SIZE },
5723 	{ get_clock_info,         false, MGMT_GET_CLOCK_INFO_SIZE },
5724 	{ add_device,             false, MGMT_ADD_DEVICE_SIZE },
5725 	{ remove_device,          false, MGMT_REMOVE_DEVICE_SIZE },
5726 	{ load_conn_param,        true,  MGMT_LOAD_CONN_PARAM_SIZE },
5727 	{ read_unconf_index_list, false, MGMT_READ_UNCONF_INDEX_LIST_SIZE },
5728 	{ read_config_info,       false, MGMT_READ_CONFIG_INFO_SIZE },
5729 	{ set_external_config,    false, MGMT_SET_EXTERNAL_CONFIG_SIZE },
5730 	{ set_public_address,     false, MGMT_SET_PUBLIC_ADDRESS_SIZE },
5731 };
5732 
5733 int mgmt_control(struct sock *sk, struct msghdr *msg, size_t msglen)
5734 {
5735 	void *buf;
5736 	u8 *cp;
5737 	struct mgmt_hdr *hdr;
5738 	u16 opcode, index, len;
5739 	struct hci_dev *hdev = NULL;
5740 	const struct mgmt_handler *handler;
5741 	int err;
5742 
5743 	BT_DBG("got %zu bytes", msglen);
5744 
5745 	if (msglen < sizeof(*hdr))
5746 		return -EINVAL;
5747 
5748 	buf = kmalloc(msglen, GFP_KERNEL);
5749 	if (!buf)
5750 		return -ENOMEM;
5751 
5752 	if (memcpy_fromiovec(buf, msg->msg_iov, msglen)) {
5753 		err = -EFAULT;
5754 		goto done;
5755 	}
5756 
5757 	hdr = buf;
5758 	opcode = __le16_to_cpu(hdr->opcode);
5759 	index = __le16_to_cpu(hdr->index);
5760 	len = __le16_to_cpu(hdr->len);
5761 
5762 	if (len != msglen - sizeof(*hdr)) {
5763 		err = -EINVAL;
5764 		goto done;
5765 	}
5766 
5767 	if (index != MGMT_INDEX_NONE) {
5768 		hdev = hci_dev_get(index);
5769 		if (!hdev) {
5770 			err = cmd_status(sk, index, opcode,
5771 					 MGMT_STATUS_INVALID_INDEX);
5772 			goto done;
5773 		}
5774 
5775 		if (test_bit(HCI_SETUP, &hdev->dev_flags) ||
5776 		    test_bit(HCI_CONFIG, &hdev->dev_flags) ||
5777 		    test_bit(HCI_USER_CHANNEL, &hdev->dev_flags)) {
5778 			err = cmd_status(sk, index, opcode,
5779 					 MGMT_STATUS_INVALID_INDEX);
5780 			goto done;
5781 		}
5782 
5783 		if (test_bit(HCI_UNCONFIGURED, &hdev->dev_flags) &&
5784 		    opcode != MGMT_OP_READ_CONFIG_INFO &&
5785 		    opcode != MGMT_OP_SET_EXTERNAL_CONFIG &&
5786 		    opcode != MGMT_OP_SET_PUBLIC_ADDRESS) {
5787 			err = cmd_status(sk, index, opcode,
5788 					 MGMT_STATUS_INVALID_INDEX);
5789 			goto done;
5790 		}
5791 	}
5792 
5793 	if (opcode >= ARRAY_SIZE(mgmt_handlers) ||
5794 	    mgmt_handlers[opcode].func == NULL) {
5795 		BT_DBG("Unknown op %u", opcode);
5796 		err = cmd_status(sk, index, opcode,
5797 				 MGMT_STATUS_UNKNOWN_COMMAND);
5798 		goto done;
5799 	}
5800 
5801 	if (hdev && (opcode <= MGMT_OP_READ_INDEX_LIST ||
5802 		     opcode == MGMT_OP_READ_UNCONF_INDEX_LIST)) {
5803 		err = cmd_status(sk, index, opcode,
5804 				 MGMT_STATUS_INVALID_INDEX);
5805 		goto done;
5806 	}
5807 
5808 	if (!hdev && (opcode > MGMT_OP_READ_INDEX_LIST &&
5809 		      opcode != MGMT_OP_READ_UNCONF_INDEX_LIST)) {
5810 		err = cmd_status(sk, index, opcode,
5811 				 MGMT_STATUS_INVALID_INDEX);
5812 		goto done;
5813 	}
5814 
5815 	handler = &mgmt_handlers[opcode];
5816 
5817 	if ((handler->var_len && len < handler->data_len) ||
5818 	    (!handler->var_len && len != handler->data_len)) {
5819 		err = cmd_status(sk, index, opcode,
5820 				 MGMT_STATUS_INVALID_PARAMS);
5821 		goto done;
5822 	}
5823 
5824 	if (hdev)
5825 		mgmt_init_hdev(sk, hdev);
5826 
5827 	cp = buf + sizeof(*hdr);
5828 
5829 	err = handler->func(sk, hdev, cp, len);
5830 	if (err < 0)
5831 		goto done;
5832 
5833 	err = msglen;
5834 
5835 done:
5836 	if (hdev)
5837 		hci_dev_put(hdev);
5838 
5839 	kfree(buf);
5840 	return err;
5841 }
5842 
5843 void mgmt_index_added(struct hci_dev *hdev)
5844 {
5845 	if (hdev->dev_type != HCI_BREDR)
5846 		return;
5847 
5848 	if (test_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks))
5849 		return;
5850 
5851 	if (test_bit(HCI_UNCONFIGURED, &hdev->dev_flags))
5852 		mgmt_event(MGMT_EV_UNCONF_INDEX_ADDED, hdev, NULL, 0, NULL);
5853 	else
5854 		mgmt_event(MGMT_EV_INDEX_ADDED, hdev, NULL, 0, NULL);
5855 }
5856 
5857 void mgmt_index_removed(struct hci_dev *hdev)
5858 {
5859 	u8 status = MGMT_STATUS_INVALID_INDEX;
5860 
5861 	if (hdev->dev_type != HCI_BREDR)
5862 		return;
5863 
5864 	if (test_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks))
5865 		return;
5866 
5867 	mgmt_pending_foreach(0, hdev, cmd_status_rsp, &status);
5868 
5869 	if (test_bit(HCI_UNCONFIGURED, &hdev->dev_flags))
5870 		mgmt_event(MGMT_EV_UNCONF_INDEX_REMOVED, hdev, NULL, 0, NULL);
5871 	else
5872 		mgmt_event(MGMT_EV_INDEX_REMOVED, hdev, NULL, 0, NULL);
5873 }
5874 
5875 /* This function requires the caller holds hdev->lock */
5876 static void restart_le_actions(struct hci_dev *hdev)
5877 {
5878 	struct hci_conn_params *p;
5879 
5880 	list_for_each_entry(p, &hdev->le_conn_params, list) {
5881 		/* Needed for AUTO_OFF case where might not "really"
5882 		 * have been powered off.
5883 		 */
5884 		list_del_init(&p->action);
5885 
5886 		switch (p->auto_connect) {
5887 		case HCI_AUTO_CONN_DIRECT:
5888 		case HCI_AUTO_CONN_ALWAYS:
5889 			list_add(&p->action, &hdev->pend_le_conns);
5890 			break;
5891 		case HCI_AUTO_CONN_REPORT:
5892 			list_add(&p->action, &hdev->pend_le_reports);
5893 			break;
5894 		default:
5895 			break;
5896 		}
5897 	}
5898 
5899 	hci_update_background_scan(hdev);
5900 }
5901 
5902 static void powered_complete(struct hci_dev *hdev, u8 status)
5903 {
5904 	struct cmd_lookup match = { NULL, hdev };
5905 
5906 	BT_DBG("status 0x%02x", status);
5907 
5908 	hci_dev_lock(hdev);
5909 
5910 	restart_le_actions(hdev);
5911 
5912 	mgmt_pending_foreach(MGMT_OP_SET_POWERED, hdev, settings_rsp, &match);
5913 
5914 	new_settings(hdev, match.sk);
5915 
5916 	hci_dev_unlock(hdev);
5917 
5918 	if (match.sk)
5919 		sock_put(match.sk);
5920 }
5921 
5922 static int powered_update_hci(struct hci_dev *hdev)
5923 {
5924 	struct hci_request req;
5925 	u8 link_sec;
5926 
5927 	hci_req_init(&req, hdev);
5928 
5929 	if (test_bit(HCI_SSP_ENABLED, &hdev->dev_flags) &&
5930 	    !lmp_host_ssp_capable(hdev)) {
5931 		u8 ssp = 1;
5932 
5933 		hci_req_add(&req, HCI_OP_WRITE_SSP_MODE, 1, &ssp);
5934 	}
5935 
5936 	if (test_bit(HCI_LE_ENABLED, &hdev->dev_flags) &&
5937 	    lmp_bredr_capable(hdev)) {
5938 		struct hci_cp_write_le_host_supported cp;
5939 
5940 		cp.le = 0x01;
5941 		cp.simul = 0x00;
5942 
5943 		/* Check first if we already have the right
5944 		 * host state (host features set)
5945 		 */
5946 		if (cp.le != lmp_host_le_capable(hdev) ||
5947 		    cp.simul != lmp_host_le_br_capable(hdev))
5948 			hci_req_add(&req, HCI_OP_WRITE_LE_HOST_SUPPORTED,
5949 				    sizeof(cp), &cp);
5950 	}
5951 
5952 	if (lmp_le_capable(hdev)) {
5953 		/* Make sure the controller has a good default for
5954 		 * advertising data. This also applies to the case
5955 		 * where BR/EDR was toggled during the AUTO_OFF phase.
5956 		 */
5957 		if (test_bit(HCI_LE_ENABLED, &hdev->dev_flags)) {
5958 			update_adv_data(&req);
5959 			update_scan_rsp_data(&req);
5960 		}
5961 
5962 		if (test_bit(HCI_ADVERTISING, &hdev->dev_flags))
5963 			enable_advertising(&req);
5964 	}
5965 
5966 	link_sec = test_bit(HCI_LINK_SECURITY, &hdev->dev_flags);
5967 	if (link_sec != test_bit(HCI_AUTH, &hdev->flags))
5968 		hci_req_add(&req, HCI_OP_WRITE_AUTH_ENABLE,
5969 			    sizeof(link_sec), &link_sec);
5970 
5971 	if (lmp_bredr_capable(hdev)) {
5972 		if (test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags))
5973 			set_bredr_scan(&req);
5974 		update_class(&req);
5975 		update_name(&req);
5976 		update_eir(&req);
5977 	}
5978 
5979 	return hci_req_run(&req, powered_complete);
5980 }
5981 
5982 int mgmt_powered(struct hci_dev *hdev, u8 powered)
5983 {
5984 	struct cmd_lookup match = { NULL, hdev };
5985 	u8 status_not_powered = MGMT_STATUS_NOT_POWERED;
5986 	u8 zero_cod[] = { 0, 0, 0 };
5987 	int err;
5988 
5989 	if (!test_bit(HCI_MGMT, &hdev->dev_flags))
5990 		return 0;
5991 
5992 	if (powered) {
5993 		if (powered_update_hci(hdev) == 0)
5994 			return 0;
5995 
5996 		mgmt_pending_foreach(MGMT_OP_SET_POWERED, hdev, settings_rsp,
5997 				     &match);
5998 		goto new_settings;
5999 	}
6000 
6001 	mgmt_pending_foreach(MGMT_OP_SET_POWERED, hdev, settings_rsp, &match);
6002 	mgmt_pending_foreach(0, hdev, cmd_status_rsp, &status_not_powered);
6003 
6004 	if (memcmp(hdev->dev_class, zero_cod, sizeof(zero_cod)) != 0)
6005 		mgmt_event(MGMT_EV_CLASS_OF_DEV_CHANGED, hdev,
6006 			   zero_cod, sizeof(zero_cod), NULL);
6007 
6008 new_settings:
6009 	err = new_settings(hdev, match.sk);
6010 
6011 	if (match.sk)
6012 		sock_put(match.sk);
6013 
6014 	return err;
6015 }
6016 
6017 void mgmt_set_powered_failed(struct hci_dev *hdev, int err)
6018 {
6019 	struct pending_cmd *cmd;
6020 	u8 status;
6021 
6022 	cmd = mgmt_pending_find(MGMT_OP_SET_POWERED, hdev);
6023 	if (!cmd)
6024 		return;
6025 
6026 	if (err == -ERFKILL)
6027 		status = MGMT_STATUS_RFKILLED;
6028 	else
6029 		status = MGMT_STATUS_FAILED;
6030 
6031 	cmd_status(cmd->sk, hdev->id, MGMT_OP_SET_POWERED, status);
6032 
6033 	mgmt_pending_remove(cmd);
6034 }
6035 
6036 void mgmt_discoverable_timeout(struct hci_dev *hdev)
6037 {
6038 	struct hci_request req;
6039 
6040 	hci_dev_lock(hdev);
6041 
6042 	/* When discoverable timeout triggers, then just make sure
6043 	 * the limited discoverable flag is cleared. Even in the case
6044 	 * of a timeout triggered from general discoverable, it is
6045 	 * safe to unconditionally clear the flag.
6046 	 */
6047 	clear_bit(HCI_LIMITED_DISCOVERABLE, &hdev->dev_flags);
6048 	clear_bit(HCI_DISCOVERABLE, &hdev->dev_flags);
6049 
6050 	hci_req_init(&req, hdev);
6051 	if (test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags)) {
6052 		u8 scan = SCAN_PAGE;
6053 		hci_req_add(&req, HCI_OP_WRITE_SCAN_ENABLE,
6054 			    sizeof(scan), &scan);
6055 	}
6056 	update_class(&req);
6057 	update_adv_data(&req);
6058 	hci_req_run(&req, NULL);
6059 
6060 	hdev->discov_timeout = 0;
6061 
6062 	new_settings(hdev, NULL);
6063 
6064 	hci_dev_unlock(hdev);
6065 }
6066 
6067 void mgmt_new_link_key(struct hci_dev *hdev, struct link_key *key,
6068 		       bool persistent)
6069 {
6070 	struct mgmt_ev_new_link_key ev;
6071 
6072 	memset(&ev, 0, sizeof(ev));
6073 
6074 	ev.store_hint = persistent;
6075 	bacpy(&ev.key.addr.bdaddr, &key->bdaddr);
6076 	ev.key.addr.type = BDADDR_BREDR;
6077 	ev.key.type = key->type;
6078 	memcpy(ev.key.val, key->val, HCI_LINK_KEY_SIZE);
6079 	ev.key.pin_len = key->pin_len;
6080 
6081 	mgmt_event(MGMT_EV_NEW_LINK_KEY, hdev, &ev, sizeof(ev), NULL);
6082 }
6083 
6084 static u8 mgmt_ltk_type(struct smp_ltk *ltk)
6085 {
6086 	if (ltk->authenticated)
6087 		return MGMT_LTK_AUTHENTICATED;
6088 
6089 	return MGMT_LTK_UNAUTHENTICATED;
6090 }
6091 
6092 void mgmt_new_ltk(struct hci_dev *hdev, struct smp_ltk *key, bool persistent)
6093 {
6094 	struct mgmt_ev_new_long_term_key ev;
6095 
6096 	memset(&ev, 0, sizeof(ev));
6097 
6098 	/* Devices using resolvable or non-resolvable random addresses
6099 	 * without providing an indentity resolving key don't require
6100 	 * to store long term keys. Their addresses will change the
6101 	 * next time around.
6102 	 *
6103 	 * Only when a remote device provides an identity address
6104 	 * make sure the long term key is stored. If the remote
6105 	 * identity is known, the long term keys are internally
6106 	 * mapped to the identity address. So allow static random
6107 	 * and public addresses here.
6108 	 */
6109 	if (key->bdaddr_type == ADDR_LE_DEV_RANDOM &&
6110 	    (key->bdaddr.b[5] & 0xc0) != 0xc0)
6111 		ev.store_hint = 0x00;
6112 	else
6113 		ev.store_hint = persistent;
6114 
6115 	bacpy(&ev.key.addr.bdaddr, &key->bdaddr);
6116 	ev.key.addr.type = link_to_bdaddr(LE_LINK, key->bdaddr_type);
6117 	ev.key.type = mgmt_ltk_type(key);
6118 	ev.key.enc_size = key->enc_size;
6119 	ev.key.ediv = key->ediv;
6120 	ev.key.rand = key->rand;
6121 
6122 	if (key->type == SMP_LTK)
6123 		ev.key.master = 1;
6124 
6125 	memcpy(ev.key.val, key->val, sizeof(key->val));
6126 
6127 	mgmt_event(MGMT_EV_NEW_LONG_TERM_KEY, hdev, &ev, sizeof(ev), NULL);
6128 }
6129 
6130 void mgmt_new_irk(struct hci_dev *hdev, struct smp_irk *irk)
6131 {
6132 	struct mgmt_ev_new_irk ev;
6133 
6134 	memset(&ev, 0, sizeof(ev));
6135 
6136 	/* For identity resolving keys from devices that are already
6137 	 * using a public address or static random address, do not
6138 	 * ask for storing this key. The identity resolving key really
6139 	 * is only mandatory for devices using resovlable random
6140 	 * addresses.
6141 	 *
6142 	 * Storing all identity resolving keys has the downside that
6143 	 * they will be also loaded on next boot of they system. More
6144 	 * identity resolving keys, means more time during scanning is
6145 	 * needed to actually resolve these addresses.
6146 	 */
6147 	if (bacmp(&irk->rpa, BDADDR_ANY))
6148 		ev.store_hint = 0x01;
6149 	else
6150 		ev.store_hint = 0x00;
6151 
6152 	bacpy(&ev.rpa, &irk->rpa);
6153 	bacpy(&ev.irk.addr.bdaddr, &irk->bdaddr);
6154 	ev.irk.addr.type = link_to_bdaddr(LE_LINK, irk->addr_type);
6155 	memcpy(ev.irk.val, irk->val, sizeof(irk->val));
6156 
6157 	mgmt_event(MGMT_EV_NEW_IRK, hdev, &ev, sizeof(ev), NULL);
6158 }
6159 
6160 void mgmt_new_csrk(struct hci_dev *hdev, struct smp_csrk *csrk,
6161 		   bool persistent)
6162 {
6163 	struct mgmt_ev_new_csrk ev;
6164 
6165 	memset(&ev, 0, sizeof(ev));
6166 
6167 	/* Devices using resolvable or non-resolvable random addresses
6168 	 * without providing an indentity resolving key don't require
6169 	 * to store signature resolving keys. Their addresses will change
6170 	 * the next time around.
6171 	 *
6172 	 * Only when a remote device provides an identity address
6173 	 * make sure the signature resolving key is stored. So allow
6174 	 * static random and public addresses here.
6175 	 */
6176 	if (csrk->bdaddr_type == ADDR_LE_DEV_RANDOM &&
6177 	    (csrk->bdaddr.b[5] & 0xc0) != 0xc0)
6178 		ev.store_hint = 0x00;
6179 	else
6180 		ev.store_hint = persistent;
6181 
6182 	bacpy(&ev.key.addr.bdaddr, &csrk->bdaddr);
6183 	ev.key.addr.type = link_to_bdaddr(LE_LINK, csrk->bdaddr_type);
6184 	ev.key.master = csrk->master;
6185 	memcpy(ev.key.val, csrk->val, sizeof(csrk->val));
6186 
6187 	mgmt_event(MGMT_EV_NEW_CSRK, hdev, &ev, sizeof(ev), NULL);
6188 }
6189 
6190 void mgmt_new_conn_param(struct hci_dev *hdev, bdaddr_t *bdaddr,
6191 			 u8 bdaddr_type, u8 store_hint, u16 min_interval,
6192 			 u16 max_interval, u16 latency, u16 timeout)
6193 {
6194 	struct mgmt_ev_new_conn_param ev;
6195 
6196 	if (!hci_is_identity_address(bdaddr, bdaddr_type))
6197 		return;
6198 
6199 	memset(&ev, 0, sizeof(ev));
6200 	bacpy(&ev.addr.bdaddr, bdaddr);
6201 	ev.addr.type = link_to_bdaddr(LE_LINK, bdaddr_type);
6202 	ev.store_hint = store_hint;
6203 	ev.min_interval = cpu_to_le16(min_interval);
6204 	ev.max_interval = cpu_to_le16(max_interval);
6205 	ev.latency = cpu_to_le16(latency);
6206 	ev.timeout = cpu_to_le16(timeout);
6207 
6208 	mgmt_event(MGMT_EV_NEW_CONN_PARAM, hdev, &ev, sizeof(ev), NULL);
6209 }
6210 
6211 static inline u16 eir_append_data(u8 *eir, u16 eir_len, u8 type, u8 *data,
6212 				  u8 data_len)
6213 {
6214 	eir[eir_len++] = sizeof(type) + data_len;
6215 	eir[eir_len++] = type;
6216 	memcpy(&eir[eir_len], data, data_len);
6217 	eir_len += data_len;
6218 
6219 	return eir_len;
6220 }
6221 
6222 void mgmt_device_connected(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
6223 			   u8 addr_type, u32 flags, u8 *name, u8 name_len,
6224 			   u8 *dev_class)
6225 {
6226 	char buf[512];
6227 	struct mgmt_ev_device_connected *ev = (void *) buf;
6228 	u16 eir_len = 0;
6229 
6230 	bacpy(&ev->addr.bdaddr, bdaddr);
6231 	ev->addr.type = link_to_bdaddr(link_type, addr_type);
6232 
6233 	ev->flags = __cpu_to_le32(flags);
6234 
6235 	if (name_len > 0)
6236 		eir_len = eir_append_data(ev->eir, 0, EIR_NAME_COMPLETE,
6237 					  name, name_len);
6238 
6239 	if (dev_class && memcmp(dev_class, "\0\0\0", 3) != 0)
6240 		eir_len = eir_append_data(ev->eir, eir_len,
6241 					  EIR_CLASS_OF_DEV, dev_class, 3);
6242 
6243 	ev->eir_len = cpu_to_le16(eir_len);
6244 
6245 	mgmt_event(MGMT_EV_DEVICE_CONNECTED, hdev, buf,
6246 		    sizeof(*ev) + eir_len, NULL);
6247 }
6248 
6249 static void disconnect_rsp(struct pending_cmd *cmd, void *data)
6250 {
6251 	struct mgmt_cp_disconnect *cp = cmd->param;
6252 	struct sock **sk = data;
6253 	struct mgmt_rp_disconnect rp;
6254 
6255 	bacpy(&rp.addr.bdaddr, &cp->addr.bdaddr);
6256 	rp.addr.type = cp->addr.type;
6257 
6258 	cmd_complete(cmd->sk, cmd->index, MGMT_OP_DISCONNECT, 0, &rp,
6259 		     sizeof(rp));
6260 
6261 	*sk = cmd->sk;
6262 	sock_hold(*sk);
6263 
6264 	mgmt_pending_remove(cmd);
6265 }
6266 
6267 static void unpair_device_rsp(struct pending_cmd *cmd, void *data)
6268 {
6269 	struct hci_dev *hdev = data;
6270 	struct mgmt_cp_unpair_device *cp = cmd->param;
6271 	struct mgmt_rp_unpair_device rp;
6272 
6273 	memset(&rp, 0, sizeof(rp));
6274 	bacpy(&rp.addr.bdaddr, &cp->addr.bdaddr);
6275 	rp.addr.type = cp->addr.type;
6276 
6277 	device_unpaired(hdev, &cp->addr.bdaddr, cp->addr.type, cmd->sk);
6278 
6279 	cmd_complete(cmd->sk, cmd->index, cmd->opcode, 0, &rp, sizeof(rp));
6280 
6281 	mgmt_pending_remove(cmd);
6282 }
6283 
6284 void mgmt_device_disconnected(struct hci_dev *hdev, bdaddr_t *bdaddr,
6285 			      u8 link_type, u8 addr_type, u8 reason,
6286 			      bool mgmt_connected)
6287 {
6288 	struct mgmt_ev_device_disconnected ev;
6289 	struct pending_cmd *power_off;
6290 	struct sock *sk = NULL;
6291 
6292 	power_off = mgmt_pending_find(MGMT_OP_SET_POWERED, hdev);
6293 	if (power_off) {
6294 		struct mgmt_mode *cp = power_off->param;
6295 
6296 		/* The connection is still in hci_conn_hash so test for 1
6297 		 * instead of 0 to know if this is the last one.
6298 		 */
6299 		if (!cp->val && hci_conn_count(hdev) == 1) {
6300 			cancel_delayed_work(&hdev->power_off);
6301 			queue_work(hdev->req_workqueue, &hdev->power_off.work);
6302 		}
6303 	}
6304 
6305 	if (!mgmt_connected)
6306 		return;
6307 
6308 	if (link_type != ACL_LINK && link_type != LE_LINK)
6309 		return;
6310 
6311 	mgmt_pending_foreach(MGMT_OP_DISCONNECT, hdev, disconnect_rsp, &sk);
6312 
6313 	bacpy(&ev.addr.bdaddr, bdaddr);
6314 	ev.addr.type = link_to_bdaddr(link_type, addr_type);
6315 	ev.reason = reason;
6316 
6317 	mgmt_event(MGMT_EV_DEVICE_DISCONNECTED, hdev, &ev, sizeof(ev), sk);
6318 
6319 	if (sk)
6320 		sock_put(sk);
6321 
6322 	mgmt_pending_foreach(MGMT_OP_UNPAIR_DEVICE, hdev, unpair_device_rsp,
6323 			     hdev);
6324 }
6325 
6326 void mgmt_disconnect_failed(struct hci_dev *hdev, bdaddr_t *bdaddr,
6327 			    u8 link_type, u8 addr_type, u8 status)
6328 {
6329 	u8 bdaddr_type = link_to_bdaddr(link_type, addr_type);
6330 	struct mgmt_cp_disconnect *cp;
6331 	struct mgmt_rp_disconnect rp;
6332 	struct pending_cmd *cmd;
6333 
6334 	mgmt_pending_foreach(MGMT_OP_UNPAIR_DEVICE, hdev, unpair_device_rsp,
6335 			     hdev);
6336 
6337 	cmd = mgmt_pending_find(MGMT_OP_DISCONNECT, hdev);
6338 	if (!cmd)
6339 		return;
6340 
6341 	cp = cmd->param;
6342 
6343 	if (bacmp(bdaddr, &cp->addr.bdaddr))
6344 		return;
6345 
6346 	if (cp->addr.type != bdaddr_type)
6347 		return;
6348 
6349 	bacpy(&rp.addr.bdaddr, bdaddr);
6350 	rp.addr.type = bdaddr_type;
6351 
6352 	cmd_complete(cmd->sk, cmd->index, MGMT_OP_DISCONNECT,
6353 		     mgmt_status(status), &rp, sizeof(rp));
6354 
6355 	mgmt_pending_remove(cmd);
6356 }
6357 
6358 void mgmt_connect_failed(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
6359 			 u8 addr_type, u8 status)
6360 {
6361 	struct mgmt_ev_connect_failed ev;
6362 	struct pending_cmd *power_off;
6363 
6364 	power_off = mgmt_pending_find(MGMT_OP_SET_POWERED, hdev);
6365 	if (power_off) {
6366 		struct mgmt_mode *cp = power_off->param;
6367 
6368 		/* The connection is still in hci_conn_hash so test for 1
6369 		 * instead of 0 to know if this is the last one.
6370 		 */
6371 		if (!cp->val && hci_conn_count(hdev) == 1) {
6372 			cancel_delayed_work(&hdev->power_off);
6373 			queue_work(hdev->req_workqueue, &hdev->power_off.work);
6374 		}
6375 	}
6376 
6377 	bacpy(&ev.addr.bdaddr, bdaddr);
6378 	ev.addr.type = link_to_bdaddr(link_type, addr_type);
6379 	ev.status = mgmt_status(status);
6380 
6381 	mgmt_event(MGMT_EV_CONNECT_FAILED, hdev, &ev, sizeof(ev), NULL);
6382 }
6383 
6384 void mgmt_pin_code_request(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 secure)
6385 {
6386 	struct mgmt_ev_pin_code_request ev;
6387 
6388 	bacpy(&ev.addr.bdaddr, bdaddr);
6389 	ev.addr.type = BDADDR_BREDR;
6390 	ev.secure = secure;
6391 
6392 	mgmt_event(MGMT_EV_PIN_CODE_REQUEST, hdev, &ev, sizeof(ev), NULL);
6393 }
6394 
6395 void mgmt_pin_code_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
6396 				  u8 status)
6397 {
6398 	struct pending_cmd *cmd;
6399 	struct mgmt_rp_pin_code_reply rp;
6400 
6401 	cmd = mgmt_pending_find(MGMT_OP_PIN_CODE_REPLY, hdev);
6402 	if (!cmd)
6403 		return;
6404 
6405 	bacpy(&rp.addr.bdaddr, bdaddr);
6406 	rp.addr.type = BDADDR_BREDR;
6407 
6408 	cmd_complete(cmd->sk, hdev->id, MGMT_OP_PIN_CODE_REPLY,
6409 		     mgmt_status(status), &rp, sizeof(rp));
6410 
6411 	mgmt_pending_remove(cmd);
6412 }
6413 
6414 void mgmt_pin_code_neg_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
6415 				      u8 status)
6416 {
6417 	struct pending_cmd *cmd;
6418 	struct mgmt_rp_pin_code_reply rp;
6419 
6420 	cmd = mgmt_pending_find(MGMT_OP_PIN_CODE_NEG_REPLY, hdev);
6421 	if (!cmd)
6422 		return;
6423 
6424 	bacpy(&rp.addr.bdaddr, bdaddr);
6425 	rp.addr.type = BDADDR_BREDR;
6426 
6427 	cmd_complete(cmd->sk, hdev->id, MGMT_OP_PIN_CODE_NEG_REPLY,
6428 		     mgmt_status(status), &rp, sizeof(rp));
6429 
6430 	mgmt_pending_remove(cmd);
6431 }
6432 
6433 int mgmt_user_confirm_request(struct hci_dev *hdev, bdaddr_t *bdaddr,
6434 			      u8 link_type, u8 addr_type, u32 value,
6435 			      u8 confirm_hint)
6436 {
6437 	struct mgmt_ev_user_confirm_request ev;
6438 
6439 	BT_DBG("%s", hdev->name);
6440 
6441 	bacpy(&ev.addr.bdaddr, bdaddr);
6442 	ev.addr.type = link_to_bdaddr(link_type, addr_type);
6443 	ev.confirm_hint = confirm_hint;
6444 	ev.value = cpu_to_le32(value);
6445 
6446 	return mgmt_event(MGMT_EV_USER_CONFIRM_REQUEST, hdev, &ev, sizeof(ev),
6447 			  NULL);
6448 }
6449 
6450 int mgmt_user_passkey_request(struct hci_dev *hdev, bdaddr_t *bdaddr,
6451 			      u8 link_type, u8 addr_type)
6452 {
6453 	struct mgmt_ev_user_passkey_request ev;
6454 
6455 	BT_DBG("%s", hdev->name);
6456 
6457 	bacpy(&ev.addr.bdaddr, bdaddr);
6458 	ev.addr.type = link_to_bdaddr(link_type, addr_type);
6459 
6460 	return mgmt_event(MGMT_EV_USER_PASSKEY_REQUEST, hdev, &ev, sizeof(ev),
6461 			  NULL);
6462 }
6463 
6464 static int user_pairing_resp_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
6465 				      u8 link_type, u8 addr_type, u8 status,
6466 				      u8 opcode)
6467 {
6468 	struct pending_cmd *cmd;
6469 	struct mgmt_rp_user_confirm_reply rp;
6470 	int err;
6471 
6472 	cmd = mgmt_pending_find(opcode, hdev);
6473 	if (!cmd)
6474 		return -ENOENT;
6475 
6476 	bacpy(&rp.addr.bdaddr, bdaddr);
6477 	rp.addr.type = link_to_bdaddr(link_type, addr_type);
6478 	err = cmd_complete(cmd->sk, hdev->id, opcode, mgmt_status(status),
6479 			   &rp, sizeof(rp));
6480 
6481 	mgmt_pending_remove(cmd);
6482 
6483 	return err;
6484 }
6485 
6486 int mgmt_user_confirm_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
6487 				     u8 link_type, u8 addr_type, u8 status)
6488 {
6489 	return user_pairing_resp_complete(hdev, bdaddr, link_type, addr_type,
6490 					  status, MGMT_OP_USER_CONFIRM_REPLY);
6491 }
6492 
6493 int mgmt_user_confirm_neg_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
6494 					 u8 link_type, u8 addr_type, u8 status)
6495 {
6496 	return user_pairing_resp_complete(hdev, bdaddr, link_type, addr_type,
6497 					  status,
6498 					  MGMT_OP_USER_CONFIRM_NEG_REPLY);
6499 }
6500 
6501 int mgmt_user_passkey_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
6502 				     u8 link_type, u8 addr_type, u8 status)
6503 {
6504 	return user_pairing_resp_complete(hdev, bdaddr, link_type, addr_type,
6505 					  status, MGMT_OP_USER_PASSKEY_REPLY);
6506 }
6507 
6508 int mgmt_user_passkey_neg_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
6509 					 u8 link_type, u8 addr_type, u8 status)
6510 {
6511 	return user_pairing_resp_complete(hdev, bdaddr, link_type, addr_type,
6512 					  status,
6513 					  MGMT_OP_USER_PASSKEY_NEG_REPLY);
6514 }
6515 
6516 int mgmt_user_passkey_notify(struct hci_dev *hdev, bdaddr_t *bdaddr,
6517 			     u8 link_type, u8 addr_type, u32 passkey,
6518 			     u8 entered)
6519 {
6520 	struct mgmt_ev_passkey_notify ev;
6521 
6522 	BT_DBG("%s", hdev->name);
6523 
6524 	bacpy(&ev.addr.bdaddr, bdaddr);
6525 	ev.addr.type = link_to_bdaddr(link_type, addr_type);
6526 	ev.passkey = __cpu_to_le32(passkey);
6527 	ev.entered = entered;
6528 
6529 	return mgmt_event(MGMT_EV_PASSKEY_NOTIFY, hdev, &ev, sizeof(ev), NULL);
6530 }
6531 
6532 void mgmt_auth_failed(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
6533 		      u8 addr_type, u8 status)
6534 {
6535 	struct mgmt_ev_auth_failed ev;
6536 
6537 	bacpy(&ev.addr.bdaddr, bdaddr);
6538 	ev.addr.type = link_to_bdaddr(link_type, addr_type);
6539 	ev.status = mgmt_status(status);
6540 
6541 	mgmt_event(MGMT_EV_AUTH_FAILED, hdev, &ev, sizeof(ev), NULL);
6542 }
6543 
6544 void mgmt_auth_enable_complete(struct hci_dev *hdev, u8 status)
6545 {
6546 	struct cmd_lookup match = { NULL, hdev };
6547 	bool changed;
6548 
6549 	if (status) {
6550 		u8 mgmt_err = mgmt_status(status);
6551 		mgmt_pending_foreach(MGMT_OP_SET_LINK_SECURITY, hdev,
6552 				     cmd_status_rsp, &mgmt_err);
6553 		return;
6554 	}
6555 
6556 	if (test_bit(HCI_AUTH, &hdev->flags))
6557 		changed = !test_and_set_bit(HCI_LINK_SECURITY,
6558 					    &hdev->dev_flags);
6559 	else
6560 		changed = test_and_clear_bit(HCI_LINK_SECURITY,
6561 					     &hdev->dev_flags);
6562 
6563 	mgmt_pending_foreach(MGMT_OP_SET_LINK_SECURITY, hdev, settings_rsp,
6564 			     &match);
6565 
6566 	if (changed)
6567 		new_settings(hdev, match.sk);
6568 
6569 	if (match.sk)
6570 		sock_put(match.sk);
6571 }
6572 
6573 static void clear_eir(struct hci_request *req)
6574 {
6575 	struct hci_dev *hdev = req->hdev;
6576 	struct hci_cp_write_eir cp;
6577 
6578 	if (!lmp_ext_inq_capable(hdev))
6579 		return;
6580 
6581 	memset(hdev->eir, 0, sizeof(hdev->eir));
6582 
6583 	memset(&cp, 0, sizeof(cp));
6584 
6585 	hci_req_add(req, HCI_OP_WRITE_EIR, sizeof(cp), &cp);
6586 }
6587 
6588 void mgmt_ssp_enable_complete(struct hci_dev *hdev, u8 enable, u8 status)
6589 {
6590 	struct cmd_lookup match = { NULL, hdev };
6591 	struct hci_request req;
6592 	bool changed = false;
6593 
6594 	if (status) {
6595 		u8 mgmt_err = mgmt_status(status);
6596 
6597 		if (enable && test_and_clear_bit(HCI_SSP_ENABLED,
6598 						 &hdev->dev_flags)) {
6599 			clear_bit(HCI_HS_ENABLED, &hdev->dev_flags);
6600 			new_settings(hdev, NULL);
6601 		}
6602 
6603 		mgmt_pending_foreach(MGMT_OP_SET_SSP, hdev, cmd_status_rsp,
6604 				     &mgmt_err);
6605 		return;
6606 	}
6607 
6608 	if (enable) {
6609 		changed = !test_and_set_bit(HCI_SSP_ENABLED, &hdev->dev_flags);
6610 	} else {
6611 		changed = test_and_clear_bit(HCI_SSP_ENABLED, &hdev->dev_flags);
6612 		if (!changed)
6613 			changed = test_and_clear_bit(HCI_HS_ENABLED,
6614 						     &hdev->dev_flags);
6615 		else
6616 			clear_bit(HCI_HS_ENABLED, &hdev->dev_flags);
6617 	}
6618 
6619 	mgmt_pending_foreach(MGMT_OP_SET_SSP, hdev, settings_rsp, &match);
6620 
6621 	if (changed)
6622 		new_settings(hdev, match.sk);
6623 
6624 	if (match.sk)
6625 		sock_put(match.sk);
6626 
6627 	hci_req_init(&req, hdev);
6628 
6629 	if (test_bit(HCI_SSP_ENABLED, &hdev->dev_flags)) {
6630 		if (test_bit(HCI_USE_DEBUG_KEYS, &hdev->dev_flags))
6631 			hci_req_add(&req, HCI_OP_WRITE_SSP_DEBUG_MODE,
6632 				    sizeof(enable), &enable);
6633 		update_eir(&req);
6634 	} else {
6635 		clear_eir(&req);
6636 	}
6637 
6638 	hci_req_run(&req, NULL);
6639 }
6640 
6641 void mgmt_sc_enable_complete(struct hci_dev *hdev, u8 enable, u8 status)
6642 {
6643 	struct cmd_lookup match = { NULL, hdev };
6644 	bool changed = false;
6645 
6646 	if (status) {
6647 		u8 mgmt_err = mgmt_status(status);
6648 
6649 		if (enable) {
6650 			if (test_and_clear_bit(HCI_SC_ENABLED,
6651 					       &hdev->dev_flags))
6652 				new_settings(hdev, NULL);
6653 			clear_bit(HCI_SC_ONLY, &hdev->dev_flags);
6654 		}
6655 
6656 		mgmt_pending_foreach(MGMT_OP_SET_SECURE_CONN, hdev,
6657 				     cmd_status_rsp, &mgmt_err);
6658 		return;
6659 	}
6660 
6661 	if (enable) {
6662 		changed = !test_and_set_bit(HCI_SC_ENABLED, &hdev->dev_flags);
6663 	} else {
6664 		changed = test_and_clear_bit(HCI_SC_ENABLED, &hdev->dev_flags);
6665 		clear_bit(HCI_SC_ONLY, &hdev->dev_flags);
6666 	}
6667 
6668 	mgmt_pending_foreach(MGMT_OP_SET_SECURE_CONN, hdev,
6669 			     settings_rsp, &match);
6670 
6671 	if (changed)
6672 		new_settings(hdev, match.sk);
6673 
6674 	if (match.sk)
6675 		sock_put(match.sk);
6676 }
6677 
6678 static void sk_lookup(struct pending_cmd *cmd, void *data)
6679 {
6680 	struct cmd_lookup *match = data;
6681 
6682 	if (match->sk == NULL) {
6683 		match->sk = cmd->sk;
6684 		sock_hold(match->sk);
6685 	}
6686 }
6687 
6688 void mgmt_set_class_of_dev_complete(struct hci_dev *hdev, u8 *dev_class,
6689 				    u8 status)
6690 {
6691 	struct cmd_lookup match = { NULL, hdev, mgmt_status(status) };
6692 
6693 	mgmt_pending_foreach(MGMT_OP_SET_DEV_CLASS, hdev, sk_lookup, &match);
6694 	mgmt_pending_foreach(MGMT_OP_ADD_UUID, hdev, sk_lookup, &match);
6695 	mgmt_pending_foreach(MGMT_OP_REMOVE_UUID, hdev, sk_lookup, &match);
6696 
6697 	if (!status)
6698 		mgmt_event(MGMT_EV_CLASS_OF_DEV_CHANGED, hdev, dev_class, 3,
6699 			   NULL);
6700 
6701 	if (match.sk)
6702 		sock_put(match.sk);
6703 }
6704 
6705 void mgmt_set_local_name_complete(struct hci_dev *hdev, u8 *name, u8 status)
6706 {
6707 	struct mgmt_cp_set_local_name ev;
6708 	struct pending_cmd *cmd;
6709 
6710 	if (status)
6711 		return;
6712 
6713 	memset(&ev, 0, sizeof(ev));
6714 	memcpy(ev.name, name, HCI_MAX_NAME_LENGTH);
6715 	memcpy(ev.short_name, hdev->short_name, HCI_MAX_SHORT_NAME_LENGTH);
6716 
6717 	cmd = mgmt_pending_find(MGMT_OP_SET_LOCAL_NAME, hdev);
6718 	if (!cmd) {
6719 		memcpy(hdev->dev_name, name, sizeof(hdev->dev_name));
6720 
6721 		/* If this is a HCI command related to powering on the
6722 		 * HCI dev don't send any mgmt signals.
6723 		 */
6724 		if (mgmt_pending_find(MGMT_OP_SET_POWERED, hdev))
6725 			return;
6726 	}
6727 
6728 	mgmt_event(MGMT_EV_LOCAL_NAME_CHANGED, hdev, &ev, sizeof(ev),
6729 		   cmd ? cmd->sk : NULL);
6730 }
6731 
6732 void mgmt_read_local_oob_data_complete(struct hci_dev *hdev, u8 *hash192,
6733 				       u8 *randomizer192, u8 *hash256,
6734 				       u8 *randomizer256, u8 status)
6735 {
6736 	struct pending_cmd *cmd;
6737 
6738 	BT_DBG("%s status %u", hdev->name, status);
6739 
6740 	cmd = mgmt_pending_find(MGMT_OP_READ_LOCAL_OOB_DATA, hdev);
6741 	if (!cmd)
6742 		return;
6743 
6744 	if (status) {
6745 		cmd_status(cmd->sk, hdev->id, MGMT_OP_READ_LOCAL_OOB_DATA,
6746 			   mgmt_status(status));
6747 	} else {
6748 		if (test_bit(HCI_SC_ENABLED, &hdev->dev_flags) &&
6749 		    hash256 && randomizer256) {
6750 			struct mgmt_rp_read_local_oob_ext_data rp;
6751 
6752 			memcpy(rp.hash192, hash192, sizeof(rp.hash192));
6753 			memcpy(rp.randomizer192, randomizer192,
6754 			       sizeof(rp.randomizer192));
6755 
6756 			memcpy(rp.hash256, hash256, sizeof(rp.hash256));
6757 			memcpy(rp.randomizer256, randomizer256,
6758 			       sizeof(rp.randomizer256));
6759 
6760 			cmd_complete(cmd->sk, hdev->id,
6761 				     MGMT_OP_READ_LOCAL_OOB_DATA, 0,
6762 				     &rp, sizeof(rp));
6763 		} else {
6764 			struct mgmt_rp_read_local_oob_data rp;
6765 
6766 			memcpy(rp.hash, hash192, sizeof(rp.hash));
6767 			memcpy(rp.randomizer, randomizer192,
6768 			       sizeof(rp.randomizer));
6769 
6770 			cmd_complete(cmd->sk, hdev->id,
6771 				     MGMT_OP_READ_LOCAL_OOB_DATA, 0,
6772 				     &rp, sizeof(rp));
6773 		}
6774 	}
6775 
6776 	mgmt_pending_remove(cmd);
6777 }
6778 
6779 void mgmt_device_found(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
6780 		       u8 addr_type, u8 *dev_class, s8 rssi, u32 flags,
6781 		       u8 *eir, u16 eir_len, u8 *scan_rsp, u8 scan_rsp_len)
6782 {
6783 	char buf[512];
6784 	struct mgmt_ev_device_found *ev = (void *) buf;
6785 	size_t ev_size;
6786 
6787 	/* Don't send events for a non-kernel initiated discovery. With
6788 	 * LE one exception is if we have pend_le_reports > 0 in which
6789 	 * case we're doing passive scanning and want these events.
6790 	 */
6791 	if (!hci_discovery_active(hdev)) {
6792 		if (link_type == ACL_LINK)
6793 			return;
6794 		if (link_type == LE_LINK && list_empty(&hdev->pend_le_reports))
6795 			return;
6796 	}
6797 
6798 	/* Make sure that the buffer is big enough. The 5 extra bytes
6799 	 * are for the potential CoD field.
6800 	 */
6801 	if (sizeof(*ev) + eir_len + scan_rsp_len + 5 > sizeof(buf))
6802 		return;
6803 
6804 	memset(buf, 0, sizeof(buf));
6805 
6806 	bacpy(&ev->addr.bdaddr, bdaddr);
6807 	ev->addr.type = link_to_bdaddr(link_type, addr_type);
6808 	ev->rssi = rssi;
6809 	ev->flags = cpu_to_le32(flags);
6810 
6811 	if (eir_len > 0)
6812 		memcpy(ev->eir, eir, eir_len);
6813 
6814 	if (dev_class && !eir_has_data_type(ev->eir, eir_len, EIR_CLASS_OF_DEV))
6815 		eir_len = eir_append_data(ev->eir, eir_len, EIR_CLASS_OF_DEV,
6816 					  dev_class, 3);
6817 
6818 	if (scan_rsp_len > 0)
6819 		memcpy(ev->eir + eir_len, scan_rsp, scan_rsp_len);
6820 
6821 	ev->eir_len = cpu_to_le16(eir_len + scan_rsp_len);
6822 	ev_size = sizeof(*ev) + eir_len + scan_rsp_len;
6823 
6824 	mgmt_event(MGMT_EV_DEVICE_FOUND, hdev, ev, ev_size, NULL);
6825 }
6826 
6827 void mgmt_remote_name(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
6828 		      u8 addr_type, s8 rssi, u8 *name, u8 name_len)
6829 {
6830 	struct mgmt_ev_device_found *ev;
6831 	char buf[sizeof(*ev) + HCI_MAX_NAME_LENGTH + 2];
6832 	u16 eir_len;
6833 
6834 	ev = (struct mgmt_ev_device_found *) buf;
6835 
6836 	memset(buf, 0, sizeof(buf));
6837 
6838 	bacpy(&ev->addr.bdaddr, bdaddr);
6839 	ev->addr.type = link_to_bdaddr(link_type, addr_type);
6840 	ev->rssi = rssi;
6841 
6842 	eir_len = eir_append_data(ev->eir, 0, EIR_NAME_COMPLETE, name,
6843 				  name_len);
6844 
6845 	ev->eir_len = cpu_to_le16(eir_len);
6846 
6847 	mgmt_event(MGMT_EV_DEVICE_FOUND, hdev, ev, sizeof(*ev) + eir_len, NULL);
6848 }
6849 
6850 void mgmt_discovering(struct hci_dev *hdev, u8 discovering)
6851 {
6852 	struct mgmt_ev_discovering ev;
6853 	struct pending_cmd *cmd;
6854 
6855 	BT_DBG("%s discovering %u", hdev->name, discovering);
6856 
6857 	if (discovering)
6858 		cmd = mgmt_pending_find(MGMT_OP_START_DISCOVERY, hdev);
6859 	else
6860 		cmd = mgmt_pending_find(MGMT_OP_STOP_DISCOVERY, hdev);
6861 
6862 	if (cmd != NULL) {
6863 		u8 type = hdev->discovery.type;
6864 
6865 		cmd_complete(cmd->sk, hdev->id, cmd->opcode, 0, &type,
6866 			     sizeof(type));
6867 		mgmt_pending_remove(cmd);
6868 	}
6869 
6870 	memset(&ev, 0, sizeof(ev));
6871 	ev.type = hdev->discovery.type;
6872 	ev.discovering = discovering;
6873 
6874 	mgmt_event(MGMT_EV_DISCOVERING, hdev, &ev, sizeof(ev), NULL);
6875 }
6876 
6877 static void adv_enable_complete(struct hci_dev *hdev, u8 status)
6878 {
6879 	BT_DBG("%s status %u", hdev->name, status);
6880 }
6881 
6882 void mgmt_reenable_advertising(struct hci_dev *hdev)
6883 {
6884 	struct hci_request req;
6885 
6886 	if (!test_bit(HCI_ADVERTISING, &hdev->dev_flags))
6887 		return;
6888 
6889 	hci_req_init(&req, hdev);
6890 	enable_advertising(&req);
6891 	hci_req_run(&req, adv_enable_complete);
6892 }
6893