Bug: Synchronous Abort in sqfsload resolving symlinks (aarch64) after increasing inode count
Allan Elkaim
allan.elkaim at gmail.com
Wed May 13 19:57:02 CEST 2026
Hello U-Boot team,
I have encountered a Synchronous Abort bug in the U-Boot squashfs driver
when attempting to load a kernel image via a symlink.
*Environment:*
-
Architecture: aarch64 (ARM64 / Raspberry Pi CM4)
-
OS: Yocto-built Embedded Linux
-
U-Boot version: 2026.04 (Latest Release)
-
Filesystem: Squashfs (A/B partitioned rootfs)
*Context & Use Case:*
To support a robust OTA update strategy (using RAUC), I require strict [kernel
+ rootfs] atomic slots for my A/B partitioning. Therefore, the kernel is
intentionally baked directly into the squashfs rootfs partition and loaded
via /boot/Image, rather than residing on a shared FAT boot partition. This
guarantees that an OTA update or rollback applies to both the rootfs and
its specific kernel simultaneously.
*Description:*
My custom boot script successfully uses sqfsload to load /boot/Image (which
is a symlink to /boot/Image-6.6.63-v8) directly from the active squashfs
slot. This setup worked perfectly until I added the tzdata package to my
Yocto rootfs.
After adding tzdata (which introduces hundreds of timezone files and
symlinks into the squashfs image), sqfsload crashes with a Synchronous
Abort when parsing the /boot/Image symlink.
If I bypass the symlink and load the target file directly (sqfsload mmc 0:2
2 /boot/Image-6.6.63-v8), it works flawlessly, even with the bloated tzdata
filesystem.
*Crash Log:*
U-Boot> sqfsload mmc 0:2 2 /boot/Image
Error: invalid inode reference to directory table.
"Synchronous Abort" handler, esr 0x96000004, far 0xffffffffffffffea
elr: 00000000000e73c0 lr : 00000000000c8da4 (reloc)
elr: 0000000037fb13c0 lr : 0000000037f92da4
x0 : 0000000037b51780 x1 : ffffffffffffffea
x2 : 000000000000000c x3 : 0000000000000000
x4 : 0000000037b51780 x5 : 000000000000005f
x6 : 0000000000000000 x7 : 0000000037b1b100
x8 : 0000000000000001 x9 : fffffffffffffff0
x10: 0000000037b514d0 x11: 0000000000124c8b
x12: 000000000002d196 x13: 0000000037e838cd
x14: 0000000000016dc1 x15: 0000000000016c97
x16: 0000000037f7a80c x17: 0000000000016c97
x18: 0000000037b29d60 x19: 0000000037b51800
x20: 0000000037e838ad x21: 0000000000000001
x22: 0000000037b512c0 x23: ffffffffffffffea
x24: 0000000000000000 x25: 000000000000005f
x26: 0000000037b512a0 x27: 0000000000000001
x28: 000000000000012e x29: 0000000037b1b110
Code: 8b030042 cb030004 cb030021 17fffff0 (38636825)
Resetting CPU ...
*Relevant U-Boot Configuration:*
CONFIG_USB=y
CONFIG_DM_USB=y
CONFIG_USB_DWC2=y
CONFIG_USB_HOST=y
CONFIG_USB_KEYBOARD=y
CONFIG_SYS_USB_EVENT_POLL=y
CONFIG_USE_PREBOOT=y
CONFIG_PREBOOT="usb start; setenv stdin serial,usbkbd"
CONFIG_ENV_IS_IN_FAT=n
CONFIG_ENV_IS_IN_MMC=y
CONFIG_SYS_MMC_ENV_DEV=0
CONFIG_SYS_MMC_ENV_PART=0
CONFIG_ENV_OFFSET=0x100000
CONFIG_ENV_SIZE=0x20000
CONFIG_FS_SQUASHFS=y
CONFIG_CMD_SQUASHFS=y
*Steps to Reproduce:*
1.
Generate a squashfs image with a few files and a symlink to a kernel
image.
2.
Verify sqfsload can load the kernel via the symlink.
3.
Install tzdata (or pad the filesystem with thousands of dummy
symlinks/inodes).
4.
Attempt to sqfsload the kernel via the symlink again.
*Workaround:*
Currently, my workaround is to use a ROOTFS_POSTPROCESS_COMMAND in Yocto to
remove the symlink and rename the kernel binary to /boot/Image directly,
which loads without issue.
Please let me know if you need any further information. I am fully
available to help investigate this, provide additional debug logs, or test
out any potential fixes and patches on my hardware.
Best regards,
Allan
More information about the U-Boot
mailing list