static void (*free_func) (void *) = free;
-static void *(*malloc_locked_func) (size_t) = malloc;
-static void *default_malloc_locked_ex(size_t num, const char *file, int line)
+static void *(*malloc_secure_func)(size_t) = malloc;
+static void *default_malloc_secure_ex(size_t num, const char *file, int line)
{
- return malloc_locked_func(num);
+ return malloc_secure_func(num);
}
-
-static void *(*malloc_locked_ex_func) (size_t, const char *file, int line)
- = default_malloc_locked_ex;
-
-static void (*free_locked_func) (void *) = free;
+static void *(*malloc_secure_ex_func)(size_t, const char *file, int line)
+ = default_malloc_secure_ex;
+static void (*free_secure_func)(void *) = free;
/* may be changed as long as 'allow_customize_debug' is set */
/* XXX use correct function pointer types */
#ifdef CRYPTO_MDEBUG
/* use default functions from mem_dbg.c */
-static void (*malloc_debug_func) (void *, int, const char *, int, int)
+static void (*malloc_debug_func) (void *, size_t, const char *, int, int)
= CRYPTO_dbg_malloc;
-static void (*realloc_debug_func) (void *, void *, int, const char *, int,
+static void (*realloc_debug_func) (void *, void *, size_t, const char *, int,
int)
= CRYPTO_dbg_realloc;
static void (*free_debug_func) (void *, int) = CRYPTO_dbg_free;
* applications can use CRYPTO_malloc_debug_init() to select above case at
* run-time
*/
-static void (*malloc_debug_func) (void *, int, const char *, int, int) = NULL;
-static void (*realloc_debug_func) (void *, void *, int, const char *, int,
+static void (*malloc_debug_func) (void *, size_t, const char *, int, int) = NULL;
+static void (*realloc_debug_func) (void *, void *, size_t, const char *, int,
int)
= NULL;
static void (*free_debug_func) (void *, int) = NULL;
realloc_func = r;
realloc_ex_func = default_realloc_ex;
free_func = f;
- malloc_locked_func = m;
- malloc_locked_ex_func = default_malloc_locked_ex;
- free_locked_func = f;
+ /* If user wants to intercept the secure or locked functions, do it
+ * after the basic functions. */
+ malloc_secure_func = m;
+ malloc_secure_ex_func = default_malloc_secure_ex;
+ free_secure_func = f;
return 1;
}
realloc_func = 0;
realloc_ex_func = r;
free_func = f;
- malloc_locked_func = 0;
- malloc_locked_ex_func = m;
- free_locked_func = f;
+ malloc_secure_func = 0;
+ malloc_secure_ex_func = m;
+ free_secure_func = f;
return 1;
}
-int CRYPTO_set_locked_mem_functions(void *(*m) (size_t), void (*f) (void *))
+int CRYPTO_set_secure_mem_functions(void *(*m)(size_t), void (*f)(void *))
{
+ /* Dummy call just to ensure OPENSSL_init() gets linked in */
+ OPENSSL_init();
if (!allow_customize)
return 0;
- if ((m == NULL) || (f == NULL))
+ if ((m == 0) || (f == 0))
return 0;
- malloc_locked_func = m;
- malloc_locked_ex_func = default_malloc_locked_ex;
- free_locked_func = f;
+ malloc_secure_func = m;
+ malloc_secure_ex_func = default_malloc_secure_ex;
+ free_secure_func = f;
return 1;
}
-int CRYPTO_set_locked_mem_ex_functions(void *(*m) (size_t, const char *, int),
- void (*f) (void *))
+int CRYPTO_set_secure_mem_ex_functions(void *(*m)(size_t, const char *, int),
+ void (*f)(void *))
{
if (!allow_customize)
return 0;
if ((m == NULL) || (f == NULL))
return 0;
- malloc_locked_func = 0;
- malloc_locked_ex_func = m;
- free_func = f;
+ malloc_secure_func = 0;
+ malloc_secure_ex_func = m;
+ free_secure_func = f;
return 1;
}
-int CRYPTO_set_mem_debug_functions(void (*m)
- (void *, int, const char *, int, int),
- void (*r) (void *, void *, int,
+int CRYPTO_set_mem_debug_functions(void (*m) (void *, size_t,
+ const char *, int, int),
+ void (*r) (void *, void *, size_t,
const char *, int, int),
void (*f) (void *, int), void (*so) (long),
long (*go) (void))
*f = free_func;
}
-void CRYPTO_get_locked_mem_functions(void *(**m) (size_t),
- void (**f) (void *))
+void CRYPTO_get_secure_mem_functions(void *(**m)(size_t), void (**f)(void *))
{
if (m != NULL)
- *m = (malloc_locked_ex_func == default_malloc_locked_ex) ?
- malloc_locked_func : 0;
+ *m = (malloc_secure_ex_func == default_malloc_secure_ex) ?
+ malloc_secure_func : 0;
if (f != NULL)
- *f = free_locked_func;
+ *f=free_secure_func;
}
-void CRYPTO_get_locked_mem_ex_functions(void
- *(**m) (size_t, const char *, int),
- void (**f) (void *))
+void CRYPTO_get_secure_mem_ex_functions(void *(**m)(size_t,const char *,int),
+ void (**f)(void *))
{
if (m != NULL)
- *m = (malloc_locked_ex_func != default_malloc_locked_ex) ?
- malloc_locked_ex_func : 0;
+ *m = (malloc_secure_ex_func != default_malloc_secure_ex) ?
+ malloc_secure_ex_func : 0;
if (f != NULL)
- *f = free_locked_func;
+ *f=free_secure_func;
}
-void CRYPTO_get_mem_debug_functions(void (**m)
- (void *, int, const char *, int, int),
- void (**r) (void *, void *, int,
+void CRYPTO_get_mem_debug_functions(void (**m) (void *, size_t,
+ const char *, int, int),
+ void (**r) (void *, void *, size_t,
const char *, int, int),
void (**f) (void *, int),
void (**so) (long), long (**go) (void))
*go = get_debug_options_func;
}
-void *CRYPTO_malloc_locked(int num, const char *file, int line)
-{
- void *ret = NULL;
-
- if (num <= 0)
- return NULL;
-
- if (allow_customize)
- allow_customize = 0;
- if (malloc_debug_func != NULL) {
- if (allow_customize_debug)
- allow_customize_debug = 0;
- malloc_debug_func(NULL, num, file, line, 0);
- }
- ret = malloc_locked_ex_func(num, file, line);
-#ifdef LEVITTE_DEBUG_MEM
- fprintf(stderr, "LEVITTE_DEBUG_MEM: > 0x%p (%d)\n", ret, num);
-#endif
- 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)) {
- extern unsigned char cleanse_ctr;
- ((unsigned char *)ret)[0] = cleanse_ctr;
- }
-#endif
-
- return ret;
-}
-
-void CRYPTO_free_locked(void *str)
-{
- if (free_debug_func != NULL)
- free_debug_func(str, 0);
-#ifdef LEVITTE_DEBUG_MEM
- fprintf(stderr, "LEVITTE_DEBUG_MEM: < 0x%p\n", str);
-#endif
- free_locked_func(str);
- if (free_debug_func != NULL)
- free_debug_func(NULL, 1);
-}
-
-void *CRYPTO_malloc(int num, const char *file, int line)
+void *CRYPTO_malloc(size_t num, const char *file, int line)
{
void *ret = NULL;
malloc_debug_func(NULL, num, file, line, 0);
}
ret = malloc_ex_func(num, file, line);
-#ifdef LEVITTE_DEBUG_MEM
- fprintf(stderr, "LEVITTE_DEBUG_MEM: > 0x%p (%d)\n", ret, num);
-#endif
if (malloc_debug_func != NULL)
malloc_debug_func(ret, num, file, line, 1);
return ret;
}
-char *CRYPTO_strdup(const char *str, const char *file, int line)
+void *CRYPTO_zalloc(size_t num, const char *file, int line)
{
- char *ret = CRYPTO_malloc(strlen(str) + 1, file, line);
-
- if (ret == NULL)
- return NULL;
+ void *ret = CRYPTO_malloc(num, file, line);
- strcpy(ret, str);
+ if (ret != NULL)
+ memset(ret, 0, num);
return ret;
}
-void *CRYPTO_realloc(void *str, int num, const char *file, int line)
+void *CRYPTO_realloc(void *str, size_t num, const char *file, int line)
{
void *ret = NULL;
if (realloc_debug_func != NULL)
realloc_debug_func(str, NULL, num, file, line, 0);
ret = realloc_ex_func(str, num, file, line);
-#ifdef LEVITTE_DEBUG_MEM
- fprintf(stderr, "LEVITTE_DEBUG_MEM: | 0x%p -> 0x%p (%d)\n", str,
- ret, num);
-#endif
if (realloc_debug_func != NULL)
realloc_debug_func(str, ret, num, file, line, 1);
return ret;
}
-void *CRYPTO_realloc_clean(void *str, int old_len, int num, const char *file,
- int line)
+void *CRYPTO_clear_realloc(void *str, size_t old_len, size_t num,
+ const char *file, int line)
{
void *ret = NULL;
memcpy(ret, str, old_len);
OPENSSL_clear_free(str, old_len);
}
-#ifdef LEVITTE_DEBUG_MEM
- fprintf(stderr,
- "LEVITTE_DEBUG_MEM: | 0x%p -> 0x%p (%d)\n",
- str, ret, num);
-#endif
if (realloc_debug_func != NULL)
realloc_debug_func(str, ret, num, file, line, 1);
{
if (free_debug_func != NULL)
free_debug_func(str, 0);
-#ifdef LEVITTE_DEBUG_MEM
- fprintf(stderr, "LEVITTE_DEBUG_MEM: < 0x%p\n", str);
-#endif
free_func(str);
if (free_debug_func != NULL)
free_debug_func(NULL, 1);
CRYPTO_free(str);
}
-void *CRYPTO_remalloc(void *a, int num, const char *file, int line)
-{
- OPENSSL_free(a);
- a = OPENSSL_malloc(num);
- return (a);
-}
-
void CRYPTO_set_mem_debug_options(long bits)
{
if (set_debug_options_func != NULL)