1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- From ff406eff25465932b97a2857ee5a75fd0957e9b9 Mon Sep 17 00:00:00 2001
- From: Peter Jones <pjones@redhat.com>
- Date: Thu, 11 Feb 2021 17:07:33 +0100
- Subject: [PATCH] util/mkimage: Improve data_size value calculation
- According to "Microsoft Portable Executable and Common Object File Format
- Specification", the Optional Header SizeOfInitializedData field contains:
- Size of the initialized data section, or the sum of all such sections if
- there are multiple data sections.
- Make this explicit by adding the GRUB kernel data size to the sum of all
- the modules sizes. The ALIGN_UP() is not required by the PE spec but do
- it to avoid alignment issues.
- Signed-off-by: Peter Jones <pjones@redhat.com>
- Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
- Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
- Signed-off-by: Stefan Sørensen <stefan.sorensen@spectralink.com>
- ---
- util/mkimage.c | 6 +++++-
- 1 file changed, 5 insertions(+), 1 deletion(-)
- diff --git a/util/mkimage.c b/util/mkimage.c
- index deaef56..853a521 100644
- --- a/util/mkimage.c
- +++ b/util/mkimage.c
- @@ -1260,6 +1260,7 @@ grub_install_generate_image (const char *dir, const char *prefix,
- void *pe_img;
- grub_uint8_t *header;
- void *sections;
- + size_t scn_size;
- size_t pe_size;
- struct grub_pe32_coff_header *c;
- struct grub_pe32_section_table *text_section, *data_section;
- @@ -1362,7 +1363,10 @@ grub_install_generate_image (const char *dir, const char *prefix,
- | GRUB_PE32_SCN_MEM_EXECUTE
- | GRUB_PE32_SCN_MEM_READ);
-
- - PE_OHDR (o32, o64, data_size) = grub_host_to_target32 (reloc_addr - layout.exec_size - header_size);
- + scn_size = ALIGN_UP (layout.kernel_size - layout.exec_size, GRUB_PE32_FILE_ALIGNMENT);
- + PE_OHDR (o32, o64, data_size) = grub_host_to_target32 (scn_size +
- + ALIGN_UP (total_module_size,
- + GRUB_PE32_FILE_ALIGNMENT));
-
- data_section = text_section + 1;
- strcpy (data_section->name, ".data");
- --
- 2.14.2
|