grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH V2] mkimage: zero fill alignment space


From: Vladimir 'phcoder' Serbinenko
Subject: Re: [PATCH V2] mkimage: zero fill alignment space
Date: Mon, 2 Nov 2015 08:26:47 +0100


Le 2 nov. 2015 8:25 AM, "Vladimir 'phcoder' Serbinenko" <address@hidden> a écrit :
>
> Go ahead
>
Actually please wait till Savannah admins kill the empty commit
> Le 31 oct. 2015 9:39 AM, "Andrei Borzenkov" <address@hidden> 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
>> address@hidden
>> https://lists.gnu.org/mailman/listinfo/grub-devel


reply via email to

[Prev in Thread] Current Thread [Next in Thread]