summaryrefslogtreecommitdiff
path: root/net/bluetooth
diff options
context:
space:
mode:
authorJohan Hedberg <johan.hedberg@intel.com>2014-05-31 18:53:36 +0300
committerMarcel Holtmann <marcel@holtmann.org>2014-12-03 16:51:18 +0100
commitd378a2d77618464f511d35687bbbc6614b1bacda (patch)
treeaa2e1ad40d820049e766aff7beab88dbcea6f69e /net/bluetooth
parent6c0dcc5014caeb9c39db816a7e0169255923ccba (diff)
Bluetooth: Set correct LTK type and authentication for SC
After generating the LTK we should set the correct type (normal SC or debug) and authentication information for it. Signed-off-by: Johan Hedberg <johan.hedberg@intel.com> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Diffstat (limited to 'net/bluetooth')
-rw-r--r--net/bluetooth/smp.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/net/bluetooth/smp.c b/net/bluetooth/smp.c
index 63d5ba7774e0..30439368a55a 100644
--- a/net/bluetooth/smp.c
+++ b/net/bluetooth/smp.c
@@ -2060,6 +2060,7 @@ static int smp_cmd_dhkey_check(struct l2cap_conn *conn, struct sk_buff *skb)
struct smp_chan *smp = chan->data;
u8 a[7], b[7], *local_addr, *remote_addr;
u8 io_cap[3], r[16], e[16];
+ u8 key_type, auth;
int err;
BT_DBG("conn %p", conn);
@@ -2092,8 +2093,18 @@ static int smp_cmd_dhkey_check(struct l2cap_conn *conn, struct sk_buff *skb)
if (memcmp(check->e, e, 16))
return SMP_DHKEY_CHECK_FAILED;
+ if (test_bit(SMP_FLAG_DEBUG_KEY, &smp->flags))
+ key_type = SMP_LTK_P256_DEBUG;
+ else
+ key_type = SMP_LTK_P256;
+
+ if (hcon->pending_sec_level == BT_SECURITY_FIPS)
+ auth = 1;
+ else
+ auth = 0;
+
smp->ltk = hci_add_ltk(hcon->hdev, &hcon->dst, hcon->dst_type,
- SMP_LTK_P256, 0, smp->tk, smp->enc_key_size,
+ key_type, auth, smp->tk, smp->enc_key_size,
0, 0);
if (hcon->out) {