diff options
author | Johan Hedberg <johan.hedberg@intel.com> | 2015-10-22 09:38:31 +0300 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2015-10-22 09:02:03 +0200 |
commit | fc64361ac15318126c64193929616fc4832071a6 (patch) | |
tree | 517aca371febeabd9585d1a2ed73eccc82ced81c /net/bluetooth/mgmt.c | |
parent | 17bc08f0d1b17d6d5e4967c1b430af627c5f2041 (diff) | |
download | op-kernel-dev-fc64361ac15318126c64193929616fc4832071a6.zip op-kernel-dev-fc64361ac15318126c64193929616fc4832071a6.tar.gz |
Bluetooth: Disable auto-connection parameters when unpairing
For connection parameters that are left around until a disconnection
we should at least clear any auto-connection properties. This way a
new Add Device call is required to re-set them after calling Unpair
Device.
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Diffstat (limited to 'net/bluetooth/mgmt.c')
-rw-r--r-- | net/bluetooth/mgmt.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/net/bluetooth/mgmt.c b/net/bluetooth/mgmt.c index d56845a..3fa4caf 100644 --- a/net/bluetooth/mgmt.c +++ b/net/bluetooth/mgmt.c @@ -3052,6 +3052,7 @@ static int unpair_device(struct sock *sk, struct hci_dev *hdev, void *data, { struct mgmt_cp_unpair_device *cp = data; struct mgmt_rp_unpair_device rp; + struct hci_conn_params *params; struct hci_cp_disconnect dc; struct mgmt_pending_cmd *cmd; struct hci_conn *conn; @@ -3131,6 +3132,15 @@ static int unpair_device(struct sock *sk, struct hci_dev *hdev, void *data, */ set_bit(HCI_CONN_PARAM_REMOVAL_PEND, &conn->flags); + /* Disable auto-connection parameters if present */ + params = hci_conn_params_lookup(hdev, &cp->addr.bdaddr, addr_type); + if (params) { + if (params->explicit_connect) + params->auto_connect = HCI_AUTO_CONN_EXPLICIT; + else + params->auto_connect = HCI_AUTO_CONN_DISABLED; + } + /* If disconnection is not requested, then clear the connection * variable so that the link is not terminated. */ |