Always check return status of mutex_(un)lock()
diff --git a/library/memory_buffer_alloc.c b/library/memory_buffer_alloc.c
index 6e5a8ce..37788c8 100644
--- a/library/memory_buffer_alloc.c
+++ b/library/memory_buffer_alloc.c
@@ -542,17 +542,22 @@
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 */