Re: [PATCH 1/2] fdt: correctly handle uncompressed node names

From: Rob Herring
Date: Mon May 15 2017 - 11:23:43 EST


On Sat, May 13, 2017 at 5:22 AM, Sascha Silbe <x-linux@xxxxxxxxxxxxxx> wrote:
> When handling uncompressed node names, we need to compare the last
> component rather than the entire string.
>
> Signed-off-by: Sascha Silbe <x-linux@xxxxxxxxxxxxxx>
> ---
> scripts/dtc/libfdt/fdt_ro.c | 3 +++
> 1 file changed, 3 insertions(+)

This needs to be a patch against dtc, sent to devicetree-compiler list
and accepted there, then I can pick it up.

>
> diff --git a/scripts/dtc/libfdt/fdt_ro.c b/scripts/dtc/libfdt/fdt_ro.c
> index 3d00d2eee0e3..ca03ff87429c 100644
> --- a/scripts/dtc/libfdt/fdt_ro.c
> +++ b/scripts/dtc/libfdt/fdt_ro.c
> @@ -64,6 +64,9 @@ static int _fdt_nodename_eq(const void *fdt, int offset,
> /* short match */
> return 0;
>
> + if (*p == '/')
> + /* Uncompressed node name. Only compare the last part. */
> + p = strrchr(p, '/') + 1;

However, you are changing behavior here that I'd guess has existed for
some time. This makes me suspicious that this is correct especially
when it is non-FDT DT you are trying to fix.

Given that 0-day reports an error with EFI stub, you also have to
consider if u-boot, barebox, grub, and all the other libfdt users
provide strrchr.

Rob