diff options
Diffstat (limited to 'drivers/net')
| -rw-r--r-- | drivers/net/wireguard/noise.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/net/wireguard/noise.c b/drivers/net/wireguard/noise.c index 63f41836ebd5..4f48d16d4ea5 100644 --- a/drivers/net/wireguard/noise.c +++ b/drivers/net/wireguard/noise.c @@ -783,10 +783,12 @@ wg_noise_handshake_consume_response(struct message_handshake_response *src, /* Success! Copy everything to peer */ down_write(&handshake->lock); - /* It's important to check that the state is still the same, while we - * have an exclusive lock. + /* Check that the state is the same and that this is still the + * initiation we started with, while we have an exclusive lock. */ - if (handshake->state != state) { + if (handshake->state != state || + crypto_memneq(handshake->ephemeral_private, ephemeral_private, + NOISE_PUBLIC_KEY_LEN)) { up_write(&handshake->lock); goto fail; } |
