Bluetooth: Fix usage of __hci_cmd_sync_status
[ 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>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
345788c464
commit
3a38e30849
@@ -721,8 +721,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:
|
||||
@@ -733,23 +733,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.
|
||||
@@ -761,9 +759,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:
|
||||
|
||||
Reference in New Issue
Block a user