u-boot/boot
Sam Protsenko 16b80c93e2 fdt: Fix fdt_pack_reg() on 64-bit platforms
When "memory" node is being processed in fdt_pack_reg() on ARM64
platforms, an unaligned bus access might happen, which leads to
"synchronous abort" CPU exception. Consider next dts example:

    / {
        #address-cells = <2>;
        #size-cells = <1>;

        memory@80000000 {
            device_type = "memory";
            reg = <0x0 0x80000000 0x3ab00000>,
                  <0x0 0xc0000000 0x40000000>,
                  <0x8 0x80000000 0x80000000>;
        };
    };

After fdt_pack_reg() reads the first addr/size entry from such memory
node, the "p" pointer becomes 12 bytes shifted from its original value
(8 bytes for two address cells + 4 bytes for one size cell). So now it's
not 64-bit aligned, and an attempt to do 64-bit bus access to that
address will cause an abort like this:

    "Synchronous Abort" handler, esr 0x96000021, far 0xba235efc

This issue was originally reported by David Virag [1] who observed it
happening on Samsung Exynos7885 SoC (ARM64), and later the same issue
was observed on Samsung Exynos850 (ARM64).

Fix the issue by using put_unaligned_be64() helper, which takes care of
possible unaligned 64-bit accesses. That solution was proposed by Simon
Glass in the original thread [1].

[1] https://lists.denx.de/pipermail/u-boot/2023-July/522074.html

Fixes: 739a01ed8e ("fdt_support: fix an endian bug of fdt_fixup_memory_banks")
Suggested-by: Simon Glass <sjg@google.com>
Reported-by: David Virag <virag.david003@gmail.com>
Closes: https://lists.denx.de/pipermail/u-boot/2023-July/522074.html
Signed-off-by: Sam Protsenko <semen.protsenko@linaro.org>
Reviewed-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
2024-04-12 08:53:31 -06:00
..
android_ab.c android_ab: Fix ANDROID_AB_BACKUP_OFFSET 2024-04-02 09:09:58 +02:00
boot_fit.c global: Use proper project name U-Boot 2023-06-12 13:24:31 +02:00
bootdev-uclass.c bootstd: support scanning a single partition 2024-03-04 10:25:47 -05:00
bootflow_internal.h bootstd: Support creating a boot menu 2023-01-16 18:26:50 -05:00
bootflow_menu.c boot: superfluous assignment in bootflow_menu_new() 2024-01-18 17:50:27 -05:00
bootflow.c bootstd: support scanning a single partition 2024-03-04 10:25:47 -05:00
bootm_os.c Merge patch series "Complete decoupling of bootm logic from commands" 2023-12-21 16:10:00 -05:00
bootm.c boot: fdt: Change type of env_get_bootm_low() to phys_addr_t 2024-04-11 09:38:57 -06:00
bootmeth_cros.c x86: zboot: Rename zboot_start() to zboot_run() 2024-04-10 13:49:16 -06:00
bootmeth_cros.h bootstd: cros: Bring in some ChromiumOS structures 2023-08-10 18:34:54 -06:00
bootmeth_efi_mgr.c boot: correct the default sequence of boot methods 2024-04-08 13:03:40 +02:00
bootmeth_efi.c boot: correct finding the default EFI binary 2024-04-08 13:05:21 +02:00
bootmeth_extlinux.c lib: membuff: fix readline not returning line in case of overflow 2024-01-09 14:58:33 +01:00
bootmeth_pxe.c boot: correct the default sequence of boot methods 2024-04-08 13:03:40 +02:00
bootmeth_qfw.c bootstd: Correct the name of the QEMU bootmeth 2023-07-16 23:13:17 +08:00
bootmeth_sandbox.c bootstd: Rename distro and syslinux to extlinux 2023-05-13 09:52:32 -04:00
bootmeth_script.c bootstd: sata: Add bootstd support for ahci sata 2023-10-23 13:07:12 -04:00
bootmeth-uclass.c bootstd: Add a command to read all files for a bootflow 2023-08-11 07:33:38 -06:00
bootretry.c cyclic: Use schedule() instead of WATCHDOG_RESET() 2022-09-18 10:26:33 +02:00
bootstd-uclass.c bootstd: Remove special-case code for boot_targets 2023-01-23 18:11:39 -05:00
cedit.c expo: Plumb in textline to cedit 2023-10-11 15:43:55 -04:00
common_fit.c Create a new boot/ directory 2021-11-11 19:01:56 -05:00
expo_build.c expo: Support building an expo with a textline 2023-10-11 15:43:55 -04:00
expo.c expo: Correct background colour 2023-11-14 20:04:00 -07:00
fdt_region.c doc: replace @return by Return: 2022-01-19 18:11:34 +01:00
fdt_simplefb.c Move fdt_simplefb to boot/ 2023-09-19 11:36:25 -04:00
fdt_support.c fdt: Fix fdt_pack_reg() on 64-bit platforms 2024-04-12 08:53:31 -06:00
image-android-dt.c doc: replace @return by Return: 2022-01-19 18:11:34 +01:00
image-android.c android: boot: support bootconfig 2023-04-04 14:50:47 -04:00
image-board.c boot: fdt: Clean up env_get_bootm_mapsize() 2024-04-11 09:38:57 -06:00
image-cipher.c Create a new boot/ directory 2021-11-11 19:01:56 -05:00
image-fdt.c boot: fdt: Move usable variable below updated comment 2024-04-11 09:38:57 -06:00
image-fit-sig.c mkimage: fit: Fix signing of configs with external data 2022-10-26 11:36:06 -04:00
image-fit.c global: Restrict use of '#include <linux/kconfig.h>' 2023-12-21 08:54:05 -05:00
image-host.c Create a new boot/ directory 2021-11-11 19:01:56 -05:00
image-pre-load.c boot: image-pre-load: Check environment for location of signature info 2022-10-11 15:40:48 -04:00
image-sig.c boot: Only define checksum algos when the hashes are enabled 2024-03-02 12:26:56 -05:00
image.c global: Restrict use of '#include <linux/kconfig.h>' 2023-12-21 08:54:05 -05:00
Kconfig Merge patch series "pxe: Allow extlinux booting without CMDLINE enabled" 2024-04-10 17:06:27 -06:00
Makefile Merge patch series "pxe: Allow extlinux booting without CMDLINE enabled" 2024-04-10 17:06:27 -06:00
prog_boot.c bootstd: Introduce programmatic boot 2023-12-13 11:51:24 -05:00
pxe_utils.c Merge patch series "pxe: Allow extlinux booting without CMDLINE enabled" 2024-04-10 17:06:27 -06:00
scene_internal.h expo: Plumb in textlines to a scene 2023-10-11 15:43:55 -04:00
scene_menu.c expo: Allow rendering the background of any object 2023-10-11 15:43:55 -04:00
scene_textline.c expo: Support opening a textline 2023-10-11 15:43:55 -04:00
scene.c expo: Plumb in textlines to a scene 2023-10-11 15:43:55 -04:00
vbe_request.c dm: core: Reverse the argument order in ofnode_copy_props() 2023-10-06 14:38:12 -04:00
vbe_simple_fw.c bootstd: Treat DHCP and PXE as bootdev labels 2023-01-23 18:11:41 -05:00
vbe_simple_os.c dm: core: Reverse the argument order in ofnode_copy_props() 2023-10-06 14:38:12 -04:00
vbe_simple.c boot: vbe_simple: Fix vbe_simple_read_bootflow() dependency 2023-04-28 11:30:17 -06:00
vbe_simple.h vbe: Move OS implementation into a separate file 2022-10-31 11:03:36 -04:00
vbe.c boot: fix vbe_find_first_device() 2022-08-26 16:32:59 -06:00