@@ -11,14 +11,17 @@
#include <libfdt.h>
#include <spl.h>
+#define FDT_ERROR ((ulong)(-1))
+
static ulong fdt_getprop_u32(const void *fdt, int node, const char *prop)
{
const u32 *cell;
int len;
cell = fdt_getprop(fdt, node, prop, &len);
- if (len != sizeof(*cell))
- return -1U;
+ if (!cell || len != sizeof(*cell))
+ return FDT_ERROR;
+
return fdt32_to_cpu(*cell);
}
@@ -221,7 +224,11 @@ int spl_load_simple_fit(struct spl_image_info *spl_image,
/* Get its information and set up the spl_image structure */
data_offset = fdt_getprop_u32(fit, node, "data-offset");
+ if (data_offset == FDT_ERROR)
+ return -1;
data_size = fdt_getprop_u32(fit, node, "data-size");
+ if (data_size == FDT_ERROR)
+ return -1;
load = fdt_getprop_u32(fit, node, "load");
debug("data_offset=%x, data_size=%x\n", data_offset, data_size);
spl_image->load_addr = load;
@@ -264,6 +271,10 @@ int spl_load_simple_fit(struct spl_image_info *spl_image,
}
fdt_offset = fdt_getprop_u32(fit, node, "data-offset");
fdt_len = fdt_getprop_u32(fit, node, "data-size");
+ if (fdt_offset == FDT_ERROR || fdt_len == FDT_ERROR) {
+ debug("%s: cannot load FDT data\n" __func__);
+ return -1;
+ }
/*
* Read the device tree and place it after the image. There may be
At the moment we ignore any errors due to missing FIT properties, instead go ahead and calculate our addresses with the -1 return value. Fix this and bail out if any of the mandatory properties are missing. Signed-off-by: Andre Przywara <andre.przywara@arm.com> --- common/spl/spl_fit.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-)