Merge tag 'efi-2022-04-rc1-2' of https://source.denx.de/u-boot/custodians/u-boot-efi
authorTom Rini <trini@konsulko.com>
Sat, 22 Jan 2022 20:43:36 +0000 (15:43 -0500)
committerTom Rini <trini@konsulko.com>
Sat, 22 Jan 2022 20:43:36 +0000 (15:43 -0500)
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

27 files changed:
arch/Kconfig
cmd/efidebug.c
cmd/nvedit_efi.c
disk/part_efi.c
doc/build/gcc.rst
doc/develop/index.rst
doc/develop/printf.rst [new file with mode: 0644]
include/efi_api.h
include/efi_dt_fixup.h
include/efi_rng.h
include/efi_tcg2.h
lib/crypto/public_key.c
lib/efi_loader/efi_boottime.c
lib/efi_loader/efi_capsule.c
lib/efi_loader/efi_esrt.c
lib/efi_loader/efi_file.c
lib/efi_loader/efi_hii.c
lib/efi_loader/efi_hii_config.c
lib/efi_loader/efi_image_loader.c
lib/efi_loader/efi_rng.c
lib/efi_loader/efi_signature.c
lib/efi_loader/efi_var_common.c
lib/efi_selftest/efi_selftest_console.c
lib/efi_selftest/efi_selftest_esrt.c
lib/uuid.c
lib/vsprintf.c
test/print_ut.c

index f2deec1..343db9e 100644 (file)
@@ -175,6 +175,7 @@ config SANDBOX
        imply AVB_VERIFY
        imply LIBAVB
        imply CMD_AVB
+       imply PARTITION_TYPE_GUID
        imply SCP03
        imply CMD_SCP03
        imply UDP_FUNCTION_FASTBOOT
index a977ca9..66ce0fc 100644 (file)
@@ -502,149 +502,6 @@ static int do_efi_show_drivers(struct cmd_tbl *cmdtp, int flag,
        return CMD_RET_SUCCESS;
 }
 
-static const struct {
-       const char *text;
-       const efi_guid_t guid;
-} guid_list[] = {
-       {
-               "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,
-       },
-       {
-               "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,
-       },
-};
-
-/**
- * get_guid_text - get string of GUID
- *
- * Return description of GUID.
- *
- * @guid:      GUID
- * Return:     description of GUID or NULL
- */
-static const char *get_guid_text(const void *guid)
-{
-       int i;
-
-       for (i = 0; i < ARRAY_SIZE(guid_list); i++) {
-               /*
-                * As guidcmp uses memcmp() we can safely accept unaligned
-                * GUIDs.
-                */
-               if (!guidcmp(&guid_list[i].guid, guid))
-                       return guid_list[i].text;
-       }
-
-       return NULL;
-}
-
 /**
  * do_efi_show_handles() - show UEFI handles
  *
@@ -664,7 +521,6 @@ static int do_efi_show_handles(struct cmd_tbl *cmdtp, int flag,
        efi_handle_t *handles;
        efi_guid_t **guid;
        efi_uintn_t num, count, i, j;
-       const char *guid_text;
        efi_status_t ret;
 
        ret = EFI_CALL(efi_locate_handle_buffer(ALL_HANDLES, NULL, NULL,
@@ -692,11 +548,7 @@ static int do_efi_show_handles(struct cmd_tbl *cmdtp, int flag,
                        else
                                putc(' ');
 
-                       guid_text = get_guid_text(guid[j]);
-                       if (guid_text)
-                               puts(guid_text);
-                       else
-                               printf("%pUl", guid[j]);
+                       printf("%pUs", guid[j]);
                }
                putc('\n');
        }
@@ -873,14 +725,10 @@ static int do_efi_show_tables(struct cmd_tbl *cmdtp, int flag,
                              int argc, char *const argv[])
 {
        efi_uintn_t i;
-       const char *guid_str;
 
-       for (i = 0; i < systab.nr_tables; ++i) {
-               guid_str = get_guid_text(&systab.tables[i].guid);
-               if (!guid_str)
-                       guid_str = "";
-               printf("%pUl %s\n", &systab.tables[i].guid, guid_str);
-       }
+       for (i = 0; i < systab.nr_tables; ++i)
+               printf("%pUl (%pUs)\n",
+                      &systab.tables[i].guid, &systab.tables[i].guid);
 
        return CMD_RET_SUCCESS;
 }
index 710d923..7ebb14e 100644 (file)
@@ -39,40 +39,6 @@ static const struct {
        {EFI_VARIABLE_READ_ONLY, "RO"},
 };
 
-static const struct {
-       efi_guid_t guid;
-       char *text;
-} efi_guid_text[] = {
-       /* signature database */
-       {EFI_GLOBAL_VARIABLE_GUID, "EFI_GLOBAL_VARIABLE_GUID"},
-       {EFI_IMAGE_SECURITY_DATABASE_GUID, "EFI_IMAGE_SECURITY_DATABASE_GUID"},
-       /* certificate type */
-       {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"},
-};
-
-static const char unknown_guid[] = "";
-
-/**
- * efi_guid_to_str() - convert guid to readable name
- *
- * @guid:      GUID
- * Return:     string for GUID
- *
- * convert guid to readable name
- */
-static const char *efi_guid_to_str(const efi_guid_t *guid)
-{
-       int i;
-
-       for (i = 0; i < ARRAY_SIZE(efi_guid_text); i++)
-               if (!guidcmp(guid, &efi_guid_text[i].guid))
-                       return efi_guid_text[i].text;
-
-       return unknown_guid;
-}
-
 /**
  * efi_dump_single_var() - show information about a UEFI variable
  *
@@ -111,7 +77,7 @@ static void efi_dump_single_var(u16 *name, const efi_guid_t *guid, bool verbose)
                goto out;
 
        rtc_to_tm(time, &tm);
-       printf("%ls:\n    %pUl %s\n", name, guid, efi_guid_to_str(guid));
+       printf("%ls:\n    %pUl (%pUs)\n", name, guid, guid);
        if (attributes & EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS)
                printf("    %04d-%02d-%02d %02d:%02d:%02d\n", tm.tm_year,
                       tm.tm_mon, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec);
@@ -497,8 +463,7 @@ int do_env_set_efi(struct cmd_tbl *cmdtp, int flag, int argc,
        }
 
        if (verbose) {
-               printf("GUID: %pUl %s\n", &guid,
-                      efi_guid_to_str((const efi_guid_t *)&guid));
+               printf("GUID: %pUl (%pUs)\n", &guid, &guid);
                printf("Attributes: 0x%x\n", attributes);
        }
 
index 611654f..f1f3e5b 100644 (file)
@@ -221,8 +221,7 @@ void part_print_efi(struct blk_desc *dev_desc)
        ALLOC_CACHE_ALIGN_BUFFER_PAD(gpt_header, gpt_head, 1, dev_desc->blksz);
        gpt_entry *gpt_pte = NULL;
        int i = 0;
-       char uuid[UUID_STR_LEN + 1];
-       unsigned char *uuid_bin;
+       unsigned char *uuid;
 
        /* This function validates AND fills in the GPT header and PTE */
        if (find_valid_gpt(dev_desc, gpt_head, &gpt_pte) != 1)
@@ -245,17 +244,13 @@ void part_print_efi(struct blk_desc *dev_desc)
                        le64_to_cpu(gpt_pte[i].ending_lba),
                        print_efiname(&gpt_pte[i]));
                printf("\tattrs:\t0x%016llx\n", gpt_pte[i].attributes.raw);
-               uuid_bin = (unsigned char *)gpt_pte[i].partition_type_guid.b;
-               uuid_bin_to_str(uuid_bin, uuid, UUID_STR_FORMAT_GUID);
-               printf("\ttype:\t%s\n", uuid);
-               if (CONFIG_IS_ENABLED(PARTITION_TYPE_GUID)) {
-                       const char *type = uuid_guid_get_str(uuid_bin);
-                       if (type)
-                               printf("\ttype:\t%s\n", type);
-               }
-               uuid_bin = (unsigned char *)gpt_pte[i].unique_partition_guid.b;
-               uuid_bin_to_str(uuid_bin, uuid, UUID_STR_FORMAT_GUID);
-               printf("\tguid:\t%s\n", uuid);
+               uuid = (unsigned char *)gpt_pte[i].partition_type_guid.b;
+               if (CONFIG_IS_ENABLED(PARTITION_TYPE_GUID))
+                       printf("\ttype:\t%pUl\n\t\t(%pUs)\n", uuid, uuid);
+               else
+                       printf("\ttype:\t%pUl\n", uuid);
+               uuid = (unsigned char *)gpt_pte[i].unique_partition_guid.b;
+               printf("\tguid:\t%pUl\n", uuid);
        }
 
        /* Remember to free pte */
index 0e0d87a..b883cf7 100644 (file)
@@ -59,7 +59,7 @@ For building U-Boot on Alpine Linux at least the following packages are needed:
 .. code-block:: bash
 
     apk add alpine-sdk bc bison dtc flex linux-headers ncurses-dev \
-      openssl-dev python3 py3-setuptools python3-dev sdl2
+      openssl-dev perl python3 py3-setuptools python3-dev sdl2-dev
 
 Prerequisites
 -------------
index 9592d19..c84b10e 100644 (file)
@@ -21,6 +21,7 @@ Implementation
    logging
    makefiles
    menus
+   printf
    uefi/index
    version
 
diff --git a/doc/develop/printf.rst b/doc/develop/printf.rst
new file mode 100644 (file)
index 0000000..7b9aea0
--- /dev/null
@@ -0,0 +1,199 @@
+.. SPDX-License-Identifier: GPL-2.0+
+
+Printf() format codes
+=====================
+
+Each conversion specification consists of:
+
+* leading '%' character
+* zero or more flags
+* an optional minimum field width
+* an optional precision field preceded by '.'
+* an optional length modifier
+* a conversion specifier
+
+Flags
+-----
+
+'space'
+       fill up with spaces to reach the specified length
+
+\-
+       left justify
+
+\+
+       add sign field of decimal conversion
+
+#
+       convert to alternative form
+
+       * prepend 0 to octal output
+       * ignored for decimal output
+       * prepend 0X to hexadecimal output
+
+0
+       fill up with zeroes to reach the specified length
+
+
+Integer types
+-------------
+
+Length modifiers
+''''''''''''''''
+
+The optional length modifier specifies the size of the argument.
+
+no modifier
+       bool, enum, short, int are passed as int
+
+%h
+       convert to (unsigned) short before printing.
+       Only the low 16 bits are printed.
+
+%hh
+       **not implemented**
+
+%j
+       **not implemented**
+
+%l
+       long
+
+%ll, %L
+       long long
+
+%t
+       ptr_diff_t
+
+%z, %Z
+       size_t, ssize_t
+
+Conversion specifiers
+'''''''''''''''''''''
+
+Conversion specifiers control the output.
+
+%d
+       signed decimal
+
+%u
+       unsigned decimal
+
+%o
+       unsigned octal
+
+%x
+       unsigned lower case hexadecimal
+
+%X
+       unsigned upper case hexadecimal
+
+The floating point conversion specifiers are not implemented:
+
+* %a
+* %A
+* %e
+* %E
+* %f
+* %F
+* %g
+* %G
+
+The following tables shows the correct combinations of modifiers and specifiers
+for the individual integer types.
+
+=================== ==================
+Type                Format specifier
+=================== ==================
+bool               %d, %x
+char                %d, %x
+unsigned char       %u, %x
+short               %d, %x
+unsigned short      %u, %x
+int                 %d, %x
+unsigned int        %d, %x
+long                %ld, %lx
+unsigned long       %lu, %lx
+long long           %lld, %llx
+unsigned long long  %llu, %llx
+off_t               %llu, %llx
+ptr_diff_t         %td, %tx
+fdt_addr_t          %pa, see pointers
+fdt_size_t          %pa, see pointers
+phys_addr_t         %pa, see pointers
+phys_size_t         %pa, see pointers
+resource_size_t     %pa, see pointers
+size_t              %zu, %zx, %zX
+ssize_t             %zd, %zx, %zX
+=================== ==================
+
+Characters
+----------
+
+%%
+       a '%' character is written
+
+%c
+        prints a single character
+
+%lc
+       **not implemented**
+
+Strings
+-------
+
+%s
+        prints a UTF-8 string (char \*)
+
+%ls
+        prints a UTF-16 string (u16 \*)
+
+Pointers
+--------
+
+%p
+        prints the address the pointer points to hexadecimally
+
+%pa, %pap
+        prints the value of a phys_addr_t value that the pointer points to
+        preceded with 0x and zero padding according to the size of phys_addr_t.
+       The following types should be printed this way:
+
+       * fdt_addr_t
+       * fdt_size_t
+       * phys_addr_t
+       * phys_size_t
+       * resource_size_t
+
+%pD
+        prints a UEFI device path
+
+%pi4, %pI4
+        prints IPv4 address, e.g. '192.168.0.1'
+
+%pm
+        prints MAC address without separators, e.g. '001122334455'
+
+%pM
+        print MAC address colon separated, e.g. '00:01:02:03:04:05'
+
+%pUb
+        prints GUID big endian, lower case
+        e.g. '00112233-4455-6677-8899-aabbccddeeff'
+
+%pUB
+        prints GUID big endian, upper case
+        e.g. '00112233-4455-6677-8899-AABBCCDDEEFF'
+
+%pUl
+        prints GUID little endian, lower case
+        e.g. '33221100-5544-7766-8899-aabbccddeeff'
+
+%pUL
+        prints GUID little endian, upper case
+        e.g. '33221100-5544-7766-8899-AABBCCDDEEFF'
+
+%pUs
+        prints text description of a GUID or if such is not known little endian,
+        lower case, e.g. 'system' for a GUID identifying an EFI system
+       partition.
index ec9fa89..8d5d835 100644 (file)
@@ -426,6 +426,18 @@ struct efi_runtime_services {
        EFI_GUID(0x1e2ed096, 0x30e2, 0x4254, 0xbd, \
                 0x89, 0x86, 0x3b, 0xbe, 0xf8, 0x23, 0x25)
 
+#define EFI_RNG_PROTOCOL_GUID \
+       EFI_GUID(0x3152bca5, 0xeade, 0x433d, 0x86, 0x2e, \
+                0xc0, 0x1c, 0xdc, 0x29, 0x1f, 0x44)
+
+#define EFI_DT_FIXUP_PROTOCOL_GUID \
+       EFI_GUID(0xe617d64c, 0xfe08, 0x46da, 0xf4, 0xdc, \
+                0xbb, 0xd5, 0x87, 0x0c, 0x73, 0x00)
+
+#define EFI_TCG2_PROTOCOL_GUID \
+       EFI_GUID(0x607f766c, 0x7455, 0x42be, 0x93, \
+                0x0b, 0xe4, 0xd7, 0x6d, 0xb2, 0x72, 0x0f)
+
 /**
  * struct efi_configuration_table - EFI Configuration Table
  *
index 9066e8d..8338253 100644 (file)
@@ -7,10 +7,6 @@
 
 #include <efi_api.h>
 
-#define EFI_DT_FIXUP_PROTOCOL_GUID \
-       EFI_GUID(0xe617d64c, 0xfe08, 0x46da, 0xf4, 0xdc, \
-                0xbb, 0xd5, 0x87, 0x0c, 0x73, 0x00)
-
 #define EFI_DT_FIXUP_PROTOCOL_REVISION 0x00010000
 
 /* Add nodes and update properties */
index 35f5967..3c62238 100644 (file)
 #include <efi_api.h>
 
 /* EFI random number generation protocol related GUID definitions */
-#define EFI_RNG_PROTOCOL_GUID \
-       EFI_GUID(0x3152bca5, 0xeade, 0x433d, 0x86, 0x2e, \
-                0xc0, 0x1c, 0xdc, 0x29, 0x1f, 0x44)
-
 #define EFI_RNG_ALGORITHM_RAW \
        EFI_GUID(0xe43176d7, 0xb6e8, 0x4827, 0xb7, 0x84, \
                 0x7f, 0xfd, 0xc4, 0xb6, 0x85, 0x61)
index 50a59f9..874306d 100644 (file)
 #include <efi_api.h>
 #include <tpm-v2.h>
 
-#define EFI_TCG2_PROTOCOL_GUID \
-       EFI_GUID(0x607f766c, 0x7455, 0x42be, 0x93, \
-                0x0b, 0xe4, 0xd7, 0x6d, 0xb2, 0x72, 0x0f)
-
 /* TPMV2 only */
 #define TCG2_EVENT_LOG_FORMAT_TCG_2 0x00000002
 #define EFI_TCG2_EXTEND_ONLY 0x0000000000000001
index df6033c..3671ed1 100644 (file)
@@ -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;
index 20b6969..37b9c68 100644 (file)
@@ -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 */
index 8301eed..4463ae0 100644 (file)
@@ -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;
                }
index 3ca55ce..dcc08a6 100644 (file)
@@ -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;
                }
index 6299fcb..9aa0030 100644 (file)
@@ -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;
index 77e3302..9f87e95 100644 (file)
@@ -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);
 }
index 237e8ac..31b0c97 100644 (file)
@@ -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);
 
index 773bd06..255613e 100644 (file)
@@ -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;
                        }
index 0e06546..bb11d8d 100644 (file)
@@ -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;
index 6e3ee3c..3243e2c 100644 (file)
@@ -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;
                }
index 3cbb7c9..9f1dd74 100644 (file)
@@ -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);
index ffd88a1..3187e10 100644 (file)
@@ -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 *),
index 99251f2..99793de 100644 (file)
@@ -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;
                        }
index e4703dc..24571ef 100644 (file)
@@ -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.
index de9f236..2c84649 100644 (file)
@@ -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;
index 7b2e7bb..194387f 100644 (file)
@@ -30,17 +30,29 @@ static int print_guid(struct unit_test_state *uts)
        unsigned char guid[16] = {
                1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16
        };
+       unsigned char guid_esp[16] = {
+               0x28, 0x73, 0x2a, 0xc1, 0x1f, 0xf8, 0xd2, 0x11,
+               0xBA, 0x4B, 0x00, 0xA0, 0xC9, 0x3E, 0xC9, 0x3B
+       };
        char str[40];
        int ret;
 
        sprintf(str, "%pUb", guid);
-       ut_assertok(strcmp("01020304-0506-0708-090a-0b0c0d0e0f10", str));
+       ut_asserteq_str("01020304-0506-0708-090a-0b0c0d0e0f10", str);
        sprintf(str, "%pUB", guid);
-       ut_assertok(strcmp("01020304-0506-0708-090A-0B0C0D0E0F10", str));
+       ut_asserteq_str("01020304-0506-0708-090A-0B0C0D0E0F10", str);
        sprintf(str, "%pUl", guid);
-       ut_assertok(strcmp("04030201-0605-0807-090a-0b0c0d0e0f10", str));
+       ut_asserteq_str("04030201-0605-0807-090a-0b0c0d0e0f10", str);
+       sprintf(str, "%pUs", guid);
+       ut_asserteq_str("04030201-0605-0807-090a-0b0c0d0e0f10", str);
        sprintf(str, "%pUL", guid);
-       ut_assertok(strcmp("04030201-0605-0807-090A-0B0C0D0E0F10", str));
+       ut_asserteq_str("04030201-0605-0807-090A-0B0C0D0E0F10", str);
+       sprintf(str, "%pUs", guid_esp);
+       if (IS_ENABLED(CONFIG_PARTITION_TYPE_GUID)) { /* brace needed */
+               ut_asserteq_str("system", str);
+       } else {
+               ut_asserteq_str("c12a7328-f81f-11d2-ba4b-00a0c93ec93b", str);
+       }
        ret = snprintf(str, 4, "%pUL", guid);
        ut_asserteq(0, str[3]);
        ut_asserteq(36, ret);