bind: fixes for openssl 1.1.0 thread compatibility 4678/head
authorPhilip Prindeville <philipp@redfish-solutions.com>
Mon, 7 Aug 2017 18:04:13 +0000 (12:04 -0600)
committerPhilip Prindeville <philipp@redfish-solutions.com>
Mon, 7 Aug 2017 18:05:19 +0000 (12:05 -0600)
Signed-off-by: Philip Prindeville <philipp@redfish-solutions.com>
net/bind/patches/003-openssl-1.1.0-thread-fix.patch [new file with mode: 0644]

diff --git a/net/bind/patches/003-openssl-1.1.0-thread-fix.patch b/net/bind/patches/003-openssl-1.1.0-thread-fix.patch
new file mode 100644 (file)
index 0000000..8382319
--- /dev/null
@@ -0,0 +1,49 @@
+--- a/lib/dns/openssl_link.c   2017-07-07 09:02:06.000000000 -0600
++++ b/lib/dns/openssl_link.c   2017-08-07 10:23:18.886182931 -0600
+@@ -177,6 +177,14 @@ mem_realloc(void *ptr, size_t size FLARG
+ #endif
+ }
++#if OPENSSL_VERSION_NUMBER >= 0x10000000L
++static void
++_set_thread_id(CRYPTO_THREADID *id)
++{
++      CRYPTO_THREADID_set_numeric(id, pthread_self());
++}
++#endif
++
+ isc_result_t
+ dst__openssl_init(const char *engine) {
+       isc_result_t result;
+@@ -193,7 +203,7 @@ dst__openssl_init(const char *engine) {
+       CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON);
+ #endif
+       CRYPTO_set_mem_functions(mem_alloc, mem_realloc, mem_free);
+-#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
++#if defined(OPENSSL_VERSION_NUMBER) || defined(LIBRESSL_VERSION_NUMBER)
+       nlocks = CRYPTO_num_locks();
+       locks = mem_alloc(sizeof(isc_mutex_t) * nlocks FILELINE);
+       if (locks == NULL)
+@@ -202,7 +204,11 @@ dst__openssl_init(const char *engine) {
+       if (result != ISC_R_SUCCESS)
+               goto cleanup_mutexalloc;
+       CRYPTO_set_locking_callback(lock_callback);
++# if OPENSSL_VERSION_NUMBER >= 0x10000000L
++      CRYPTO_THREADID_set_callback(_set_thread_id);
++# else
+       CRYPTO_set_id_callback(id_callback);
++# endif
+       ERR_load_crypto_strings();
+ #endif
+@@ -323,7 +335,9 @@ dst__openssl_destroy(void) {
+       CRYPTO_cleanup_all_ex_data();
+ #endif
+       ERR_clear_error();
+-#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
++#if OPENSSL_VERSION >= 0x10000000L
++      ERR_remove_thread_state(NULL);
++#elif OPENSSL_VERSION_NUMBER < 0x10000000L || defined(LIBRESSL_VERSION_NUMBER)
+       ERR_remove_state(0);
+ #endif
+       ERR_free_strings();