aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src/netlink.c
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2018-06-18 20:44:32 +0200
committerJason A. Donenfeld <Jason@zx2c4.com>2018-06-18 20:44:32 +0200
commit83c06904bcfa89feb798b601f0de6082c32d83be (patch)
tree9b0f02b8c4efccd7403ba54c4fbbb762f95ccedb /src/netlink.c
parentnoise: take locks for ss precomputation (diff)
downloadwireguard-monolithic-historical-83c06904bcfa89feb798b601f0de6082c32d83be.tar.xz
wireguard-monolithic-historical-83c06904bcfa89feb798b601f0de6082c32d83be.zip
netlink: maintain static_identity lock over entire private key update
We don't want the local private key to not correspond with a precomputed ss or precomputed cookie hash at any intermediate point.
Diffstat (limited to 'src/netlink.c')
-rw-r--r--src/netlink.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/src/netlink.c b/src/netlink.c
index c61657c..2f5157d 100644
--- a/src/netlink.c
+++ b/src/netlink.c
@@ -435,12 +435,14 @@ static int set_device(struct sk_buff *skb, struct genl_info *info)
}
}
+ down_write(&wg->static_identity.lock);
noise_set_static_identity_private_key(&wg->static_identity, private_key);
list_for_each_entry_safe(peer, temp, &wg->peer_list, peer_list) {
if (!noise_precompute_static_static(peer))
peer_remove(peer);
}
cookie_checker_precompute_device_keys(&wg->cookie_checker);
+ up_write(&wg->static_identity.lock);
}
if (info->attrs[WGDEVICE_A_PEERS]) {