[U-Boot] [PATCH v2] malloc: Fix issue with calloc memory possibly being non-zero
Wolfgang Denk
wd at denx.de
Wed Nov 17 22:07:05 CET 2010
Dear Kumar Gala,
In message <1289868103-7702-1-git-send-email-galak at kernel.crashing.org> you wrote:
> Since we set #define MORECORE_CLEARS 1, the code assumes 'sbrk' always
> returns zero'd out memory. However since its possible that free()
> returns memory back to sbrk() via malloc_trim we could possible get
> non-zero'd memory from sbrk(). This is a problem for when code might
> call calloc() and expect the memory to have been zero'd out.
>
> There are two possible solutions to this problem.
> 1. change #define MORECORE_CLEARS 0
> 2. memset to zero memory returned to sbrk.
>
> We go with the second since the sbrk being called to free up memory
> should be pretty rare.
>
> The following code problems an example test to show the issue. This
> test code was inserted right after the call to mem_malloc_init().
>
> ...
> u8 *p2;
> int i;
>
> printf("MALLOC TEST\n");
> p1 = malloc(135176);
> printf("P1 = %p\n", p1);
> memset(p1, 0xab, 135176);
>
> free(p1);
> p2 = calloc(4097, 1);
> printf("P2 = %p %p\n", p2, p2 + 4097);
>
> for (i = 0; i < 4097; i++) {
> if (p2[i] != 0)
> printf("miscompare at byte %d got %x\n", i, p2[i]);
>
> free(p2);
> printf("END MALLOC TEST\n\n");
> ...
>
> Signed-off-by: Kumar Gala <galak at kernel.crashing.org>
> Tested-by: Wolfgang Denk <wd at denx.de>
> ---
> * Fix commit message screw up
>
> common/dlmalloc.c | 7 +++++++
> 1 files changed, 7 insertions(+), 0 deletions(-)
Applied, thanks.
Best regards,
Wolfgang Denk
--
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
Memories of you remind me of you. - Karl Lehenbauer
More information about the U-Boot
mailing list