]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blobdiff - net/bluetooth/smp.c
Bluetooth: Use the stored LTK for restabilishing security
[mirror_ubuntu-artful-kernel.git] / net / bluetooth / smp.c
index 6df51017df21ff50ab41f23a6b45f3339ab59be4..5b7217919202acb0588b2809b77538abf57a2645 100644 (file)
@@ -480,6 +480,17 @@ int smp_conn_security(struct l2cap_conn *conn, __u8 sec_level)
 
        if (hcon->link_mode & HCI_LM_MASTER) {
                struct smp_cmd_pairing cp;
+               struct link_key *key;
+
+               key = hci_find_link_key_type(hcon->hdev, conn->dst,
+                                                       HCI_LK_SMP_LTK);
+               if (key) {
+                       struct key_master_id *master = (void *) key->data;
+
+                       hci_le_start_enc(hcon, master->ediv, master->rand,
+                                                               key->val);
+                       goto done;
+               }
 
                build_pairing_cmd(conn, &cp, NULL, authreq);
                conn->preq[0] = SMP_CMD_PAIRING_REQ;
@@ -495,6 +506,7 @@ int smp_conn_security(struct l2cap_conn *conn, __u8 sec_level)
                smp_send_cmd(conn, SMP_CMD_SECURITY_REQ, sizeof(cp), &cp);
        }
 
+done:
        hcon->pending_sec_level = sec_level;
        set_bit(HCI_CONN_ENCRYPT_PEND, &hcon->pend);