summaryrefslogtreecommitdiff
path: root/Cryptlib/OpenSSL/crypto/mem.c
diff options
context:
space:
mode:
Diffstat (limited to 'Cryptlib/OpenSSL/crypto/mem.c')
-rw-r--r--Cryptlib/OpenSSL/crypto/mem.c87
1 files changed, 33 insertions, 54 deletions
diff --git a/Cryptlib/OpenSSL/crypto/mem.c b/Cryptlib/OpenSSL/crypto/mem.c
index 0620a51f..fdad49b7 100644
--- a/Cryptlib/OpenSSL/crypto/mem.c
+++ b/Cryptlib/OpenSSL/crypto/mem.c
@@ -107,7 +107,7 @@ static void (*free_locked_func) (void *) = free;
/* may be changed as long as 'allow_customize_debug' is set */
/* XXX use correct function pointer types */
-#if defined(CRYPTO_MDEBUG) && !defined(OPENSSL_FIPS)
+#ifdef CRYPTO_MDEBUG
/* use default functions from mem_dbg.c */
static void (*malloc_debug_func) (void *, int, const char *, int, int)
= CRYPTO_dbg_malloc;
@@ -117,14 +117,6 @@ static void (*realloc_debug_func) (void *, void *, int, const char *, int,
static void (*free_debug_func) (void *, int) = CRYPTO_dbg_free;
static void (*set_debug_options_func) (long) = CRYPTO_dbg_set_options;
static long (*get_debug_options_func) (void) = CRYPTO_dbg_get_options;
-
-static int (*push_info_func) (const char *info, const char *file, int line)
- = CRYPTO_dbg_push_info;
-static int (*pop_info_func) (void)
- = CRYPTO_dbg_pop_info;
-static int (*remove_all_info_func) (void)
- = CRYPTO_dbg_remove_all_info;
-
#else
/*
* applications can use CRYPTO_malloc_debug_init() to select above case at
@@ -137,17 +129,13 @@ static void (*realloc_debug_func) (void *, void *, int, const char *, int,
static void (*free_debug_func) (void *, int) = NULL;
static void (*set_debug_options_func) (long) = NULL;
static long (*get_debug_options_func) (void) = NULL;
-
-static int (*push_info_func) (const char *info, const char *file, int line)
- = NULL;
-static int (*pop_info_func) (void) = NULL;
-static int (*remove_all_info_func) (void) = NULL;
-
#endif
int CRYPTO_set_mem_functions(void *(*m) (size_t), void *(*r) (void *, size_t),
void (*f) (void *))
{
+ /* Dummy call just to ensure OPENSSL_init() gets linked in */
+ OPENSSL_init();
if (!allow_customize)
return 0;
if ((m == 0) || (r == 0) || (f == 0))
@@ -216,6 +204,7 @@ int CRYPTO_set_mem_debug_functions(void (*m)
{
if (!allow_customize_debug)
return 0;
+ OPENSSL_init();
malloc_debug_func = m;
realloc_debug_func = r;
free_debug_func = f;
@@ -224,16 +213,6 @@ int CRYPTO_set_mem_debug_functions(void (*m)
return 1;
}
-void CRYPTO_set_mem_info_functions(int (*push_info_fn)
- (const char *info, const char *file,
- int line), int (*pop_info_fn) (void),
- int (*remove_all_info_fn) (void))
-{
- push_info_func = push_info_fn;
- pop_info_func = pop_info_fn;
- remove_all_info_func = remove_all_info_fn;
-}
-
void CRYPTO_get_mem_functions(void *(**m) (size_t),
void *(**r) (void *, size_t),
void (**f) (void *))
@@ -301,14 +280,15 @@ void CRYPTO_get_mem_debug_functions(void (**m)
void *CRYPTO_malloc_locked(int num, const char *file, int line)
{
void *ret = NULL;
- extern unsigned char cleanse_ctr;
if (num <= 0)
return NULL;
- allow_customize = 0;
+ if (allow_customize)
+ allow_customize = 0;
if (malloc_debug_func != NULL) {
- allow_customize_debug = 0;
+ if (allow_customize_debug)
+ allow_customize_debug = 0;
malloc_debug_func(NULL, num, file, line, 0);
}
ret = malloc_locked_ex_func(num, file, line);
@@ -318,13 +298,17 @@ void *CRYPTO_malloc_locked(int num, const char *file, int line)
if (malloc_debug_func != NULL)
malloc_debug_func(ret, num, file, line, 1);
+#ifndef OPENSSL_CPUID_OBJ
/*
* Create a dependency on the value of 'cleanse_ctr' so our memory
* sanitisation function can't be optimised out. NB: We only do this for
* >2Kb so the overhead doesn't bother us.
*/
- if (ret && (num > 2048))
+ if (ret && (num > 2048)) {
+ extern unsigned char cleanse_ctr;
((unsigned char *)ret)[0] = cleanse_ctr;
+ }
+#endif
return ret;
}
@@ -344,14 +328,15 @@ void CRYPTO_free_locked(void *str)
void *CRYPTO_malloc(int num, const char *file, int line)
{
void *ret = NULL;
- extern unsigned char cleanse_ctr;
if (num <= 0)
return NULL;
- allow_customize = 0;
+ if (allow_customize)
+ allow_customize = 0;
if (malloc_debug_func != NULL) {
- allow_customize_debug = 0;
+ if (allow_customize_debug)
+ allow_customize_debug = 0;
malloc_debug_func(NULL, num, file, line, 0);
}
ret = malloc_ex_func(num, file, line);
@@ -361,17 +346,32 @@ void *CRYPTO_malloc(int num, const char *file, int line)
if (malloc_debug_func != NULL)
malloc_debug_func(ret, num, file, line, 1);
+#ifndef OPENSSL_CPUID_OBJ
/*
* Create a dependency on the value of 'cleanse_ctr' so our memory
* sanitisation function can't be optimised out. NB: We only do this for
* >2Kb so the overhead doesn't bother us.
*/
- if (ret && (num > 2048))
+ if (ret && (num > 2048)) {
+ extern unsigned char cleanse_ctr;
((unsigned char *)ret)[0] = cleanse_ctr;
+ }
+#endif
return ret;
}
+char *CRYPTO_strdup(const char *str, const char *file, int line)
+{
+ char *ret = CRYPTO_malloc(strlen(str) + 1, file, line);
+
+ if (ret == NULL)
+ return NULL;
+
+ strcpy(ret, str);
+ return ret;
+}
+
void *CRYPTO_realloc(void *str, int num, const char *file, int line)
{
void *ret = NULL;
@@ -464,24 +464,3 @@ long CRYPTO_get_mem_debug_options(void)
return get_debug_options_func();
return 0;
}
-
-int CRYPTO_push_info_(const char *info, const char *file, int line)
-{
- if (push_info_func)
- return push_info_func(info, file, line);
- return 1;
-}
-
-int CRYPTO_pop_info(void)
-{
- if (pop_info_func)
- return pop_info_func();
- return 1;
-}
-
-int CRYPTO_remove_all_info(void)
-{
- if (remove_all_info_func)
- return remove_all_info_func();
- return 1;
-}