
30 May
2024
30 May
'24
4:56 p.m.
Hi Caleb,
[...]
#include <crypto/pkcs7.h> #include <crypto/pkcs7_parser.h> #include <linux/err.h> diff --git a/lib/efi_loader/efi_firmware.c b/lib/efi_loader/efi_firmware.c index ba5aba098c0f..a8dafe4f01a5 100644 --- a/lib/efi_loader/efi_firmware.c +++ b/lib/efi_loader/efi_firmware.c @@ -244,8 +244,71 @@ void efi_firmware_fill_version_info(struct efi_firmware_image_descriptor *image_
free(var_state);
}
+#if CONFIG_IS_ENABLED(EFI_CAPSULE_DYNAMIC_UUIDS) +/**
- efi_capsule_update_info_gen_ids - generate GUIDs for the images
- Generate the image_type_id for each image in the update_info.images array
- using the first compatible from the device tree and a salt
- UUID defined at build time.
- Returns: status code
- */
+static efi_status_t efi_capsule_update_info_gen_ids(void) +{
int ret, i;
struct uuid namespace;
const char *compatible; /* Full array including null bytes */
struct efi_fw_image *fw_array;
fw_array = update_info.images;
/* Check if we need to run (there are images and we didn't already generate their IDs) */
if (!update_info.num_images ||
memchr_inv(&fw_array[0].image_type_id, 0, sizeof(fw_array[0].image_type_id)))
Why not just go a guidcmp()? memchr_inv() will return the first invalid match, but we don't need that
return EFI_SUCCESS;
ret = uuid_str_to_bin(CONFIG_EFI_CAPSULE_NAMESPACE_UUID,
(unsigned char *)&namespace, UUID_STR_FORMAT_GUID);
if (ret) {
log_debug("%s: CONFIG_EFI_CAPSULE_NAMESPACE_UUID is invalid: %d\n", __func__, ret);
return EFI_UNSUPPORTED;
}
compatible = ofnode_read_string(ofnode_root(), "compatible");
if (!compatible) {
log_debug("%s: model or compatible not defined\n", __func__);
return EFI_UNSUPPORTED;
}
if (!update_info.num_images) {
log_debug("%s: no fw_images, make sure update_info.num_images is set\n", __func__);
return -ENODATA;
}
[...]
Cheers /Ilias