Hi Jeff, I took a closer look at the patch you posted. It seems that the CRYPTO_set_mem_functions is not succeeding. The default memory functions that CRYPTO uses are malloc, realloc, and free but from the back trace, it looks like ns_malloc, ns_realloc and ns_free are the ones being used for some reason. I think I'm running out of ideas here. It's unclear why CRYPTO_set_mem_function would return 0 instead of 1, unless it's some bug in my OpenSSL package in Ubuntu.
On May 6, 8:42 am, Jack Schmidt <thejackschm...@gmail.com> wrote: > I've just yanked the debug. This includes the backtrace and memory frame > info and the local info for most of the frames up until #11 CTX_Init. As > before, the crash happens when DH_free is called. > > 2009/5/6 Jeff Hobbs <je...@activestate.com> > > > > > Of the presented patches, I didn't find one that seemed to actually work, > > so I wrote one based on those presented. It is attached. Please test it in > > your environments. I have tested that it passes the basic tls test suite > > against a threaded Tcl 8.5.7 core build on Linux-x64 (and verified that > > OPENSSL_THREADS was true for this install). > > > This patch is against tls 1.6 head. > > > Jeff > > > On 05/05/2009 3:42 PM, Sep Ng wrote: > > >> I'll try it. I didn't give it much thought at first but looking at it > >> again, I think it might prevent the long string of ns_free and other > >> calls to free memory after DH_free. > > >> On May 6, 3:43 am, Jeff Hobbs <je...@activestate.com> wrote: > > >>> Just starting to look at this, but from the nsopenssl.c I saw another > >>> interesting function not used by TLS: > > >>> if (CRYPTO_set_mem_functions(ns_malloc, ns_realloc, ns_free) == 0) ... > > >>> We could do the same and point to Tcl_Alloc, Tcl_Realloc and Tcl_Free. > >>> I'm not sure they are necessary, and CRYPTO_set_mem_debug_functions > >>> isn't used, but it might help debug. > > > -- > > AOLserver -http://www.aolserver.com/ > > > To Remove yourself from this list, simply send an email to < > > lists...@listserv.aol.com> with the > > body of "SIGNOFF AOLSERVER" in the email message. You can leave the > > Subject: field of your email blank. > > > ? announce.txt > > ? tls-thread.diff > > ? tls-verify.diff > > Index: Makefile.in > > =================================================================== > > RCS file: /cvsroot/tls/tls/Makefile.in,v > > retrieving revision 1.27 > > diff -u -r1.27 Makefile.in > > --- Makefile.in 19 Mar 2008 22:57:03 -0000 1.27 > > +++ Makefile.in 5 May 2009 23:52:38 -0000 > > @@ -205,7 +205,7 @@ > > file copy [file join $(srcdir) tls.tcl] tls.tcl \ > > } ;\ > > source [file join $(srcdir) tls.tcl]; \ > > - set argv $(TESTFLAGS); \ > > + set argv {$(TESTFLAGS)}; \ > > source [file join $(srcdir) tests all.tcl]" | $(TCLSH) > > > shell: binaries libraries > > Index: tls.c > > =================================================================== > > RCS file: /cvsroot/tls/tls/tls.c,v > > retrieving revision 1.30 > > diff -u -r1.30 tls.c > > --- tls.c 19 Mar 2008 22:06:13 -0000 1.30 > > +++ tls.c 5 May 2009 23:52:38 -0000 > > @@ -130,6 +130,46 @@ > > #define sk_SSL_CIPHER_value( sk, index) (SSL_CIPHER*)sk_value((sk), > > (index)) > > #endif > > > +/* > > + * Thread-Safe TLS Code > > + */ > > + > > +#ifdef TCL_THREADS > > +#define OPENSSL_THREAD_DEFINES > > +#include <openssl/opensslconf.h> > > + > > +#ifdef OPENSSL_THREADS > > +#include <openssl/crypto.h> > > + > > +/* > > + * Threaded operation requires locking callbacks > > + * Based from /crypto/cryptlib.c of OpenSSL and NSOpenSSL. > > + */ > > + > > +static Tcl_Mutex locks[CRYPTO_NUM_LOCKS]; > > + > > +static void CryptoThreadLockCallback(int mode, int n, > > + const char *file, int line); > > +static unsigned long CryptoThreadIdCallback(void); > > + > > +static void > > +CryptoThreadLockCallback(int mode, int n, const char *file, int line) > > +{ > > + if (mode & CRYPTO_LOCK) { > > + Tcl_MutexLock(&locks[n]); > > + } else { > > + Tcl_MutexUnlock(&locks[n]); > > + } > > +} > > + > > +static unsigned long > > +CryptoThreadIdCallback(void) > > +{ > > + return (unsigned long) Tcl_GetCurrentThread(); > > +} > > +#endif /* OPENSSL_THREADS */ > > +#endif /* TCL_THREADS */ > > + > > > /* > > *------------------------------------------------------------------- > > @@ -1468,6 +1508,9 @@ > > { > > int major, minor, patchlevel, release, i; > > char rnd_seed[16] = "GrzSlplKqUdnnzP!"; /* 16 bytes */ > > +#if defined(OPENSSL_THREADS) && defined(TCL_THREADS) > > + size_t num_locks; > > +#endif > > > /* > > * The original 8.2.0 stacked channel implementation (and the patch > > @@ -1500,6 +1543,24 @@ > > channelTypeVersion = TLS_CHANNEL_VERSION_1; > > } > > > + if (CRYPTO_set_mem_functions((void *(*)(size_t))Tcl_Alloc, > > + (void *(*)(void *, size_t))Tcl_Realloc, > > + (void(*)(void *))Tcl_Free) == 0) { > > + /* Not using Tcl's mem functions ... not critical */ > > + } > > + > > +#if defined(OPENSSL_THREADS) && defined(TCL_THREADS) > > + /* should we consider allocating mutexes? */ > > + num_locks = CRYPTO_num_locks(); > > + if (num_locks > CRYPTO_NUM_LOCKS) { > > + Tcl_AppendResult(interp, "crypto num locks size error", NULL); > > + return TCL_ERROR; > > + } > > + > > + CRYPTO_set_locking_callback(CryptoThreadLockCallback); > > + CRYPTO_set_id_callback(CryptoThreadIdCallback); > > +#endif > > + > > if (SSL_library_init() != 1) { > > Tcl_AppendResult(interp, "could not initialize SSL library", NULL); > > return TCL_ERROR; > > > -- > > AOLserver -http://www.aolserver.com/ > > > To Remove yourself from this list, simply send an email to < > > lists...@listserv.aol.com> with the > > body of "SIGNOFF AOLSERVER" in the email message. You can leave the > > Subject: field of your email blank. > > -- > "A scrum a day keeps the pigs at bay" > > -- > AOLserver -http://www.aolserver.com/ > > To Remove yourself from this list, simply send an email to > <lists...@listserv.aol.com> with the > body of "SIGNOFF AOLSERVER" in the email message. You can leave the Subject: > field of your email blank. > > gdb.info > 30KViewDownload -- AOLserver - http://www.aolserver.com/ To Remove yourself from this list, simply send an email to <lists...@listserv.aol.com> with the body of "SIGNOFF AOLSERVER" in the email message. You can leave the Subject: field of your email blank.