[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v4 3/6] linux/arm: account for COFF headers appearing at unex
From: |
Daniel Kiper |
Subject: |
Re: [PATCH v4 3/6] linux/arm: account for COFF headers appearing at unexpected offsets |
Date: |
Fri, 14 Oct 2022 15:25:10 +0200 |
User-agent: |
NeoMutt/20170113 (1.7.2) |
On Thu, Sep 08, 2022 at 03:30:14PM +0200, Ard Biesheuvel wrote:
> The way we load the Linux and PE/COFF image headers depends on a fixed
> placement of the COFF header at offset 0x40 into the file. This is a
> reasonable default, given that this is where Linux emits it today.
> However, in order to comply with the PE/COFF spec, which allows this
> header to appear anywhere in the file, let's ensure that we read the
> header from where it actually appears in the file if it is not located
> at offset 0x40.
>
> Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
> ---
> grub-core/loader/arm64/linux.c | 15 +++++++++++++++
> 1 file changed, 15 insertions(+)
>
> diff --git a/grub-core/loader/arm64/linux.c b/grub-core/loader/arm64/linux.c
> index 7c0f17cf933d..56ba8d0a6ea3 100644
> --- a/grub-core/loader/arm64/linux.c
> +++ b/grub-core/loader/arm64/linux.c
> @@ -63,6 +63,21 @@ grub_arch_efi_linux_load_image_header (grub_file_t file,
> grub_dprintf ("linux", "UEFI stub kernel:\n");
> grub_dprintf ("linux", "PE/COFF header @ %08x\n", lh->hdr_offset);
>
> + /*
> + * The PE/COFF spec permits the COFF header to appear anywhere in the
> file, so
> + * we need to double check whether it was where we expected it, and if
> not, we
> + * must load it from the correct offset into the coff_image_header field of
> + * struct linux_arch_kernel_header.
> + */
> + if ((grub_uint8_t *) lh + lh->hdr_offset != (grub_uint8_t *)
> &lh->coff_image_header)
> + {
> + grub_file_seek (file, lh->hdr_offset);
I would check if grub_file_seek() does not return -1.
> + if (grub_file_read (file, &lh->coff_image_header, sizeof(struct
> grub_coff_image_header))
> + != sizeof(struct grub_coff_image_header))
Missing spaces before "("...
> + return grub_error(GRUB_ERR_FILE_READ_ERROR, "failed to read COFF
> image header");
Please add missing spaces before return and after grub_error.
Daniel
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: [PATCH v4 3/6] linux/arm: account for COFF headers appearing at unexpected offsets,
Daniel Kiper <=