[U-Boot] [PATCH v3 1/7] common/image.c fix length calculation in boot_relocate_fdt
Wolfgang Denk
wd at denx.de
Mon Oct 18 22:50:09 CEST 2010
Dear John Rigby,
In message <1286999857-13790-2-git-send-email-john.rigby at linaro.org> you wrote:
> boot_relocate_fdt is called on platforms with CONFIG_SYS_BOOTMAPSZ
> defined to relocate the device tree blob to be inside the
> boot map area between bootmap_base and bootmap_base+CONFIG_SYS_BOOTMAPSZ.
>
> For the case where the blob needs to be relocated, space is
> allocated inside the bootmap by calling lmb_alloc_base with
> size passed in plus some padding:
>
> of_len = *of_size + CONFIG_SYS_FDT_PAD;
>
> For the case where the blob is already inside the bounds of the boot map
> area, lmb_reserve is called to reserve the the space where the blob is
> already residing. The calculation for this case is currently:
>
> of_len = (CONFIG_SYS_BOOTMAPSZ + bootmap_base) - (ulong)fdt_blob;
>
> This is wrong because it reserves all the space in the boot map area
> from the blob to the end ignoring completely the actual size. The
> worst case is where the blob is at the beginning and the entire boot map
> area get reserved. Fix this by changing the length calculation to this:
>
> of_len = *of_size + CONFIG_SYS_FDT_PAD;
>
> This bug has likely never manifested itself because bootm has never
> been called with the fdt blob already in the bootmap area. In my
> testing on an OMAP3 beagle board I initially worked around the bug
> by simply moving the initial location of the fdt blob. I have tested
> with the new calculation with the fdt blob both inside and outside
> the boot map area.
>
> Signed-off-by: John Rigby <john.rigby at linaro.org>
> ---
> common/image.c | 2 +-
> 1 files changed, 1 insertions(+), 1 deletions(-)
Applied to u-boot-arm, thanks.
Best regards,
Wolfgang Denk
--
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
An expert is a person who avoids the small errors while sweeping on
to the grand fallacy.
More information about the U-Boot
mailing list