diff options
author | Tom Rini <trini@konsulko.com> | 2021-04-10 16:56:59 -0400 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2021-04-10 16:56:59 -0400 |
commit | 59e84da0b88e4465f15d196bba59f22c906fa50d (patch) | |
tree | ba62f7bab206bd44dfd516c5689b7d87ab2b064f /lib/efi_loader | |
parent | 3f2e3c7845df11ca8359a6cc804bfd6eb5ce215b (diff) | |
parent | f8cd72d1ac6aac8cfa48777b5c0681ee2f9e3671 (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/Kconfig | 1 | ||||
-rw-r--r-- | lib/efi_loader/efi_bootmgr.c | 36 | ||||
-rw-r--r-- | lib/efi_loader/efi_esrt.c | 18 | ||||
-rw-r--r-- | lib/efi_loader/efi_tcg2.c | 19 |
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; |