dlmalloc: calloc: fix zeroing early allocations
authorSimon Goldschmidt <simon.k.r.goldschmidt@gmail.com>
Fri, 25 Oct 2019 19:23:35 +0000 (21:23 +0200)
committerTom Rini <trini@konsulko.com>
Thu, 7 Nov 2019 23:01:13 +0000 (18:01 -0500)
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>
common/dlmalloc.c

index 6f12a18d549b2372e3b33b2383bf58ac63c16b1a..dade68faf749867dd9f4d3c2fc55383cec625ab5 100644 (file)
@@ -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