1*4882a593SmuzhiyunFrom ff406eff25465932b97a2857ee5a75fd0957e9b9 Mon Sep 17 00:00:00 2001 2*4882a593SmuzhiyunFrom: Peter Jones <pjones@redhat.com> 3*4882a593SmuzhiyunDate: Thu, 11 Feb 2021 17:07:33 +0100 4*4882a593SmuzhiyunSubject: [PATCH] util/mkimage: Improve data_size value calculation 5*4882a593Smuzhiyun 6*4882a593SmuzhiyunAccording to "Microsoft Portable Executable and Common Object File Format 7*4882a593SmuzhiyunSpecification", the Optional Header SizeOfInitializedData field contains: 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun Size of the initialized data section, or the sum of all such sections if 10*4882a593Smuzhiyun there are multiple data sections. 11*4882a593Smuzhiyun 12*4882a593SmuzhiyunMake this explicit by adding the GRUB kernel data size to the sum of all 13*4882a593Smuzhiyunthe modules sizes. The ALIGN_UP() is not required by the PE spec but do 14*4882a593Smuzhiyunit to avoid alignment issues. 15*4882a593Smuzhiyun 16*4882a593SmuzhiyunSigned-off-by: Peter Jones <pjones@redhat.com> 17*4882a593SmuzhiyunSigned-off-by: Javier Martinez Canillas <javierm@redhat.com> 18*4882a593SmuzhiyunReviewed-by: Daniel Kiper <daniel.kiper@oracle.com> 19*4882a593SmuzhiyunSigned-off-by: Stefan Sørensen <stefan.sorensen@spectralink.com> 20*4882a593Smuzhiyun--- 21*4882a593Smuzhiyun util/mkimage.c | 6 +++++- 22*4882a593Smuzhiyun 1 file changed, 5 insertions(+), 1 deletion(-) 23*4882a593Smuzhiyun 24*4882a593Smuzhiyundiff --git a/util/mkimage.c b/util/mkimage.c 25*4882a593Smuzhiyunindex deaef56..853a521 100644 26*4882a593Smuzhiyun--- a/util/mkimage.c 27*4882a593Smuzhiyun+++ b/util/mkimage.c 28*4882a593Smuzhiyun@@ -1260,6 +1260,7 @@ grub_install_generate_image (const char *dir, const char *prefix, 29*4882a593Smuzhiyun void *pe_img; 30*4882a593Smuzhiyun grub_uint8_t *header; 31*4882a593Smuzhiyun void *sections; 32*4882a593Smuzhiyun+ size_t scn_size; 33*4882a593Smuzhiyun size_t pe_size; 34*4882a593Smuzhiyun struct grub_pe32_coff_header *c; 35*4882a593Smuzhiyun struct grub_pe32_section_table *text_section, *data_section; 36*4882a593Smuzhiyun@@ -1362,7 +1363,10 @@ grub_install_generate_image (const char *dir, const char *prefix, 37*4882a593Smuzhiyun | GRUB_PE32_SCN_MEM_EXECUTE 38*4882a593Smuzhiyun | GRUB_PE32_SCN_MEM_READ); 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun- PE_OHDR (o32, o64, data_size) = grub_host_to_target32 (reloc_addr - layout.exec_size - header_size); 41*4882a593Smuzhiyun+ scn_size = ALIGN_UP (layout.kernel_size - layout.exec_size, GRUB_PE32_FILE_ALIGNMENT); 42*4882a593Smuzhiyun+ PE_OHDR (o32, o64, data_size) = grub_host_to_target32 (scn_size + 43*4882a593Smuzhiyun+ ALIGN_UP (total_module_size, 44*4882a593Smuzhiyun+ GRUB_PE32_FILE_ALIGNMENT)); 45*4882a593Smuzhiyun 46*4882a593Smuzhiyun data_section = text_section + 1; 47*4882a593Smuzhiyun strcpy (data_section->name, ".data"); 48*4882a593Smuzhiyun-- 49*4882a593Smuzhiyun2.14.2 50*4882a593Smuzhiyun 51