/* may be changed as long as 'allow_customize_debug' is set */
/* XXX use correct function pointer types */
-#ifdef CRYPTO_MDEBUG
+#if defined(CRYPTO_MDEBUG) && !defined(OPENSSL_FIPS)
/* use default functions from mem_dbg.c */
static void (*malloc_debug_func)(void *,int,const char *,int,int)
= CRYPTO_dbg_malloc;
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 run-time */
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
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 *))
void *ret = NULL;
extern unsigned char cleanse_ctr;
+ if (num <= 0) return NULL;
+
allow_customize = 0;
if (malloc_debug_func != NULL)
{
void *ret = NULL;
extern unsigned char cleanse_ctr;
+ if (num <= 0) return NULL;
+
allow_customize = 0;
if (malloc_debug_func != NULL)
{
if (str == NULL)
return CRYPTO_malloc(num, file, line);
+
+ if (num <= 0) return NULL;
+
if (realloc_debug_func != NULL)
realloc_debug_func(str, NULL, num, file, line, 0);
ret = realloc_ex_func(str,num,file,line);
if (str == NULL)
return CRYPTO_malloc(num, file, line);
+
+ if (num <= 0) return NULL;
+
if (realloc_debug_func != NULL)
realloc_debug_func(str, NULL, num, file, line, 0);
ret=malloc_ex_func(num,file,line);
if(ret)
+ {
memcpy(ret,str,old_len);
- OPENSSL_cleanse(str,old_len);
- free_func(str);
+ OPENSSL_cleanse(str,old_len);
+ free_func(str);
+ }
#ifdef LEVITTE_DEBUG_MEM
- fprintf(stderr, "LEVITTE_DEBUG_MEM: | 0x%p -> 0x%p (%d)\n", str, ret, num);
+ 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 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;
+ }