3ce7d3
From 9fcd066217e8b6f52b601bdd8a0cb6455f98b88c Mon Sep 17 00:00:00 2001
3ce7d3
From: Petr Mensik <pemensik@redhat.com>
3ce7d3
Date: Thu, 7 Mar 2019 14:33:28 +0100
3ce7d3
Subject: [PATCH] Do not replace random generator on single thread
3ce7d3
3ce7d3
DHCP builds fails to initialize dst library entropy generator. It does
3ce7d3
not require it for anything. Instead of initializing it, skip replacing
3ce7d3
custom random generator in single thread builds. Should use OpenSSL
3ce7d3
default random generator in case of SSL.
3ce7d3
3ce7d3
Related: rhbz#1685940
3ce7d3
---
3ce7d3
 lib/dns/openssl_link.c | 8 +++++++-
3ce7d3
 1 file changed, 7 insertions(+), 1 deletion(-)
3ce7d3
3ce7d3
diff --git a/lib/dns/openssl_link.c b/lib/dns/openssl_link.c
3ce7d3
index ec6dc7f..ca3ffbc 100644
3ce7d3
--- a/lib/dns/openssl_link.c
3ce7d3
+++ b/lib/dns/openssl_link.c
3ce7d3
@@ -31,6 +31,7 @@
3ce7d3
 #include <isc/mem.h>
3ce7d3
 #include <isc/mutex.h>
3ce7d3
 #include <isc/mutexblock.h>
3ce7d3
+#include <isc/platform.h>
3ce7d3
 #include <isc/string.h>
3ce7d3
 #include <isc/thread.h>
3ce7d3
 #include <isc/util.h>
3ce7d3
@@ -220,6 +221,7 @@ dst__openssl_init(const char *engine) {
3ce7d3
 	ERR_load_crypto_strings();
3ce7d3
 #endif
3ce7d3
 
3ce7d3
+#ifdef ISC_PLATFORM_USETHREADS
3ce7d3
 	rm = mem_alloc(sizeof(RAND_METHOD) FILELINE);
3ce7d3
 	if (rm == NULL) {
3ce7d3
 		result = ISC_R_NOMEMORY;
3ce7d3
@@ -231,6 +233,7 @@ dst__openssl_init(const char *engine) {
3ce7d3
 	rm->add = entropy_add;
3ce7d3
 	rm->pseudorand = entropy_getpseudo;
3ce7d3
 	rm->status = entropy_status;
3ce7d3
+#endif
3ce7d3
 
3ce7d3
 #if !defined(OPENSSL_NO_ENGINE)
3ce7d3
 #if !defined(CONF_MFLAGS_DEFAULT_SECTION)
3ce7d3
@@ -264,6 +267,7 @@ dst__openssl_init(const char *engine) {
3ce7d3
 		}
3ce7d3
 	}
3ce7d3
 
3ce7d3
+#ifdef ISC_PLATFORM_USETHREADS
3ce7d3
 	re = ENGINE_get_default_RAND();
3ce7d3
 	if (re == NULL) {
3ce7d3
 		re = ENGINE_new();
3ce7d3
@@ -276,6 +280,7 @@ dst__openssl_init(const char *engine) {
3ce7d3
 		ENGINE_free(re);
3ce7d3
 	} else
3ce7d3
 		ENGINE_finish(re);
3ce7d3
+#endif
3ce7d3
 #else
3ce7d3
 	RAND_set_rand_method(rm);
3ce7d3
 #endif /* !defined(OPENSSL_NO_ENGINE) */
3ce7d3
@@ -286,7 +291,8 @@ dst__openssl_init(const char *engine) {
3ce7d3
 	if (e != NULL)
3ce7d3
 		ENGINE_free(e);
3ce7d3
 	e = NULL;
3ce7d3
-	mem_free(rm FILELINE);
3ce7d3
+	if (rm != NULL)
3ce7d3
+		mem_free(rm FILELINE);
3ce7d3
 	rm = NULL;
3ce7d3
 #endif
3ce7d3
  cleanup_mutexinit:
3ce7d3
-- 
3ce7d3
2.20.1
3ce7d3