Linux Audio

Check our new training course

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