diff --git a/src/boot/efi/pe.c b/src/boot/efi/pe.c index 8d7061d55b..2b260d4212 100644 --- a/src/boot/efi/pe.c +++ b/src/boot/efi/pe.c @@ -142,12 +142,13 @@ static void locate_sections( const PeSectionHeader section_table[], UINTN n_table, const char * const sections[], - UINTN *addrs, UINTN *offsets, - UINTN *sizes) { + UINTN *sizes, + bool in_memory) { assert(section_table); assert(sections); + assert(offsets); assert(sizes); for (UINTN i = 0; i < n_table; i++) { @@ -157,10 +158,7 @@ static void locate_sections( if (memcmp(sect->Name, sections[j], strlen8(sections[j])) != 0) continue; - if (addrs) - addrs[j] = sect->VirtualAddress; - if (offsets) - offsets[j] = sect->PointerToRawData; + offsets[j] = in_memory ? sect->VirtualAddress : sect->PointerToRawData; sizes[j] = sect->VirtualSize; } } @@ -178,8 +176,8 @@ static uint32_t get_compatibility_entry_address(const DosFileHeader *dos, const pe->FileHeader.NumberOfSections, sections, &addr, - NULL, - &size); + &size, + /*in_memory=*/true); if (size == 0) return 0; @@ -270,8 +268,8 @@ EFI_STATUS pe_memory_locate_sections(const void *base, const char * const sectio pe->FileHeader.NumberOfSections, sections, addrs, - NULL, - sizes); + sizes, + /*in_memory=*/true); return EFI_SUCCESS; } @@ -334,7 +332,7 @@ EFI_STATUS pe_file_locate_sections( return EFI_LOAD_ERROR; locate_sections(section_table, pe.FileHeader.NumberOfSections, - sections, NULL, offsets, sizes); + sections, offsets, sizes, /*in_memory=*/false); return EFI_SUCCESS; }