grub-devel
[Top][All Lists]
Advanced

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

Re: GRUB error: unknown filesystem on ia64


From: John Paul Adrian Glaubitz
Subject: Re: GRUB error: unknown filesystem on ia64
Date: Fri, 16 Apr 2021 18:43:17 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.9.0

Hi Javier!

On 4/16/21 5:21 PM, Javier Martinez Canillas wrote:
> Thanks for the binaries, as you said the ".data" and "mods" sections had
> wrong size and content. Could you please try the following patch [0] ?
> 
> It's an RFC since I'm not really an expert on binary formats, but there
> were a few problems with the patch you mentioned as far as I can tell.
> 
> I Cc'ed Daniel and Peter so they can correct me if I got anything wrong.
> 
> Best regards,
> Javier
> 
> [0]
> From 31c9864ff6543b624d404d8fabc9c517756a470a Mon Sep 17 00:00:00 2001
> From: Javier Martinez Canillas <javierm@redhat.com>
> Date: Fri, 16 Apr 2021 17:01:44 +0200
> Subject: [RFC PATCH] util/mkimage: Some fixes to PE binaries section size
>  calculation
> 
> Commit f60ba9e5945 (util/mkimage: Refactor section setup to use a helper)
> added a helper function to setup PE sections, but it caused regressions
> in some arches where the natural alignment lead to wrong section sizes.
> 
> This patch fixes a few things that were caused the section sizes to be
> calculated wrongly. These fixes are:
> 
>  * Only align the virtual memory addresses but not the raw data offsets.
>  * Use aligned sizes for virtual memory sizes but not for raw data sizes.
>  * Always align the sizes to set the virtual memory sizes.
> 
> These seems to not cause problems for x64 and aa64 EFI platforms but was
> a problem for ia64. Because the size of the ".data" and "mods" sections
> were wrong and didn't have the correct content. Which lead to GRUB not
> being able to load any built-in module.
> 
> Reported-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
> Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
> ---
>  util/mkimage.c | 12 ++++++------
>  1 file changed, 6 insertions(+), 6 deletions(-)
> 
> diff --git a/util/mkimage.c b/util/mkimage.c
> index 8b475a69109..0d33f0e9766 100644
> --- a/util/mkimage.c
> +++ b/util/mkimage.c
> @@ -841,7 +841,7 @@ init_pe_section(const struct 
> grub_install_image_target_desc *image_target,
>  
>    section->raw_data_offset = grub_host_to_target32 (*rda);
>    section->raw_data_size = grub_host_to_target32 (rsz);
> -  (*rda) = ALIGN_UP (*rda + rsz, GRUB_PE32_FILE_ALIGNMENT);
> +  (*rda) = *rda + rsz;
>  
>    section->characteristics = grub_host_to_target32 (characteristics);
>  
> @@ -1389,26 +1389,26 @@ grub_install_generate_image (const char *dir, const 
> char *prefix,
>  
>       section = init_pe_section (image_target, section, ".data",
>                                  &vma, scn_size, image_target->section_align,
> -                                &raw_data, scn_size,
> +                                &raw_data, layout.kernel_size - 
> layout.exec_size,
>                                  GRUB_PE32_SCN_CNT_INITIALIZED_DATA |
>                                  GRUB_PE32_SCN_MEM_READ |
>                                  GRUB_PE32_SCN_MEM_WRITE);
>  
> -     scn_size = pe_size - layout.reloc_size - raw_data;
> +     scn_size = ALIGN_UP (pe_size - layout.reloc_size - raw_data, 
> GRUB_PE32_FILE_ALIGNMENT);
>       section = init_pe_section (image_target, section, "mods",
>                                  &vma, scn_size, image_target->section_align,
> -                                &raw_data, scn_size,
> +                                &raw_data, pe_size - layout.reloc_size - 
> raw_data,
>                                  GRUB_PE32_SCN_CNT_INITIALIZED_DATA |
>                                  GRUB_PE32_SCN_MEM_READ |
>                                  GRUB_PE32_SCN_MEM_WRITE);
>  
> -     scn_size = layout.reloc_size;
> +     scn_size = ALIGN_UP (layout.reloc_size, GRUB_PE32_FILE_ALIGNMENT);
>       PE_OHDR (o32, o64, base_relocation_table.rva) = grub_host_to_target32 
> (vma);
>       PE_OHDR (o32, o64, base_relocation_table.size) = grub_host_to_target32 
> (scn_size);
>       memcpy (pe_img + raw_data, layout.reloc_section, scn_size);
>       init_pe_section (image_target, section, ".reloc",
>                        &vma, scn_size, image_target->section_align,
> -                      &raw_data, scn_size,
> +                      &raw_data, layout.reloc_size,
>                        GRUB_PE32_SCN_CNT_INITIALIZED_DATA |
>                        GRUB_PE32_SCN_MEM_DISCARDABLE |
>                        GRUB_PE32_SCN_MEM_READ);
> 

It seems the patch no longer applies due to the changes introduced by the --sbat
option [1].

Could you rebase your patch? Meanwhile I'm testing it with a manual rebase 
applied.

Adrian

> [1] 
> http://git.savannah.gnu.org/cgit/grub.git/commit/util?id=b11547137703bbc642114a816233a5b6fed61b06

-- 
 .''`.  John Paul Adrian Glaubitz
: :' :  Debian Developer - glaubitz@debian.org
`. `'   Freie Universitaet Berlin - glaubitz@physik.fu-berlin.de
  `-    GPG: 62FF 8A75 84E0 2956 9546  0006 7426 3B37 F5B5 F913



reply via email to

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