Bluetooth: Move SC-only check outside of BT_CONFIG branch
authorJohan Hedberg <johan.hedberg@intel.com>
Thu, 11 Jun 2015 10:52:28 +0000 (13:52 +0300)
committerMarcel Holtmann <marcel@holtmann.org>
Fri, 12 Jun 2015 09:38:45 +0000 (11:38 +0200)
Checking for SC-only mode requirements when we get an encrypt change
event shouldn't be limited to the BT_CONFIG state but done any time
encryption changes.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
net/bluetooth/hci_event.c

index fcbfa4138eb15fd62e4fe9769184ed7f737f79ba..62934151431b619a15ac688f887be1155483ee90 100644 (file)
@@ -2650,22 +2650,22 @@ static void hci_encrypt_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
                goto unlock;
        }
 
+       /* In Secure Connections Only mode, do not allow any connections
+        * that are not encrypted with AES-CCM using a P-256 authenticated
+        * combination key.
+        */
+       if (hci_dev_test_flag(hdev, HCI_SC_ONLY) &&
+           (!test_bit(HCI_CONN_AES_CCM, &conn->flags) ||
+            conn->key_type != HCI_LK_AUTH_COMBINATION_P256)) {
+               hci_connect_cfm(conn, HCI_ERROR_AUTH_FAILURE);
+               hci_conn_drop(conn);
+               goto unlock;
+       }
+
        if (conn->state == BT_CONFIG) {
                if (!ev->status)
                        conn->state = BT_CONNECTED;
 
-               /* In Secure Connections Only mode, do not allow any
-                * connections that are not encrypted with AES-CCM
-                * using a P-256 authenticated combination key.
-                */
-               if (hci_dev_test_flag(hdev, HCI_SC_ONLY) &&
-                   (!test_bit(HCI_CONN_AES_CCM, &conn->flags) ||
-                    conn->key_type != HCI_LK_AUTH_COMBINATION_P256)) {
-                       hci_connect_cfm(conn, HCI_ERROR_AUTH_FAILURE);
-                       hci_conn_drop(conn);
-                       goto unlock;
-               }
-
                hci_connect_cfm(conn, ev->status);
                hci_conn_drop(conn);
        } else