diff options
author | Andreas Dannenberg <dannenberg@ti.com> | 2019-03-27 13:17:26 -0500 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2019-04-23 17:57:27 -0400 |
commit | 4c6be01c2719e78cd7ff257dd65a666623566863 (patch) | |
tree | cd1c39373bddbaa2ffed7ef0929e080fec02e744 | |
parent | 443b3ce5cf00995a12e0dcaab6d4963daefe511e (diff) | |
download | u-boot-4c6be01c2719e78cd7ff257dd65a666623566863.zip u-boot-4c6be01c2719e78cd7ff257dd65a666623566863.tar.gz u-boot-4c6be01c2719e78cd7ff257dd65a666623566863.tar.bz2 |
malloc: Fix memalign not honoring alignment prior to full malloc init
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>
-rw-r--r-- | common/dlmalloc.c | 3 | ||||
-rw-r--r-- | include/malloc.h | 2 |
2 files changed, 2 insertions, 3 deletions
diff --git a/common/dlmalloc.c b/common/dlmalloc.c index edaad29..6f12a18 100644 --- a/common/dlmalloc.c +++ b/common/dlmalloc.c @@ -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 diff --git a/include/malloc.h b/include/malloc.h index b714fed..5efa692 100644 --- a/include/malloc.h +++ b/include/malloc.h @@ -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 |