[U-Boot] [PATCH] Repair image-fit: switch ENOLINK to ENOENT
Marek Vasut
marex at denx.de
Mon Sep 19 23:33:42 CEST 2016
On 09/19/2016 10:29 AM, Paul Burton wrote:
> Hi Marek,
Hi,
> On 18/09/16 14:27, Marek Vasut wrote:
>> This patch broke booting of any fitImage-wrapped kernel images due
>> to replacement of ENOLINK with ENOENT without checking where the
>> ENOLINK return value is being tested for. Adjust the tests as well
>> to repair the breakage.
>
> It's not obvious from the commit message what "this patch" refers to - I
> think it would be useful to include the hash & subject of the broken
> commit, eg:
>
> Commit bac17b78dace ("image-fit: switch ENOLINK to ENOENT") broke...
>
> The (potential?) problem with the approach you took in this patch is
> that the return value from fit_get_node_from_config no longer
> differentiates between the ramdisk property of a FIT config being
> missing (-ENOLINK prior to bac17b78dace) & the configuration itself
> being missing (-ENOENT). Could that possibly lead to accepting invalid
> FIT images? If not then I imagine it's by some convoluted chance & that
> we'd probably be best to not rely on it.
Crap, that's a very valid point.
> If using ENOLINK isn't an option then my suggestion would be that we
> change the config not found case to return -EINVAL & the property not
> found can keep returning -ENOENT. Semantically that would seem to make
> sense but it would mean checking all the callers, direct or indirect, of
> fit_get_node_from_config to see whether they rely upon -ENOENT for the
> config not found case.
Can you roll a patch for that ?
Thanks!
> Thanks,
> Paul
>
>>
>> Signed-off-by: Marek Vasut <marex at denx.de>
>> Cc: Jonathan Gray <jsg at jsg.id.au>
>> Cc: Paul Burton <paul.burton at imgtec.com>
>> Cc: Tom Rini <trini at konsulko.com>
>> ---
>> common/image-fdt.c | 2 +-
>> common/image.c | 2 +-
>> 2 files changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/common/image-fdt.c b/common/image-fdt.c
>> index d6ee225..3d23608 100644
>> --- a/common/image-fdt.c
>> +++ b/common/image-fdt.c
>> @@ -285,7 +285,7 @@ int boot_get_fdt(int flag, int argc, char * const argv[], uint8_t arch,
>> fdt_noffset = fit_get_node_from_config(images,
>> FIT_FDT_PROP,
>> fdt_addr);
>> - if (fdt_noffset == -ENOLINK)
>> + if (fdt_noffset == -ENOENT)
>> return 0;
>> else if (fdt_noffset < 0)
>> return 1;
>> diff --git a/common/image.c b/common/image.c
>> index 7ad04ca..c8d9bc8 100644
>> --- a/common/image.c
>> +++ b/common/image.c
>> @@ -1078,7 +1078,7 @@ int boot_get_ramdisk(int argc, char * const argv[], bootm_headers_t *images,
>> rd_addr = map_to_sysmem(images->fit_hdr_os);
>> rd_noffset = fit_get_node_from_config(images,
>> FIT_RAMDISK_PROP, rd_addr);
>> - if (rd_noffset == -ENOLINK)
>> + if (rd_noffset == -ENOENT)
>> return 0;
>> else if (rd_noffset < 0)
>> return 1;
>>
--
Best regards,
Marek Vasut
More information about the U-Boot
mailing list