Bluetooth: Add hci_dev_lock to get/set device flags
authorAbhishek Pandit-Subedi <abhishekpandit@chromium.org>
Sat, 20 Jun 2020 00:10:24 +0000 (17:10 -0700)
committerMarcel Holtmann <marcel@holtmann.org>
Mon, 22 Jun 2020 07:08:16 +0000 (09:08 +0200)
Adding hci_dev_lock since hci_conn_params_(lookup|add) require this
lock.

Suggested-by: Miao-chen Chou <mcchou@chromium.org>
Signed-off-by: Abhishek Pandit-Subedi <abhishekpandit@chromium.org>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
net/bluetooth/mgmt.c

index 2a732ca..5e9b972 100644 (file)
@@ -3895,6 +3895,8 @@ static int get_device_flags(struct sock *sk, struct hci_dev *hdev, void *data,
        bt_dev_dbg(hdev, "Get device flags %pMR (type 0x%x)\n",
                   &cp->addr.bdaddr, cp->addr.type);
 
+       hci_dev_lock(hdev);
+
        if (cp->addr.type == BDADDR_BREDR) {
                br_params = hci_bdaddr_list_lookup_with_flags(&hdev->whitelist,
                                                              &cp->addr.bdaddr,
@@ -3921,6 +3923,8 @@ static int get_device_flags(struct sock *sk, struct hci_dev *hdev, void *data,
        status = MGMT_STATUS_SUCCESS;
 
 done:
+       hci_dev_unlock(hdev);
+
        return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_GET_DEVICE_FLAGS, status,
                                &rp, sizeof(rp));
 }
@@ -3959,6 +3963,8 @@ static int set_device_flags(struct sock *sk, struct hci_dev *hdev, void *data,
                goto done;
        }
 
+       hci_dev_lock(hdev);
+
        if (cp->addr.type == BDADDR_BREDR) {
                br_params = hci_bdaddr_list_lookup_with_flags(&hdev->whitelist,
                                                              &cp->addr.bdaddr,
@@ -3985,6 +3991,8 @@ static int set_device_flags(struct sock *sk, struct hci_dev *hdev, void *data,
        }
 
 done:
+       hci_dev_unlock(hdev);
+
        if (status == MGMT_STATUS_SUCCESS)
                device_flags_changed(sk, hdev, &cp->addr.bdaddr, cp->addr.type,
                                     supported_flags, current_flags);