]> www.infradead.org Git - nvme.git/commitdiff
Bluetooth: Fix usage of __hci_cmd_sync_status
authorLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
Mon, 1 Jul 2024 16:07:46 +0000 (12:07 -0400)
committerLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
Mon, 15 Jul 2024 14:11:23 +0000 (10:11 -0400)
__hci_cmd_sync_status shall only be used if hci_req_sync_lock is _not_
required which is not the case of hci_dev_cmd so it needs to use
hci_cmd_sync_status which uses hci_req_sync_lock internally.

Fixes: f1a8f402f13f ("Bluetooth: L2CAP: Fix deadlock")
Reported-by: Pauli Virtanen <pav@iki.fi>
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
net/bluetooth/hci_core.c

index 144e85ebfbdbc8de8c5b043dfcdcc081043a62e8..db9b9bb7d74df8fb4db477e57e9d4478b12a1826 100644 (file)
@@ -718,8 +718,8 @@ int hci_dev_cmd(unsigned int cmd, void __user *arg)
 
        switch (cmd) {
        case HCISETAUTH:
-               err = __hci_cmd_sync_status(hdev, HCI_OP_WRITE_AUTH_ENABLE,
-                                           1, &dr.dev_opt, HCI_CMD_TIMEOUT);
+               err = hci_cmd_sync_status(hdev, HCI_OP_WRITE_AUTH_ENABLE,
+                                         1, &dr.dev_opt, HCI_CMD_TIMEOUT);
                break;
 
        case HCISETENCRYPT:
@@ -730,23 +730,21 @@ int hci_dev_cmd(unsigned int cmd, void __user *arg)
 
                if (!test_bit(HCI_AUTH, &hdev->flags)) {
                        /* Auth must be enabled first */
-                       err = __hci_cmd_sync_status(hdev,
-                                                   HCI_OP_WRITE_AUTH_ENABLE,
-                                                   1, &dr.dev_opt,
-                                                   HCI_CMD_TIMEOUT);
+                       err = hci_cmd_sync_status(hdev,
+                                                 HCI_OP_WRITE_AUTH_ENABLE,
+                                                 1, &dr.dev_opt,
+                                                 HCI_CMD_TIMEOUT);
                        if (err)
                                break;
                }
 
-               err = __hci_cmd_sync_status(hdev, HCI_OP_WRITE_ENCRYPT_MODE,
-                                           1, &dr.dev_opt,
-                                           HCI_CMD_TIMEOUT);
+               err = hci_cmd_sync_status(hdev, HCI_OP_WRITE_ENCRYPT_MODE,
+                                         1, &dr.dev_opt, HCI_CMD_TIMEOUT);
                break;
 
        case HCISETSCAN:
-               err = __hci_cmd_sync_status(hdev, HCI_OP_WRITE_SCAN_ENABLE,
-                                           1, &dr.dev_opt,
-                                           HCI_CMD_TIMEOUT);
+               err = hci_cmd_sync_status(hdev, HCI_OP_WRITE_SCAN_ENABLE,
+                                         1, &dr.dev_opt, HCI_CMD_TIMEOUT);
 
                /* Ensure that the connectable and discoverable states
                 * get correctly modified as this was a non-mgmt change.
@@ -758,9 +756,8 @@ int hci_dev_cmd(unsigned int cmd, void __user *arg)
        case HCISETLINKPOL:
                policy = cpu_to_le16(dr.dev_opt);
 
-               err = __hci_cmd_sync_status(hdev, HCI_OP_WRITE_DEF_LINK_POLICY,
-                                           2, &policy,
-                                           HCI_CMD_TIMEOUT);
+               err = hci_cmd_sync_status(hdev, HCI_OP_WRITE_DEF_LINK_POLICY,
+                                         2, &policy, HCI_CMD_TIMEOUT);
                break;
 
        case HCISETLINKMODE: