mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2026-06-02 09:46:37 +03:00
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: ce3dbc5d08 ("efi_loader: add UEFI GPT measurement")
Signed-off-by: Vincent Stehlé <vincent.stehle@arm.com>
Cc: Heinrich Schuchardt <xypron.glpk@gmx.de>
Cc: Ilias Apalodimas <ilias.apalodimas@linaro.org>
Cc: Tom Rini <trini@konsulko.com>
Cc: Masahisa Kojima <kojima.masahisa@socionext.com>
Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
Acked-by: Masahisa Kojima <kojima.masahisa@socionext.com>
Reviewed-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
This commit is contained in:
committed by
Heinrich Schuchardt
parent
f9ffeec4bd
commit
05b13c0589
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user