| From e694788d73efe139b24f78b036deb97fe57fa8cb Mon Sep 17 00:00:00 2001 |
| From: Johan Hedberg <johan.hedberg@intel.com> |
| Date: Tue, 10 Jun 2014 09:54:24 +0300 |
| Subject: Bluetooth: Fix check for connection encryption |
| |
| From: Johan Hedberg <johan.hedberg@intel.com> |
| |
| commit e694788d73efe139b24f78b036deb97fe57fa8cb upstream. |
| |
| The conn->link_key variable tracks the type of link key in use. It is |
| set whenever we respond to a link key request as well as when we get a |
| link key notification event. |
| |
| These two events do not however always guarantee that encryption is |
| enabled: getting a link key request and responding to it may only mean |
| that the remote side has requested authentication but not encryption. On |
| the other hand, the encrypt change event is a certain guarantee that |
| encryption is enabled. The real encryption state is already tracked in |
| the conn->link_mode variable through the HCI_LM_ENCRYPT bit. |
| |
| This patch fixes a check for encryption in the hci_conn_auth function to |
| use the proper conn->link_mode value and thereby eliminates the chance |
| of a false positive result. |
| |
| 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 | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/net/bluetooth/hci_conn.c |
| +++ b/net/bluetooth/hci_conn.c |
| @@ -759,7 +759,7 @@ static int hci_conn_auth(struct hci_conn |
| /* If we're already encrypted set the REAUTH_PEND flag, |
| * otherwise set the ENCRYPT_PEND. |
| */ |
| - if (conn->key_type != 0xff) |
| + if (conn->link_mode & HCI_LM_ENCRYPT) |
| set_bit(HCI_CONN_REAUTH_PEND, &conn->flags); |
| else |
| set_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags); |