Commit a9a34765 authored by Luiz Augusto von Dentz's avatar Luiz Augusto von Dentz Committed by Marcel Holtmann
Browse files

Bluetooth: MGMT: Add conditions for setting HCI_CONN_FLAG_REMOTE_WAKEUP

HCI_CONN_FLAG_REMOTE_WAKEUP can only be set if device can be programmed
in the allowlist which in case of device using RPA requires LL Privacy
support to be enabled.

Link: https://bugzilla.kernel.org/show_bug.cgi?id=215768


Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
Signed-off-by: default avatarMarcel Holtmann <marcel@holtmann.org>
parent baabb7f5
Loading
Loading
Loading
Loading
+18 −0
Original line number Diff line number Diff line
@@ -4529,6 +4529,23 @@ static int set_device_flags(struct sock *sk, struct hci_dev *hdev, void *data,
		params = hci_conn_params_lookup(hdev, &cp->addr.bdaddr,
						le_addr_type(cp->addr.type));
		if (params) {
			DECLARE_BITMAP(flags, __HCI_CONN_NUM_FLAGS);

			bitmap_from_u64(flags, current_flags);

			/* Devices using RPAs can only be programmed in the
			 * acceptlist LL Privacy has been enable otherwise they
			 * cannot mark HCI_CONN_FLAG_REMOTE_WAKEUP.
			 */
			if (test_bit(HCI_CONN_FLAG_REMOTE_WAKEUP, flags) &&
			    !use_ll_privacy(hdev) &&
			    hci_find_irk_by_addr(hdev, &params->addr,
						 params->addr_type)) {
				bt_dev_warn(hdev,
					    "Cannot set wakeable for RPA");
				goto unlock;
			}

			bitmap_from_u64(params->flags, current_flags);
			status = MGMT_STATUS_SUCCESS;

@@ -4545,6 +4562,7 @@ static int set_device_flags(struct sock *sk, struct hci_dev *hdev, void *data,
		}
	}

unlock:
	hci_dev_unlock(hdev);

done: