From 1be182c65fe1155e9a882158c4457260557a325b Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Fri, 11 Sep 2015 22:59:40 +0300 Subject: [PATCH] Fix potential inithashtable() race condition potential race condition on configuration reload. --- src/auth.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/auth.c b/src/auth.c index 3af7010..98d5724 100644 --- a/src/auth.c +++ b/src/auth.c @@ -922,6 +922,7 @@ int inithashtable(struct hashtable *ht, unsigned nhashsize){ unsigned i; if(nhashsize<4) return 1; + pthread_mutex_lock(&hash_mutex); if(ht->hashtable){ myfree(ht->hashtable); ht->hashtable = NULL; @@ -932,11 +933,13 @@ int inithashtable(struct hashtable *ht, unsigned nhashsize){ } ht->hashsize = 0; if(!(ht->hashtable = myalloc((nhashsize>>2) * sizeof(struct hashentry *)))){ + pthread_mutex_unlock(&hash_mutex); return 2; } if(!(ht->hashvalues = myalloc(nhashsize * sizeof(struct hashentry)))){ myfree(ht->hashtable); ht->hashtable = NULL; + pthread_mutex_unlock(&hash_mutex); return 3; } ht->hashsize = nhashsize; @@ -946,6 +949,7 @@ int inithashtable(struct hashtable *ht, unsigned nhashsize){ (ht->hashvalues + i)->next = ht->hashvalues + i + 1; } ht->hashempty = ht->hashvalues; + pthread_mutex_unlock(&hash_mutex); return 0; }