u-boot/lib
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
..
acpi acpi: rename aslc_id, aslc_revision 2024-03-27 09:15:39 +01:00
aes lib: Remove <common.h> inclusion from these files 2023-12-21 08:54:37 -05:00
at91 lib: Remove <common.h> inclusion from these files 2023-12-21 08:54:37 -05:00
blake2
bzip2 lib: Remove <common.h> inclusion from these files 2023-12-21 08:54:37 -05:00
crypt lib: Remove <common.h> inclusion from these files 2023-12-21 08:54:37 -05:00
crypto lib: Remove <common.h> inclusion from these files 2023-12-21 08:54:37 -05:00
dhry lib: Remove <common.h> inclusion from these files 2023-12-21 08:54:37 -05:00
ecdsa Check curve_name for null to avoid crash 2024-03-07 07:41:41 -05:00
efi efi: Avoid using dm_scan_other() 2024-01-13 18:17:46 +01:00
efi_driver efi_driver: provide SBI based runtime system reset 2024-02-28 14:38:47 +01:00
efi_loader efi_loader: add an EFI variable with the file contents 2024-04-20 08:22:24 +02:00
efi_selftest efi_loader: conditionally enable SetvariableRT 2024-04-20 08:22:24 +02:00
fwu_updates fwu: fix fwu_get_image_index interface 2024-01-13 18:17:47 +01:00
libavb global: Drop common.h inclusion 2023-12-21 08:54:37 -05:00
libfdt
lzma lib: Remove <common.h> inclusion from these files 2023-12-21 08:54:37 -05:00
lzo lib: Remove <common.h> inclusion from these files 2023-12-21 08:54:37 -05:00
optee lib: Remove <common.h> inclusion from these files 2023-12-21 08:54:37 -05:00
rsa lib: add missing line breaks in debug messages 2024-04-10 09:34:53 -06:00
zlib zlib: Remove incorrect ZLIB_VERSION 2024-04-12 12:57:07 -06:00
zstd lib: Remove <common.h> inclusion from these files 2023-12-21 08:54:37 -05:00
.gitignore
abuf.c lib: Remove <common.h> inclusion from these files 2023-12-21 08:54:37 -05:00
addr_map.c lib: Remove <common.h> inclusion from these files 2023-12-21 08:54:37 -05:00
aes.c lib: Remove <common.h> inclusion from these files 2023-12-21 08:54:37 -05:00
asm-offsets.c lib: Remove <common.h> inclusion from these files 2023-12-21 08:54:37 -05:00
asn1_decoder.c common: Drop linux/printk.h from common header 2023-09-24 09:54:57 -04:00
bch.c lib: Remove <common.h> inclusion from these files 2023-12-21 08:54:37 -05:00
binman.c lib: Remove <common.h> inclusion from these files 2023-12-21 08:54:37 -05:00
bitrev.c
charset.c efi_loader: add an EFI variable with the file contents 2024-04-20 08:22:24 +02:00
circbuf.c lib: Remove <common.h> inclusion from these files 2023-12-21 08:54:37 -05:00
crc7.c
crc8.c lib: Remove <common.h> inclusion from these files 2023-12-21 08:54:37 -05:00
crc16-ccitt.c lib: Remove <common.h> inclusion from these files 2023-12-21 08:54:37 -05:00
crc16.c
crc32.c lib: Remove <common.h> inclusion from these files 2023-12-21 08:54:37 -05:00
crc32c.c lib: Remove <common.h> inclusion from these files 2023-12-21 08:54:37 -05:00
ctype.c
date.c lib: Remove <common.h> inclusion from these files 2023-12-21 08:54:37 -05:00
display_options.c display_options: Clean up headers 2023-12-21 08:54:37 -05:00
div64.c
elf.c lib: Remove <common.h> inclusion from these files 2023-12-21 08:54:37 -05:00
errno.c
errno_str.c lib: Remove <common.h> inclusion from these files 2023-12-21 08:54:37 -05:00
fdt-libcrypto.c
fdtdec.c fdt: Allow the devicetree to come from a bloblist 2024-01-07 13:45:07 -07:00
fdtdec_common.c lib: Remove <common.h> inclusion from these files 2023-12-21 08:54:37 -05:00
fdtdec_test.c lib: Remove <common.h> inclusion from these files 2023-12-21 08:54:37 -05:00
getopt.c lib: Remove <common.h> inclusion from these files 2023-12-21 08:54:37 -05:00
gunzip.c lib: Remove <common.h> inclusion from these files 2023-12-21 08:54:37 -05:00
gzip.c zlib: Remove incorrect ZLIB_VERSION 2024-04-12 12:57:07 -06:00
hang.c lib: Remove <common.h> inclusion from these files 2023-12-21 08:54:37 -05:00
hash-checksum.c lib: Remove <common.h> inclusion from these files 2023-12-21 08:54:37 -05:00
hashtable.c lib: Remove <common.h> inclusion from these files 2023-12-21 08:54:37 -05:00
hexdump.c lib: Remove <common.h> inclusion from these files 2023-12-21 08:54:37 -05:00
image-sparse.c lib: sparse: Fix error checking for write_sparse_chunk_raw 2024-02-09 09:42:04 +01:00
initcall.c initcall: break loop immediately on failure 2024-03-13 18:47:11 -04:00
Kconfig Fix references to trace doc 2024-04-13 11:14:29 +02:00
ldiv.c
linux_compat.c lib: Remove <common.h> inclusion from these files 2023-12-21 08:54:37 -05:00
linux_string.c
list_sort.c lib: Remove <common.h> inclusion from these files 2023-12-21 08:54:37 -05:00
lmb.c lib: Remove <common.h> inclusion from these files 2023-12-21 08:54:37 -05:00
lz4.c lib: Remove <common.h> inclusion from these files 2023-12-21 08:54:37 -05:00
lz4_wrapper.c lib: Remove <common.h> inclusion from these files 2023-12-21 08:54:37 -05:00
Makefile fs: ext4: Fix building ext4 in SPL if write is enabled 2023-10-17 20:50:52 -04:00
md5.c lib: Remove <common.h> inclusion from these files 2023-12-21 08:54:37 -05:00
membuff.c lib: membuff: fix readline not returning line in case of overflow 2024-01-09 14:58:33 +01:00
net_utils.c lib: Remove <common.h> inclusion from these files 2023-12-21 08:54:37 -05:00
of_live.c lib: Remove <common.h> inclusion from these files 2023-12-21 08:54:37 -05:00
oid_registry.c
panic.c lib: Remove <common.h> inclusion from these files 2023-12-21 08:54:37 -05:00
physmem.c lib: Remove <common.h> inclusion from these files 2023-12-21 08:54:37 -05:00
qsort.c lib: Remove <common.h> inclusion from these files 2023-12-21 08:54:37 -05:00
rand.c lib: Remove <common.h> inclusion from these files 2023-12-21 08:54:37 -05:00
rational.c
rbtree.c
rc4.c lib: Remove <common.h> inclusion from these files 2023-12-21 08:54:37 -05:00
rtc-lib.c lib: Remove <common.h> inclusion from these files 2023-12-21 08:54:37 -05:00
semihosting.c lib: Remove <common.h> inclusion from these files 2023-12-21 08:54:37 -05:00
sha1.c lib/sha*.c: Update header list 2023-12-21 08:54:37 -05:00
sha256.c lib/sha*.c: Update header list 2023-12-21 08:54:37 -05:00
sha512.c lib/sha*.c: Update header list 2023-12-21 08:54:37 -05:00
slre.c lib: Remove <common.h> inclusion from these files 2023-12-21 08:54:37 -05:00
smbios-parser.c smbios: correctly name Structure Table Maximum Size field 2024-02-02 19:57:45 +01:00
smbios.c smbios: fill wake-up type 2024-03-27 09:23:30 +01:00
sscanf.c
string.c Revert "lib: string: Fix strlcpy return value", fix callers 2023-08-08 17:05:43 -04:00
strto.c lib: Remove <common.h> inclusion from these files 2023-12-21 08:54:37 -05:00
tables_csum.c lib: make table_compute_checksum() arguments const 2024-01-09 10:08:52 +01:00
time.c lib: Remove <common.h> inclusion from these files 2023-12-21 08:54:37 -05:00
tiny-printf.c lib: Remove <common.h> inclusion from these files 2023-12-21 08:54:37 -05:00
tpm-common.c lib: Remove <common.h> inclusion from these files 2023-12-21 08:54:37 -05:00
tpm-utils.h
tpm-v1.c lib: Remove <common.h> inclusion from these files 2023-12-21 08:54:37 -05:00
tpm-v2.c lib: Remove <common.h> inclusion from these files 2023-12-21 08:54:37 -05:00
tpm_api.c lib: Remove <common.h> inclusion from these files 2023-12-21 08:54:37 -05:00
trace.c lib: Remove <common.h> inclusion from these files 2023-12-21 08:54:37 -05:00
uuid.c lib: support SMBIOS3 table in uuid_guid_get_str() 2024-01-26 14:17:55 +01:00
vsprintf.c lib: Remove <common.h> inclusion from these files 2023-12-21 08:54:37 -05:00
xxhash.c