| From 09da1f3463eb81d59685df723b1c5950b7570340 Mon Sep 17 00:00:00 2001 |
| From: Johan Hedberg <johan.hedberg@intel.com> |
| Date: Fri, 11 Apr 2014 12:02:32 -0700 |
| Subject: Bluetooth: Fix redundant encryption request for reauthentication |
| |
| From: Johan Hedberg <johan.hedberg@intel.com> |
| |
| commit 09da1f3463eb81d59685df723b1c5950b7570340 upstream. |
| |
| When we're performing reauthentication (in order to elevate the |
| security level from an unauthenticated key to an authenticated one) we |
| do not need to issue any encryption command once authentication |
| completes. Since the trigger for the encryption HCI command is the |
| ENCRYPT_PEND flag this flag should not be set in this scenario. |
| Instead, the REAUTH_PEND flag takes care of all necessary steps for |
| reauthentication. |
| |
| Signed-off-by: Johan Hedberg <johan.hedberg@intel.com> |
| Signed-off-by: Marcel Holtmann <marcel@holtmann.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| net/bluetooth/hci_conn.c | 9 ++++++--- |
| 1 file changed, 6 insertions(+), 3 deletions(-) |
| |
| --- a/net/bluetooth/hci_conn.c |
| +++ b/net/bluetooth/hci_conn.c |
| @@ -652,14 +652,17 @@ static int hci_conn_auth(struct hci_conn |
| if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->flags)) { |
| struct hci_cp_auth_requested cp; |
| |
| - /* encrypt must be pending if auth is also pending */ |
| - set_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags); |
| - |
| cp.handle = cpu_to_le16(conn->handle); |
| hci_send_cmd(conn->hdev, HCI_OP_AUTH_REQUESTED, |
| sizeof(cp), &cp); |
| + |
| + /* If we're already encrypted set the REAUTH_PEND flag, |
| + * otherwise set the ENCRYPT_PEND. |
| + */ |
| if (conn->key_type != 0xff) |
| set_bit(HCI_CONN_REAUTH_PEND, &conn->flags); |
| + else |
| + set_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags); |
| } |
| |
| return 0; |