All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] mkimage: zero fill alignment space
@ 2015-10-30 15:49 Andrei Borzenkov
  2015-10-30 20:12 ` Vladimir 'φ-coder/phcoder' Serbinenko
  0 siblings, 1 reply; 5+ messages in thread
From: Andrei Borzenkov @ 2015-10-30 15:49 UTC (permalink / raw)
  To: grub-devel

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(-)

diff --git a/util/mkimage.c b/util/mkimage.c
index 35df998..1c522fe 100644
--- a/util/mkimage.c
+++ b/util/mkimage.c
@@ -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;
-- 
tg: (2066766..) u/mkimage-zero-pad (depends on: master)


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH] mkimage: zero fill alignment space
  2015-10-30 15:49 [PATCH] mkimage: zero fill alignment space Andrei Borzenkov
@ 2015-10-30 20:12 ` Vladimir 'φ-coder/phcoder' Serbinenko
  2015-10-31  8:38   ` [PATCH V2] " Andrei Borzenkov
  0 siblings, 1 reply; 5+ messages in thread
From: Vladimir 'φ-coder/phcoder' Serbinenko @ 2015-10-30 20:12 UTC (permalink / raw)
  To: The development of GNU GRUB

[-- Attachment #1: Type: text/plain, Size: 4717 bytes --]

On 30.10.2015 16:49, Andrei Borzenkov wrote:
> 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?
> ---
>  util/mkimage.c | 29 +++++++++++++----------------
>  1 file changed, 13 insertions(+), 16 deletions(-)
> 
> diff --git a/util/mkimage.c b/util/mkimage.c
> index 35df998..1c522fe 100644
> --- a/util/mkimage.c
> +++ b/util/mkimage.c
> @@ -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;
> 



[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 213 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH V2] mkimage: zero fill alignment space
  2015-10-30 20:12 ` Vladimir 'φ-coder/phcoder' Serbinenko
@ 2015-10-31  8:38   ` Andrei Borzenkov
  2015-11-02  7:25     ` Vladimir 'phcoder' Serbinenko
  0 siblings, 1 reply; 5+ messages in thread
From: Andrei Borzenkov @ 2015-10-31  8:38 UTC (permalink / raw)
  To: grub-devel

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(-)

diff --git a/util/grub-mkimagexx.c b/util/grub-mkimagexx.c
index 3c76d07..a1ddc62 100644
--- a/util/grub-mkimagexx.c
+++ b/util/grub-mkimagexx.c
@@ -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)
     {
diff --git a/util/mkimage.c b/util/mkimage.c
index 35df998..dc40461 100644
--- a/util/mkimage.c
+++ b/util/mkimage.c
@@ -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;
 
-- 
tg: (2066766..) u/mkimage-zero-pad (depends on: master)


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH V2] mkimage: zero fill alignment space
  2015-10-31  8:38   ` [PATCH V2] " Andrei Borzenkov
@ 2015-11-02  7:25     ` Vladimir 'phcoder' Serbinenko
  2015-11-02  7:26       ` Vladimir 'phcoder' Serbinenko
  0 siblings, 1 reply; 5+ messages in thread
From: Vladimir 'phcoder' Serbinenko @ 2015-11-02  7:25 UTC (permalink / raw)
  To: The development of GRUB 2

[-- Attachment #1: Type: text/plain, Size: 8786 bytes --]

Go ahead
Le 31 oct. 2015 9:39 AM, "Andrei Borzenkov" <arvidjaar@gmail.com> a écrit :

> 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(-)
>
> diff --git a/util/grub-mkimagexx.c b/util/grub-mkimagexx.c
> index 3c76d07..a1ddc62 100644
> --- a/util/grub-mkimagexx.c
> +++ b/util/grub-mkimagexx.c
> @@ -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)
>      {
> diff --git a/util/mkimage.c b/util/mkimage.c
> index 35df998..dc40461 100644
> --- a/util/mkimage.c
> +++ b/util/mkimage.c
> @@ -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;
>
> --
> tg: (2066766..) u/mkimage-zero-pad (depends on: master)
>
> _______________________________________________
> Grub-devel mailing list
> Grub-devel@gnu.org
> https://lists.gnu.org/mailman/listinfo/grub-devel
>

[-- Attachment #2: Type: text/html, Size: 9962 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH V2] mkimage: zero fill alignment space
  2015-11-02  7:25     ` Vladimir 'phcoder' Serbinenko
@ 2015-11-02  7:26       ` Vladimir 'phcoder' Serbinenko
  0 siblings, 0 replies; 5+ messages in thread
From: Vladimir 'phcoder' Serbinenko @ 2015-11-02  7:26 UTC (permalink / raw)
  To: The development of GRUB 2

[-- Attachment #1: Type: text/plain, Size: 9093 bytes --]

Le 2 nov. 2015 8:25 AM, "Vladimir 'phcoder' Serbinenko" <phcoder@gmail.com>
a écrit :
>
> Go ahead
>
Actually please wait till Savannah admins kill the empty commit
> Le 31 oct. 2015 9:39 AM, "Andrei Borzenkov" <arvidjaar@gmail.com> a
écrit :
>>
>> 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(-)
>>
>> diff --git a/util/grub-mkimagexx.c b/util/grub-mkimagexx.c
>> index 3c76d07..a1ddc62 100644
>> --- a/util/grub-mkimagexx.c
>> +++ b/util/grub-mkimagexx.c
>> @@ -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)
>>      {
>> diff --git a/util/mkimage.c b/util/mkimage.c
>> index 35df998..dc40461 100644
>> --- a/util/mkimage.c
>> +++ b/util/mkimage.c
>> @@ -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;
>>
>> --
>> tg: (2066766..) u/mkimage-zero-pad (depends on: master)
>>
>> _______________________________________________
>> Grub-devel mailing list
>> Grub-devel@gnu.org
>> https://lists.gnu.org/mailman/listinfo/grub-devel

[-- Attachment #2: Type: text/html, Size: 11658 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2015-11-02  7:26 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-10-30 15:49 [PATCH] mkimage: zero fill alignment space Andrei Borzenkov
2015-10-30 20:12 ` Vladimir 'φ-coder/phcoder' Serbinenko
2015-10-31  8:38   ` [PATCH V2] " Andrei Borzenkov
2015-11-02  7:25     ` Vladimir 'phcoder' Serbinenko
2015-11-02  7:26       ` Vladimir 'phcoder' Serbinenko

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.