The board_late_init() function allocates memory for a bunch of
environment variables, including fdt_addr_r. The device-tree then gets
copied to the memory pointed to by fdt_addr_r. However, the memory
allocation request can fail, in which case the address that is being
written to would not be allocated. Add a check that the memory
allocation has succeeded before copying the device-tree.

Signed-off-by: Sughosh Ganu <sughosh.g...@linaro.org>
---
Changes since V3: New patch

 arch/arm/mach-snapdragon/board.c | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/arch/arm/mach-snapdragon/board.c b/arch/arm/mach-snapdragon/board.c
index 87a173e0acb..ed2bd5dbade 100644
--- a/arch/arm/mach-snapdragon/board.c
+++ b/arch/arm/mach-snapdragon/board.c
@@ -497,7 +497,7 @@ void __weak qcom_late_init(void)
 /* Stolen from arch/arm/mach-apple/board.c */
 int board_late_init(void)
 {
-       u32 status = 0;
+       u32 status = 0, fdt_status = 0;
        phys_addr_t addr;
        struct fdt_header *fdt_blob = (struct fdt_header *)gd->fdt_blob;
 
@@ -520,14 +520,19 @@ int board_late_init(void)
                status |= !lmb_alloc(FASTBOOT_BUF_SIZE, &addr) ?
                        env_set_hex("fastboot_addr_r", addr) : 1;
 
-       status |= !lmb_alloc(SZ_2M, &addr) ?
+       fdt_status |= !lmb_alloc(SZ_2M, &addr) ?
                env_set_hex("fdt_addr_r", addr) : 1;
 
-       if (status)
+       if (status || fdt_status)
                log_warning("%s: Failed to set run time variables\n", __func__);
 
        /* By default copy U-Boots FDT, it will be used as a fallback */
-       memcpy((void *)addr, (void *)gd->fdt_blob, 
fdt32_to_cpu(fdt_blob->totalsize));
+       if (fdt_status)
+               log_warning("%s: Failed to reserve memory for copying FDT\n",
+                           __func__);
+       else
+               memcpy((void *)addr, (void *)gd->fdt_blob,
+                      fdt32_to_cpu(fdt_blob->totalsize));
 
        configure_env();
        qcom_late_init();
-- 
2.34.1

Reply via email to