[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