summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorTom Rini <trini@konsulko.com>2022-01-22 23:43:36 +0300
committerTom Rini <trini@konsulko.com>2022-01-22 23:43:36 +0300
commitda158ec5f2db86d88a631c05c540ba5ee1937a77 (patch)
tree2aec2712bc2db6417fc9e5660b8a5c2e7b04ecee /lib
parente6786b0354372c8a68d01e4d633a19cdce373b70 (diff)
parentf5e9035043fb48baea93ccb3165e75f486906213 (diff)
downloadu-boot-da158ec5f2db86d88a631c05c540ba5ee1937a77.tar.xz
Merge tag 'efi-2022-04-rc1-2' of https://source.denx.de/u-boot/custodians/u-boot-efi
Pull request for efi-2022-04-rc1-2 Documentation: * describe printf() format codes UEFI * enable more algorithms for UEFI image verification, e.g. SHA256-RSA2048 General * simplify printing short texts for GUIDs * provide a unit test for printing GUIDs
Diffstat (limited to 'lib')
-rw-r--r--lib/crypto/public_key.c35
-rw-r--r--lib/efi_loader/efi_boottime.c26
-rw-r--r--lib/efi_loader/efi_capsule.c6
-rw-r--r--lib/efi_loader/efi_esrt.c6
-rw-r--r--lib/efi_loader/efi_file.c4
-rw-r--r--lib/efi_loader/efi_hii.c14
-rw-r--r--lib/efi_loader/efi_hii_config.c2
-rw-r--r--lib/efi_loader/efi_image_loader.c2
-rw-r--r--lib/efi_loader/efi_rng.c2
-rw-r--r--lib/efi_loader/efi_signature.c2
-rw-r--r--lib/efi_loader/efi_var_common.c6
-rw-r--r--lib/efi_selftest/efi_selftest_console.c25
-rw-r--r--lib/efi_selftest/efi_selftest_esrt.c8
-rw-r--r--lib/uuid.c148
-rw-r--r--lib/vsprintf.c11
15 files changed, 236 insertions, 61 deletions
diff --git a/lib/crypto/public_key.c b/lib/crypto/public_key.c
index df6033cdb4..3671ed1385 100644
--- a/lib/crypto/public_key.c
+++ b/lib/crypto/public_key.c
@@ -97,6 +97,7 @@ int public_key_verify_signature(const struct public_key *pkey,
const struct public_key_signature *sig)
{
struct image_sign_info info;
+ char algo[256];
int ret;
pr_devel("==>%s()\n", __func__);
@@ -108,30 +109,26 @@ int public_key_verify_signature(const struct public_key *pkey,
return -EINVAL;
memset(&info, '\0', sizeof(info));
+ memset(algo, 0, sizeof(algo));
info.padding = image_get_padding_algo("pkcs-1.5");
- /*
- * Note: image_get_[checksum|crypto]_algo takes a string
- * argument like "<checksum>,<crypto>"
- * TODO: support other hash algorithms
- */
- if (strcmp(sig->pkey_algo, "rsa") || (sig->s_size * 8) != 2048) {
- pr_warn("Encryption is not RSA2048: %s%d\n",
- sig->pkey_algo, sig->s_size * 8);
- return -ENOPKG;
- }
- if (!strcmp(sig->hash_algo, "sha1")) {
- info.checksum = image_get_checksum_algo("sha1,rsa2048");
- info.name = "sha1,rsa2048";
- } else if (!strcmp(sig->hash_algo, "sha256")) {
- info.checksum = image_get_checksum_algo("sha256,rsa2048");
- info.name = "sha256,rsa2048";
- } else {
- pr_warn("unknown msg digest algo: %s\n", sig->hash_algo);
+ if (strcmp(sig->pkey_algo, "rsa")) {
+ pr_err("Encryption is not RSA: %s\n", sig->pkey_algo);
return -ENOPKG;
}
+ ret = snprintf(algo, sizeof(algo), "%s,%s%d", sig->hash_algo,
+ sig->pkey_algo, sig->s_size * 8);
+
+ if (ret >= sizeof(algo))
+ return -EINVAL;
+
+ info.checksum = image_get_checksum_algo((const char *)algo);
+ info.name = (const char *)algo;
info.crypto = image_get_crypto_algo(info.name);
- if (IS_ERR(info.checksum) || IS_ERR(info.crypto))
+ if (!info.checksum || !info.crypto) {
+ pr_err("<%s> not supported on image_get_(checksum|crypto)_algo()\n",
+ algo);
return -ENOPKG;
+ }
info.key = pkey->key;
info.keylen = pkey->keylen;
diff --git a/lib/efi_loader/efi_boottime.c b/lib/efi_loader/efi_boottime.c
index 20b69699fe..37b9c68b6e 100644
--- a/lib/efi_loader/efi_boottime.c
+++ b/lib/efi_loader/efi_boottime.c
@@ -747,7 +747,7 @@ efi_status_t EFIAPI efi_create_event_ex(uint32_t type, efi_uintn_t notify_tpl,
{
efi_status_t ret;
- EFI_ENTRY("%d, 0x%zx, %p, %p, %pUl", type, notify_tpl, notify_function,
+ EFI_ENTRY("%d, 0x%zx, %p, %p, %pUs", type, notify_tpl, notify_function,
notify_context, event_group);
/*
@@ -1180,7 +1180,7 @@ static efi_status_t EFIAPI efi_install_protocol_interface(
{
efi_status_t r;
- EFI_ENTRY("%p, %pUl, %d, %p", handle, protocol, protocol_interface_type,
+ EFI_ENTRY("%p, %pUs, %d, %p", handle, protocol, protocol_interface_type,
protocol_interface);
if (!handle || !protocol ||
@@ -1383,7 +1383,7 @@ static efi_status_t EFIAPI efi_uninstall_protocol_interface
{
efi_status_t ret;
- EFI_ENTRY("%p, %pUl, %p", handle, protocol, protocol_interface);
+ EFI_ENTRY("%p, %pUs, %p", handle, protocol, protocol_interface);
ret = efi_uninstall_protocol(handle, protocol, protocol_interface);
if (ret != EFI_SUCCESS)
@@ -1418,7 +1418,7 @@ efi_status_t EFIAPI efi_register_protocol_notify(const efi_guid_t *protocol,
struct efi_register_notify_event *item;
efi_status_t ret = EFI_SUCCESS;
- EFI_ENTRY("%pUl, %p, %p", protocol, event, registration);
+ EFI_ENTRY("%pUs, %p, %p", protocol, event, registration);
if (!protocol || !event || !registration) {
ret = EFI_INVALID_PARAMETER;
@@ -1601,7 +1601,7 @@ static efi_status_t EFIAPI efi_locate_handle_ext(
const efi_guid_t *protocol, void *search_key,
efi_uintn_t *buffer_size, efi_handle_t *buffer)
{
- EFI_ENTRY("%d, %pUl, %p, %p, %p", search_type, protocol, search_key,
+ EFI_ENTRY("%d, %pUs, %p, %p, %p", search_type, protocol, search_key,
buffer_size, buffer);
return EFI_EXIT(efi_locate_handle(search_type, protocol, search_key,
@@ -1699,7 +1699,7 @@ static efi_status_t
EFIAPI efi_install_configuration_table_ext(const efi_guid_t *guid,
void *table)
{
- EFI_ENTRY("%pUl, %p", guid, table);
+ EFI_ENTRY("%pUs, %p", guid, table);
return EFI_EXIT(efi_install_configuration_table(guid, table));
}
@@ -1814,7 +1814,7 @@ static efi_status_t EFIAPI efi_locate_device_path(
u8 *remainder;
efi_status_t ret;
- EFI_ENTRY("%pUl, %p, %p", protocol, device_path, device);
+ EFI_ENTRY("%pUs, %p, %p", protocol, device_path, device);
if (!protocol || !device_path || !*device_path) {
ret = EFI_INVALID_PARAMETER;
@@ -2303,7 +2303,7 @@ efi_status_t EFIAPI efi_close_protocol(efi_handle_t handle,
struct efi_open_protocol_info_item *pos;
efi_status_t r;
- EFI_ENTRY("%p, %pUl, %p, %p", handle, protocol, agent_handle,
+ EFI_ENTRY("%p, %pUs, %p, %p", handle, protocol, agent_handle,
controller_handle);
if (!efi_search_obj(agent_handle) ||
@@ -2353,7 +2353,7 @@ static efi_status_t EFIAPI efi_open_protocol_information(
struct efi_open_protocol_info_item *item;
efi_status_t r;
- EFI_ENTRY("%p, %pUl, %p, %p", handle, protocol, entry_buffer,
+ EFI_ENTRY("%p, %pUs, %p, %p", handle, protocol, entry_buffer,
entry_count);
/* Check parameters */
@@ -2477,7 +2477,7 @@ efi_status_t EFIAPI efi_locate_handle_buffer(
efi_status_t r;
efi_uintn_t buffer_size = 0;
- EFI_ENTRY("%d, %pUl, %p, %p, %p", search_type, protocol, search_key,
+ EFI_ENTRY("%d, %pUs, %p, %p, %p", search_type, protocol, search_key,
no_handles, buffer);
if (!no_handles || !buffer) {
@@ -2523,7 +2523,7 @@ static efi_status_t EFIAPI efi_locate_protocol(const efi_guid_t *protocol,
efi_status_t ret;
struct efi_object *efiobj;
- EFI_ENTRY("%pUl, %p, %p", protocol, registration, protocol_interface);
+ EFI_ENTRY("%pUs, %p, %p", protocol, registration, protocol_interface);
/*
* The UEFI spec explicitly requires a protocol even if a registration
@@ -2914,7 +2914,7 @@ static efi_status_t EFIAPI efi_open_protocol
struct efi_handler *handler;
efi_status_t r = EFI_INVALID_PARAMETER;
- EFI_ENTRY("%p, %pUl, %p, %p, %p, 0x%x", handle, protocol,
+ EFI_ENTRY("%p, %pUs, %p, %p, %p, 0x%x", handle, protocol,
protocol_interface, agent_handle, controller_handle,
attributes);
@@ -3531,7 +3531,7 @@ static efi_status_t EFIAPI efi_reinstall_protocol_interface(
{
efi_status_t ret;
- EFI_ENTRY("%p, %pUl, %p, %p", handle, protocol, old_interface,
+ EFI_ENTRY("%p, %pUs, %p, %p", handle, protocol, old_interface,
new_interface);
/* Uninstall protocol but do not delete handle */
diff --git a/lib/efi_loader/efi_capsule.c b/lib/efi_loader/efi_capsule.c
index 8301eed631..4463ae00fd 100644
--- a/lib/efi_loader/efi_capsule.c
+++ b/lib/efi_loader/efi_capsule.c
@@ -453,7 +453,7 @@ static efi_status_t efi_capsule_update_firmware(
image->update_hardware_instance,
handles, no_handles);
if (!fmp) {
- log_err("FMP driver not found for firmware type %pUl, hardware instance %lld\n",
+ log_err("FMP driver not found for firmware type %pUs, hardware instance %lld\n",
&image->update_image_type_id,
image->update_hardware_instance);
ret = EFI_UNSUPPORTED;
@@ -548,13 +548,13 @@ efi_status_t EFIAPI efi_update_capsule(
continue;
}
- log_debug("Capsule[%d] (guid:%pUl)\n",
+ log_debug("Capsule[%d] (guid:%pUs)\n",
i, &capsule->capsule_guid);
if (!guidcmp(&capsule->capsule_guid,
&efi_guid_firmware_management_capsule_id)) {
ret = efi_capsule_update_firmware(capsule);
} else {
- log_err("Unsupported capsule type: %pUl\n",
+ log_err("Unsupported capsule type: %pUs\n",
&capsule->capsule_guid);
ret = EFI_UNSUPPORTED;
}
diff --git a/lib/efi_loader/efi_esrt.c b/lib/efi_loader/efi_esrt.c
index 3ca55ce23a..dcc08a6d3a 100644
--- a/lib/efi_loader/efi_esrt.c
+++ b/lib/efi_loader/efi_esrt.c
@@ -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 %u\n",
+ EFI_PRINT("ESRT found entry for image %pUs 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 %u\n",
+ EFI_PRINT("ESRT allocated new entry for image %pUs at index %u\n",
img_fw_class, filled_entries);
return &entry[filled_entries];
@@ -291,7 +291,7 @@ efi_status_t efi_esrt_add_from_fmp(struct efi_firmware_management_protocol *fmp)
EFI_PRINT("ESRT entry mismatches image_type\n");
} else {
- EFI_PRINT("ESRT failed to add entry for %pUl\n",
+ EFI_PRINT("ESRT failed to add entry for %pUs\n",
&cur_img_info->image_type_id);
continue;
}
diff --git a/lib/efi_loader/efi_file.c b/lib/efi_loader/efi_file.c
index 6299fcbbf4..9aa003096c 100644
--- a/lib/efi_loader/efi_file.c
+++ b/lib/efi_loader/efi_file.c
@@ -824,7 +824,7 @@ static efi_status_t EFIAPI efi_file_getinfo(struct efi_file_handle *file,
efi_status_t ret = EFI_SUCCESS;
u16 *dst;
- EFI_ENTRY("%p, %pUl, %p, %p", file, info_type, buffer_size, buffer);
+ EFI_ENTRY("%p, %pUs, %p, %p", file, info_type, buffer_size, buffer);
if (!file || !info_type || !buffer_size ||
(*buffer_size && !buffer)) {
@@ -924,7 +924,7 @@ static efi_status_t EFIAPI efi_file_setinfo(struct efi_file_handle *file,
struct file_handle *fh = to_fh(file);
efi_status_t ret = EFI_UNSUPPORTED;
- EFI_ENTRY("%p, %pUl, %zu, %p", file, info_type, buffer_size, buffer);
+ EFI_ENTRY("%p, %pUs, %zu, %p", file, info_type, buffer_size, buffer);
if (!guidcmp(info_type, &efi_file_info_guid)) {
struct efi_file_info *info = (struct efi_file_info *)buffer;
diff --git a/lib/efi_loader/efi_hii.c b/lib/efi_loader/efi_hii.c
index 77e330285a..9f87e95e32 100644
--- a/lib/efi_loader/efi_hii.c
+++ b/lib/efi_loader/efi_hii.c
@@ -372,7 +372,7 @@ add_packages(struct efi_hii_packagelist *hii,
end = ((void *)package_list)
+ get_unaligned_le32(&package_list->package_length);
- EFI_PRINT("package_list: %pUl (%u)\n", &package_list->package_list_guid,
+ EFI_PRINT("package_list: %pUs (%u)\n", &package_list->package_list_guid,
get_unaligned_le32(&package_list->package_length));
package = ((void *)package_list) + sizeof(*package_list);
@@ -504,7 +504,7 @@ update_package_list(const struct efi_hii_database_protocol *this,
if (!package_list)
return EFI_EXIT(EFI_INVALID_PARAMETER);
- EFI_PRINT("package_list: %pUl (%u)\n", &package_list->package_list_guid,
+ EFI_PRINT("package_list: %pUs (%u)\n", &package_list->package_list_guid,
get_unaligned_le32(&package_list->package_length));
package = ((void *)package_list) + sizeof(*package_list);
@@ -583,7 +583,7 @@ list_package_lists(const struct efi_hii_database_protocol *this,
int package_cnt, package_max;
efi_status_t ret = EFI_NOT_FOUND;
- EFI_ENTRY("%p, %u, %pUl, %p, %p", this, package_type, package_guid,
+ EFI_ENTRY("%p, %u, %pUs, %p, %p", this, package_type, package_guid,
handle_buffer_length, handle);
if (!handle_buffer_length ||
@@ -598,7 +598,7 @@ list_package_lists(const struct efi_hii_database_protocol *this,
goto out;
}
- EFI_PRINT("package type=%x, guid=%pUl, length=%zu\n", (int)package_type,
+ EFI_PRINT("package type=%x, guid=%pUs, length=%zu\n", (int)package_type,
package_guid, *handle_buffer_length);
package_cnt = 0;
@@ -658,7 +658,7 @@ register_package_notify(const struct efi_hii_database_protocol *this,
efi_uintn_t notify_type,
efi_handle_t *notify_handle)
{
- EFI_ENTRY("%p, %u, %pUl, %p, %zu, %p", this, package_type,
+ EFI_ENTRY("%p, %u, %pUs, %p, %zu, %p", this, package_type,
package_guid, package_notify_fn, notify_type,
notify_handle);
@@ -721,7 +721,7 @@ get_keyboard_layout(const struct efi_hii_database_protocol *this,
struct efi_keyboard_layout_data *layout_data;
u16 layout_length;
- EFI_ENTRY("%p, %pUl, %p, %p", this, key_guid, keyboard_layout_length,
+ EFI_ENTRY("%p, %pUs, %p, %p", this, key_guid, keyboard_layout_length,
keyboard_layout);
if (!keyboard_layout_length ||
@@ -756,7 +756,7 @@ static efi_status_t EFIAPI
set_keyboard_layout(const struct efi_hii_database_protocol *this,
efi_guid_t *key_guid)
{
- EFI_ENTRY("%p, %pUl", this, key_guid);
+ EFI_ENTRY("%p, %pUs", this, key_guid);
return EFI_EXIT(EFI_NOT_FOUND);
}
diff --git a/lib/efi_loader/efi_hii_config.c b/lib/efi_loader/efi_hii_config.c
index 237e8acf84..31b0c97eb2 100644
--- a/lib/efi_loader/efi_hii_config.c
+++ b/lib/efi_loader/efi_hii_config.c
@@ -88,7 +88,7 @@ get_alt_config(const struct efi_hii_config_routing_protocol *this,
const efi_string_t alt_cfg_id,
efi_string_t *alt_cfg_resp)
{
- EFI_ENTRY("%p, \"%ls\", %pUl, \"%ls\", %p, \"%ls\", %p",
+ EFI_ENTRY("%p, \"%ls\", %pUs, \"%ls\", %p, \"%ls\", %p",
this, config_resp, guid, name, device_path,
alt_cfg_id, alt_cfg_resp);
diff --git a/lib/efi_loader/efi_image_loader.c b/lib/efi_loader/efi_image_loader.c
index 773bd0677c..255613eb72 100644
--- a/lib/efi_loader/efi_image_loader.c
+++ b/lib/efi_loader/efi_image_loader.c
@@ -676,7 +676,7 @@ static bool efi_image_authenticate(void *efi, size_t efi_size)
continue;
}
if (guidcmp(auth, &efi_guid_cert_type_pkcs7)) {
- EFI_PRINT("Certificate type not supported: %pUl\n",
+ EFI_PRINT("Certificate type not supported: %pUs\n",
auth);
continue;
}
diff --git a/lib/efi_loader/efi_rng.c b/lib/efi_loader/efi_rng.c
index 0e06546856..bb11d8d0e0 100644
--- a/lib/efi_loader/efi_rng.c
+++ b/lib/efi_loader/efi_rng.c
@@ -122,7 +122,7 @@ static efi_status_t EFIAPI getrng(struct efi_rng_protocol *this,
}
if (rng_algorithm) {
- EFI_PRINT("RNG algorithm %pUl\n", rng_algorithm);
+ EFI_PRINT("RNG algorithm %pUs\n", rng_algorithm);
if (guidcmp(rng_algorithm, &rng_raw_guid)) {
status = EFI_UNSUPPORTED;
goto back;
diff --git a/lib/efi_loader/efi_signature.c b/lib/efi_loader/efi_signature.c
index 6e3ee3c0c0..3243e2c60d 100644
--- a/lib/efi_loader/efi_signature.c
+++ b/lib/efi_loader/efi_signature.c
@@ -174,7 +174,7 @@ bool efi_signature_lookup_digest(struct efi_image_regions *regs,
for (siglist = db; siglist; siglist = siglist->next) {
/* TODO: support other hash algorithms */
if (guidcmp(&siglist->sig_type, &efi_guid_sha256)) {
- EFI_PRINT("Digest algorithm is not supported: %pUl\n",
+ EFI_PRINT("Digest algorithm is not supported: %pUs\n",
&siglist->sig_type);
break;
}
diff --git a/lib/efi_loader/efi_var_common.c b/lib/efi_loader/efi_var_common.c
index 3cbb7c96c2..9f1dd74f36 100644
--- a/lib/efi_loader/efi_var_common.c
+++ b/lib/efi_loader/efi_var_common.c
@@ -62,7 +62,7 @@ efi_status_t EFIAPI efi_get_variable(u16 *variable_name,
{
efi_status_t ret;
- EFI_ENTRY("\"%ls\" %pUl %p %p %p", variable_name, vendor, attributes,
+ EFI_ENTRY("\"%ls\" %pUs %p %p %p", variable_name, vendor, attributes,
data_size, data);
ret = efi_get_variable_int(variable_name, vendor, attributes,
@@ -96,7 +96,7 @@ efi_status_t EFIAPI efi_set_variable(u16 *variable_name,
{
efi_status_t ret;
- EFI_ENTRY("\"%ls\" %pUl %x %zu %p", variable_name, vendor, attributes,
+ EFI_ENTRY("\"%ls\" %pUs %x %zu %p", variable_name, vendor, attributes,
data_size, data);
/* Make sure that the EFI_VARIABLE_READ_ONLY flag is not set */
@@ -127,7 +127,7 @@ efi_status_t EFIAPI efi_get_next_variable_name(efi_uintn_t *variable_name_size,
{
efi_status_t ret;
- EFI_ENTRY("%p \"%ls\" %pUl", variable_name_size, variable_name, vendor);
+ EFI_ENTRY("%p \"%ls\" %pUs", variable_name_size, variable_name, vendor);
ret = efi_get_next_variable_name_int(variable_name_size, variable_name,
vendor);
diff --git a/lib/efi_selftest/efi_selftest_console.c b/lib/efi_selftest/efi_selftest_console.c
index ffd88a1e26..3187e104c4 100644
--- a/lib/efi_selftest/efi_selftest_console.c
+++ b/lib/efi_selftest/efi_selftest_console.c
@@ -70,6 +70,28 @@ static void printx(u64 p, int prec, u16 **buf)
*buf = pos;
}
+/**
+ * print_guid() - print GUID to an u16 string
+ *
+ * @p: GUID to print
+ * @buf: pointer to buffer address,
+ * on return position of terminating zero word
+ */
+static void print_uuid(u8 *p, u16 **buf)
+{
+ int i;
+ const u8 seq[] = {
+ 3, 2, 1, 0, '-', 5, 4, '-', 7, 6, '-',
+ 8, 9, 10, 11, 12, 13, 14, 15 };
+
+ for (i = 0; i < sizeof(seq); ++i) {
+ if (seq[i] == '-')
+ *(*buf)++ = u'-';
+ else
+ printx(p[seq[i]], 2, buf);
+ }
+}
+
/*
* Print an unsigned 32bit value as decimal number to an u16 string
*
@@ -212,6 +234,9 @@ void efi_st_printc(int color, const char *fmt, ...)
con_out->output_string(con_out, u);
pos = buf;
break;
+ case 'U':
+ print_uuid(va_arg(args, void*), &pos);
+ break;
default:
--c;
printx((uintptr_t)va_arg(args, void *),
diff --git a/lib/efi_selftest/efi_selftest_esrt.c b/lib/efi_selftest/efi_selftest_esrt.c
index 99251f22a5..99793dee72 100644
--- a/lib/efi_selftest/efi_selftest_esrt.c
+++ b/lib/efi_selftest/efi_selftest_esrt.c
@@ -121,28 +121,28 @@ static bool lib_test_check_uuid_entry(struct efi_system_resource_table *esrt,
for (u32 idx = 0; idx < filled_entries; idx++) {
if (!guidcmp(&entry[idx].fw_class, &img_info->image_type_id)) {
if (entry[idx].fw_version != img_info->version) {
- efi_st_error("ESRT field mismatch for entry with fw_class=%pUl\n",
+ efi_st_error("ESRT field mismatch for entry with fw_class=%pU\n",
&img_info->image_type_id);
return false;
}
if (entry[idx].lowest_supported_fw_version !=
img_info->lowest_supported_image_version) {
- efi_st_error("ESRT field mismatch for entry with fw_class=%pUl\n",
+ efi_st_error("ESRT field mismatch for entry with fw_class=%pU\n",
&img_info->image_type_id);
return false;
}
if (entry[idx].last_attempt_version !=
img_info->last_attempt_version) {
- efi_st_error("ESRT field mismatch for entry with fw_class=%pUl\n",
+ efi_st_error("ESRT field mismatch for entry with fw_class=%pU\n",
&img_info->image_type_id);
return false;
}
if (entry[idx].last_attempt_status !=
img_info->last_attempt_status) {
- efi_st_error("ESRT field mismatch for entry with fw_class=%pUl\n",
+ efi_st_error("ESRT field mismatch for entry with fw_class=%pU\n",
&img_info->image_type_id);
return false;
}
diff --git a/lib/uuid.c b/lib/uuid.c
index e4703dce2b..24571ef5fb 100644
--- a/lib/uuid.c
+++ b/lib/uuid.c
@@ -5,6 +5,7 @@
#include <common.h>
#include <command.h>
+#include <efi_api.h>
#include <env.h>
#include <rand.h>
#include <time.h>
@@ -86,11 +87,11 @@ int uuid_str_valid(const char *uuid)
return 1;
}
-#ifdef CONFIG_PARTITION_TYPE_GUID
static const struct {
const char *string;
efi_guid_t guid;
} list_guid[] = {
+#ifdef CONFIG_PARTITION_TYPE_GUID
{"system", PARTITION_SYSTEM_GUID},
{"mbr", LEGACY_MBR_PARTITION_GUID},
{"msft", PARTITION_MSFT_RESERVED_GUID},
@@ -100,6 +101,150 @@ static const struct {
{"swap", PARTITION_LINUX_SWAP_GUID},
{"lvm", PARTITION_LINUX_LVM_GUID},
{"u-boot-env", PARTITION_U_BOOT_ENVIRONMENT},
+#endif
+#ifdef CONFIG_CMD_EFIDEBUG
+ {
+ "Device Path",
+ EFI_DEVICE_PATH_PROTOCOL_GUID,
+ },
+ {
+ "Device Path To Text",
+ EFI_DEVICE_PATH_TO_TEXT_PROTOCOL_GUID,
+ },
+ {
+ "Device Path Utilities",
+ EFI_DEVICE_PATH_UTILITIES_PROTOCOL_GUID,
+ },
+ {
+ "Unicode Collation 2",
+ EFI_UNICODE_COLLATION_PROTOCOL2_GUID,
+ },
+ {
+ "Driver Binding",
+ EFI_DRIVER_BINDING_PROTOCOL_GUID,
+ },
+ {
+ "Simple Text Input",
+ EFI_SIMPLE_TEXT_INPUT_PROTOCOL_GUID,
+ },
+ {
+ "Simple Text Input Ex",
+ EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_GUID,
+ },
+ {
+ "Simple Text Output",
+ EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL_GUID,
+ },
+ {
+ "Block IO",
+ EFI_BLOCK_IO_PROTOCOL_GUID,
+ },
+ {
+ "Simple File System",
+ EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_GUID,
+ },
+ {
+ "Loaded Image",
+ EFI_LOADED_IMAGE_PROTOCOL_GUID,
+ },
+ {
+ "Graphics Output",
+ EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID,
+ },
+ {
+ "HII String",
+ EFI_HII_STRING_PROTOCOL_GUID,
+ },
+ {
+ "HII Database",
+ EFI_HII_DATABASE_PROTOCOL_GUID,
+ },
+ {
+ "HII Config Routing",
+ EFI_HII_CONFIG_ROUTING_PROTOCOL_GUID,
+ },
+ {
+ "Load File2",
+ EFI_LOAD_FILE2_PROTOCOL_GUID,
+ },
+ {
+ "Random Number Generator",
+ EFI_RNG_PROTOCOL_GUID,
+ },
+ {
+ "Simple Network",
+ EFI_SIMPLE_NETWORK_PROTOCOL_GUID,
+ },
+ {
+ "PXE Base Code",
+ EFI_PXE_BASE_CODE_PROTOCOL_GUID,
+ },
+ {
+ "Device-Tree Fixup",
+ EFI_DT_FIXUP_PROTOCOL_GUID,
+ },
+ {
+ "TCG2",
+ EFI_TCG2_PROTOCOL_GUID,
+ },
+ {
+ "System Partition",
+ PARTITION_SYSTEM_GUID
+ },
+ {
+ "Firmware Management",
+ EFI_FIRMWARE_MANAGEMENT_PROTOCOL_GUID
+ },
+ /* Configuration table GUIDs */
+ {
+ "ACPI table",
+ EFI_ACPI_TABLE_GUID,
+ },
+ {
+ "EFI System Resource Table",
+ EFI_SYSTEM_RESOURCE_TABLE_GUID,
+ },
+ {
+ "device tree",
+ EFI_FDT_GUID,
+ },
+ {
+ "SMBIOS table",
+ SMBIOS_TABLE_GUID,
+ },
+ {
+ "Runtime properties",
+ EFI_RT_PROPERTIES_TABLE_GUID,
+ },
+ {
+ "TCG2 Final Events Table",
+ EFI_TCG2_FINAL_EVENTS_TABLE_GUID,
+ },
+#endif
+#ifdef CONFIG_CMD_NVEDIT_EFI
+ /* signature database */
+ {
+ "EFI_GLOBAL_VARIABLE_GUID",
+ EFI_GLOBAL_VARIABLE_GUID,
+ },
+ {
+ "EFI_IMAGE_SECURITY_DATABASE_GUID",
+ EFI_IMAGE_SECURITY_DATABASE_GUID,
+ },
+ /* certificate types */
+ {
+ "EFI_CERT_SHA256_GUID",
+ EFI_CERT_SHA256_GUID,
+ },
+ {
+ "EFI_CERT_X509_GUID",
+ EFI_CERT_X509_GUID,
+ },
+ {
+ "EFI_CERT_TYPE_PKCS7_GUID",
+ EFI_CERT_TYPE_PKCS7_GUID,
+ },
+#endif
};
/*
@@ -139,7 +284,6 @@ const char *uuid_guid_get_str(const unsigned char *guid_bin)
}
return NULL;
}
-#endif
/*
* uuid_str_to_bin() - convert string UUID or GUID to big endian binary data.
diff --git a/lib/vsprintf.c b/lib/vsprintf.c
index de9f236b90..2c84649fa8 100644
--- a/lib/vsprintf.c
+++ b/lib/vsprintf.c
@@ -255,7 +255,7 @@ static char *number(char *buf, char *end, u64 num,
return buf;
}
-static char *string(char *buf, char *end, char *s, int field_width,
+static char *string(char *buf, char *end, const char *s, int field_width,
int precision, int flags)
{
int len, i;
@@ -387,12 +387,14 @@ static char *ip4_addr_string(char *buf, char *end, u8 *addr, int field_width,
* %pUB: 01020304-0506-0708-090A-0B0C0D0E0F10
* %pUl: 04030201-0605-0807-090a-0b0c0d0e0f10
* %pUL: 04030201-0605-0807-090A-0B0C0D0E0F10
+ * %pUs: GUID text representation if known or fallback to %pUl
*/
static char *uuid_string(char *buf, char *end, u8 *addr, int field_width,
int precision, int flags, const char *fmt)
{
char uuid[UUID_STR_LEN + 1];
int str_format;
+ const char *str;
switch (*(++fmt)) {
case 'L':
@@ -404,6 +406,13 @@ static char *uuid_string(char *buf, char *end, u8 *addr, int field_width,
case 'B':
str_format = UUID_STR_FORMAT_STD | UUID_STR_UPPER_CASE;
break;
+ case 's':
+ str = uuid_guid_get_str(addr);
+ if (str)
+ return string(buf, end, str,
+ field_width, precision, flags);
+ str_format = UUID_STR_FORMAT_GUID;
+ break;
default:
str_format = UUID_STR_FORMAT_STD;
break;