Bluetooth: Fix initializing conn_params in scan phase
This patch makes sure that conn_params that were created just for explicit_connect, will get properly deleted during cleanup. Signed-off-by: Jakub Pawlowski <jpawlowski@google.com> Acked-by: Johan Hedberg <johan.hedberg@intel.com> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
This commit is contained in:
parent
9ad3e6ffe1
commit
5157b8a503
|
@ -1008,15 +1008,23 @@ static int hci_explicit_conn_params_set(struct hci_request *req,
|
|||
if (is_connected(hdev, addr, addr_type))
|
||||
return -EISCONN;
|
||||
|
||||
params = hci_conn_params_add(hdev, addr, addr_type);
|
||||
if (!params)
|
||||
return -EIO;
|
||||
params = hci_conn_params_lookup(hdev, addr, addr_type);
|
||||
if (!params) {
|
||||
params = hci_conn_params_add(hdev, addr, addr_type);
|
||||
if (!params)
|
||||
return -ENOMEM;
|
||||
|
||||
/* If we created new params, or existing params were marked as disabled,
|
||||
* mark them to be used just once to connect.
|
||||
*/
|
||||
/* If we created new params, mark them to be deleted in
|
||||
* hci_connect_le_scan_cleanup. It's different case than
|
||||
* existing disabled params, those will stay after cleanup.
|
||||
*/
|
||||
params->auto_connect = HCI_AUTO_CONN_EXPLICIT;
|
||||
}
|
||||
|
||||
/* We're trying to connect, so make sure params are at pend_le_conns */
|
||||
if (params->auto_connect == HCI_AUTO_CONN_DISABLED ||
|
||||
params->auto_connect == HCI_AUTO_CONN_REPORT) {
|
||||
params->auto_connect == HCI_AUTO_CONN_REPORT ||
|
||||
params->auto_connect == HCI_AUTO_CONN_EXPLICIT) {
|
||||
list_del_init(¶ms->action);
|
||||
list_add(¶ms->action, &hdev->pend_le_conns);
|
||||
}
|
||||
|
|
|
@ -3545,6 +3545,7 @@ static int pair_device(struct sock *sk, struct hci_dev *hdev, void *data,
|
|||
auth_type);
|
||||
} else {
|
||||
u8 addr_type;
|
||||
struct hci_conn_params *p;
|
||||
|
||||
/* Convert from L2CAP channel address type to HCI address type
|
||||
*/
|
||||
|
@ -3562,7 +3563,10 @@ static int pair_device(struct sock *sk, struct hci_dev *hdev, void *data,
|
|||
* If connection parameters already exist, then they
|
||||
* will be kept and this function does nothing.
|
||||
*/
|
||||
hci_conn_params_add(hdev, &cp->addr.bdaddr, addr_type);
|
||||
p = hci_conn_params_add(hdev, &cp->addr.bdaddr, addr_type);
|
||||
|
||||
if (p->auto_connect == HCI_AUTO_CONN_EXPLICIT)
|
||||
p->auto_connect = HCI_AUTO_CONN_DISABLED;
|
||||
|
||||
conn = hci_connect_le_scan(hdev, &cp->addr.bdaddr,
|
||||
addr_type, sec_level,
|
||||
|
|
Loading…
Reference in New Issue