On Fri, 2025-01-24 at 08:20 -0500, Xiaoyao Li wrote: > +int tdvf_parse_metadata(TdxFirmware *fw, void *flash_ptr, int size) > +{ > + g_autofree TdvfSectionEntry *sections = NULL; > + TdvfMetadata *metadata; > + ssize_t entries_size; > + int i; > + > + metadata = tdvf_get_metadata(flash_ptr, size); > + if (!metadata) { > + return -EINVAL; > + } > + > + /* load and parse metadata entries */ > + fw->nr_entries = le32_to_cpu(metadata->NumberOfSectionEntries); > + if (fw->nr_entries < 2) { > + error_report("Invalid number of fw entries (%u) in TDVF > Metadata", > + fw->nr_entries); > + return -EINVAL; > + } > + > + entries_size = fw->nr_entries * sizeof(TdvfSectionEntry); > + if (metadata->Length != sizeof(*metadata) + entries_size) { > + error_report("TDVF metadata len (0x%x) mismatch, expected > (0x%x)", > + metadata->Length, > + (uint32_t)(sizeof(*metadata) + entries_size)); > + return -EINVAL; > + } > + > + fw->entries = g_new(TdxFirmwareEntry, fw->nr_entries); > + sections = g_new(TdvfSectionEntry, fw->nr_entries); > + > + if (!memcpy(sections, (void *)metadata + sizeof(*metadata), > entries_size)) { > + error_report("Failed to read TDVF section entries"); memcpy() cannot fail...