From: Vincent Stehlé Date: Wed, 11 Feb 2026 12:43:14 +0000 (+0100) Subject: efi_loader: add missing EFI_CALL around tcg2 read_blocks calls X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=05b13c05896f43a25f07e01385f156b2142f69aa;p=thirdparty%2Fu-boot.git efi_loader: add missing EFI_CALL around tcg2 read_blocks calls The read_blocks() function from the Block IO protocol is a UEFI function; make sure to call it from within U-Boot using the EFI_CALL() macro. To demonstrate the issue on an AArch64 machine, define the DEBUG macro in include/efi_loader.h and build u-boot with sandbox_defconfig, then download and uncompress the ACS-DT image [1], and finally execute the following command: $ ./u-boot -T -c " \ host bind 0 systemready-dt_acs_live_image.wic; \ setenv loadaddr 0x10000; \ load host 0 \${loadaddr} EFI/BOOT/Shell.efi; \ bootefi \${loadaddr} \${fdtcontroladdr}" The following assertion should fail: lib/efi_loader/efi_net.c:858: efi_network_timer_notify: Assertion `__efi_entry_check()' failed. This happens due to the following EFIAPI functions call chain: efi_start_image() efi_disk_read_blocks() (due to the missing EFI_CALL, entry_count == 2) efi_network_timer_notify() Link: https://github.com/ARM-software/arm-systemready/releases/download/v25.12_DT_3.1.1/systemready-dt_acs_live_image.wic.xz [1] Fixes: ce3dbc5d080d ("efi_loader: add UEFI GPT measurement") Signed-off-by: Vincent Stehlé Cc: Heinrich Schuchardt Cc: Ilias Apalodimas Cc: Tom Rini Cc: Masahisa Kojima Reviewed-by: Ilias Apalodimas Acked-by: Masahisa Kojima Reviewed-by: Heinrich Schuchardt --- diff --git a/lib/efi_loader/efi_tcg2.c b/lib/efi_loader/efi_tcg2.c index bdf78897d47..1860dc50238 100644 --- a/lib/efi_loader/efi_tcg2.c +++ b/lib/efi_loader/efi_tcg2.c @@ -1213,8 +1213,10 @@ tcg2_measure_gpt_data(struct udevice *dev, goto out2; } - ret = block_io->read_blocks(block_io, block_io->media->media_id, 1, - block_io->media->block_size, gpt_h); + ret = EFI_CALL(block_io->read_blocks(block_io, + block_io->media->media_id, 1, + block_io->media->block_size, + gpt_h)); if (ret != EFI_SUCCESS) goto out2; @@ -1227,9 +1229,10 @@ tcg2_measure_gpt_data(struct udevice *dev, goto out2; } - ret = block_io->read_blocks(block_io, block_io->media->media_id, - gpt_h->partition_entry_lba, - total_gpt_entry_size, entry); + ret = EFI_CALL(block_io->read_blocks(block_io, + block_io->media->media_id, + gpt_h->partition_entry_lba, + total_gpt_entry_size, entry)); if (ret != EFI_SUCCESS) goto out2;