[U-Boot] [PATCH 20/27] image: Use ram_top, not bi_memsize, in getenv_bootm_size

Simon Glass sjg at chromium.org
Mon Oct 3 23:49:54 CEST 2016


Hi Paul,

On 1 October 2016 at 08:19, Paul Burton <paul.burton at imgtec.com> wrote:
> When determining the region of memory to allow for use by bootm, using
> bi_memstart & adding bi_memsize can cause problems if that leads to an
> integer overflow. For example on some MIPS systems bi_memstart would be
> 0xffffffff80000000 (ie. the start of the MIPS ckseg0 region) and if the
> system has 2GB of memory then the addition would wrap around to 0.

What will wrap around to 0? Isn't gd->bd->bi_memsize equal to 2GB, and
gd->ram_top - start the same?

>
> The maximum amount of memory to be used by U-Boot is already accounted
> for by the ram_top field of struct global_data, so make use of that for
> the calculation instead.
>
> Signed-off-by: Paul Burton <paul.burton at imgtec.com>
> ---
>
>  common/image.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/common/image.c b/common/image.c
> index 1581022..25e632b 100644
> --- a/common/image.c
> +++ b/common/image.c
> @@ -489,7 +489,7 @@ phys_size_t getenv_bootm_size(void)
>         size = gd->bd->bi_dram[0].size;
>  #else
>         start = (ulong)phys_to_virt(gd->bd->bi_memstart);
> -       size = gd->bd->bi_memsize;
> +       size = gd->ram_top - start;
>  #endif
>
>         s = getenv("bootm_low");
> --
> 2.10.0
>

Regards,
Simon


More information about the U-Boot mailing list