[U-Boot] [PATCH v3 03/19] SPL: FIT: improve error handling

Simon Glass sjg at chromium.org
Wed Apr 5 10:29:30 UTC 2017


Hi Andre,

On 31 March 2017 at 16:31, Andre Przywara <andre.przywara at arm.com> wrote:
> 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 at arm.com>
> ---
>  common/spl/spl_fit.c | 15 +++++++++++++--
>  1 file changed, 13 insertions(+), 2 deletions(-)

Reviewed-by: Simon Glass <sjg at chromium.org>

nit below

>
> diff --git a/common/spl/spl_fit.c b/common/spl/spl_fit.c
> index a4ac27b..55da37a 100644
> --- a/common/spl/spl_fit.c
> +++ b/common/spl/spl_fit.c
> @@ -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;

Can you return a proper error number - this is -EPERM which doesn't seem right.

>         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
> --
> 2.8.2
>

Regards,
Simon


More information about the U-Boot mailing list