Documented memory build options. Added logging for normal wolf malloc/free opterations when using `WOLFSSL_DEBUG_MEMORY` and `WOLFSSL_DEBUG_MEMORY_PRINT` (previously only worked with `WOLFSSL_STATIC_MEMORY` and `WOLFSSL_TRACK_MEMORY`). Changed `WOLFSSL_MALLOC_CHECK` option to use `WOLFSSL_MSG`.

pull/1727/head
David Garske 2018-07-31 09:03:40 -07:00
parent 2b3f94944d
commit 0e1588f4ad
1 changed files with 42 additions and 8 deletions

View File

@ -34,16 +34,32 @@
#define WOLFSSL_MALLOC_CHECK
#endif
/*
Possible memory options:
* NO_WOLFSSL_MEMORY: Disables wolf memory callback support. When not defined settings.h defines USE_WOLFSSL_MEMORY.
* WOLFSSL_STATIC_MEMORY: Turns on the use of static memory buffers and functions.
This allows for using static memory instead of dynamic.
* WOLFSSL_STATIC_ALIGN: Define defaults to 16 to indicate static memory alignment.
* HAVE_IO_POOL: Enables use of static thread safe memory pool for input/output buffers.
* XMALLOC_OVERRIDE: Allows override of the XMALLOC, XFREE and XREALLOC macros.
* XMALLOC_USER: Allows custom XMALLOC, XFREE and XREALLOC functions to be defined.
* WOLFSSL_NO_MALLOC: Disables the fall-back case to use STDIO malloc/free when no callbacks are set.
* WOLFSSL_TRACK_MEMORY: Enables memory tracking for total stats and list of allocated memory.
* WOLFSSL_DEBUG_MEMORY: Enables extra function and line number args for memory callbacks.
* WOLFSSL_DEBUG_MEMORY_PRINT: Enables printing of each malloc/free.
* WOLFSSL_MALLOC_CHECK: Reports malloc or alignment failure using WOLFSSL_STATIC_ALIGN
* WOLFSSL_FORCE_MALLOC_FAIL_TEST: Used for internal testing to induce random malloc failures.
* WOLFSSL_HEAP_TEST: Used for internal testing of heap hint
*/
#ifdef USE_WOLFSSL_MEMORY
#include <wolfssl/wolfcrypt/memory.h>
#include <wolfssl/wolfcrypt/error-crypt.h>
#include <wolfssl/wolfcrypt/logging.h>
#if defined(WOLFSSL_MALLOC_CHECK) || defined(WOLFSSL_TRACK_MEMORY_FULL)
#include <stdio.h>
#endif
#ifdef WOLFSSL_FORCE_MALLOC_FAIL_TEST
static int gMemFailCountSeed;
static int gMemFailCount;
@ -130,10 +146,19 @@ void* wolfSSL_Malloc(size_t size)
#endif
}
#ifdef WOLFSSL_MALLOC_CHECK
if (res == NULL)
puts("wolfSSL_malloc failed");
#endif
#ifdef WOLFSSL_DEBUG_MEMORY
#ifdef WOLFSSL_DEBUG_MEMORY_PRINT
printf("Alloc: %p -> %u at %s:%d\n", res, (word32)size, func, line);
#else
(void)func;
(void)line;
#endif
#endif
#ifdef WOLFSSL_MALLOC_CHECK
if (res == NULL)
WOLFSSL_MSG("wolfSSL_malloc failed");
#endif
#ifdef WOLFSSL_FORCE_MALLOC_FAIL_TEST
if (res && --gMemFailCount == 0) {
@ -162,6 +187,15 @@ void wolfSSL_Free(void *ptr, const char* func, unsigned int line)
void wolfSSL_Free(void *ptr)
#endif
{
#ifdef WOLFSSL_DEBUG_MEMORY
#ifdef WOLFSSL_DEBUG_MEMORY_PRINT
printf("Free: %p at %s:%d\n", ptr, func, line);
#else
(void)func;
(void)line;
#endif
#endif
if (free_function) {
#ifdef WOLFSSL_DEBUG_MEMORY
free_function(ptr, func, line);