malloc: Fix memalign not honoring alignment prior to full malloc init
authorAndreas Dannenberg <dannenberg@ti.com>
Wed, 27 Mar 2019 18:17:26 +0000 (13:17 -0500)
committerTom Rini <trini@konsulko.com>
Tue, 23 Apr 2019 21:57:27 +0000 (17:57 -0400)
When using memalign() in a scenario where U-Boot is configured for full
malloc support with simple malloc not explicitly enabled and before the
full malloc support is initialized, a memory block is being allocated
and returned without the alignment parameter getting honored.

Fix this issue by replacing the existing memalign pre-full malloc init
logic with a call to memalign_simple() this way ensuring proper alignment
of the returned memory block.

Fixes: ee038c58d519 ("malloc: Use malloc simple before malloc is fully initialized in memalign()")
Signed-off-by: Andreas Dannenberg <dannenberg@ti.com>
Reviewed-by: Lokesh Vutla <lokeshvutla@ti.com>
common/dlmalloc.c
include/malloc.h

index edaad299bbb552ad8b8710584268e8657f8cd0e7..6f12a18d549b2372e3b33b2383bf58ac63c16b1a 100644 (file)
@@ -1893,8 +1893,7 @@ Void_t* mEMALIGn(alignment, bytes) size_t alignment; size_t bytes;
 
 #if CONFIG_VAL(SYS_MALLOC_F_LEN)
        if (!(gd->flags & GD_FLG_FULL_MALLOC_INIT)) {
-               nb = roundup(bytes, alignment);
-               return malloc_simple(nb);
+               return memalign_simple(alignment, bytes);
        }
 #endif
 
index b714fedf4572589b2350eeb3e1508a4420a2f16b..5efa6920b2a17ee83b45f18f4a30004426a72ed0 100644 (file)
@@ -878,7 +878,6 @@ extern Void_t*     sbrk();
 #define memalign memalign_simple
 static inline void free(void *ptr) {}
 void *calloc(size_t nmemb, size_t size);
-void *memalign_simple(size_t alignment, size_t bytes);
 void *realloc_simple(void *ptr, size_t size);
 void malloc_simple_info(void);
 #else
@@ -914,6 +913,7 @@ int initf_malloc(void);
 
 /* Simple versions which can be used when space is tight */
 void *malloc_simple(size_t size);
+void *memalign_simple(size_t alignment, size_t bytes);
 
 #pragma GCC visibility push(hidden)
 # if __STD_C