Skip to contentSkip to conversation

mkimage: zero fill alignment space

PATCH Superseded Andrei Borzenkov 2 participants 5 messages Oct 30, 2015 – Nov 2, 2015

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 mkimage: zero fill alignment space

This did not cause real problem but is good for reproducible builds. I hit it with recent bootinfoscript that displays embedded config; I was puzzled by random garbage at the end.

Also remove redundant zeroing code where we fill in the whole memory block anyway.

---
 util/mkimage.c | 29 +++++++++++++----------------
 1 file changed, 13 insertions(+), 16 deletions(-)
util/mkimage.c +13 -16
index 35df998..1c522fe 100644
@@ -992,7 +992,7 @@ grub_install_generate_image (const char *dir, const char *prefix,
 {
   char *kernel_img, *core_img;
   size_t kernel_size, total_module_size, core_size, exec_size;
-  size_t memdisk_size = 0, config_size = 0, config_size_pure = 0;
+  size_t memdisk_size = 0, memdisk_size_pure = 0, config_size = 0, config_size_pure = 0;
   size_t prefix_size = 0;
   char *kernel_path;
   size_t offset;
@@ -1035,7 +1035,8 @@ grub_install_generate_image (const char *dir, const char *prefix,
 
   if (memdisk_path)
     {
-      memdisk_size = ALIGN_UP(grub_util_get_image_size (memdisk_path), 512);
+      memdisk_size_pure = grub_util_get_image_size (memdisk_path);
+      memdisk_size = ALIGN_UP(memdisk_size_pure, 512);
       grub_util_info ("the size of memory disk is 0x%" GRUB_HOST_PRIxLONG_LONG,
 		      (unsigned long long) memdisk_size);
       total_module_size += memdisk_size + sizeof (struct grub_module_header);
@@ -1043,8 +1044,8 @@ grub_install_generate_image (const char *dir, const char *prefix,
 
   if (config_path)
     {
-      config_size_pure = grub_util_get_image_size (config_path) + 1;
-      config_size = ALIGN_ADDR (config_size_pure);
+      config_size_pure = grub_util_get_image_size (config_path);
+      config_size = ALIGN_ADDR (config_size_pure + 1);
       grub_util_info ("the size of config file is 0x%" GRUB_HOST_PRIxLONG_LONG,
 		      (unsigned long long) config_size);
       total_module_size += config_size + sizeof (struct grub_module_header);
@@ -1140,19 +1141,21 @@ grub_install_generate_image (const char *dir, const char *prefix,
     size_t i;
     for (i = 0; i < npubkeys; i++)
       {
-	size_t curs;
 	struct grub_module_header *header;
+	size_t key_size, orig_size;
 
-	curs = grub_util_get_image_size (pubkey_paths[i]);
+	orig_size = grub_util_get_image_size (pubkey_paths[i]);
+	key_size = ALIGN_ADDR (orig_size);
 
 	header = (struct grub_module_header *) (kernel_img + offset);
 	memset (header, 0, sizeof (struct grub_module_header));
 	header->type = grub_host_to_target32 (OBJ_TYPE_PUBKEY);
-	header->size = grub_host_to_target32 (curs + sizeof (*header));
+	header->size = grub_host_to_target32 (key_size + sizeof (*header));
 	offset += sizeof (*header);
 
 	grub_util_load_image (pubkey_paths[i], kernel_img + offset);
-	offset += ALIGN_ADDR (curs);
+	memset (kernel_img + offset + orig_size, 0, key_size - orig_size);
+	offset += key_size;
       }
   }
 
@@ -1167,6 +1170,7 @@ grub_install_generate_image (const char *dir, const char *prefix,
       offset += sizeof (*header);
 
       grub_util_load_image (memdisk_path, kernel_img + offset);
+      memset (kernel_img + offset + memdisk_size_pure, 0, memdisk_size - memdisk_size_pure);
       offset += memdisk_size;
     }
 
@@ -1181,7 +1185,7 @@ grub_install_generate_image (const char *dir, const char *prefix,
       offset += sizeof (*header);
 
       grub_util_load_image (config_path, kernel_img + offset);
-      *(kernel_img + offset + config_size_pure - 1) = 0;
+      memset (kernel_img + offset + config_size_pure, 0, config_size - config_size_pure);
       offset += config_size;
     }
 
@@ -1267,17 +1271,10 @@ grub_install_generate_image (const char *dir, const char *prefix,
 	      = grub_host_to_target_addr (image_target->link_addr);
 	}
       full_size = core_size + decompress_size;
-
       full_img = xmalloc (full_size);
-      memset (full_img, 0, full_size); 
-
       memcpy (full_img, decompress_img, decompress_size);
-
       memcpy (full_img + decompress_size, core_img, core_size);
 
-      memset (full_img + decompress_size + core_size, 0,
-	      full_size - (decompress_size + core_size));
-
       free (core_img);
       core_img = full_img;
       core_size = full_size;
Signature · 1 line
tg: (2066766..) u/mkimage-zero-pad (depends on: master)
#1 lore raw
Quoted 7 lines · Andrei Borzenkov

This did not cause real problem but is good for reproducible builds. I hit it with recent bootinfoscript that displays embedded config; I was puzzled by random garbage at the end.

Also remove redundant zeroing code where we fill in the whole memory block anyway.

Could we just zero-out the whole block when we allocate it to have an easier code and avoid it happening again?

Quoted 100 lines
---
 util/mkimage.c | 29 +++++++++++++----------------
 1 file changed, 13 insertions(+), 16 deletions(-)
util/mkimage.c +13 -16
index 35df998..1c522fe 100644
@@ -992,7 +992,7 @@ grub_install_generate_image (const char *dir, const char *prefix,
 {
   char *kernel_img, *core_img;
   size_t kernel_size, total_module_size, core_size, exec_size;
-  size_t memdisk_size = 0, config_size = 0, config_size_pure = 0;
+  size_t memdisk_size = 0, memdisk_size_pure = 0, config_size = 0, config_size_pure = 0;
   size_t prefix_size = 0;
   char *kernel_path;
   size_t offset;
@@ -1035,7 +1035,8 @@ grub_install_generate_image (const char *dir, const char *prefix,
 
   if (memdisk_path)
     {
-      memdisk_size = ALIGN_UP(grub_util_get_image_size (memdisk_path), 512);
+      memdisk_size_pure = grub_util_get_image_size (memdisk_path);
+      memdisk_size = ALIGN_UP(memdisk_size_pure, 512);
       grub_util_info ("the size of memory disk is 0x%" GRUB_HOST_PRIxLONG_LONG,
 		      (unsigned long long) memdisk_size);
       total_module_size += memdisk_size + sizeof (struct grub_module_header);
@@ -1043,8 +1044,8 @@ grub_install_generate_image (const char *dir, const char *prefix,
 
   if (config_path)
     {
-      config_size_pure = grub_util_get_image_size (config_path) + 1;
-      config_size = ALIGN_ADDR (config_size_pure);
+      config_size_pure = grub_util_get_image_size (config_path);
+      config_size = ALIGN_ADDR (config_size_pure + 1);
       grub_util_info ("the size of config file is 0x%" GRUB_HOST_PRIxLONG_LONG,
 		      (unsigned long long) config_size);
       total_module_size += config_size + sizeof (struct grub_module_header);
@@ -1140,19 +1141,21 @@ grub_install_generate_image (const char *dir, const char *prefix,
     size_t i;
     for (i = 0; i < npubkeys; i++)
       {
-	size_t curs;
 	struct grub_module_header *header;
+	size_t key_size, orig_size;
 
-	curs = grub_util_get_image_size (pubkey_paths[i]);
+	orig_size = grub_util_get_image_size (pubkey_paths[i]);
+	key_size = ALIGN_ADDR (orig_size);
 
 	header = (struct grub_module_header *) (kernel_img + offset);
 	memset (header, 0, sizeof (struct grub_module_header));
 	header->type = grub_host_to_target32 (OBJ_TYPE_PUBKEY);
-	header->size = grub_host_to_target32 (curs + sizeof (*header));
+	header->size = grub_host_to_target32 (key_size + sizeof (*header));
 	offset += sizeof (*header);
 
 	grub_util_load_image (pubkey_paths[i], kernel_img + offset);
-	offset += ALIGN_ADDR (curs);
+	memset (kernel_img + offset + orig_size, 0, key_size - orig_size);
+	offset += key_size;
       }
   }
 
@@ -1167,6 +1170,7 @@ grub_install_generate_image (const char *dir, const char *prefix,
       offset += sizeof (*header);
 
       grub_util_load_image (memdisk_path, kernel_img + offset);
+      memset (kernel_img + offset + memdisk_size_pure, 0, memdisk_size - memdisk_size_pure);
       offset += memdisk_size;
     }
 
@@ -1181,7 +1185,7 @@ grub_install_generate_image (const char *dir, const char *prefix,
       offset += sizeof (*header);
 
       grub_util_load_image (config_path, kernel_img + offset);
-      *(kernel_img + offset + config_size_pure - 1) = 0;
+      memset (kernel_img + offset + config_size_pure, 0, config_size - config_size_pure);
       offset += config_size;
     }
 
@@ -1267,17 +1271,10 @@ grub_install_generate_image (const char *dir, const char *prefix,
 	      = grub_host_to_target_addr (image_target->link_addr);
 	}
       full_size = core_size + decompress_size;
-
       full_img = xmalloc (full_size);
-      memset (full_img, 0, full_size); 
-
       memcpy (full_img, decompress_img, decompress_size);
-
       memcpy (full_img + decompress_size, core_img, core_size);
 
-      memset (full_img + decompress_size + core_size, 0,
-	      full_size - (decompress_size + core_size));
-
       free (core_img);
       core_img = full_img;
       core_size = full_size;
#2 lore raw

PATCH v2 1/1 mkimage: zero fill alignment space

This did not cause real problem but is good for reproducible builds. I hit it with recent bootinfoscript that displays embedded config; I was puzzled by random garbage at the end.

Prezero memory buffer used to assemble core.img. This makes individual memset redundant. Also ensure buffer is filled with zeroes in several other places.

Also remove redundant zeroing code where we fill in the whole memory block anyway.

---
 util/grub-mkimagexx.c |  3 ++-
 util/mkimage.c        | 30 +++++++++---------------------
 2 files changed, 11 insertions(+), 22 deletions(-)
util/grub-mkimagexx.c +2 -1
index 3c76d07..a1ddc62 100644
@@ -101,7 +101,7 @@ SUFFIX (generate_elf) (const struct grub_install_image_target_desc *image_target
   program_size = ALIGN_ADDR (*core_size);
 
   elf_img = xmalloc (program_size + header_size + footer_size);
-  memset (elf_img, 0, program_size + header_size);
+  memset (elf_img, 0, program_size + header_size + footer_size);
   memcpy (elf_img  + header_size, *core_img, *core_size);
   ehdr = (void *) elf_img;
   phdr = (void *) (elf_img + sizeof (*ehdr));
@@ -1587,6 +1587,7 @@ SUFFIX (load_image) (const char *kernel_path, size_t *exec_size,
     }
 
   out_img = xmalloc (*kernel_sz + total_module_size);
+  memset (out_img, 0, *kernel_sz + total_module_size);
 
   if (image_target->id == IMAGE_EFI)
     {
util/mkimage.c +9 -21
index 35df998..dc40461 100644
@@ -992,7 +992,7 @@ grub_install_generate_image (const char *dir, const char *prefix,
 {
   char *kernel_img, *core_img;
   size_t kernel_size, total_module_size, core_size, exec_size;
-  size_t memdisk_size = 0, config_size = 0, config_size_pure = 0;
+  size_t memdisk_size = 0, config_size = 0;
   size_t prefix_size = 0;
   char *kernel_path;
   size_t offset;
@@ -1043,8 +1043,7 @@ grub_install_generate_image (const char *dir, const char *prefix,
 
   if (config_path)
     {
-      config_size_pure = grub_util_get_image_size (config_path) + 1;
-      config_size = ALIGN_ADDR (config_size_pure);
+      config_size = ALIGN_ADDR (grub_util_get_image_size (config_path) + 1);
       grub_util_info ("the size of config file is 0x%" GRUB_HOST_PRIxLONG_LONG,
 		      (unsigned long long) config_size);
       total_module_size += config_size + sizeof (struct grub_module_header);
@@ -1080,7 +1079,10 @@ grub_install_generate_image (const char *dir, const char *prefix,
       = grub_host_to_target32 (total_module_size);
 
   if (image_target->flags & PLATFORM_FLAGS_MODULES_BEFORE_KERNEL)
-    memmove (kernel_img + total_module_size, kernel_img, kernel_size);
+    {
+      memmove (kernel_img + total_module_size, kernel_img, kernel_size);
+      memset (kernel_img, 0, total_module_size);
+    }
 
   if (image_target->voidp_sizeof == 8)
     {
@@ -1090,7 +1092,6 @@ grub_install_generate_image (const char *dir, const char *prefix,
 	modinfo = (struct grub_module_info64 *) kernel_img;
       else
 	modinfo = (struct grub_module_info64 *) (kernel_img + kernel_size);
-      memset (modinfo, 0, sizeof (struct grub_module_info64));
       modinfo->magic = grub_host_to_target32 (GRUB_MODULE_MAGIC);
       modinfo->offset = grub_host_to_target_addr (sizeof (struct grub_module_info64));
       modinfo->size = grub_host_to_target_addr (total_module_size);
@@ -1107,7 +1108,6 @@ grub_install_generate_image (const char *dir, const char *prefix,
 	modinfo = (struct grub_module_info32 *) kernel_img;
       else
 	modinfo = (struct grub_module_info32 *) (kernel_img + kernel_size);
-      memset (modinfo, 0, sizeof (struct grub_module_info32));
       modinfo->magic = grub_host_to_target32 (GRUB_MODULE_MAGIC);
       modinfo->offset = grub_host_to_target_addr (sizeof (struct grub_module_info32));
       modinfo->size = grub_host_to_target_addr (total_module_size);
@@ -1120,17 +1120,14 @@ grub_install_generate_image (const char *dir, const char *prefix,
   for (p = path_list; p; p = p->next)
     {
       struct grub_module_header *header;
-      size_t mod_size, orig_size;
+      size_t mod_size;
 
-      orig_size = grub_util_get_image_size (p->name);
-      mod_size = ALIGN_ADDR (orig_size);
+      mod_size = ALIGN_ADDR (grub_util_get_image_size (p->name));
 
       header = (struct grub_module_header *) (kernel_img + offset);
-      memset (header, 0, sizeof (struct grub_module_header));
       header->type = grub_host_to_target32 (OBJ_TYPE_ELF);
       header->size = grub_host_to_target32 (mod_size + sizeof (*header));
       offset += sizeof (*header);
-      memset (kernel_img + offset + orig_size, 0, mod_size - orig_size);
 
       grub_util_load_image (p->name, kernel_img + offset);
       offset += mod_size;
@@ -1146,7 +1143,6 @@ grub_install_generate_image (const char *dir, const char *prefix,
 	curs = grub_util_get_image_size (pubkey_paths[i]);
 
 	header = (struct grub_module_header *) (kernel_img + offset);
-	memset (header, 0, sizeof (struct grub_module_header));
 	header->type = grub_host_to_target32 (OBJ_TYPE_PUBKEY);
 	header->size = grub_host_to_target32 (curs + sizeof (*header));
 	offset += sizeof (*header);
@@ -1161,7 +1157,6 @@ grub_install_generate_image (const char *dir, const char *prefix,
       struct grub_module_header *header;
 
       header = (struct grub_module_header *) (kernel_img + offset);
-      memset (header, 0, sizeof (struct grub_module_header));
       header->type = grub_host_to_target32 (OBJ_TYPE_MEMDISK);
       header->size = grub_host_to_target32 (memdisk_size + sizeof (*header));
       offset += sizeof (*header);
@@ -1175,13 +1170,11 @@ grub_install_generate_image (const char *dir, const char *prefix,
       struct grub_module_header *header;
 
       header = (struct grub_module_header *) (kernel_img + offset);
-      memset (header, 0, sizeof (struct grub_module_header));
       header->type = grub_host_to_target32 (OBJ_TYPE_CONFIG);
       header->size = grub_host_to_target32 (config_size + sizeof (*header));
       offset += sizeof (*header);
 
       grub_util_load_image (config_path, kernel_img + offset);
-      *(kernel_img + offset + config_size_pure - 1) = 0;
       offset += config_size;
     }
 
@@ -1190,12 +1183,10 @@ grub_install_generate_image (const char *dir, const char *prefix,
       struct grub_module_header *header;
 
       header = (struct grub_module_header *) (kernel_img + offset);
-      memset (header, 0, sizeof (struct grub_module_header));
       header->type = grub_host_to_target32 (OBJ_TYPE_PREFIX);
       header->size = grub_host_to_target32 (prefix_size + sizeof (*header));
       offset += sizeof (*header);
 
-      grub_memset (kernel_img + offset, 0, prefix_size);
       grub_strcpy (kernel_img + offset, prefix);
       offset += prefix_size;
     }
@@ -1269,15 +1260,11 @@ grub_install_generate_image (const char *dir, const char *prefix,
       full_size = core_size + decompress_size;
 
       full_img = xmalloc (full_size);
-      memset (full_img, 0, full_size); 
 
       memcpy (full_img, decompress_img, decompress_size);
 
       memcpy (full_img + decompress_size, core_img, core_size);
 
-      memset (full_img + decompress_size + core_size, 0,
-	      full_size - (decompress_size + core_size));
-
       free (core_img);
       core_img = full_img;
       core_size = full_size;
@@ -1428,6 +1415,7 @@ grub_install_generate_image (const char *dir, const char *prefix,
 	pe_img = xmalloc (reloc_addr + reloc_size);
 	memset (pe_img, 0, header_size);
 	memcpy ((char *) pe_img + header_size, core_img, core_size);
+	memset ((char *) pe_img + header_size + core_size, 0, reloc_addr - (header_size + core_size));
 	memcpy ((char *) pe_img + reloc_addr, rel_section, reloc_size);
 	header = pe_img;
 
Signature · 1 line
tg: (2066766..) u/mkimage-zero-pad (depends on: master)
#3 lore raw

Go ahead

Quoted 206 lines · Andrei Borzenkov

This did not cause real problem but is good for reproducible builds. I hit it with recent bootinfoscript that displays embedded config; I was puzzled by random garbage at the end.

Prezero memory buffer used to assemble core.img. This makes individual memset redundant. Also ensure buffer is filled with zeroes in several other places.

Also remove redundant zeroing code where we fill in the whole memory block anyway.

---
 util/grub-mkimagexx.c |  3 ++-
 util/mkimage.c        | 30 +++++++++---------------------
 2 files changed, 11 insertions(+), 22 deletions(-)
util/grub-mkimagexx.c +0 -0
index 3c76d07..a1ddc62 100644
@@ -101,7 +101,7 @@ SUFFIX (generate_elf) (const struct

grub_install_image_target_desc *image_target
program_size = ALIGN_ADDR (*core_size);

   elf_img = xmalloc (program_size + header_size + footer_size);
util/grub-mkimagexx.c +2 -1
-  memset (elf_img, 0, program_size + header_size);
+  memset (elf_img, 0, program_size + header_size + footer_size);
   memcpy (elf_img  + header_size, *core_img, *core_size);
   ehdr = (void *) elf_img;
   phdr = (void *) (elf_img + sizeof (*ehdr));
@@ -1587,6 +1587,7 @@ SUFFIX (load_image) (const char *kernel_path, size_t
 *exec_size,
     }
 
   out_img = xmalloc (*kernel_sz + total_module_size);
+  memset (out_img, 0, *kernel_sz + total_module_size);
 
   if (image_target->id == IMAGE_EFI)
     {
util/mkimage.c +1 -1
index 35df998..dc40461 100644
@@ -992,7 +992,7 @@ grub_install_generate_image (const char *dir, const
 char *prefix,
 {
   char *kernel_img, *core_img;
   size_t kernel_size, total_module_size, core_size, exec_size;
-  size_t memdisk_size = 0, config_size = 0, config_size_pure = 0;
+  size_t memdisk_size = 0, config_size = 0;
   size_t prefix_size = 0;
   char *kernel_path;
   size_t offset;
util/mkimage.c +1 -2
@@ -1043,8 +1043,7 @@ grub_install_generate_image (const char *dir, const
 char *prefix,
 
   if (config_path)
     {
-      config_size_pure = grub_util_get_image_size (config_path) + 1;
-      config_size = ALIGN_ADDR (config_size_pure);
+      config_size = ALIGN_ADDR (grub_util_get_image_size (config_path) +
 1);
       grub_util_info ("the size of config file is 0x%"

GRUB_HOST_PRIxLONG_LONG,

                      (unsigned long long) config_size);
       total_module_size += config_size + sizeof (struct

grub_module_header);

util/mkimage.c +4 -1
@@ -1080,7 +1079,10 @@ grub_install_generate_image (const char *dir, const
 char *prefix,
       = grub_host_to_target32 (total_module_size);
 
   if (image_target->flags & PLATFORM_FLAGS_MODULES_BEFORE_KERNEL)
-    memmove (kernel_img + total_module_size, kernel_img, kernel_size);
+    {
+      memmove (kernel_img + total_module_size, kernel_img, kernel_size);
+      memset (kernel_img, 0, total_module_size);
+    }
 
   if (image_target->voidp_sizeof == 8)
     {
util/mkimage.c +0 -1
@@ -1090,7 +1092,6 @@ grub_install_generate_image (const char *dir, const
 char *prefix,
        modinfo = (struct grub_module_info64 *) kernel_img;
       else
        modinfo = (struct grub_module_info64 *) (kernel_img + kernel_size);
-      memset (modinfo, 0, sizeof (struct grub_module_info64));
       modinfo->magic = grub_host_to_target32 (GRUB_MODULE_MAGIC);
       modinfo->offset = grub_host_to_target_addr (sizeof (struct
grub_module_info64));
       modinfo->size = grub_host_to_target_addr (total_module_size);
util/mkimage.c +0 -1
@@ -1107,7 +1108,6 @@ grub_install_generate_image (const char *dir, const
 char *prefix,
        modinfo = (struct grub_module_info32 *) kernel_img;
       else
        modinfo = (struct grub_module_info32 *) (kernel_img + kernel_size);
-      memset (modinfo, 0, sizeof (struct grub_module_info32));
       modinfo->magic = grub_host_to_target32 (GRUB_MODULE_MAGIC);
       modinfo->offset = grub_host_to_target_addr (sizeof (struct
grub_module_info32));
       modinfo->size = grub_host_to_target_addr (total_module_size);
util/mkimage.c +2 -5
@@ -1120,17 +1120,14 @@ grub_install_generate_image (const char *dir,
 const char *prefix,
   for (p = path_list; p; p = p->next)
     {
       struct grub_module_header *header;
-      size_t mod_size, orig_size;
+      size_t mod_size;
 
-      orig_size = grub_util_get_image_size (p->name);
-      mod_size = ALIGN_ADDR (orig_size);
+      mod_size = ALIGN_ADDR (grub_util_get_image_size (p->name));
 
       header = (struct grub_module_header *) (kernel_img + offset);
-      memset (header, 0, sizeof (struct grub_module_header));
       header->type = grub_host_to_target32 (OBJ_TYPE_ELF);
       header->size = grub_host_to_target32 (mod_size + sizeof (*header));
       offset += sizeof (*header);
-      memset (kernel_img + offset + orig_size, 0, mod_size - orig_size);
 
       grub_util_load_image (p->name, kernel_img + offset);
       offset += mod_size;
util/mkimage.c +0 -1
@@ -1146,7 +1143,6 @@ grub_install_generate_image (const char *dir, const
 char *prefix,
        curs = grub_util_get_image_size (pubkey_paths[i]);
 
        header = (struct grub_module_header *) (kernel_img + offset);
-       memset (header, 0, sizeof (struct grub_module_header));
        header->type = grub_host_to_target32 (OBJ_TYPE_PUBKEY);
        header->size = grub_host_to_target32 (curs + sizeof (*header));
        offset += sizeof (*header);
util/mkimage.c +0 -1
@@ -1161,7 +1157,6 @@ grub_install_generate_image (const char *dir, const
 char *prefix,
       struct grub_module_header *header;
 
       header = (struct grub_module_header *) (kernel_img + offset);
-      memset (header, 0, sizeof (struct grub_module_header));
       header->type = grub_host_to_target32 (OBJ_TYPE_MEMDISK);
       header->size = grub_host_to_target32 (memdisk_size + sizeof
(*header));
       offset += sizeof (*header);
util/mkimage.c +0 -2
@@ -1175,13 +1170,11 @@ grub_install_generate_image (const char *dir,
 const char *prefix,
       struct grub_module_header *header;
 
       header = (struct grub_module_header *) (kernel_img + offset);
-      memset (header, 0, sizeof (struct grub_module_header));
       header->type = grub_host_to_target32 (OBJ_TYPE_CONFIG);
       header->size = grub_host_to_target32 (config_size + sizeof
 (*header));
       offset += sizeof (*header);
 
       grub_util_load_image (config_path, kernel_img + offset);
-      *(kernel_img + offset + config_size_pure - 1) = 0;
       offset += config_size;
     }
util/mkimage.c +0 -2
@@ -1190,12 +1183,10 @@ grub_install_generate_image (const char *dir,
 const char *prefix,
       struct grub_module_header *header;
 
       header = (struct grub_module_header *) (kernel_img + offset);
-      memset (header, 0, sizeof (struct grub_module_header));
       header->type = grub_host_to_target32 (OBJ_TYPE_PREFIX);
       header->size = grub_host_to_target32 (prefix_size + sizeof
 (*header));
       offset += sizeof (*header);
 
-      grub_memset (kernel_img + offset, 0, prefix_size);
       grub_strcpy (kernel_img + offset, prefix);
       offset += prefix_size;
     }
util/mkimage.c +0 -4
@@ -1269,15 +1260,11 @@ grub_install_generate_image (const char *dir,
 const char *prefix,
       full_size = core_size + decompress_size;
 
       full_img = xmalloc (full_size);
-      memset (full_img, 0, full_size);
 
       memcpy (full_img, decompress_img, decompress_size);
 
       memcpy (full_img + decompress_size, core_img, core_size);
 
-      memset (full_img + decompress_size + core_size, 0,
-             full_size - (decompress_size + core_size));
-
       free (core_img);
       core_img = full_img;
       core_size = full_size;
util/mkimage.c +1 -0
@@ -1428,6 +1415,7 @@ grub_install_generate_image (const char *dir, const
 char *prefix,
        pe_img = xmalloc (reloc_addr + reloc_size);
        memset (pe_img, 0, header_size);
        memcpy ((char *) pe_img + header_size, core_img, core_size);
+       memset ((char *) pe_img + header_size + core_size, 0, reloc_addr -
 (header_size + core_size));
        memcpy ((char *) pe_img + reloc_addr, rel_section, reloc_size);
        header = pe_img;

--
tg: (2066766..) u/mkimage-zero-pad (depends on: master)

_______________________________________________
Grub-devel mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/grub-devel

#4 lore raw
Quoted 3 lines · Vladimir 'phcoder' Serbinenko

Go ahead

Actually please wait till Savannah admins kill the empty commit

Quoted 1 line

Le 31 oct. 2015 9:39 AM, "Andrei Borzenkov" <[email protected]> a

écrit :

Quoted 2 lines
Quoted 2 lines

This did not cause real problem but is good for reproducible builds. I

hit

Quoted 1 line
Quoted 1 line

it with recent bootinfoscript that displays embedded config; I was

puzzled

Quoted 4 lines
Quoted 4 lines

by random garbage at the end.

Prezero memory buffer used to assemble core.img. This makes individual memset redundant. Also ensure buffer is filled with zeroes in several

other

Quoted 3 lines
Quoted 3 lines

places.

Also remove redundant zeroing code where we fill in the whole memory

block

Quoted 7 lines
Quoted 7 lines

anyway.

---
 util/grub-mkimagexx.c |  3 ++-
 util/mkimage.c        | 30 +++++++++---------------------
 2 files changed, 11 insertions(+), 22 deletions(-)
Quoted 5 lines

util/grub-mkimagexx.c SUFFIX (generate_elf) (const struct

Quoted 5 lines
util/grub-mkimagexx.c +0 -0
index 3c76d07..a1ddc62 100644
@@ -101,7 +101,7 @@ SUFFIX (generate_elf) (const struct

grub_install_image_target_desc *image_target

Quoted 9 lines

util/grub-mkimagexx.c SUFFIX (load_image) (const char *kernel_path,

Quoted 9 lines
util/grub-mkimagexx.c +1 -1
   program_size = ALIGN_ADDR (*core_size);
 
   elf_img = xmalloc (program_size + header_size + footer_size);
-  memset (elf_img, 0, program_size + header_size);
+  memset (elf_img, 0, program_size + header_size + footer_size);
   memcpy (elf_img  + header_size, *core_img, *core_size);
   ehdr = (void *) elf_img;
   phdr = (void *) (elf_img + sizeof (*ehdr));
@@ -1587,6 +1587,7 @@ SUFFIX (load_image) (const char *kernel_path,

size_t *exec_size,

Quoted 5 lines
Quoted 5 lines
util/grub-mkimagexx.c +1 -0
     }
 
   out_img = xmalloc (*kernel_sz + total_module_size);
+  memset (out_img, 0, *kernel_sz + total_module_size);
 
Quoted 7 lines

util/mkimage.c grub_install_generate_image (const char *dir, const

Quoted 7 lines
util/grub-mkimagexx.c +0 -0
   if (image_target->id == IMAGE_EFI)
     {
util/mkimage.c +0 -0
index 35df998..dc40461 100644
@@ -992,7 +992,7 @@ grub_install_generate_image (const char *dir, const

char *prefix,

Quoted 9 lines

util/mkimage.c grub_install_generate_image (const char *dir,

Quoted 9 lines
util/mkimage.c +1 -1
 {
   char *kernel_img, *core_img;
   size_t kernel_size, total_module_size, core_size, exec_size;
-  size_t memdisk_size = 0, config_size = 0, config_size_pure = 0;
+  size_t memdisk_size = 0, config_size = 0;
   size_t prefix_size = 0;
   char *kernel_path;
   size_t offset;
@@ -1043,8 +1043,7 @@ grub_install_generate_image (const char *dir,

const char *prefix,

Quoted 6 lines

util/mkimage.c grub_install_generate_image (const char *dir, const char *prefix,

Quoted 6 lines
util/mkimage.c +1 -2
   if (config_path)
     {
-      config_size_pure = grub_util_get_image_size (config_path) + 1;
-      config_size = ALIGN_ADDR (config_size_pure);
+      config_size = ALIGN_ADDR (grub_util_get_image_size (config_path)

+ 1);

Quoted 1 line

util/mkimage.c grub_install_generate_image (const char *dir, · line 1046

Quoted 1 line
util/mkimage.c +0 -0
       grub_util_info ("the size of config file is 0x%"

GRUB_HOST_PRIxLONG_LONG,

Quoted 2 lines

util/mkimage.c grub_install_generate_image (const char *dir, · line 1048

Quoted 2 lines
util/mkimage.c +0 -0
                      (unsigned long long) config_size);
       total_module_size += config_size + sizeof (struct

grub_module_header);

Quoted 1 line

util/mkimage.c grub_install_generate_image (const char *dir,

Quoted 1 line
util/mkimage.c +0 -0
@@ -1080,7 +1079,10 @@ grub_install_generate_image (const char *dir,

const char *prefix,

Quoted 9 lines
Quoted 9 lines
util/mkimage.c +4 -1
       = grub_host_to_target32 (total_module_size);
 
   if (image_target->flags & PLATFORM_FLAGS_MODULES_BEFORE_KERNEL)
-    memmove (kernel_img + total_module_size, kernel_img, kernel_size);
+    {
+      memmove (kernel_img + total_module_size, kernel_img, kernel_size);
+      memset (kernel_img, 0, total_module_size);
+    }
 
Quoted 3 lines

util/mkimage.c grub_install_generate_image (const char *dir,

Quoted 3 lines
util/mkimage.c +0 -0
   if (image_target->voidp_sizeof == 8)
     {
@@ -1090,7 +1092,6 @@ grub_install_generate_image (const char *dir,

const char *prefix,

Quoted 3 lines

util/mkimage.c grub_install_generate_image (const char *dir, const char *prefix,

Quoted 3 lines
util/mkimage.c +0 -0
        modinfo = (struct grub_module_info64 *) kernel_img;
       else
        modinfo = (struct grub_module_info64 *) (kernel_img +

kernel_size);

Quoted 3 lines

util/mkimage.c grub_install_generate_image (const char *dir, const char *prefix,

Quoted 3 lines
util/mkimage.c +0 -1
-      memset (modinfo, 0, sizeof (struct grub_module_info64));
       modinfo->magic = grub_host_to_target32 (GRUB_MODULE_MAGIC);
       modinfo->offset = grub_host_to_target_addr (sizeof (struct

grub_module_info64));

Quoted 2 lines

util/mkimage.c grub_install_generate_image (const char *dir,

Quoted 2 lines
util/mkimage.c +0 -0
       modinfo->size = grub_host_to_target_addr (total_module_size);
@@ -1107,7 +1108,6 @@ grub_install_generate_image (const char *dir,

const char *prefix,

Quoted 3 lines

util/mkimage.c grub_install_generate_image (const char *dir, const char *prefix,

Quoted 3 lines
util/mkimage.c +0 -0
        modinfo = (struct grub_module_info32 *) kernel_img;
       else
        modinfo = (struct grub_module_info32 *) (kernel_img +

kernel_size);

Quoted 3 lines

util/mkimage.c grub_install_generate_image (const char *dir, const char *prefix,

Quoted 3 lines
util/mkimage.c +0 -1
-      memset (modinfo, 0, sizeof (struct grub_module_info32));
       modinfo->magic = grub_host_to_target32 (GRUB_MODULE_MAGIC);
       modinfo->offset = grub_host_to_target_addr (sizeof (struct

grub_module_info32));

Quoted 2 lines

util/mkimage.c grub_install_generate_image (const char *dir,

Quoted 2 lines
util/mkimage.c +0 -0
       modinfo->size = grub_host_to_target_addr (total_module_size);
@@ -1120,17 +1120,14 @@ grub_install_generate_image (const char *dir,

const char *prefix,

Quoted 6 lines
Quoted 6 lines
util/mkimage.c +1 -1
   for (p = path_list; p; p = p->next)
     {
       struct grub_module_header *header;
-      size_t mod_size, orig_size;
+      size_t mod_size;
 
Quoted 8 lines

util/mkimage.c grub_install_generate_image (const char *dir, const char *prefix,

Quoted 8 lines
util/mkimage.c +1 -3
-      orig_size = grub_util_get_image_size (p->name);
-      mod_size = ALIGN_ADDR (orig_size);
+      mod_size = ALIGN_ADDR (grub_util_get_image_size (p->name));
 
       header = (struct grub_module_header *) (kernel_img + offset);
-      memset (header, 0, sizeof (struct grub_module_header));
       header->type = grub_host_to_target32 (OBJ_TYPE_ELF);
       header->size = grub_host_to_target32 (mod_size + sizeof

(*header));

Quoted 6 lines

util/mkimage.c grub_install_generate_image (const char *dir,

Quoted 6 lines
util/mkimage.c +0 -1
       offset += sizeof (*header);
-      memset (kernel_img + offset + orig_size, 0, mod_size - orig_size);
 
       grub_util_load_image (p->name, kernel_img + offset);
       offset += mod_size;
@@ -1146,7 +1143,6 @@ grub_install_generate_image (const char *dir,

const char *prefix,

Quoted 8 lines

util/mkimage.c grub_install_generate_image (const char *dir,

Quoted 8 lines
util/mkimage.c +0 -1
        curs = grub_util_get_image_size (pubkey_paths[i]);
 
        header = (struct grub_module_header *) (kernel_img + offset);
-       memset (header, 0, sizeof (struct grub_module_header));
        header->type = grub_host_to_target32 (OBJ_TYPE_PUBKEY);
        header->size = grub_host_to_target32 (curs + sizeof (*header));
        offset += sizeof (*header);
@@ -1161,7 +1157,6 @@ grub_install_generate_image (const char *dir,

const char *prefix,

Quoted 6 lines

util/mkimage.c grub_install_generate_image (const char *dir, const char *prefix,

Quoted 6 lines
util/mkimage.c +0 -1
       struct grub_module_header *header;
 
       header = (struct grub_module_header *) (kernel_img + offset);
-      memset (header, 0, sizeof (struct grub_module_header));
       header->type = grub_host_to_target32 (OBJ_TYPE_MEMDISK);
       header->size = grub_host_to_target32 (memdisk_size + sizeof

(*header));

Quoted 2 lines

util/mkimage.c grub_install_generate_image (const char *dir,

Quoted 2 lines
util/mkimage.c +0 -0
       offset += sizeof (*header);
@@ -1175,13 +1170,11 @@ grub_install_generate_image (const char *dir,

const char *prefix,

Quoted 6 lines

util/mkimage.c grub_install_generate_image (const char *dir, const char *prefix,

Quoted 6 lines
util/mkimage.c +0 -1
       struct grub_module_header *header;
 
       header = (struct grub_module_header *) (kernel_img + offset);
-      memset (header, 0, sizeof (struct grub_module_header));
       header->type = grub_host_to_target32 (OBJ_TYPE_CONFIG);
       header->size = grub_host_to_target32 (config_size + sizeof

(*header));

Quoted 8 lines

util/mkimage.c grub_install_generate_image (const char *dir,

Quoted 8 lines
util/mkimage.c +0 -1
       offset += sizeof (*header);
 
       grub_util_load_image (config_path, kernel_img + offset);
-      *(kernel_img + offset + config_size_pure - 1) = 0;
       offset += config_size;
     }
 
@@ -1190,12 +1183,10 @@ grub_install_generate_image (const char *dir,

const char *prefix,

Quoted 6 lines

util/mkimage.c grub_install_generate_image (const char *dir, const char *prefix,

Quoted 6 lines
util/mkimage.c +0 -1
       struct grub_module_header *header;
 
       header = (struct grub_module_header *) (kernel_img + offset);
-      memset (header, 0, sizeof (struct grub_module_header));
       header->type = grub_host_to_target32 (OBJ_TYPE_PREFIX);
       header->size = grub_host_to_target32 (prefix_size + sizeof

(*header));

Quoted 7 lines

util/mkimage.c grub_install_generate_image (const char *dir,

Quoted 7 lines
util/mkimage.c +0 -1
       offset += sizeof (*header);
 
-      grub_memset (kernel_img + offset, 0, prefix_size);
       grub_strcpy (kernel_img + offset, prefix);
       offset += prefix_size;
     }
@@ -1269,15 +1260,11 @@ grub_install_generate_image (const char *dir,

const char *prefix,

Quoted 9 lines
Quoted 9 lines
util/mkimage.c +0 -1
       full_size = core_size + decompress_size;
 
       full_img = xmalloc (full_size);
-      memset (full_img, 0, full_size);
 
       memcpy (full_img, decompress_img, decompress_size);
 
       memcpy (full_img + decompress_size, core_img, core_size);
 
Quoted 7 lines

util/mkimage.c grub_install_generate_image (const char *dir,

Quoted 7 lines
util/mkimage.c +0 -3
-      memset (full_img + decompress_size + core_size, 0,
-             full_size - (decompress_size + core_size));
-
       free (core_img);
       core_img = full_img;
       core_size = full_size;
@@ -1428,6 +1415,7 @@ grub_install_generate_image (const char *dir,

const char *prefix,

Quoted 4 lines

util/mkimage.c grub_install_generate_image (const char *dir, const char *prefix,

Quoted 4 lines
util/mkimage.c +1 -0
        pe_img = xmalloc (reloc_addr + reloc_size);
        memset (pe_img, 0, header_size);
        memcpy ((char *) pe_img + header_size, core_img, core_size);
+       memset ((char *) pe_img + header_size + core_size, 0, reloc_addr

- (header_size + core_size));

Quoted 10 lines
Quoted 10 lines
util/mkimage.c +0 -1
        memcpy ((char *) pe_img + reloc_addr, rel_section, reloc_size);
        header = pe_img;
 
--

tg: (2066766..) u/mkimage-zero-pad (depends on: master)

_______________________________________________
Grub-devel mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/grub-devel