u-boot/lib/efi_loader
Ilias Apalodimas 00da8d65a3 efi_loader: add an EFI variable with the file contents
Previous patches enabled SetVariableRT using a RAM backend.
Although EBBR [0] defines a variable format we can teach userspace tools
and write the altered variables, it's better if we skip the ABI
requirements completely.

So let's add a new variable, in its own namespace called "VarToFile"
which contains a binary dump of the updated RT, BS and, NV variables
and will be updated when GetVariable is called.

Some adjustments are needed to do that.
Currently we discard BS-only variables in EBS(). We need to preserve
those on the RAM backend that exposes the variables. Since BS-only
variables can't appear at runtime we need to move the memory masking
checks from efi_var_collect() to efi_get_next_variable_name_mem()/
efi_get_variable_mem() and do the filtering at runtime.

We also need an efi_var_collect() variant available at runtime, in order
to construct the "VarToFile" buffer on the fly.

All users and applications (for linux) have to do when updating a variable
is dd that variable in the file described by "RTStorageVolatile".

Linux efivarfs uses a first 4 bytes of the output to represent attributes
in little-endian format. So, storing variables works like this:

$~ efibootmgr -n 0001
$~ dd if=/sys/firmware/efi/efivars/VarToFile-b2ac5fc9-92b7-4acd-aeac-11e818c3130c of=/boot/efi/ubootefi.var skip=4 bs=1

[0] https://arm-software.github.io/ebbr/index.html#document-chapter5-variable-storage

Suggested-by: Ard Biesheuvel <ardb@kernel.org> # dumping all variables to a variable
Co-developed-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com> # contributed on efi_var_collect_mem()
Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
Signed-off-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
2024-04-20 08:22:24 +02:00
..
.gitignore efi_loader: git ignore helloworld_efi.S 2020-01-07 18:08:20 +01:00
boothart.c efi_loader: add an EFI binary to print boot hart ID 2022-12-02 19:17:24 +01:00
capsule_esl.dtsi.in scripts/Makefile.lib: Embed capsule public key in platform's dtb 2023-08-29 13:38:55 -04:00
dtbdump.c efi_loader: Remove <common.h> 2023-12-21 08:54:37 -05:00
efi_acpi.c efi_loader: 'EFI using ACPI tables at' should be debug message 2024-04-13 11:03:12 +02:00
efi_bootbin.c efi_loader: correct handling of EFI binary return code 2024-03-21 07:28:43 +01:00
efi_bootmgr.c efi_loader: auto-generate removable media boot option first 2024-01-21 11:24:24 +01:00
efi_boottime.c efi_loader: Clean up efi_dp_append and efi_dp_concat 2024-01-13 18:17:47 +01:00
efi_capsule.c efi_loader: Remove <common.h> 2023-12-21 08:54:37 -05:00
efi_conformance.c efi_loader: Remove <common.h> 2023-12-21 08:54:37 -05:00
efi_console.c efi_loader: Remove <common.h> 2023-12-21 08:54:37 -05:00
efi_device_path_to_text.c efi_loader: Remove <common.h> 2023-12-21 08:54:37 -05:00
efi_device_path_utilities.c efi_loader: Clean up efi_dp_append and efi_dp_concat 2024-01-13 18:17:47 +01:00
efi_device_path.c efi_loader: split unrelated code from efi_bootmgr.c 2024-01-17 08:40:25 +01:00
efi_disk.c efi_loader: simplify error message in efi_disk_create_raw() 2024-02-12 17:35:34 +01:00
efi_dt_fixup.c efi_loader: Remove <common.h> 2023-12-21 08:54:37 -05:00
efi_esrt.c efi_loader: fix iteration of FMP protocols 2024-01-13 18:17:46 +01:00
efi_file.c efi_loader: Remove <common.h> 2023-12-21 08:54:37 -05:00
efi_firmware.c efi_loader: check efi_get_variable_int return value 2024-01-29 11:31:44 +01:00
efi_freestanding.c efi_loader: Remove <common.h> 2023-12-21 08:54:37 -05:00
efi_gop.c efi_loader: Remove <common.h> 2023-12-21 08:54:37 -05:00
efi_helper.c efi_loader: use event callback for initrd deregistration 2024-04-20 08:21:59 +02:00
efi_hii_config.c efi_loader: Remove <common.h> 2023-12-21 08:54:37 -05:00
efi_hii.c efi_loader: Remove <common.h> 2023-12-21 08:54:37 -05:00
efi_image_loader.c efi_loader: Remove <common.h> 2023-12-21 08:54:37 -05:00
efi_load_initrd.c efi_loader: use event callback for initrd deregistration 2024-04-20 08:21:59 +02:00
efi_load_options.c efi_loader: Remove <common.h> 2023-12-21 08:54:37 -05:00
efi_memory.c efi_loader: eliminate duplicate runtime section definitions 2024-04-13 11:03:12 +02:00
efi_net.c efi_loader: Remove <common.h> 2023-12-21 08:54:37 -05:00
efi_riscv.c efi_loader: Remove <common.h> 2023-12-21 08:54:37 -05:00
efi_rng.c efi_loader: Remove <common.h> 2023-12-21 08:54:37 -05:00
efi_root_node.c efi_loader: Remove <common.h> 2023-12-21 08:54:37 -05:00
efi_runtime.c efi_loader: add an EFI variable with the file contents 2024-04-20 08:22:24 +02:00
efi_setup.c efi_loader: Remove <common.h> 2023-12-21 08:54:37 -05:00
efi_signature.c efi_loader: Remove <common.h> 2023-12-21 08:54:37 -05:00
efi_smbios.c smbios: copy QEMU tables 2024-01-16 17:05:29 -05:00
efi_string.c efi_loader: Remove <common.h> 2023-12-21 08:54:37 -05:00
efi_tcg2.c smbios: correctly name Structure Table Maximum Size field 2024-02-02 19:57:45 +01:00
efi_unicode_collation.c lib/charset: Map Unicode code points to CP437 code points 1-31 2024-03-21 06:56:13 +01:00
efi_var_common.c efi_loader: add an EFI variable with the file contents 2024-04-20 08:22:24 +02:00
efi_var_file.c efi_loader: move efi_var_collect to common functions 2024-04-13 11:03:12 +02:00
efi_var_mem.c efi_loader: add an EFI variable with the file contents 2024-04-20 08:22:24 +02:00
efi_var_seed.S efi_loader: pre-seed UEFI variables 2020-07-16 12:37:02 +02:00
efi_variable_tee.c efi_loader: add an EFI variable with the file contents 2024-04-20 08:22:24 +02:00
efi_variable.c efi_loader: add an EFI variable with the file contents 2024-04-20 08:22:24 +02:00
efi_watchdog.c efi_loader: Remove <common.h> 2023-12-21 08:54:37 -05:00
helloworld.c efi_loader: print file path w/o boot device 2023-05-13 11:09:51 +02:00
initrddump.c efi_loader: Remove <common.h> 2023-12-21 08:54:37 -05:00
Kconfig efi_loader: conditionally enable SetvariableRT 2024-04-20 08:22:24 +02:00
Makefile efi_loader: move efi_var_collect to common functions 2024-04-13 11:03:12 +02:00
smbiosdump.c smbios: correctly name Structure Table Maximum Size field 2024-02-02 19:57:45 +01:00