summaryrefslogtreecommitdiffstats
path: root/net/bluetooth/smp.c
diff options
context:
space:
mode:
authorJohan Hedberg <johan.hedberg@intel.com>2015-02-27 03:11:13 -0500
committerMarcel Holtmann <marcel@holtmann.org>2015-02-27 12:25:48 -0500
commit4cd3928a8bee83d86fb3865bb243ab2ff1dd0eb6 (patch)
tree9a557b133bb3d26d0a9c608668daf56dd1c1999d /net/bluetooth/smp.c
parent03f310efd4b19ddc2cca15ae67f48295554adbfe (diff)
Bluetooth: Update New CSRK event to match latest specification
The 'master' parameter of the New CSRK event was recently renamed to 'type', with the old values kept for backwards compatibility as unauthenticated local/remote keys. This patch updates the code to take into account the two new (authenticated) values and ensures they get used based on the security level of the connection that the respective keys get distributed over. Signed-off-by: Johan Hedberg <johan.hedberg@intel.com> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Diffstat (limited to 'net/bluetooth/smp.c')
-rw-r--r--net/bluetooth/smp.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/net/bluetooth/smp.c b/net/bluetooth/smp.c
index b2803bd6e0d8..c91c19bfc0a8 100644
--- a/net/bluetooth/smp.c
+++ b/net/bluetooth/smp.c
@@ -1252,7 +1252,10 @@ static void smp_distribute_keys(struct smp_chan *smp)
1252 1252
1253 csrk = kzalloc(sizeof(*csrk), GFP_KERNEL); 1253 csrk = kzalloc(sizeof(*csrk), GFP_KERNEL);
1254 if (csrk) { 1254 if (csrk) {
1255 csrk->master = 0x00; 1255 if (hcon->sec_level > BT_SECURITY_MEDIUM)
1256 csrk->type = MGMT_CSRK_LOCAL_AUTHENTICATED;
1257 else
1258 csrk->type = MGMT_CSRK_LOCAL_UNAUTHENTICATED;
1256 memcpy(csrk->val, sign.csrk, sizeof(csrk->val)); 1259 memcpy(csrk->val, sign.csrk, sizeof(csrk->val));
1257 } 1260 }
1258 smp->slave_csrk = csrk; 1261 smp->slave_csrk = csrk;
@@ -2352,7 +2355,10 @@ static int smp_cmd_sign_info(struct l2cap_conn *conn, struct sk_buff *skb)
2352 2355
2353 csrk = kzalloc(sizeof(*csrk), GFP_KERNEL); 2356 csrk = kzalloc(sizeof(*csrk), GFP_KERNEL);
2354 if (csrk) { 2357 if (csrk) {
2355 csrk->master = 0x01; 2358 if (conn->hcon->sec_level > BT_SECURITY_MEDIUM)
2359 csrk->type = MGMT_CSRK_REMOTE_AUTHENTICATED;
2360 else
2361 csrk->type = MGMT_CSRK_REMOTE_UNAUTHENTICATED;
2356 memcpy(csrk->val, rp->csrk, sizeof(csrk->val)); 2362 memcpy(csrk->val, rp->csrk, sizeof(csrk->val));
2357 } 2363 }
2358 smp->csrk = csrk; 2364 smp->csrk = csrk;