From 371686fb68eff02020ddd80a702c39f31a849b8e Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Wed, 21 Sep 2016 08:20:29 +0100 Subject: [PATCH] Issue #239: Crash on module unload with OpenSSL We use CRYPTO_set_id_callback() to set a callback, but we don't ever remove it again on unload. So OpenSSL crashes the next time it needs a thread-id. CRYPTO_set_id_callback() has been deprecated since OpenSSL 1.0.0, the oldest we support. And redundant too, since OpenSSL has fallbacks which include the address of errno. Which is going to work on any platform with pthreads... and we were only calling CRYPTO_set_id_callback() on platforms with pthreads. So just rip it out. --- src/lib/crypto/OSSLCryptoFactory.cpp | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/src/lib/crypto/OSSLCryptoFactory.cpp b/src/lib/crypto/OSSLCryptoFactory.cpp index 3aa8dcd..fc059ae 100644 --- a/src/lib/crypto/OSSLCryptoFactory.cpp +++ b/src/lib/crypto/OSSLCryptoFactory.cpp @@ -55,9 +55,6 @@ #include "OSSLGOST.h" #endif -#ifdef HAVE_PTHREAD_H -#include -#endif #include #include #include @@ -72,14 +69,6 @@ bool OSSLCryptoFactory::FipsSelfTestStatus = false; #endif -// Thread ID callback -#ifdef HAVE_PTHREAD_H -static unsigned long id_callback() -{ - return (unsigned long) pthread_self(); -} -#endif - static unsigned nlocks; static Mutex** locks; @@ -116,9 +105,6 @@ OSSLCryptoFactory::OSSLCryptoFactory() { locks[i] = MutexFactory::i()->getMutex(); } -#ifdef HAVE_PTHREAD_H - CRYPTO_set_id_callback(id_callback); -#endif CRYPTO_set_locking_callback(lock_callback); #ifdef WITH_FIPS -- 2.25.1