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) _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel