summaryrefslogtreecommitdiff
path: root/drivers/builtin_openssl2/crypto/cryptlib.c
diff options
context:
space:
mode:
authormrezai <mhd.rezai@gmail.com>2016-04-15 19:03:35 +0430
committermrezai <mhd.rezai@gmail.com>2016-04-15 19:03:35 +0430
commite97922f22038e9049ed4c2db5b3736dfaa0edde3 (patch)
tree37e036a343e7482a387b7acd0a88509af78a69eb /drivers/builtin_openssl2/crypto/cryptlib.c
parent880f4abda44a42532abb6f15999a90bc85f6264a (diff)
Update OpenSSL to version 1.0.2g
Diffstat (limited to 'drivers/builtin_openssl2/crypto/cryptlib.c')
-rw-r--r--drivers/builtin_openssl2/crypto/cryptlib.c41
1 files changed, 33 insertions, 8 deletions
diff --git a/drivers/builtin_openssl2/crypto/cryptlib.c b/drivers/builtin_openssl2/crypto/cryptlib.c
index eccee72311..1925428f5e 100644
--- a/drivers/builtin_openssl2/crypto/cryptlib.c
+++ b/drivers/builtin_openssl2/crypto/cryptlib.c
@@ -653,7 +653,7 @@ const char *CRYPTO_get_lock_name(int type)
defined(__x86_64) || defined(__x86_64__) || \
defined(_M_AMD64) || defined(_M_X64)
-unsigned int OPENSSL_ia32cap_P[2];
+extern unsigned int OPENSSL_ia32cap_P[4];
unsigned long *OPENSSL_ia32cap_loc(void)
{
if (sizeof(long) == 4)
@@ -663,6 +663,9 @@ unsigned long *OPENSSL_ia32cap_loc(void)
* is 32-bit.
*/
OPENSSL_ia32cap_P[1] = 0;
+
+ OPENSSL_ia32cap_P[2] = 0;
+
return (unsigned long *)OPENSSL_ia32cap_P;
}
@@ -676,7 +679,7 @@ typedef unsigned long long IA32CAP;
void OPENSSL_cpuid_setup(void)
{
static int trigger = 0;
- IA32CAP OPENSSL_ia32_cpuid(void);
+ IA32CAP OPENSSL_ia32_cpuid(unsigned int *);
IA32CAP vec;
char *env;
@@ -694,9 +697,23 @@ void OPENSSL_cpuid_setup(void)
vec = strtoul(env + off, NULL, 0);
# endif
if (off)
- vec = OPENSSL_ia32_cpuid() & ~vec;
+ vec = OPENSSL_ia32_cpuid(OPENSSL_ia32cap_P) & ~vec;
+ else if (env[0] == ':')
+ vec = OPENSSL_ia32_cpuid(OPENSSL_ia32cap_P);
+
+ OPENSSL_ia32cap_P[2] = 0;
+ if ((env = strchr(env, ':'))) {
+ unsigned int vecx;
+ env++;
+ off = (env[0] == '~') ? 1 : 0;
+ vecx = strtoul(env + off, NULL, 0);
+ if (off)
+ OPENSSL_ia32cap_P[2] &= ~vecx;
+ else
+ OPENSSL_ia32cap_P[2] = vecx;
+ }
} else
- vec = OPENSSL_ia32_cpuid();
+ vec = OPENSSL_ia32_cpuid(OPENSSL_ia32cap_P);
/*
* |(1<<10) sets a reserved bit to signal that variable
@@ -706,6 +723,8 @@ void OPENSSL_cpuid_setup(void)
OPENSSL_ia32cap_P[0] = (unsigned int)vec | (1 << 10);
OPENSSL_ia32cap_P[1] = (unsigned int)(vec >> 32);
}
+# else
+unsigned int OPENSSL_ia32cap_P[4];
# endif
#else
@@ -857,8 +876,12 @@ void OPENSSL_showfatal(const char *fmta, ...)
if ((h = GetStdHandle(STD_ERROR_HANDLE)) != NULL &&
GetFileType(h) != FILE_TYPE_UNKNOWN) {
/* must be console application */
+ int len;
+ DWORD out;
+
va_start(ap, fmta);
- vfprintf(stderr, fmta, ap);
+ len = _vsnprintf((char *)buf, sizeof(buf), fmta, ap);
+ WriteFile(h, buf, len < 0 ? sizeof(buf) : (DWORD) len, &out, NULL);
va_end(ap);
return;
}
@@ -981,7 +1004,9 @@ void OpenSSLDie(const char *file, int line, const char *assertion)
/*
* Win32 abort() customarily shows a dialog, but we just did that...
*/
+# if !defined(_WIN32_WCE)
raise(SIGABRT);
+# endif
_exit(3);
#endif
}
@@ -991,11 +1016,11 @@ void *OPENSSL_stderr(void)
return stderr;
}
-int CRYPTO_memcmp(const void *in_a, const void *in_b, size_t len)
+int CRYPTO_memcmp(const volatile void *in_a, const volatile void *in_b, size_t len)
{
size_t i;
- const unsigned char *a = in_a;
- const unsigned char *b = in_b;
+ const volatile unsigned char *a = in_a;
+ const volatile unsigned char *b = in_b;
unsigned char x = 0;
for (i = 0; i < len; i++)