aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWaldemar Rymarkiewicz <waldemar.rymarkiewicz@tieto.com>2011-04-28 06:07:56 -0400
committerGustavo F. Padovan <padovan@profusion.mobi>2011-04-28 14:03:42 -0400
commit60b83f571cf17a7a8ca9ddf2090db63e6a594571 (patch)
tree76e3dfd9a6a00cc1be9ab70b3802813178c266f7
parent13d39315c22b128f4796fc008b04914a7c32bb1a (diff)
Bluetooth: Ignore key unauthenticated for high security
High security level for pre v2.1 devices requires combination link key authenticated by at least 16 digit PIN code. It's also necessary to update key_type and pin_length when the key exists and is sufficently secured for the connection as there will be no link key notify event in that case. Signed-off-by: Waldemar Rymarkiewicz <waldemar.rymarkiewicz@tieto.com> Signed-off-by: Gustavo F. Padovan <padovan@profusion.mobi>
-rw-r--r--net/bluetooth/hci_event.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
index 655af8bc60e2..40e96cd79e4a 100644
--- a/net/bluetooth/hci_event.c
+++ b/net/bluetooth/hci_event.c
@@ -2059,11 +2059,23 @@ static inline void hci_link_key_request_evt(struct hci_dev *hdev, struct sk_buff
2059 } 2059 }
2060 2060
2061 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr); 2061 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
2062 if (conn) {
2063 if (key->type == HCI_LK_UNAUTH_COMBINATION &&
2064 conn->auth_type != 0xff &&
2065 (conn->auth_type & 0x01)) {
2066 BT_DBG("%s ignoring unauthenticated key", hdev->name);
2067 goto not_found;
2068 }
2062 2069
2063 if (key->type == HCI_LK_UNAUTH_COMBINATION && conn && 2070 if (key->type == HCI_LK_COMBINATION && key->pin_len < 16 &&
2064 conn->auth_type != 0xff && (conn->auth_type & 0x01)) { 2071 conn->pending_sec_level == BT_SECURITY_HIGH) {
2065 BT_DBG("%s ignoring unauthenticated key", hdev->name); 2072 BT_DBG("%s ignoring key unauthenticated for high \
2066 goto not_found; 2073 security", hdev->name);
2074 goto not_found;
2075 }
2076
2077 conn->key_type = key->type;
2078 conn->pin_length = key->pin_len;
2067 } 2079 }
2068 2080
2069 bacpy(&cp.bdaddr, &ev->bdaddr); 2081 bacpy(&cp.bdaddr, &ev->bdaddr);