pe_header_find_section(pe_header, sections, ".osrel") &&
pe_header_find_section(pe_header, sections, ".linux");
}
+
+bool pe_is_addon(const PeHeader *pe_header, const IMAGE_SECTION_HEADER *sections) {
+ assert(pe_header);
+ assert(sections || le16toh(pe_header->pe.NumberOfSections) == 0);
+
+ if (le16toh(pe_header->optional.Subsystem) != IMAGE_SUBSYSTEM_EFI_APPLICATION)
+ return false;
+
+ /* Add-ons do not have a Linux kernel, but do have either .cmdline or .dtb (currently) */
+ return !pe_header_find_section(pe_header, sections, ".linux") &&
+ (pe_header_find_section(pe_header, sections, ".cmdline") ||
+ pe_header_find_section(pe_header, sections, ".dtb") ||
+ pe_header_find_section(pe_header, sections, ".ucode"));
+}
int pe_read_section_data(int fd, const PeHeader *pe_header, const IMAGE_SECTION_HEADER *sections, const char *name, size_t max_size, void **ret, size_t *ret_size);
bool pe_is_uki(const PeHeader *pe_header, const IMAGE_SECTION_HEADER *sections);
+bool pe_is_addon(const PeHeader *pe_header, const IMAGE_SECTION_HEADER *sections);