Commit c241b035 authored by Manuel Pégourié-Gonnard's avatar Manuel Pégourié-Gonnard

Merge branch 'calloc' into development

* calloc:
  Remove a few redundant memset after calloc.
  Remove references to malloc in strings/names
  Update ChangeLog for s/malloc/calloc
  Adapt memory_buffer_alloc to calloc
  Adapt the platform layer from malloc to calloc
  Replace malloc with calloc
parents 065122cf 1b8de578
......@@ -64,6 +64,9 @@ API Changes
mbedtls_pk_parse_public_key() and mbedtls_dhm_parse_dhm() now expect the
length parameter to include the terminating null byte for PEM input.
* Signature of mpi_mul_mpi() changed to make the last argument unsigned
* calloc() is now used instead of malloc() everywhere. API of platform
layer and the memory_buffer_alloc module changed accordingly.
(Thanks to Mansour Moufid for helping with the replacement.)
* Change SSL_DISABLE_RENEGOTIATION config.h flag to SSL_RENEGOTIATION
(support for renegotiation now needs explicit enabling in config.h).
* net_connect() and net_bind() have a new 'proto' argument to choose
......
......@@ -78,17 +78,17 @@
*
* Enable the memory allocation layer.
*
* By default mbed TLS uses the system-provided malloc() and free().
* By default mbed TLS uses the system-provided calloc() and free().
* This allows different allocators (self-implemented or provided) to be
* provided to the platform abstraction layer.
*
* Enabling MBEDTLS_PLATFORM_MEMORY without the
* MBEDTLS_PLATFORM_{FREE,MALLOC}_MACROs will provide
* "mbedtls_platform_set_malloc_free()" allowing you to set an alternative malloc() and
* MBEDTLS_PLATFORM_{FREE,CALLOC}_MACROs will provide
* "mbedtls_platform_set_calloc_free()" allowing you to set an alternative calloc() and
* free() function pointer at runtime.
*
* Enabling MBEDTLS_PLATFORM_MEMORY and specifying
* MBEDTLS_PLATFORM_{MALLOC,FREE}_MACROs will allow you to specify the
* MBEDTLS_PLATFORM_{CALLOC,FREE}_MACROs will allow you to specify the
* alternate function at compile time.
*
* Requires: MBEDTLS_PLATFORM_C
......@@ -100,8 +100,8 @@
/**
* \def MBEDTLS_PLATFORM_NO_STD_FUNCTIONS
*
* Do not assign standard functions in the platform layer (e.g. malloc() to
* MBEDTLS_PLATFORM_STD_MALLOC and printf() to MBEDTLS_PLATFORM_STD_PRINTF)
* Do not assign standard functions in the platform layer (e.g. calloc() to
* MBEDTLS_PLATFORM_STD_CALLOC and printf() to MBEDTLS_PLATFORM_STD_PRINTF)
*
* This makes sure there are no linking errors on platforms that do not support
* these functions. You will HAVE to provide alternatives, either at runtime
......@@ -1788,7 +1788,7 @@
* \def MBEDTLS_MEMORY_BUFFER_ALLOC_C
*
* Enable the buffer allocator implementation that makes use of a (stack)
* based buffer to 'allocate' dynamic memory. (replaces malloc() and free()
* based buffer to 'allocate' dynamic memory. (replaces calloc() and free()
* calls)
*
* Module: library/memory_buffer_alloc.c
......@@ -1975,7 +1975,7 @@
* \def MBEDTLS_PLATFORM_C
*
* Enable the platform abstraction layer that allows you to re-assign
* functions like malloc(), free(), snprintf(), printf(), fprintf(), exit()
* functions like calloc(), free(), snprintf(), printf(), fprintf(), exit()
*
* Enabling MBEDTLS_PLATFORM_C enables to use of MBEDTLS_PLATFORM_XXX_ALT
* or MBEDTLS_PLATFORM_XXX_MACRO directives, allowing the functions mentioned
......@@ -2345,7 +2345,7 @@
/* Platform options */
//#define MBEDTLS_PLATFORM_STD_MEM_HDR <stdlib.h> /**< Header to include if MBEDTLS_PLATFORM_NO_STD_FUNCTIONS is defined. Don't define if no header is needed. */
//#define MBEDTLS_PLATFORM_STD_MALLOC malloc /**< Default allocator to use, can be undefined */
//#define MBEDTLS_PLATFORM_STD_CALLOC calloc /**< Default allocator to use, can be undefined */
//#define MBEDTLS_PLATFORM_STD_FREE free /**< Default free to use, can be undefined */
//#define MBEDTLS_PLATFORM_STD_EXIT exit /**< Default exit to use, can be undefined */
//#define MBEDTLS_PLATFORM_STD_FPRINTF fprintf /**< Default fprintf to use, can be undefined */
......@@ -2354,7 +2354,7 @@
/* To Use Function Macros MBEDTLS_PLATFORM_C must be enabled */
/* MBEDTLS_PLATFORM_XXX_MACRO and MBEDTLS_PLATFORM_XXX_ALT cannot both be defined */
//#define MBEDTLS_PLATFORM_MALLOC_MACRO malloc /**< Default allocator macro to use, can be undefined */
//#define MBEDTLS_PLATFORM_CALLOC_MACRO calloc /**< Default allocator macro to use, can be undefined */
//#define MBEDTLS_PLATFORM_FREE_MACRO free /**< Default free macro to use, can be undefined */
//#define MBEDTLS_PLATFORM_EXIT_MACRO exit /**< Default exit macro to use, can be undefined */
//#define MBEDTLS_PLATFORM_FPRINTF_MACRO fprintf /**< Default fprintf macro to use, can be undefined */
......
......@@ -58,10 +58,10 @@ extern "C" {
/**
* \brief Initialize use of stack-based memory allocator.
* The stack-based allocator does memory management inside the
* presented buffer and does not call malloc() and free().
* It sets the global mbedtls_malloc() and mbedtls_free() pointers
* presented buffer and does not call calloc() and free().
* It sets the global mbedtls_calloc() and mbedtls_free() pointers
* to its own functions.
* (Provided mbedtls_malloc() and mbedtls_free() are thread-safe if
* (Provided mbedtls_calloc() and mbedtls_free() are thread-safe if
* MBEDTLS_THREADING_C is defined)
*
* \note This code is not optimized and provides a straight-forward
......
......@@ -54,8 +54,8 @@ extern "C" {
#if !defined(MBEDTLS_PLATFORM_STD_FPRINTF)
#define MBEDTLS_PLATFORM_STD_FPRINTF fprintf /**< Default fprintf to use */
#endif
#if !defined(MBEDTLS_PLATFORM_STD_MALLOC)
#define MBEDTLS_PLATFORM_STD_MALLOC malloc /**< Default allocator to use */
#if !defined(MBEDTLS_PLATFORM_STD_CALLOC)
#define MBEDTLS_PLATFORM_STD_CALLOC calloc /**< Default allocator to use */
#endif
#if !defined(MBEDTLS_PLATFORM_STD_FREE)
#define MBEDTLS_PLATFORM_STD_FREE free /**< Default free to use */
......@@ -72,32 +72,32 @@ extern "C" {
/* \} name SECTION: Module settings */
/*
* The function pointers for malloc and free
* The function pointers for calloc and free
*/
#if defined(MBEDTLS_PLATFORM_MEMORY)
#if defined(MBEDTLS_PLATFORM_FREE_MACRO) && \
defined(MBEDTLS_PLATFORM_MALLOC_MACRO)
defined(MBEDTLS_PLATFORM_CALLOC_MACRO)
#define mbedtls_free MBEDTLS_PLATFORM_FREE_MACRO
#define mbedtls_malloc MBEDTLS_PLATFORM_MALLOC_MACRO
#define mbedtls_calloc MBEDTLS_PLATFORM_CALLOC_MACRO
#else
extern void * (*mbedtls_malloc)( size_t len );
extern void * (*mbedtls_calloc)( size_t n, size_t size );
extern void (*mbedtls_free)( void *ptr );
/**
* \brief Set your own memory implementation function pointers
*
* \param malloc_func the malloc function implementation
* \param calloc_func the calloc function implementation
* \param free_func the free function implementation
*
* \return 0 if successful
*/
int mbedtls_platform_set_malloc_free( void * (*malloc_func)( size_t ),
int mbedtls_platform_set_calloc_free( void * (*calloc_func)( size_t, size_t ),
void (*free_func)( void * ) );
#endif /* MBEDTLS_PLATFORM_FREE_MACRO && MBEDTLS_PLATFORM_MALLOC_MACRO */
#endif /* MBEDTLS_PLATFORM_FREE_MACRO && MBEDTLS_PLATFORM_CALLOC_MACRO */
#else /* !MBEDTLS_PLATFORM_MEMORY */
#define mbedtls_free free
#define mbedtls_malloc malloc
#endif /* MBEDTLS_PLATFORM_MEMORY && !MBEDTLS_PLATFORM_{FREE,MALLOC}_MACRO */
#define mbedtls_calloc calloc
#endif /* MBEDTLS_PLATFORM_MEMORY && !MBEDTLS_PLATFORM_{FREE,CALLOC}_MACRO */
/*
* The function pointers for fprintf
......
......@@ -40,7 +40,7 @@
#include "mbedtls/platform.h"
#else
#include <stdlib.h>
#define mbedtls_malloc malloc
#define mbedtls_calloc calloc
#define mbedtls_free free
#endif
......@@ -270,13 +270,11 @@ int mbedtls_asn1_get_sequence_of( unsigned char **p,
/* Allocate and assign next pointer */
if( *p < end )
{
cur->next = mbedtls_malloc( sizeof( mbedtls_asn1_sequence ) );
cur->next = mbedtls_calloc( 1, sizeof( mbedtls_asn1_sequence ) );
if( cur->next == NULL )
return( MBEDTLS_ERR_ASN1_MALLOC_FAILED );
memset( cur->next, 0, sizeof( mbedtls_asn1_sequence ) );
cur = cur->next;
}
}
......
......@@ -36,7 +36,7 @@
#include "mbedtls/platform.h"
#else
#include <stdlib.h>
#define mbedtls_malloc malloc
#define mbedtls_calloc calloc
#define mbedtls_free free
#endif
......@@ -313,13 +313,11 @@ mbedtls_asn1_named_data *mbedtls_asn1_store_named_data( mbedtls_asn1_named_data
{
// Add new entry if not present yet based on OID
//
if( ( cur = mbedtls_malloc( sizeof(mbedtls_asn1_named_data) ) ) == NULL )
if( ( cur = mbedtls_calloc( 1, sizeof(mbedtls_asn1_named_data) ) ) == NULL )
return( NULL );
memset( cur, 0, sizeof(mbedtls_asn1_named_data) );
cur->oid.len = oid_len;
cur->oid.p = mbedtls_malloc( oid_len );
cur->oid.p = mbedtls_calloc( 1, oid_len );
if( cur->oid.p == NULL )
{
mbedtls_free( cur );
......@@ -329,7 +327,7 @@ mbedtls_asn1_named_data *mbedtls_asn1_store_named_data( mbedtls_asn1_named_data
memcpy( cur->oid.p, oid, oid_len );
cur->val.len = val_len;
cur->val.p = mbedtls_malloc( val_len );
cur->val.p = mbedtls_calloc( 1, val_len );
if( cur->val.p == NULL )
{
mbedtls_free( cur->oid.p );
......@@ -348,7 +346,7 @@ mbedtls_asn1_named_data *mbedtls_asn1_store_named_data( mbedtls_asn1_named_data
cur->val.p = NULL;
cur->val.len = val_len;
cur->val.p = mbedtls_malloc( val_len );
cur->val.p = mbedtls_calloc( 1, val_len );
if( cur->val.p == NULL )
{
mbedtls_free( cur->oid.p );
......
......@@ -46,7 +46,7 @@
#include <stdio.h>
#include <stdlib.h>
#define mbedtls_printf printf
#define mbedtls_malloc malloc
#define mbedtls_calloc calloc
#define mbedtls_free free
#endif
......@@ -109,11 +109,9 @@ int mbedtls_mpi_grow( mbedtls_mpi *X, size_t nblimbs )
if( X->n < nblimbs )
{
if( ( p = mbedtls_malloc( nblimbs * ciL ) ) == NULL )
if( ( p = mbedtls_calloc( nblimbs, ciL ) ) == NULL )
return( MBEDTLS_ERR_MPI_MALLOC_FAILED );
memset( p, 0, nblimbs * ciL );
if( X->p != NULL )
{
memcpy( p, X->p, X->n * ciL );
......@@ -149,11 +147,9 @@ int mbedtls_mpi_shrink( mbedtls_mpi *X, size_t nblimbs )
if( i < nblimbs )
i = nblimbs;
if( ( p = mbedtls_malloc( i * ciL ) ) == NULL )
if( ( p = mbedtls_calloc( i, ciL ) ) == NULL )
return( MBEDTLS_ERR_MPI_MALLOC_FAILED );
memset( p, 0, i * ciL );
if( X->p != NULL )
{
memcpy( p, X->p, i * ciL );
......
......@@ -70,7 +70,7 @@
#include "mbedtls/platform.h"
#else
#include <stdlib.h>
#define mbedtls_malloc malloc
#define mbedtls_calloc calloc
#define mbedtls_free free
#endif
......@@ -78,7 +78,7 @@
/* shared by all GCM ciphers */
static void *gcm_ctx_alloc( void )
{
return mbedtls_malloc( sizeof( mbedtls_gcm_context ) );
return mbedtls_calloc( 1, sizeof( mbedtls_gcm_context ) );
}
static void gcm_ctx_free( void *ctx )
......@@ -92,7 +92,7 @@ static void gcm_ctx_free( void *ctx )
/* shared by all CCM ciphers */
static void *ccm_ctx_alloc( void )
{
return mbedtls_malloc( sizeof( mbedtls_ccm_context ) );
return mbedtls_calloc( 1, sizeof( mbedtls_ccm_context ) );
}
static void ccm_ctx_free( void *ctx )
......@@ -153,7 +153,7 @@ static int aes_setkey_enc_wrap( void *ctx, const unsigned char *key,
static void * aes_ctx_alloc( void )
{
mbedtls_aes_context *aes = mbedtls_malloc( sizeof( mbedtls_aes_context ) );
mbedtls_aes_context *aes = mbedtls_calloc( 1, sizeof( mbedtls_aes_context ) );
if( aes == NULL )
return( NULL );
......@@ -510,7 +510,7 @@ static int camellia_setkey_enc_wrap( void *ctx, const unsigned char *key,
static void * camellia_ctx_alloc( void )
{
mbedtls_camellia_context *ctx;
ctx = mbedtls_malloc( sizeof( mbedtls_camellia_context ) );
ctx = mbedtls_calloc( 1, sizeof( mbedtls_camellia_context ) );
if( ctx == NULL )
return( NULL );
......@@ -897,7 +897,7 @@ static int des3_set3key_enc_wrap( void *ctx, const unsigned char *key,
static void * des_ctx_alloc( void )
{
mbedtls_des_context *des = mbedtls_malloc( sizeof( mbedtls_des_context ) );
mbedtls_des_context *des = mbedtls_calloc( 1, sizeof( mbedtls_des_context ) );
if( des == NULL )
return( NULL );
......@@ -916,7 +916,7 @@ static void des_ctx_free( void *ctx )
static void * des3_ctx_alloc( void )
{
mbedtls_des3_context *des3;
des3 = mbedtls_malloc( sizeof( mbedtls_des3_context ) );
des3 = mbedtls_calloc( 1, sizeof( mbedtls_des3_context ) );
if( des3 == NULL )
return( NULL );
......@@ -1115,7 +1115,7 @@ static int blowfish_setkey_wrap( void *ctx, const unsigned char *key,
static void * blowfish_ctx_alloc( void )
{
mbedtls_blowfish_context *ctx;
ctx = mbedtls_malloc( sizeof( mbedtls_blowfish_context ) );
ctx = mbedtls_calloc( 1, sizeof( mbedtls_blowfish_context ) );
if( ctx == NULL )
return( NULL );
......@@ -1225,7 +1225,7 @@ static int arc4_setkey_wrap( void *ctx, const unsigned char *key,
static void * arc4_ctx_alloc( void )
{
mbedtls_arc4_context *ctx;
ctx = mbedtls_malloc( sizeof( mbedtls_arc4_context ) );
ctx = mbedtls_calloc( 1, sizeof( mbedtls_arc4_context ) );
if( ctx == NULL )
return( NULL );
......
......@@ -51,7 +51,7 @@
#include <stdlib.h>
#include <stdio.h>
#define mbedtls_printf printf
#define mbedtls_malloc malloc
#define mbedtls_calloc calloc
#define mbedtls_free free
#endif
......@@ -531,7 +531,7 @@ static int load_file( const char *path, unsigned char **buf, size_t *n )
*n = (size_t) size;
if( *n + 1 == 0 ||
( *buf = mbedtls_malloc( *n + 1 ) ) == NULL )
( *buf = mbedtls_calloc( 1, *n + 1 ) ) == NULL )
{
fclose( f );
return( MBEDTLS_ERR_DHM_MALLOC_FAILED );
......
......@@ -59,7 +59,7 @@
#include <stdlib.h>
#include <stdio.h>
#define mbedtls_printf printf
#define mbedtls_malloc malloc
#define mbedtls_calloc calloc
#define mbedtls_free free
#endif
......@@ -790,12 +790,10 @@ static int ecp_normalize_jac_many( const mbedtls_ecp_group *grp,
if( t_len < 2 )
return( ecp_normalize_jac( grp, *T ) );
if( ( c = mbedtls_malloc( t_len * sizeof( mbedtls_mpi ) ) ) == NULL )
if( ( c = mbedtls_calloc( t_len, sizeof( mbedtls_mpi ) ) ) == NULL )
return( MBEDTLS_ERR_ECP_MALLOC_FAILED );
mbedtls_mpi_init( &u ); mbedtls_mpi_init( &Zi ); mbedtls_mpi_init( &ZZi );
for( i = 0; i < t_len; i++ )
mbedtls_mpi_init( &c[i] );
/*
* c[i] = Z_0 * ... * Z_i
......@@ -1363,16 +1361,13 @@ static int ecp_mul_comb( mbedtls_ecp_group *grp, mbedtls_ecp_point *R,
if( T == NULL )
{
T = mbedtls_malloc( pre_len * sizeof( mbedtls_ecp_point ) );
T = mbedtls_calloc( pre_len, sizeof( mbedtls_ecp_point ) );
if( T == NULL )
{
ret = MBEDTLS_ERR_ECP_MALLOC_FAILED;
goto cleanup;
}
for( i = 0; i < pre_len; i++ )
mbedtls_ecp_point_init( &T[i] );
MBEDTLS_MPI_CHK( ecp_precompute_comb( grp, T, P, w, d ) );
if( p_eq_g )
......
......@@ -39,7 +39,7 @@
#include "mbedtls/platform.h"
#else
#include <stdlib.h>
#define mbedtls_malloc malloc
#define mbedtls_calloc calloc
#define mbedtls_free free
#endif
......@@ -216,7 +216,7 @@ int mbedtls_md_setup( mbedtls_md_context_t *ctx, const mbedtls_md_info_t *md_inf
if( hmac != 0 )
{
ctx->hmac_ctx = mbedtls_malloc( 2 * md_info->block_size );
ctx->hmac_ctx = mbedtls_calloc( 2, md_info->block_size );
if( ctx->hmac_ctx == NULL )
{
md_info->ctx_free_func( ctx->md_ctx );
......
......@@ -66,7 +66,7 @@
#include "mbedtls/platform.h"
#else
#include <stdlib.h>
#define mbedtls_malloc malloc
#define mbedtls_calloc calloc
#define mbedtls_free free
#endif
......@@ -106,7 +106,7 @@ static int md2_file_wrap( const char *path, unsigned char *output )
static void * md2_ctx_alloc( void )
{
return mbedtls_malloc( sizeof( mbedtls_md2_context ) );
return mbedtls_calloc( 1, sizeof( mbedtls_md2_context ) );
}
static void md2_ctx_free( void *ctx )
......@@ -170,7 +170,7 @@ static int md4_file_wrap( const char *path, unsigned char *output )
static void *md4_ctx_alloc( void )
{
return mbedtls_malloc( sizeof( mbedtls_md4_context ) );
return mbedtls_calloc( 1, sizeof( mbedtls_md4_context ) );
}
static void md4_ctx_free( void *ctx )
......@@ -232,7 +232,7 @@ static int md5_file_wrap( const char *path, unsigned char *output )
static void * md5_ctx_alloc( void )
{
return mbedtls_malloc( sizeof( mbedtls_md5_context ) );
return mbedtls_calloc( 1, sizeof( mbedtls_md5_context ) );
}
static void md5_ctx_free( void *ctx )
......@@ -295,7 +295,7 @@ static int ripemd160_file_wrap( const char *path, unsigned char *output )
static void * ripemd160_ctx_alloc( void )
{
mbedtls_ripemd160_context *ctx;
ctx = mbedtls_malloc( sizeof( mbedtls_ripemd160_context ) );
ctx = mbedtls_calloc( 1, sizeof( mbedtls_ripemd160_context ) );
if( ctx == NULL )
return( NULL );
......@@ -365,7 +365,7 @@ static int sha1_file_wrap( const char *path, unsigned char *output )
static void * sha1_ctx_alloc( void )
{
mbedtls_sha1_context *ctx;
ctx = mbedtls_malloc( sizeof( mbedtls_sha1_context ) );
ctx = mbedtls_calloc( 1, sizeof( mbedtls_sha1_context ) );
if( ctx == NULL )
return( NULL );
......@@ -443,7 +443,7 @@ static int sha224_file_wrap( const char *path, unsigned char *output )
static void * sha224_ctx_alloc( void )
{
return mbedtls_malloc( sizeof( mbedtls_sha256_context ) );
return mbedtls_calloc( 1, sizeof( mbedtls_sha256_context ) );
}
static void sha224_ctx_free( void *ctx )
......@@ -508,7 +508,7 @@ static int sha256_file_wrap( const char *path, unsigned char *output )
static void * sha256_ctx_alloc( void )
{
mbedtls_sha256_context *ctx;
ctx = mbedtls_malloc( sizeof( mbedtls_sha256_context ) );
ctx = mbedtls_calloc( 1, sizeof( mbedtls_sha256_context ) );
if( ctx == NULL )
return( NULL );
......@@ -583,7 +583,7 @@ static int sha384_file_wrap( const char *path, unsigned char *output )
static void * sha384_ctx_alloc( void )
{
return mbedtls_malloc( sizeof( mbedtls_sha512_context ) );
return mbedtls_calloc( 1, sizeof( mbedtls_sha512_context ) );
}
static void sha384_ctx_free( void *ctx )
......@@ -648,7 +648,7 @@ static int sha512_file_wrap( const char *path, unsigned char *output )
static void * sha512_ctx_alloc( void )
{
mbedtls_sha512_context *ctx;
ctx = mbedtls_malloc( sizeof( mbedtls_sha512_context ) );
ctx = mbedtls_calloc( 1, sizeof( mbedtls_sha512_context ) );
if( ctx == NULL )
return( NULL );
......
......@@ -77,7 +77,7 @@ typedef struct
memory_header *first_free;
int verify;
#if defined(MBEDTLS_MEMORY_DEBUG)
size_t malloc_count;
size_t alloc_count;
size_t free_count;
size_t total_used;
size_t maximum_used;
......@@ -230,10 +230,12 @@ static int verify_chain()
return( 0 );
}
static void *buffer_alloc_malloc( size_t len )
static void *buffer_alloc_calloc( size_t n, size_t size )
{
memory_header *new, *cur = heap.first_free;
unsigned char *p;
void *ret;
size_t original_len, len;
#if defined(MBEDTLS_MEMORY_BACKTRACE)
void *trace_buffer[MAX_BT];
size_t trace_cnt;
......@@ -242,6 +244,11 @@ static void *buffer_alloc_malloc( size_t len )
if( heap.buf == NULL || heap.first == NULL )
return( NULL );
original_len = len = n * size;
if( n != 0 && len / n != size )
return( NULL );
if( len % MBEDTLS_MEMORY_ALIGN_MULTIPLE )
{
len -= len % MBEDTLS_MEMORY_ALIGN_MULTIPLE;
......@@ -271,7 +278,7 @@ static void *buffer_alloc_malloc( size_t len )
}
#if defined(MBEDTLS_MEMORY_DEBUG)
heap.malloc_count++;
heap.calloc_count++;
#endif
// Found location, split block if > memory_header + 4 room left
......@@ -308,7 +315,10 @@ static void *buffer_alloc_malloc( size_t len )
if( ( heap.verify & MBEDTLS_MEMORY_VERIFY_ALLOC ) && verify_chain() != 0 )
mbedtls_exit( 1 );
return( ( (unsigned char *) cur ) + sizeof(memory_header) );
ret = (unsigned char *) cur + sizeof( memory_header );
memset( ret, 0, original_len );
return( ret );
}
p = ( (unsigned char *) cur ) + sizeof(memory_header) + len;
......@@ -363,7 +373,10 @@ static void *buffer_alloc_malloc( size_t len )
if( ( heap.verify & MBEDTLS_MEMORY_VERIFY_ALLOC ) && verify_chain() != 0 )
mbedtls_exit( 1 );
return( ( (unsigned char *) cur ) + sizeof(memory_header) );
ret = (unsigned char *) cur + sizeof( memory_header );
memset( ret, 0, original_len );
return( ret );
}
static void buffer_alloc_free( void *ptr )
......@@ -503,12 +516,12 @@ void mbedtls_memory_buffer_alloc_status()
{
mbedtls_fprintf( stderr,
"Current use: %zu blocks / %zu bytes, max: %zu blocks / "
"%zu bytes (total %zu bytes), malloc / free: %zu / %zu\n",
"%zu bytes (total %zu bytes), alloc / free: %zu / %zu\n",
heap.header_count, heap.total_used,
heap.maximum_header_count, heap.maximum_used,
heap.maximum_header_count * sizeof( memory_header )
+ heap.maximum_used,
heap.malloc_count, heap.free_count );
heap.alloc_count, heap.free_count );
if( heap.first->next == NULL )
mbedtls_fprintf( stderr, "All memory de-allocated in stack buffer\n" );
......@@ -539,12 +552,12 @@ void mbedtls_memory_buffer_alloc_cur_get( size_t *cur_used, size_t *cur_blocks )
#endif /* MBEDTLS_MEMORY_DEBUG */
#if defined(MBEDTLS_THREADING_C)
static void *buffer_alloc_malloc_mutexed( size_t len )
static void *buffer_alloc_calloc_mutexed( size_t n, size_t size )
{
void *buf;
if( mbedtls_mutex_lock( &heap.mutex ) != 0 )
return( NULL );
buf = buffer_alloc_malloc( len );
buf = buffer_alloc_calloc( n, size );
if( mbedtls_mutex_unlock( &heap.mutex ) )
return( NULL );
return( buf );
......@@ -568,10 +581,10 @@ void mbedtls_memory_buffer_alloc_init( unsigned char *buf, size_t len )
#if defined(MBEDTLS_THREADING_C)
mbedtls_mutex_init( &heap.mutex );
mbedtls_platform_set_malloc_free( buffer_alloc_malloc_mutexed,
mbedtls_platform_set_calloc_free( buffer_alloc_calloc_mutexed,
buffer_alloc_free_mutexed );
#else
mbedtls_platform_set_malloc_free( buffer_alloc_malloc, buffer_alloc_free );
mbedtls_platform_set_calloc_free( buffer_alloc_calloc, buffer_alloc_free );
#endif
if( (size_t) buf % MBEDTLS_MEMORY_ALIGN_MULTIPLE )
......@@ -649,9 +662,9 @@ int mbedtls_memory_buffer_alloc_self_test( int verbose )
mbedtls_memory_buffer_alloc_init( buf, sizeof( buf ) );
p = mbedtls_malloc( 1 );
q = mbedtls_malloc( 128 );
r = mbedtls_malloc( 16 );
p = mbedtls_calloc( 1, 1 );
q = mbedtls_calloc( 1, 128 );
r = mbedtls_calloc( 1, 16 );
TEST_ASSERT( check_pointer( p ) == 0 &&
check_pointer( q ) == 0 &&
......@@ -678,9 +691,9 @@ int mbedtls_memory_buffer_alloc_self_test( int verbose )
TEST_ASSERT( heap.buf + heap.len == end );
p = mbedtls_malloc( 1 );
q = mbedtls_malloc( 128 );
r = mbedtls_malloc( 16 );
p = mbedtls_calloc( 1, 1 );
q = mbedtls_calloc( 1, 128 );
r = mbedtls_calloc( 1, 16 );
TEST_ASSERT( check_pointer( p ) == 0 &&
check_pointer( q ) == 0 &&
......@@ -702,22 +715,22 @@ int mbedtls_memory_buffer_alloc_self_test( int verbose )
mbedtls_memory_buffer_alloc_init( buf, sizeof( buf ) );
p = mbedtls_malloc( sizeof( buf ) - sizeof( memory_header ) );
p = mbedtls_calloc( 1, sizeof( buf ) - sizeof( memory_header ) );
TEST_ASSERT( check_pointer( p ) == 0 );
TEST_ASSERT( mbedtls_malloc( 1 ) == NULL );
TEST_ASSERT( mbedtls_calloc( 1, 1 ) == NULL );
mbedtls_free( p );
p = mbedtls_malloc( sizeof( buf ) - 2 * sizeof( memory_header ) - 16 );
q = mbedtls_malloc( 16 );
p = mbedtls_calloc( 1, sizeof( buf ) - 2 * sizeof( memory_header ) - 16 );
q = mbedtls_calloc( 1, 16 );
TEST_ASSERT( check_pointer( p ) == 0 && check_pointer( q ) == 0 );
TEST_ASSERT( mbedtls_malloc( 1 ) == NULL );
TEST_ASSERT( mbedtls_calloc( 1, 1 ) == NULL );
mbedtls_free( q );
TEST_ASSERT( mbedtls_malloc( 17 ) == NULL );
TEST_ASSERT( mbedtls_calloc( 1, 17 ) == NULL );
mbedtls_free( p );
......
......@@ -41,7 +41,7 @@
#include "mbedtls/platform.h"
#else
#include <stdlib.h>
#define mbedtls_malloc malloc
#define mbedtls_calloc calloc
#define mbedtls_free free
#endif
......@@ -321,7 +321,7 @@ int mbedtls_pem_read_buffer( mbedtls_pem_context *ctx, const char *header, const
if( ret == MBEDTLS_ERR_BASE64_INVALID_CHARACTER )
return( MBEDTLS_ERR_PEM_INVALID_DATA + ret );
if( ( buf = mbedtls_malloc( len ) ) == NULL )
if( ( buf = mbedtls_calloc( 1, len ) ) == NULL )
return( MBEDTLS_ERR_PEM_MALLOC_FAILED );
if( ( ret = mbedtls_base64_decode( buf, &len, s1, s2 - s1 ) ) != 0 )
......@@ -407,7 +407,7 @@ int mbedtls_pem_write_buffer( const char *header, const char *footer,
return( MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL );
}
if( ( encode_buf = mbedtls_malloc( use_len ) ) == NULL )
if( ( encode_buf = mbedtls_calloc( 1, use_len ) ) == NULL )
return( MBEDTLS_ERR_PEM_MALLOC_FAILED );
if( ( ret = mbedtls_base64_encode( encode_buf, &use_len, der_data,
......
......@@ -46,7 +46,7 @@
#include "mbedtls/platform.h"
#else
#include <stdlib.h>
#define mbedtls_malloc malloc
#define mbedtls_calloc calloc
#define mbedtls_free free
#endif
......@@ -134,7 +134,7 @@ static int rsa_check_pair_wrap( const void *pub, const void *prv )
static void *rsa_alloc_wrap( void )
{
void *ctx = mbedtls_malloc( sizeof( mbedtls_rsa_context ) );
void *ctx = mbedtls_calloc( 1, sizeof( mbedtls_rsa_context ) );
if( ctx != NULL )
mbedtls_rsa_init( (mbedtls_rsa_context *) ctx, 0, 0 );
......@@ -250,7 +250,7 @@ static int eckey_check_pair( const void *pub, const void *prv )
static void *eckey_alloc_wrap( void )
{
void *ctx = mbedtls_malloc( sizeof( mbedtls_ecp_keypair ) );
void *ctx = mbedtls_calloc( 1, sizeof( mbedtls_ecp_keypair ) );
if( ctx != NULL )
mbedtls_ecp_keypair_init( ctx );
......@@ -349,7 +349,7 @@ static int ecdsa_sign_wrap( void *ctx, mbedtls_md_type_t md_alg,
static void *ecdsa_alloc_wrap( void )
{
void *ctx = mbedtls_malloc( sizeof( mbedtls_ecdsa_context ) );
void *ctx = mbedtls_calloc( 1, sizeof( mbedtls_ecdsa_context ) );
if( ctx != NULL )
mbedtls_ecdsa_init( (mbedtls_ecdsa_context *) ctx );
......@@ -458,7 +458,7 @@ static int rsa_alt_check_pair( const void *pub, const void *prv )
static void *rsa_alt_alloc_wrap( void )
{
void *ctx = mbedtls_malloc( sizeof( mbedtls_rsa_alt_context ) );
void *ctx = mbedtls_calloc( 1, sizeof( mbedtls_rsa_alt_context ) );
if( ctx != NULL )
memset( ctx, 0, sizeof( mbedtls_rsa_alt_context ) );
......
......@@ -36,7 +36,7 @@
#include "mbedtls/platform.h"
#else
#include <stdlib.h>
#define mbedtls_malloc malloc
#define mbedtls_calloc calloc
#define mbedtls_free free
#endif
......@@ -64,7 +64,7 @@ int mbedtls_pkcs11_x509_cert_bind( mbedtls_x509_crt *cert, pkcs11h_certificate_t
goto cleanup;
}
cert_blob = mbedtls_malloc( cert_blob_size );