From 952970d6cbafe85c61027bf35a7006952635b8be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gu=C3=B0ni=20M=C3=A1r=20Gilbert?= Date: Fri, 5 Mar 2021 18:35:28 +0000 Subject: [PATCH] lib: libc: minimal: add check on returned value MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fix #32938 [Coverity CID :219508] "Unchecked return value in lib/libc/minimal/source/stdlib/malloc.c" The Coverity complains about sys_mutex_lock() which returns 0 if locked. I added also the same check on returned value for sys_mutex_unlock() which returns 0 if unlocked. Signed-off-by: Guðni Már Gilbert --- lib/libc/minimal/source/stdlib/malloc.c | 26 +++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/lib/libc/minimal/source/stdlib/malloc.c b/lib/libc/minimal/source/stdlib/malloc.c index 7e4ef61d765..201ea6f7bf0 100644 --- a/lib/libc/minimal/source/stdlib/malloc.c +++ b/lib/libc/minimal/source/stdlib/malloc.c @@ -51,7 +51,12 @@ void *malloc(size_t size) errno = ENOMEM; } - sys_mutex_unlock(&z_malloc_heap_mutex); + int unlock_ret = sys_mutex_unlock(&z_malloc_heap_mutex); + + CHECKIF(unlock_ret != 0) { + return NULL; + } + return ret; } @@ -74,22 +79,31 @@ void *realloc(void *ptr, size_t requested_size) } void *ret = sys_heap_aligned_realloc(&z_malloc_heap, ptr, - __alignof__(z_max_align_t), - requested_size); + __alignof__(z_max_align_t), + requested_size); if (ret == NULL && requested_size != 0) { errno = ENOMEM; } - sys_mutex_unlock(&z_malloc_heap_mutex); + int unlock_ret = sys_mutex_unlock(&z_malloc_heap_mutex); + + CHECKIF(unlock_ret != 0) { + return NULL; + } return ret; } void free(void *ptr) { - sys_mutex_lock(&z_malloc_heap_mutex, K_FOREVER); + int lock_ret = sys_mutex_lock(&z_malloc_heap_mutex, K_FOREVER); + + CHECKIF(lock_ret != 0) { + return; + } + sys_heap_free(&z_malloc_heap, ptr); - sys_mutex_unlock(&z_malloc_heap_mutex); + (void) sys_mutex_unlock(&z_malloc_heap_mutex); } SYS_INIT(malloc_prepare, APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT);