Bluetooth: Fix remove_device behavior for explicit connects
Devices undergoing an explicit connect should not have their conn_params struct removed by the mgmt Remove Device command. This patch fixes the necessary checks in the command handler to correct the behavior. Signed-off-by: Johan Hedberg <johan.hedberg@intel.com> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
This commit is contained in:
Родитель
49c509220d
Коммит
679d2b6f9d
|
@ -6386,7 +6386,8 @@ static int remove_device(struct sock *sk, struct hci_dev *hdev,
|
||||||
goto unlock;
|
goto unlock;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (params->auto_connect == HCI_AUTO_CONN_DISABLED) {
|
if (params->auto_connect == HCI_AUTO_CONN_DISABLED ||
|
||||||
|
params->auto_connect == HCI_AUTO_CONN_EXPLICIT) {
|
||||||
err = cmd->cmd_complete(cmd,
|
err = cmd->cmd_complete(cmd,
|
||||||
MGMT_STATUS_INVALID_PARAMS);
|
MGMT_STATUS_INVALID_PARAMS);
|
||||||
mgmt_pending_remove(cmd);
|
mgmt_pending_remove(cmd);
|
||||||
|
@ -6422,6 +6423,10 @@ static int remove_device(struct sock *sk, struct hci_dev *hdev,
|
||||||
if (p->auto_connect == HCI_AUTO_CONN_DISABLED)
|
if (p->auto_connect == HCI_AUTO_CONN_DISABLED)
|
||||||
continue;
|
continue;
|
||||||
device_removed(sk, hdev, &p->addr, p->addr_type);
|
device_removed(sk, hdev, &p->addr, p->addr_type);
|
||||||
|
if (p->explicit_connect) {
|
||||||
|
p->auto_connect = HCI_AUTO_CONN_EXPLICIT;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
list_del(&p->action);
|
list_del(&p->action);
|
||||||
list_del(&p->list);
|
list_del(&p->list);
|
||||||
kfree(p);
|
kfree(p);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче