diff --git a/library/memory_buffer_alloc.c b/library/memory_buffer_alloc.c index 6e5a8ce6f..37788c8f5 100644 --- a/library/memory_buffer_alloc.c +++ b/library/memory_buffer_alloc.c @@ -542,17 +542,22 @@ void mbedtls_memory_buffer_alloc_cur_get( size_t *cur_used, size_t *cur_blocks ) static void *buffer_alloc_malloc_mutexed( size_t len ) { void *buf; - mbedtls_mutex_lock( &heap.mutex ); + if( mbedtls_mutex_lock( &heap.mutex ) != 0 ) + return( NULL ); buf = buffer_alloc_malloc( len ); - mbedtls_mutex_unlock( &heap.mutex ); + if( mbedtls_mutex_unlock( &heap.mutex ) ) + return( NULL ); return( buf ); } static void buffer_alloc_free_mutexed( void *ptr ) { - mbedtls_mutex_lock( &heap.mutex ); + /* We have to good option here, but corrupting the heap seems + * worse than loosing memory. */ + if( mbedtls_mutex_lock( &heap.mutex ) ) + return; buffer_alloc_free( ptr ); - mbedtls_mutex_unlock( &heap.mutex ); + (void) mbedtls_mutex_unlock( &heap.mutex ); } #endif /* MBEDTLS_THREADING_C */ diff --git a/library/rsa.c b/library/rsa.c index 1d6fd4a7d..6aee10970 100644 --- a/library/rsa.c +++ b/library/rsa.c @@ -283,7 +283,8 @@ int mbedtls_rsa_public( mbedtls_rsa_context *ctx, } #if defined(MBEDTLS_THREADING_C) - mbedtls_mutex_lock( &ctx->mutex ); + if( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) + return( ret ); #endif olen = ctx->len; @@ -292,7 +293,8 @@ int mbedtls_rsa_public( mbedtls_rsa_context *ctx, cleanup: #if defined(MBEDTLS_THREADING_C) - mbedtls_mutex_unlock( &ctx->mutex ); + if( ( ret = mbedtls_mutex_unlock( &ctx->mutex ) ) != 0 ) + return( ret ); #endif mbedtls_mpi_free( &T ); @@ -315,7 +317,8 @@ static int rsa_prepare_blinding( mbedtls_rsa_context *ctx, mbedtls_mpi *Vi, mbed int ret, count = 0; #if defined(MBEDTLS_THREADING_C) - mbedtls_mutex_lock( &ctx->mutex ); + if( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) + return( ret ); #endif if( ctx->Vf.p != NULL ) @@ -351,7 +354,8 @@ done: cleanup: #if defined(MBEDTLS_THREADING_C) - mbedtls_mutex_unlock( &ctx->mutex ); + if( ( ret = mbedtls_mutex_unlock( &ctx->mutex ) ) != 0 ) + return( ret ); #endif return( ret ); @@ -408,7 +412,8 @@ int mbedtls_rsa_private( mbedtls_rsa_context *ctx, } #if defined(MBEDTLS_THREADING_C) - mbedtls_mutex_lock( &ctx->mutex ); + if( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) + return( ret ); #endif #if defined(MBEDTLS_RSA_NO_CRT) @@ -452,7 +457,8 @@ int mbedtls_rsa_private( mbedtls_rsa_context *ctx, cleanup: #if defined(MBEDTLS_THREADING_C) - mbedtls_mutex_unlock( &ctx->mutex ); + if( ( ret = mbedtls_mutex_unlock( &ctx->mutex ) ) != 0 ) + return( ret ); mbedtls_mpi_free( &Vi_copy ); mbedtls_mpi_free( &Vf_copy ); #endif mbedtls_mpi_free( &T ); mbedtls_mpi_free( &T1 ); mbedtls_mpi_free( &T2 );