Commit 6eb5fcc4 authored by Luiz Augusto von Dentz's avatar Luiz Augusto von Dentz
Browse files

Bluetooth: MGMT: Fix failing to MGMT_OP_ADD_UUID/MGMT_OP_REMOVE_UUID

These commands don't require the adapter to be up and running so don't
use hci_cmd_sync_queue which would check that flag, instead use
hci_cmd_sync_submit which would ensure mgmt_class_complete is set
properly regardless if any command was actually run or not.

Link: https://github.com/bluez/bluez/issues/809


Fixes: d883a466 ("Bluetooth: hci_sync: Only allow hci_cmd_sync_queue if running")
Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
parent 32868e12
Loading
Loading
Loading
Loading
+15 −5
Original line number Diff line number Diff line
@@ -2623,7 +2623,11 @@ static int add_uuid(struct sock *sk, struct hci_dev *hdev, void *data, u16 len)
		goto failed;
	}

	err = hci_cmd_sync_queue(hdev, add_uuid_sync, cmd, mgmt_class_complete);
	/* MGMT_OP_ADD_UUID don't require adapter the UP/Running so use
	 * hci_cmd_sync_submit instead of hci_cmd_sync_queue.
	 */
	err = hci_cmd_sync_submit(hdev, add_uuid_sync, cmd,
				  mgmt_class_complete);
	if (err < 0) {
		mgmt_pending_free(cmd);
		goto failed;
@@ -2717,7 +2721,10 @@ static int remove_uuid(struct sock *sk, struct hci_dev *hdev, void *data,
		goto unlock;
	}

	err = hci_cmd_sync_queue(hdev, remove_uuid_sync, cmd,
	/* MGMT_OP_REMOVE_UUID don't require adapter the UP/Running so use
	 * hci_cmd_sync_submit instead of hci_cmd_sync_queue.
	 */
	err = hci_cmd_sync_submit(hdev, remove_uuid_sync, cmd,
				  mgmt_class_complete);
	if (err < 0)
		mgmt_pending_free(cmd);
@@ -2784,7 +2791,10 @@ static int set_dev_class(struct sock *sk, struct hci_dev *hdev, void *data,
		goto unlock;
	}

	err = hci_cmd_sync_queue(hdev, set_class_sync, cmd,
	/* MGMT_OP_SET_DEV_CLASS don't require adapter the UP/Running so use
	 * hci_cmd_sync_submit instead of hci_cmd_sync_queue.
	 */
	err = hci_cmd_sync_submit(hdev, set_class_sync, cmd,
				  mgmt_class_complete);
	if (err < 0)
		mgmt_pending_free(cmd);