]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[efi] Fix recorded overall size of headers in NT optional header
authorMichael Brown <mcb30@ipxe.org>
Thu, 23 Nov 2023 14:54:12 +0000 (14:54 +0000)
committerMichael Brown <mcb30@ipxe.org>
Thu, 23 Nov 2023 15:07:46 +0000 (15:07 +0000)
Commit 1e4c378 ("[efi] Shrink size of data directory in PE header")
reduced the number of entries used in the data directory and reduced
the recorded size of the NT "optional" header, but did not also adjust
the recorded overall size of the PE headers, resulting in unused space
between the PE headers and the first section.

Fix by reducing the initial recorded size of the PE headers by the
size of the omitted data directory entries.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/util/elf2efi.c

index a8074915a21e4e86593a7c1d96ee50c299e9eb63..76d02f2499ca626f0eaf9f41a391f85a40ae742a 100644 (file)
@@ -230,7 +230,12 @@ static struct pe_header efi_pe_header = {
                        .SectionAlignment = EFI_IMAGE_ALIGN,
                        .FileAlignment = EFI_FILE_ALIGN,
                        .SizeOfImage = EFI_IMAGE_ALIGN,
-                       .SizeOfHeaders = sizeof ( efi_pe_header ),
+                       .SizeOfHeaders =
+                               ( sizeof ( efi_pe_header ) -
+                                 ( ( EFI_IMAGE_NUMBER_OF_DIRECTORY_ENTRIES -
+                                     NUMBER_OF_DIRECTORY_ENTRIES ) *
+                                   sizeof ( efi_pe_header.nt.OptionalHeader.
+                                            DataDirectory[0] ) ) ),
                        .DllCharacteristics =
                                IMAGE_DLLCHARACTERISTICS_NX_COMPAT,
                        .NumberOfRvaAndSizes = NUMBER_OF_DIRECTORY_ENTRIES,