[reSIProcate] OpenSSLInit is not successfully ensuring the thread-safety of OpenSSL

Byron Campen bcampen at estacado.net
Thu Nov 6 16:33:11 CST 2008


	Ok, good. At least this stuff isn't completely broken on Windows. I  
will be fixing the *nix code today.

Best regards,
Byron Campen

> CRYPTO_thread_id is implemented as follows, so we do not need to
> specify a custom implementation for windows:
>
> unsigned long CRYPTO_thread_id(void)
> {
>    unsigned long ret=0;
>    if (id_callback == NULL)
>    {
> #ifdef OPENSSL_SYS_WIN16
>        ret=(unsigned long)GetCurrentTask();
> #elif defined(OPENSSL_SYS_WIN32)
>        ret=(unsigned long)GetCurrentThreadId();
> #elif defined(GETPID_IS_MEANINGLESS)
>        ret=1L;
> #else
>        ret=(unsigned long)getpid();
> #endif
>    }
>    else
>        ret=id_callback();
>    return(ret);
> }
>
>
> On Wed, Nov 5, 2008 at 11:51 PM, Byron Campen <bcampen at estacado.net>  
> wrote:
>> Here's the offending code:
>> *snip*
>> #if !defined(WIN32) && defined(PTHREADS)
>> CRYPTO_set_id_callback(OpenSSLInit::threadIdFunction);
>> #endif
>> *snip*
>> There is no such preprocessor macro as "PTHREADS". The correct  
>> thing to be
>> checking for here, AFAICT, is "_POSIX_THREADS". We should change  
>> this code
>> to something like
>> #if !defined(WIN32)
>> #if defined(_POSIX_THREADS)
>> CRYPTO_set_id_callback(OpenSSLInit::threadIdFunction);
>> #else
>> #error Can't set OpenSSL up to be threadsafe!
>> #endif
>> #endif
>> This assumes CRYPTO_thread_id() is set to something sensible by  
>> default on
>> Windows; is this true Scott/Derek?
>> Also, this code would need to use _POSIX_THREADS
>> *snip*
>> unsigned long
>> OpenSSLInit::threadIdFunction()
>> {
>> #if defined(WIN32)
>>   assert(0);
>> #else
>> #ifndef PTHREADS
>>   assert(0);
>> #endif
>>   unsigned long ret;
>>   ret= (unsigned long)pthread_self();
>>   return ret;
>> #endif
>>   return 0;
>> }
>> *snip*
>> Best regards,
>> Byron Campen
>>
>> _______________________________________________
>> resiprocate-devel mailing list
>> resiprocate-devel at resiprocate.org
>> https://list.resiprocate.org/mailman/listinfo/resiprocate-devel
>>




More information about the resiprocate-devel mailing list