Received: from list by lists.gnu.org with archive (Exim 4.71) id 1ZsBwN-000240-W2 for mharc-grub-devel@gnu.org; Fri, 30 Oct 2015 11:50:08 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:56457) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZsBwK-0001vw-OC for grub-devel@gnu.org; Fri, 30 Oct 2015 11:50:05 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZsBwH-0008Ab-Fb for grub-devel@gnu.org; Fri, 30 Oct 2015 11:50:04 -0400 Received: from mail-lb0-x234.google.com ([2a00:1450:4010:c04::234]:33029) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZsBwH-0008AB-5e for grub-devel@gnu.org; Fri, 30 Oct 2015 11:50:01 -0400 Received: by lbbec13 with SMTP id ec13so54096541lbb.0 for ; Fri, 30 Oct 2015 08:50:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:subject:date:message-id; bh=IK+2ojotaHhHQR7wFEUKW/yx37vqnHixFJJ23qx/9xY=; b=EGydWG/yXkhsPT3H0u4tNtHgZbtiGaFpoFxqB2yJDDbTFBvgGZKkCkbEuDiZ799eoI oCFwxyK2a6o+0dtYjjS1HIIvCJlWmVR+g1SedpZEiXxLUEM0p9r/pnhVSHa9MeqAzU77 EwTB+Wfb6PhZYLfJaJNsHCI/iJmSYBsVsTzloi7Iqps2bB+BdGTrYzBRSo9wmWe3cHug jIb246hPY0XYzbYI+My2pMNnwqdJQ61dpJYzQ6kG5BmwHUF3nCC6fZ8SGGaGpifROg9f 4nDRwVvU+gHbp8Mp+9pzZxBB4+hHA8IojuSJSfPGKZ5N0PHF/dqcjqD8Iffy9RICgRv9 ZJjA== X-Received: by 10.112.202.35 with SMTP id kf3mr4448430lbc.19.1446220200479; Fri, 30 Oct 2015 08:50:00 -0700 (PDT) Received: from localhost.localdomain (ppp91-76-25-247.pppoe.mtu-net.ru. [91.76.25.247]) by smtp.gmail.com with ESMTPSA id wo3sm1340396lbb.41.2015.10.30.08.49.59 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 30 Oct 2015 08:49:59 -0700 (PDT) From: Andrei Borzenkov To: grub-devel@gnu.org Subject: [PATCH] mkimage: zero fill alignment space Date: Fri, 30 Oct 2015 18:49:58 +0300 Message-Id: <1446220198-29899-1-git-send-email-arvidjaar@gmail.com> X-Mailer: git-send-email 1.9.1 X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2a00:1450:4010:c04::234 X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list Reply-To: The development of GNU GRUB List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 30 Oct 2015 15:50:06 -0000 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)