[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] mkimage: zero fill alignment space
From: |
Andrei Borzenkov |
Subject: |
[PATCH] mkimage: zero fill alignment space |
Date: |
Fri, 30 Oct 2015 18:49:58 +0300 |
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)
- [PATCH] mkimage: zero fill alignment space,
Andrei Borzenkov <=