aboutsummaryrefslogtreecommitdiffstats
path: root/src/wg_noise.c
diff options
context:
space:
mode:
authorMatt Dunwoodie <ncon@noconroy.net>2021-04-20 08:55:08 +1000
committerMatt Dunwoodie <ncon@noconroy.net>2021-04-20 10:52:36 +1000
commit0fa8645fe431c29a8d9371679398bf7839bffec1 (patch)
tree05b69fe7b654c16dc4c9349d7164fb6e8f8c942b /src/wg_noise.c
parentif_wg: add missing return parens to follow style(9) (diff)
downloadwireguard-freebsd-0fa8645fe431c29a8d9371679398bf7839bffec1.tar.xz
wireguard-freebsd-0fa8645fe431c29a8d9371679398bf7839bffec1.zip
wg_noise: lookup both keypair and handshake index at once
Signed-off-by: Matt Dunwoodie <ncon@noconroy.net>
Diffstat (limited to '')
-rw-r--r--src/wg_noise.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/wg_noise.c b/src/wg_noise.c
index 7cf160b..4a1134d 100644
--- a/src/wg_noise.c
+++ b/src/wg_noise.c
@@ -380,13 +380,19 @@ noise_remote_index_lookup(struct noise_local *l, uint32_t idx0)
{
struct epoch_tracker et;
struct noise_index *i;
+ struct noise_keypair *kp;
struct noise_remote *r, *ret = NULL;
uint32_t idx = idx0 & HT_INDEX_MASK;
NET_EPOCH_ENTER(et);
CK_LIST_FOREACH(i, &l->l_index_hash[idx], i_entry) {
- if (i->i_local_index == idx0 && !i->i_is_keypair) {
- r = (struct noise_remote *) i;
+ if (i->i_local_index == idx0) {
+ if (i->i_is_keypair) {
+ kp = (struct noise_keypair *) i;
+ r = kp->kp_remote;
+ } else {
+ r = (struct noise_remote *) i;
+ }
if (refcount_acquire_if_not_zero(&r->r_refcnt))
ret = r;
break;