summaryrefslogtreecommitdiffstats
path: root/common/dlmalloc.c
diff options
context:
space:
mode:
authorSimon Goldschmidt <simon.k.r.goldschmidt@gmail.com>2019-10-25 21:23:35 +0200
committerTom Rini <trini@konsulko.com>2019-11-07 18:01:13 -0500
commitbb71a2d9dcd9c53aa4d4b8e4d26c24d9b59b74c3 (patch)
tree7f289d63b28dca3ffa38463c850f4b00738ada29 /common/dlmalloc.c
parentd024e992b3f88745ca80ce81055974c9bf2134d4 (diff)
downloadu-boot-bb71a2d9dcd9c53aa4d4b8e4d26c24d9b59b74c3.tar.gz
u-boot-bb71a2d9dcd9c53aa4d4b8e4d26c24d9b59b74c3.tar.xz
u-boot-bb71a2d9dcd9c53aa4d4b8e4d26c24d9b59b74c3.zip
dlmalloc: calloc: fix zeroing early allocations
When full malloc is enabled and SYS_MALLOC_F is also enabled, the simple pre-reloc heap is used before relocation. In this case, calloc() uses the MALLOC_ZERO macro to zero out the allocated memory. However, since this macro is specially crafted for the dlmalloc implementation, it does not always work for simple malloc. For example, when allocating 16 bytes via simple malloc, only the first 12 bytes get zeroed out. The last 4 bytes will remain untouched. This is a problem for DM drivers that are allocated before relocation: memory allocated via 'platdata_auto_alloc_size' might not be set to zero, resulting in bogus behaviour. To fix this, use 'memset' instead of 'MALLOC_ZERO' to zero out memory that compes from simple malloc. Signed-off-by: Simon Goldschmidt <simon.k.r.goldschmidt@gmail.com> Reviewed-by: Tom Rini <trini@konsulko.com>
Diffstat (limited to 'common/dlmalloc.c')
-rw-r--r--common/dlmalloc.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/common/dlmalloc.c b/common/dlmalloc.c
index 6f12a18d54..dade68faf7 100644
--- a/common/dlmalloc.c
+++ b/common/dlmalloc.c
@@ -2086,7 +2086,7 @@ Void_t* cALLOc(n, elem_size) size_t n; size_t elem_size;
{
#if CONFIG_VAL(SYS_MALLOC_F_LEN)
if (!(gd->flags & GD_FLG_FULL_MALLOC_INIT)) {
- MALLOC_ZERO(mem, sz);
+ memset(mem, 0, sz);
return mem;
}
#endif