Hi Tom, On Thu, 13 Nov 2025 at 12:38, Tom Rini <[email protected]> wrote: > > On Thu, Nov 13, 2025 at 12:33:24PM -0700, Simon Glass wrote: > > Hi Marek, > > > > On Tue, 11 Nov 2025 at 18:17, Marek Vasut > > <[email protected]> wrote: > > > > > > Newer versions of libfdt strictly check whether the FDT blob > > > passed to them is at 8-byte aligned offset, if it is not, then > > > the library fails checks with -FDT_ERR_ALIGNMENT . Currently, > > > android_image_print_dtb_contents() passed FDT directly mapped > > > from abootimg to libfdt, and this FDT is not always aligned to > > > 8-byte offset. Specifically, the FDTs are somewhat packed in > > > the abootimg, therefore if the first FDT blob is e.g. 0xfd bytes > > > long, then the next FDT blob ends up at 0xfd offset, which is > > > not 8-byte aligned. > > > > > > Fix this by first extracting the header into 8-byte aligned buffer, > > > checking only the header for validity, and then by copying the > > > entire FDT into newly allocated 8-byte aligned buffer. While this > > > is not efficient, it is the correct way to handle DTs, which must > > > be at 8-byte aligned offsets. Mitigate the inefficiency for the > > > common case by checking whether the DT might be 8-byte aligned and > > > if it is, map it directly. > > > > > > Signed-off-by: Marek Vasut <[email protected]> > > > --- > > > Cc: Aaron Kling <[email protected]> > > > Cc: Eddie Kovsky <[email protected]> > > > Cc: George Chan <[email protected]> > > > Cc: Julien Masson <[email protected]> > > > Cc: Mattijs Korpershoek <[email protected]> > > > Cc: Nicolas Belin <[email protected]> > > > Cc: Sam Day <[email protected]> > > > Cc: Simon Glass <[email protected]> > > > Cc: Tom Rini <[email protected]> > > > Cc: [email protected] > > > --- > > > boot/image-android.c | 46 +++++++++++++++++++++++++++++++++----------- > > > 1 file changed, 35 insertions(+), 11 deletions(-) > > > > > > > OK, we need to adjust mkimage etc. to handle this. Until then I think > > we should have a way to disable the 8-byte-alignment check as it seems > > to have an enormous blast radius :-) > > We can't. We really can't. Passing misaligned device trees results in, > and has already resulted in for years: > - Silent Linux crashes > - When Linux doesn't crash so many of the read functions go wrong the > result is incomprehensible. > > It's something that has and continues to waste untold engineering time. > The only reason it's not worse is that we've killed off *most* of the > platforms that disabled device tree relocation and that's how > misalignment happens downstream most often.
That's fine, but making the devicetree aligned for Linux is pretty simple. We generally relocate it before booting anyway. But that's not what I'm seeing here. It seems to be updating U-Boot to deal with a libfdt change. That is also a worthy goal, but we need to consider code size and where best in the stack the changes should be made. Doing a memalign() at the last minute is just not a good idea. Regards, Simon

