* [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.