some updates for the blinding code; summary:
[openssl.git] / crypto / cryptlib.c
index b2674b2f2214afca510201ade7925172c867e489..7b86e599ff60911000f082c327340379c983d784 100644 (file)
@@ -545,6 +545,7 @@ const char *CRYPTO_get_lock_name(int type)
 
 unsigned long  OPENSSL_ia32cap_P=0;
 unsigned long *OPENSSL_ia32cap_loc(void) { return &OPENSSL_ia32cap_P; }
+int OPENSSL_NONPIC_relocated=0;
 
 #if defined(OPENSSL_CPUID_OBJ) && !defined(OPENSSL_NO_ASM) && !defined(I386_ONLY)
 #define OPENSSL_CPUID_SETUP
@@ -568,6 +569,8 @@ void OPENSSL_cpuid_setup(void)
 }
 #endif
 
+#else
+unsigned long *OPENSSL_ia32cap_loc(void) { return NULL; }
 #endif
 #if !defined(OPENSSL_CPUID_SETUP)
 void OPENSSL_cpuid_setup(void) {}
@@ -589,6 +592,21 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason,
                {
        case DLL_PROCESS_ATTACH:
                OPENSSL_cpuid_setup();
+#if defined(_WIN32_WINNT)
+               {
+               IMAGE_DOS_HEADER *dos_header = (IMAGE_DOS_HEADER *)hinstDLL;
+               IMAGE_NT_HEADERS *nt_headers;
+
+               if (dos_header->e_magic==IMAGE_DOS_SIGNATURE)
+                       {
+                       nt_headers = (IMAGE_NT_HEADERS *)((char *)dos_header
+                                               + dos_header->e_lfanew);
+                       if (nt_headers->Signature==IMAGE_NT_SIGNATURE &&
+                           hinstDLL!=(HINSTANCE)(nt_headers->OptionalHeader.ImageBase))
+                               OPENSSL_NONPIC_relocated=1;
+                       }
+               }
+#endif
                break;
        case DLL_THREAD_ATTACH:
                break;
@@ -647,7 +665,7 @@ static int IsService(void)
 
 void OPENSSL_showfatal (const char *fmta,...)
 { va_list ap;
-  TCHAR buf[256]
+  TCHAR buf[256];
   const TCHAR *fmt;
   HANDLE h;