From 81eb0e30f9b39e99d1bb7b56828fd32e50ea055a Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Wed, 1 Aug 2018 15:59:37 +0200 Subject: peer: ensure destruction doesn't race Completely rework peer removal to ensure peers don't jump between contexts and create races. --- src/cookie.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) (limited to 'src/cookie.c') 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); -- cgit v1.2.3-59-g8ed1b