summaryrefslogtreecommitdiffstats
path: root/net/bluetooth
diff options
context:
space:
mode:
authorJohan Hedberg <johan.hedberg@intel.com>2015-10-22 08:38:31 +0200
committerMarcel Holtmann <marcel@holtmann.org>2015-10-22 09:02:03 +0200
commitfc64361ac15318126c64193929616fc4832071a6 (patch)
tree517aca371febeabd9585d1a2ed73eccc82ced81c /net/bluetooth
parentBluetooth: Remove unnecessary hci_explicit_connect_lookup function (diff)
downloadlinux-fc64361ac15318126c64193929616fc4832071a6.tar.xz
linux-fc64361ac15318126c64193929616fc4832071a6.zip
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')
-rw-r--r--net/bluetooth/mgmt.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/net/bluetooth/mgmt.c b/net/bluetooth/mgmt.c
index d56845a28af1..3fa4cafc2c03 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.
*/