[PATCH 4/4] malloc: Fix sbrk clearing memory after freeing it instead of before
Simon Glass
sjg at chromium.org
Tue May 4 17:26:15 CEST 2021
Hi Sean,
On Sun, 2 May 2021 at 20:55, Sean Anderson <seanga2 at gmail.com> wrote:
>
> This fixes memory being cleared after releasing it. Instead, clear memory
> before releasing it. In addition, suppress valgrind warnings about writing
> to free'd memory.
>
> Signed-off-by: Sean Anderson <seanga2 at gmail.com>
> ---
>
> common/dlmalloc.c | 10 ++++++----
> 1 file changed, 6 insertions(+), 4 deletions(-)
>
> diff --git a/common/dlmalloc.c b/common/dlmalloc.c
> index 05c8fd87e7..ea51bdf6a6 100644
> --- a/common/dlmalloc.c
> +++ b/common/dlmalloc.c
> @@ -592,11 +592,13 @@ void *sbrk(ptrdiff_t increment)
> ulong new = old + increment;
>
> /*
> - * if we are giving memory back make sure we clear it out since
> - * we set MORECORE_CLEARS to 1
> + * if we are allocating memory make sure we clear it out since we set
> + * MORECORE_CLEARS to 1
> */
> - if (increment < 0)
> - memset((void *)new, 0, -increment);
> + if (increment > 0) {
> + VALGRIND_MAKE_MEM_UNDEFINED(old, increment);
> + memset((void *)old, 0, increment);
> + }
Can you explain this a bit more? What is the difference?
Do you need the cast?
>
> if ((new < mem_malloc_start) || (new > mem_malloc_end))
> return (void *)MORECORE_FAILURE;
> --
> 2.31.0
>
Regards,
Simon
More information about the U-Boot
mailing list