}
 
        conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
+       if (conn) {
+               if (key->type == HCI_LK_UNAUTH_COMBINATION &&
+                               conn->auth_type != 0xff &&
+                               (conn->auth_type & 0x01)) {
+                       BT_DBG("%s ignoring unauthenticated key", hdev->name);
+                       goto not_found;
+               }
 
-       if (key->type == HCI_LK_UNAUTH_COMBINATION && conn &&
-                       conn->auth_type != 0xff && (conn->auth_type & 0x01)) {
-               BT_DBG("%s ignoring unauthenticated key", hdev->name);
-               goto not_found;
+               if (key->type == HCI_LK_COMBINATION && key->pin_len < 16 &&
+                               conn->pending_sec_level == BT_SECURITY_HIGH) {
+                       BT_DBG("%s ignoring key unauthenticated for high \
+                                                       security", hdev->name);
+                       goto not_found;
+               }
+
+               conn->key_type = key->type;
+               conn->pin_length = key->pin_len;
        }
 
        bacpy(&cp.bdaddr, &ev->bdaddr);