提交 efabba37 编写于 作者: J Johan Hedberg 提交者: Marcel Holtmann

Bluetooth: Simplify logic for checking for SMP completion

Now that smp->remote_key_dist is tracking the keys we're still waiting
for we can use it to simplify the logic for checking whether we're done
with key distribution or not. At the same time the reliance on the
"force" parameter of smp_distribute_keys goes away and it can completely
be removed in a subsequent patch.
Signed-off-by: NJohan Hedberg <johan.hedberg@intel.com>
Signed-off-by: NMarcel Holtmann <marcel@holtmann.org>
上级 9747a9f3
...@@ -1184,7 +1184,7 @@ int smp_distribute_keys(struct l2cap_conn *conn, __u8 force) ...@@ -1184,7 +1184,7 @@ int smp_distribute_keys(struct l2cap_conn *conn, __u8 force)
rsp = (void *) &smp->prsp[1]; rsp = (void *) &smp->prsp[1];
/* The responder sends its keys first */ /* The responder sends its keys first */
if (!force && hcon->out && (rsp->resp_key_dist & 0x07)) if (hcon->out && (smp->remote_key_dist & 0x07))
return 0; return 0;
req = (void *) &smp->preq[1]; req = (void *) &smp->preq[1];
...@@ -1259,13 +1259,16 @@ int smp_distribute_keys(struct l2cap_conn *conn, __u8 force) ...@@ -1259,13 +1259,16 @@ int smp_distribute_keys(struct l2cap_conn *conn, __u8 force)
*keydist &= ~SMP_DIST_SIGN; *keydist &= ~SMP_DIST_SIGN;
} }
if (hcon->out || force || !(rsp->init_key_dist & 0x07)) { /* If there are still keys to be received wait for them */
if ((smp->remote_key_dist & 0x07))
return 0;
clear_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags); clear_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags);
cancel_delayed_work_sync(&conn->security_timer); cancel_delayed_work_sync(&conn->security_timer);
set_bit(SMP_FLAG_COMPLETE, &smp->smp_flags); set_bit(SMP_FLAG_COMPLETE, &smp->smp_flags);
smp_notify_keys(conn); smp_notify_keys(conn);
smp_chan_destroy(conn); smp_chan_destroy(conn);
}
return 0; return 0;
} }
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册