From: Hans de Goede <hdegoede@redhat.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH] malloc: handle free() before gd is set
Date: Fri, 4 Mar 2016 09:45:55 +0100 [thread overview]
Message-ID: <56D94B43.3020505@redhat.com> (raw)
In-Reply-To: <1457079557-31419-1-git-send-email-swarren@wwwdotorg.org>
Hi,
On 04-03-16 09:19, Stephen Warren wrote:
> On at least Ubuntu Xenial, free() can be called before main(). In this
> case, U-Boot won't have set gd, so dereferencing it will crash. Check
> whether gd is set before using it.
>
> While at it, apply the same fix to other functions.
>
> Signed-off-by: Stephen Warren <swarren@wwwdotorg.org>
> ---
> common/dlmalloc.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/common/dlmalloc.c b/common/dlmalloc.c
> index 5ea37dfb6e4c..7453e63d6bf4 100644
> --- a/common/dlmalloc.c
> +++ b/common/dlmalloc.c
> @@ -2453,7 +2453,7 @@ void fREe(mem) Void_t* mem;
>
> #ifdef CONFIG_SYS_MALLOC_F_LEN
> /* free() is a no-op - all the memory will be freed on relocation */
> - if (!(gd->flags & GD_FLG_FULL_MALLOC_INIT))
> + if (gd && !(gd->flags & GD_FLG_FULL_MALLOC_INIT))
> return;
> #endif
>
I believe you want:
+ if (!gd || !(gd->flags & GD_FLG_FULL_MALLOC_INIT))
Instead, so that you actually go into the return; path when there is no gd.
Regards,
Hans
> @@ -2609,7 +2609,7 @@ Void_t* rEALLOc(oldmem, bytes) Void_t* oldmem; size_t bytes;
> if (oldmem == NULL) return mALLOc(bytes);
>
> #ifdef CONFIG_SYS_MALLOC_F_LEN
> - if (!(gd->flags & GD_FLG_FULL_MALLOC_INIT)) {
> + if (gd && !(gd->flags & GD_FLG_FULL_MALLOC_INIT)) {
> /* This is harder to support and should not be needed */
> panic("pre-reloc realloc() is not supported");
> }
> @@ -2985,7 +2985,7 @@ Void_t* cALLOc(n, elem_size) size_t n; size_t elem_size;
> else
> {
> #ifdef CONFIG_SYS_MALLOC_F_LEN
> - if (!(gd->flags & GD_FLG_FULL_MALLOC_INIT)) {
> + if (gd && !(gd->flags & GD_FLG_FULL_MALLOC_INIT)) {
> MALLOC_ZERO(mem, sz);
> return mem;
> }
>
next prev parent reply other threads:[~2016-03-04 8:45 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-03-04 8:19 [U-Boot] [PATCH] malloc: handle free() before gd is set Stephen Warren
2016-03-04 8:45 ` Hans de Goede [this message]
2016-03-04 17:38 ` Stephen Warren
2016-03-06 10:08 ` Hans de Goede
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=56D94B43.3020505@redhat.com \
--to=hdegoede@redhat.com \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.