aboutsummaryrefslogtreecommitdiff
path: root/lib/efi_loader
diff options
context:
space:
mode:
authorTom Rini <trini@konsulko.com>2021-04-10 16:56:59 -0400
committerTom Rini <trini@konsulko.com>2021-04-10 16:56:59 -0400
commit59e84da0b88e4465f15d196bba59f22c906fa50d (patch)
treeba62f7bab206bd44dfd516c5689b7d87ab2b064f /lib/efi_loader
parent3f2e3c7845df11ca8359a6cc804bfd6eb5ce215b (diff)
parentf8cd72d1ac6aac8cfa48777b5c0681ee2f9e3671 (diff)
Merge tag 'efi-2021-07-rc1' of https://source.denx.de/u-boot/custodians/u-boot-efi
Pull request for efi-2021-07-rc1 Bug fixes: * support EFI, HOST, VIRTIO in fsinfo command * simplify efi_get_device_path_text() * add missing EFI_UNACCEPTED_MEMORY_TYPE * mkeficapsule: improve online help * avoid several build warnings Documentation: * UEFI documentation for initrd loading options * describe building OP-TEE with for UEFI variables * mmc man-page
Diffstat (limited to 'lib/efi_loader')
-rw-r--r--lib/efi_loader/Kconfig1
-rw-r--r--lib/efi_loader/efi_bootmgr.c36
-rw-r--r--lib/efi_loader/efi_esrt.c18
-rw-r--r--lib/efi_loader/efi_tcg2.c19
4 files changed, 22 insertions, 52 deletions
diff --git a/lib/efi_loader/Kconfig b/lib/efi_loader/Kconfig
index e44f004f3f..0b99d7c774 100644
--- a/lib/efi_loader/Kconfig
+++ b/lib/efi_loader/Kconfig
@@ -173,6 +173,7 @@ config EFI_CAPSULE_AUTHENTICATE
select X509_CERTIFICATE_PARSER
select PKCS7_MESSAGE_PARSER
select PKCS7_VERIFY
+ select IMAGE_SIGN_INFO
default n
help
Select this option if you want to enable capsule
diff --git a/lib/efi_loader/efi_bootmgr.c b/lib/efi_loader/efi_bootmgr.c
index 46c8011344..1fe19237f9 100644
--- a/lib/efi_loader/efi_bootmgr.c
+++ b/lib/efi_loader/efi_bootmgr.c
@@ -31,38 +31,6 @@ static const struct efi_runtime_services *rs;
*/
/**
- * get_var() - get UEFI variable
- *
- * It is the caller's duty to free the returned buffer.
- *
- * @name: name of variable
- * @vendor: vendor GUID of variable
- * @size: size of allocated buffer
- * Return: buffer with variable data or NULL
- */
-static void *get_var(u16 *name, const efi_guid_t *vendor,
- efi_uintn_t *size)
-{
- efi_status_t ret;
- void *buf = NULL;
-
- *size = 0;
- ret = efi_get_variable_int(name, vendor, NULL, size, buf, NULL);
- if (ret == EFI_BUFFER_TOO_SMALL) {
- buf = malloc(*size);
- ret = efi_get_variable_int(name, vendor, NULL, size, buf, NULL);
- }
-
- if (ret != EFI_SUCCESS) {
- free(buf);
- *size = 0;
- return NULL;
- }
-
- return buf;
-}
-
-/**
* try_load_entry() - try to load image for boot option
*
* Attempt to load load-option number 'n', returning device_path and file_path
@@ -89,7 +57,7 @@ static efi_status_t try_load_entry(u16 n, efi_handle_t *handle,
varname[6] = hexmap[(n & 0x00f0) >> 4];
varname[7] = hexmap[(n & 0x000f) >> 0];
- load_option = get_var(varname, &efi_global_variable_guid, &size);
+ load_option = efi_get_var(varname, &efi_global_variable_guid, &size);
if (!load_option)
return EFI_LOAD_ERROR;
@@ -210,7 +178,7 @@ efi_status_t efi_bootmgr_load(efi_handle_t *handle, void **load_options)
}
/* BootOrder */
- bootorder = get_var(L"BootOrder", &efi_global_variable_guid, &size);
+ bootorder = efi_get_var(L"BootOrder", &efi_global_variable_guid, &size);
if (!bootorder) {
log_info("BootOrder not defined\n");
ret = EFI_NOT_FOUND;
diff --git a/lib/efi_loader/efi_esrt.c b/lib/efi_loader/efi_esrt.c
index 947bdb5e95..40f53260e4 100644
--- a/lib/efi_loader/efi_esrt.c
+++ b/lib/efi_loader/efi_esrt.c
@@ -120,8 +120,8 @@ efi_status_t efi_esrt_allocate_install(u32 num_entries)
(void **)&new_esrt);
if (ret != EFI_SUCCESS) {
- EFI_PRINT("ESRT cannot allocate memory for %d entries (%d bytes)\n",
- num_entries, efi_esrt_entries_to_size(num_entries));
+ EFI_PRINT("ESRT cannot allocate memory for %u entries (%u bytes)\n",
+ num_entries, size);
return ret;
}
@@ -180,7 +180,7 @@ struct efi_system_resource_entry *esrt_find_entry(efi_guid_t *img_fw_class)
/* Check if the image with img_fw_class is already in the ESRT. */
for (u32 idx = 0; idx < filled_entries; idx++) {
if (!guidcmp(&entry[idx].fw_class, img_fw_class)) {
- EFI_PRINT("ESRT found entry for image %pUl at index %d\n",
+ EFI_PRINT("ESRT found entry for image %pUl at index %u\n",
img_fw_class, idx);
return &entry[idx];
}
@@ -202,7 +202,7 @@ struct efi_system_resource_entry *esrt_find_entry(efi_guid_t *img_fw_class)
*/
esrt->fw_resource_count++;
entry[filled_entries].fw_class = *img_fw_class;
- EFI_PRINT("ESRT allocated new entry for image %pUl at index %d\n",
+ EFI_PRINT("ESRT allocated new entry for image %pUl at index %u\n",
img_fw_class, filled_entries);
return &entry[filled_entries];
@@ -316,7 +316,7 @@ efi_status_t efi_esrt_populate(void)
{
efi_handle_t *base_handle = NULL;
efi_handle_t *it_handle;
- size_t no_handles = 0;
+ efi_uintn_t no_handles = 0;
struct efi_firmware_management_protocol *fmp;
efi_status_t ret;
u32 num_entries = 0;
@@ -341,7 +341,7 @@ efi_status_t efi_esrt_populate(void)
return EFI_SUCCESS;
}
- EFI_PRINT("ESRT populate esrt from (%ld) available FMP handles\n",
+ EFI_PRINT("ESRT populate esrt from (%zd) available FMP handles\n",
no_handles);
/*
@@ -363,7 +363,7 @@ efi_status_t efi_esrt_populate(void)
&handler);
if (ret != EFI_SUCCESS) {
- EFI_PRINT("ESRT Unable to find FMP handle (%d)\n",
+ EFI_PRINT("ESRT Unable to find FMP handle (%u)\n",
idx);
goto out;
}
@@ -414,7 +414,7 @@ efi_status_t efi_esrt_populate(void)
EFI_CALL(efi_free_pool(img_info));
}
- EFI_PRINT("ESRT create table with %d entries\n", num_entries);
+ EFI_PRINT("ESRT create table with %u entries\n", num_entries);
/*
* Allocate an ESRT with the sufficient number of entries to accommodate
* all the FMPs in the system.
@@ -435,7 +435,7 @@ efi_status_t efi_esrt_populate(void)
&handler));
if (ret != EFI_SUCCESS) {
- EFI_PRINT("ESRT unable to find FMP handle (%d)\n",
+ EFI_PRINT("ESRT unable to find FMP handle (%u)\n",
idx);
break;
}
diff --git a/lib/efi_loader/efi_tcg2.c b/lib/efi_loader/efi_tcg2.c
index 09046844c7..ed86a220fb 100644
--- a/lib/efi_loader/efi_tcg2.c
+++ b/lib/efi_loader/efi_tcg2.c
@@ -176,13 +176,14 @@ static efi_status_t tcg2_agile_log_append(u32 pcr_index, u32 event_type,
struct tpml_digest_values *digest_list,
u32 size, u8 event[])
{
- void *log = event_log.buffer + event_log.pos;
+ void *log = (void *)((uintptr_t)event_log.buffer + event_log.pos);
size_t pos;
int i;
u32 event_size;
if (event_log.get_event_called)
- log = event_log.final_buffer + event_log.final_pos;
+ log = (void *)((uintptr_t)event_log.final_buffer +
+ event_log.final_pos);
/*
* size refers to the length of event[] only, we need to check against
@@ -197,24 +198,24 @@ static efi_status_t tcg2_agile_log_append(u32 pcr_index, u32 event_type,
put_unaligned_le32(pcr_index, log);
pos = offsetof(struct tcg_pcr_event2, event_type);
- put_unaligned_le32(event_type, log + pos);
+ put_unaligned_le32(event_type, (void *)((uintptr_t)log + pos));
pos = offsetof(struct tcg_pcr_event2, digests); /* count */
- put_unaligned_le32(digest_list->count, log + pos);
+ put_unaligned_le32(digest_list->count, (void *)((uintptr_t)log + pos));
pos += offsetof(struct tpml_digest_values, digests);
for (i = 0; i < digest_list->count; i++) {
u16 hash_alg = digest_list->digests[i].hash_alg;
u8 *digest = (u8 *)&digest_list->digests[i].digest;
- put_unaligned_le16(hash_alg, log + pos);
+ put_unaligned_le16(hash_alg, (void *)((uintptr_t)log + pos));
pos += offsetof(struct tpmt_ha, digest);
- memcpy(log + pos, digest, alg_to_len(hash_alg));
+ memcpy((void *)((uintptr_t)log + pos), digest, alg_to_len(hash_alg));
pos += alg_to_len(hash_alg);
}
- put_unaligned_le32(size, log + pos);
+ put_unaligned_le32(size, (void *)((uintptr_t)log + pos));
pos += sizeof(u32); /* tcg_pcr_event2 event_size*/
- memcpy(log + pos, event, size);
+ memcpy((void *)((uintptr_t)log + pos), event, size);
pos += size;
/* make sure the calculated buffer is what we checked against */
@@ -1046,7 +1047,7 @@ static efi_status_t efi_init_event_log(void)
put_unaligned_le32(0, &event_header->pcr_index);
put_unaligned_le32(EV_NO_ACTION, &event_header->event_type);
memset(&event_header->digest, 0, sizeof(event_header->digest));
- ret = create_specid_event(dev, event_log.buffer + sizeof(*event_header),
+ ret = create_specid_event(dev, (void *)((uintptr_t)event_log.buffer + sizeof(*event_header)),
&spec_event_size);
if (ret != EFI_SUCCESS)
goto out;