Loading crypto/cryptlib.c +71 −12 Original line number Diff line number Diff line Loading @@ -165,7 +165,9 @@ static const char* const lock_names[CRYPTO_NUM_LOCKS] = "ec_pre_comp", "store", "comp", #if CRYPTO_NUM_LOCKS != 39 "fips", "fips2", #if CRYPTO_NUM_LOCKS != 41 # error "Inconsistency between crypto.h and cryptlib.c" #endif }; Loading Loading @@ -552,6 +554,14 @@ unsigned long CRYPTO_thread_id(void) } #endif static void (*do_dynlock_cb)(int mode, int type, const char *file, int line); void int_CRYPTO_set_do_dynlock_callback( void (*dyn_cb)(int mode, int type, const char *file, int line)) { do_dynlock_cb = dyn_cb; } void CRYPTO_lock(int mode, int type, const char *file, int line) { #ifdef LOCK_DEBUG Loading Loading @@ -581,17 +591,8 @@ void CRYPTO_lock(int mode, int type, const char *file, int line) #endif if (type < 0) { if (dynlock_lock_callback != NULL) { struct CRYPTO_dynlock_value *pointer = CRYPTO_get_dynlock_value(type); OPENSSL_assert(pointer != NULL); dynlock_lock_callback(mode, pointer, file, line); CRYPTO_destroy_dynlockid(type); } if (do_dynlock_cb) do_dynlock_cb(mode, type, file, line); } else if (locking_callback != NULL) Loading Loading @@ -693,6 +694,62 @@ void OPENSSL_cpuid_setup(void) {} #endif #if (defined(_WIN32) || defined(__CYGWIN__)) && defined(_WINDLL) #ifdef OPENSSL_FIPS #include <tlhelp32.h> #if defined(__GNUC__) && __GNUC__>=2 static int DllInit(void) __attribute__((constructor)); #elif defined(_MSC_VER) static int DllInit(void); # ifdef _WIN64 # pragma section(".CRT$XCU",read) __declspec(allocate(".CRT$XCU")) # else # pragma data_seg(".CRT$XCU") # endif static int (*p)(void) = DllInit; # pragma data_seg() #endif static int DllInit(void) { #if defined(_WIN32_WINNT) union { int(*f)(void); BYTE *p; } t = { DllInit }; HANDLE hModuleSnap = INVALID_HANDLE_VALUE; IMAGE_DOS_HEADER *dos_header; IMAGE_NT_HEADERS *nt_headers; MODULEENTRY32 me32 = {sizeof(me32)}; hModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,0); if (hModuleSnap != INVALID_HANDLE_VALUE && Module32First(hModuleSnap,&me32)) do { if (t.p >= me32.modBaseAddr && t.p < me32.modBaseAddr+me32.modBaseSize) { dos_header=(IMAGE_DOS_HEADER *)me32.modBaseAddr; if (dos_header->e_magic==IMAGE_DOS_SIGNATURE) { nt_headers=(IMAGE_NT_HEADERS *) ((BYTE *)dos_header+dos_header->e_lfanew); if (nt_headers->Signature==IMAGE_NT_SIGNATURE && me32.modBaseAddr!=(BYTE*)nt_headers->OptionalHeader.ImageBase) OPENSSL_NONPIC_relocated=1; } break; } } while (Module32Next(hModuleSnap,&me32)); if (hModuleSnap != INVALID_HANDLE_VALUE) CloseHandle(hModuleSnap); #endif OPENSSL_cpuid_setup(); return 0; } #else #ifdef __CYGWIN__ /* pick DLL_[PROCESS|THREAD]_[ATTACH|DETACH] definitions */ #include <windows.h> Loading Loading @@ -736,6 +793,8 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, } #endif #endif #if defined(_WIN32) && !defined(__CYGWIN__) #include <tchar.h> Loading Loading
crypto/cryptlib.c +71 −12 Original line number Diff line number Diff line Loading @@ -165,7 +165,9 @@ static const char* const lock_names[CRYPTO_NUM_LOCKS] = "ec_pre_comp", "store", "comp", #if CRYPTO_NUM_LOCKS != 39 "fips", "fips2", #if CRYPTO_NUM_LOCKS != 41 # error "Inconsistency between crypto.h and cryptlib.c" #endif }; Loading Loading @@ -552,6 +554,14 @@ unsigned long CRYPTO_thread_id(void) } #endif static void (*do_dynlock_cb)(int mode, int type, const char *file, int line); void int_CRYPTO_set_do_dynlock_callback( void (*dyn_cb)(int mode, int type, const char *file, int line)) { do_dynlock_cb = dyn_cb; } void CRYPTO_lock(int mode, int type, const char *file, int line) { #ifdef LOCK_DEBUG Loading Loading @@ -581,17 +591,8 @@ void CRYPTO_lock(int mode, int type, const char *file, int line) #endif if (type < 0) { if (dynlock_lock_callback != NULL) { struct CRYPTO_dynlock_value *pointer = CRYPTO_get_dynlock_value(type); OPENSSL_assert(pointer != NULL); dynlock_lock_callback(mode, pointer, file, line); CRYPTO_destroy_dynlockid(type); } if (do_dynlock_cb) do_dynlock_cb(mode, type, file, line); } else if (locking_callback != NULL) Loading Loading @@ -693,6 +694,62 @@ void OPENSSL_cpuid_setup(void) {} #endif #if (defined(_WIN32) || defined(__CYGWIN__)) && defined(_WINDLL) #ifdef OPENSSL_FIPS #include <tlhelp32.h> #if defined(__GNUC__) && __GNUC__>=2 static int DllInit(void) __attribute__((constructor)); #elif defined(_MSC_VER) static int DllInit(void); # ifdef _WIN64 # pragma section(".CRT$XCU",read) __declspec(allocate(".CRT$XCU")) # else # pragma data_seg(".CRT$XCU") # endif static int (*p)(void) = DllInit; # pragma data_seg() #endif static int DllInit(void) { #if defined(_WIN32_WINNT) union { int(*f)(void); BYTE *p; } t = { DllInit }; HANDLE hModuleSnap = INVALID_HANDLE_VALUE; IMAGE_DOS_HEADER *dos_header; IMAGE_NT_HEADERS *nt_headers; MODULEENTRY32 me32 = {sizeof(me32)}; hModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,0); if (hModuleSnap != INVALID_HANDLE_VALUE && Module32First(hModuleSnap,&me32)) do { if (t.p >= me32.modBaseAddr && t.p < me32.modBaseAddr+me32.modBaseSize) { dos_header=(IMAGE_DOS_HEADER *)me32.modBaseAddr; if (dos_header->e_magic==IMAGE_DOS_SIGNATURE) { nt_headers=(IMAGE_NT_HEADERS *) ((BYTE *)dos_header+dos_header->e_lfanew); if (nt_headers->Signature==IMAGE_NT_SIGNATURE && me32.modBaseAddr!=(BYTE*)nt_headers->OptionalHeader.ImageBase) OPENSSL_NONPIC_relocated=1; } break; } } while (Module32Next(hModuleSnap,&me32)); if (hModuleSnap != INVALID_HANDLE_VALUE) CloseHandle(hModuleSnap); #endif OPENSSL_cpuid_setup(); return 0; } #else #ifdef __CYGWIN__ /* pick DLL_[PROCESS|THREAD]_[ATTACH|DETACH] definitions */ #include <windows.h> Loading Loading @@ -736,6 +793,8 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, } #endif #endif #if defined(_WIN32) && !defined(__CYGWIN__) #include <tchar.h> Loading