diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2018-08-01 15:59:37 +0200 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2018-08-03 00:14:18 +0200 |
commit | 81eb0e30f9b39e99d1bb7b56828fd32e50ea055a (patch) | |
tree | 7b9e212d2a73644bae8b09da164147a4491d98fa /src/cookie.c | |
parent | noise: free peer references on failure (diff) | |
download | wireguard-monolithic-historical-81eb0e30f9b39e99d1bb7b56828fd32e50ea055a.tar.xz wireguard-monolithic-historical-81eb0e30f9b39e99d1bb7b56828fd32e50ea055a.zip |
peer: ensure destruction doesn't race
Completely rework peer removal to ensure peers don't jump between
contexts and create races.
Diffstat (limited to 'src/cookie.c')
-rw-r--r-- | src/cookie.c | 8 |
1 files changed, 1 insertions, 7 deletions
diff --git a/src/cookie.c b/src/cookie.c index bc6d8be..9268630 100644 --- a/src/cookie.c +++ b/src/cookie.c @@ -165,15 +165,9 @@ void cookie_message_consume(struct message_handshake_cookie *src, struct wiregua { u8 cookie[COOKIE_LEN]; struct wireguard_peer *peer = NULL; - struct index_hashtable_entry *entry; bool ret; - rcu_read_lock_bh(); - entry = index_hashtable_lookup(&wg->index_hashtable, INDEX_HASHTABLE_HANDSHAKE | INDEX_HASHTABLE_KEYPAIR, src->receiver_index); - if (likely(entry)) - peer = entry->peer; - rcu_read_unlock_bh(); - if (unlikely(!peer)) + if (unlikely(!index_hashtable_lookup(&wg->index_hashtable, INDEX_HASHTABLE_HANDSHAKE | INDEX_HASHTABLE_KEYPAIR, src->receiver_index, &peer))) return; down_read(&peer->latest_cookie.lock); |