]> git.ipfire.org Git - thirdparty/kernel/stable.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)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 3 Aug 2024 06:59:48 +0000 (08:59 +0200)
[ Upstream commit 87be7b189b2c50d4b51512f59e4e97db4eedee8a ]

__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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
net/bluetooth/hci_core.c

index c644b30977bd8e41b65c20ee04949e21d01c2a16..7ae118a6d947b8d15f0ef413d23c080edec38edb 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: