Bluetooth: Disable auto-connection parameters when unpairing
authorJohan Hedberg <johan.hedberg@intel.com>
Thu, 22 Oct 2015 06:38:31 +0000 (09:38 +0300)
committerMarcel Holtmann <marcel@holtmann.org>
Thu, 22 Oct 2015 07:02:03 +0000 (09:02 +0200)
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>
net/bluetooth/mgmt.c

index d56845a28af14676a2b85b7e62c3737cae194953..3fa4cafc2c03e187c7439b1676fd9f45acf3badc 100644 (file)
@@ -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.
         */