On Wed, Nov 04, 2020 at 08:06:05AM -0500, Tom Rini wrote: > The device tree must be loaded in to memory at an 8-byte aligned > address. Add a check for this condition in fdt_ro_probe_() and a new > error code to return if we are not. > > Signed-off-by: Tom Rini <trini@xxxxxxxxxxxx> Applied, thanks, sorry it took so long. A testcase to make sure this fails on an unaligned blob would be a nice addition > --- > libfdt/fdt.c | 4 ++++ > libfdt/libfdt.h | 6 +++++- > 2 files changed, 9 insertions(+), 1 deletion(-) > > diff --git a/libfdt/fdt.c b/libfdt/fdt.c > index 6cf2fa03b037..3e893073da05 100644 > --- a/libfdt/fdt.c > +++ b/libfdt/fdt.c > @@ -22,6 +22,10 @@ int32_t fdt_ro_probe_(const void *fdt) > if (can_assume(VALID_DTB)) > return totalsize; > > + /* The device tree must be at an 8-byte aligned address */ > + if ((uintptr_t)fdt & 7) > + return -FDT_ERR_ALIGNMENT; > + > if (fdt_magic(fdt) == FDT_MAGIC) { > /* Complete tree */ > if (!can_assume(LATEST)) { > diff --git a/libfdt/libfdt.h b/libfdt/libfdt.h > index 544d3efff584..b600c8d6dd41 100644 > --- a/libfdt/libfdt.h > +++ b/libfdt/libfdt.h > @@ -101,7 +101,11 @@ extern "C" { > /* FDT_ERR_BADFLAGS: The function was passed a flags field that > * contains invalid flags or an invalid combination of flags. */ > > -#define FDT_ERR_MAX 18 > +#define FDT_ERR_ALIGNMENT 19 > + /* FDT_ERR_ALIGNMENT: The device tree base address is not 8-byte > + * aligned. */ > + > +#define FDT_ERR_MAX 19 > > /* constants */ > #define FDT_MAX_PHANDLE 0xfffffffe -- David Gibson | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_ | _way_ _around_! http://www.ozlabs.org/~dgibson
Attachment:
signature.asc
Description: PGP signature