aboutsummaryrefslogtreecommitdiffstats
path: root/net/bluetooth/smp.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/bluetooth/smp.c')
-rw-r--r--net/bluetooth/smp.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/net/bluetooth/smp.c b/net/bluetooth/smp.c
index a8b971b75a67..391888b88a92 100644
--- a/net/bluetooth/smp.c
+++ b/net/bluetooth/smp.c
@@ -401,6 +401,7 @@ static u8 smp_cmd_pairing_random(struct l2cap_conn *conn, struct sk_buff *skb)
401 SMP_MAX_ENC_KEY_SIZE - conn->smp_key_size); 401 SMP_MAX_ENC_KEY_SIZE - conn->smp_key_size);
402 402
403 hci_le_start_enc(hcon, ediv, rand, stk); 403 hci_le_start_enc(hcon, ediv, rand, stk);
404 hcon->enc_key_size = conn->smp_key_size;
404 } else { 405 } else {
405 u8 stk[16], r[16], rand[8]; 406 u8 stk[16], r[16], rand[8];
406 __le16 ediv; 407 __le16 ediv;
@@ -417,7 +418,8 @@ static u8 smp_cmd_pairing_random(struct l2cap_conn *conn, struct sk_buff *skb)
417 memset(stk + conn->smp_key_size, 0, 418 memset(stk + conn->smp_key_size, 0,
418 SMP_MAX_ENC_KEY_SIZE - conn->smp_key_size); 419 SMP_MAX_ENC_KEY_SIZE - conn->smp_key_size);
419 420
420 hci_add_ltk(conn->hcon->hdev, 0, conn->dst, ediv, rand, stk); 421 hci_add_ltk(conn->hcon->hdev, 0, conn->dst, conn->smp_key_size,
422 ediv, rand, stk);
421 } 423 }
422 424
423 return 0; 425 return 0;
@@ -487,6 +489,8 @@ int smp_conn_security(struct l2cap_conn *conn, __u8 sec_level)
487 489
488 hci_le_start_enc(hcon, master->ediv, master->rand, 490 hci_le_start_enc(hcon, master->ediv, master->rand,
489 key->val); 491 key->val);
492 hcon->enc_key_size = key->pin_len;
493
490 goto done; 494 goto done;
491 } 495 }
492 496
@@ -528,8 +532,8 @@ static int smp_cmd_master_ident(struct l2cap_conn *conn, struct sk_buff *skb)
528 532
529 skb_pull(skb, sizeof(*rp)); 533 skb_pull(skb, sizeof(*rp));
530 534
531 hci_add_ltk(conn->hcon->hdev, 1, conn->src, rp->ediv, 535 hci_add_ltk(conn->hcon->hdev, 1, conn->src, conn->smp_key_size,
532 rp->rand, conn->tk); 536 rp->ediv, rp->rand, conn->tk);
533 537
534 smp_distribute_keys(conn, 1); 538 smp_distribute_keys(conn, 1);
535 539
@@ -654,8 +658,8 @@ int smp_distribute_keys(struct l2cap_conn *conn, __u8 force)
654 658
655 smp_send_cmd(conn, SMP_CMD_ENCRYPT_INFO, sizeof(enc), &enc); 659 smp_send_cmd(conn, SMP_CMD_ENCRYPT_INFO, sizeof(enc), &enc);
656 660
657 hci_add_ltk(conn->hcon->hdev, 1, conn->dst, ediv, 661 hci_add_ltk(conn->hcon->hdev, 1, conn->dst, conn->smp_key_size,
658 ident.rand, enc.ltk); 662 ediv, ident.rand, enc.ltk);
659 663
660 ident.ediv = cpu_to_le16(ediv); 664 ident.ediv = cpu_to_le16(ediv);
661 665