[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