Re: [PATCH] efi/x86: Only copy upto the end of setup_header

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

 



On Thu, 18 Jun 2020 at 22:43, Arvind Sankar <nivedita@xxxxxxxxxxxx> wrote:
>
> When copying the setup_header into the boot_params buffer, only the data
> that is actually part of the setup_header should be copied.
>
> efi_pe_entry() currently copies the entire second sector, which
> initializes some of the fields in boot_params beyond the setup_header
> with garbage (i.e. part of the real-mode boot code gets copied into
> those fields).
>
> This does not cause any issues currently because the fields that are
> overwritten are padding, BIOS EDD information that won't get used, and
> the E820 table which will get properly filled in later.
>
> Fix this to only copy data that is actually part of the setup_header
> structure.
>
> Signed-off-by: Arvind Sankar <nivedita@xxxxxxxxxxxx>

Queued as a fix, thanks,

> ---
>  drivers/firmware/efi/libstub/x86-stub.c | 6 ++++--
>  1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/firmware/efi/libstub/x86-stub.c b/drivers/firmware/efi/libstub/x86-stub.c
> index 37e82bf397aa..3672539cb96e 100644
> --- a/drivers/firmware/efi/libstub/x86-stub.c
> +++ b/drivers/firmware/efi/libstub/x86-stub.c
> @@ -8,6 +8,7 @@
>
>  #include <linux/efi.h>
>  #include <linux/pci.h>
> +#include <linux/stddef.h>
>
>  #include <asm/efi.h>
>  #include <asm/e820/types.h>
> @@ -388,8 +389,9 @@ efi_status_t __efiapi efi_pe_entry(efi_handle_t handle,
>
>         hdr = &boot_params->hdr;
>
> -       /* Copy the second sector to boot_params */
> -       memcpy(&hdr->jump, image_base + 512, 512);
> +       /* Copy the setup header from the second sector to boot_params */
> +       memcpy(&hdr->jump, image_base + 512,
> +              sizeof(struct setup_header) - offsetof(struct setup_header, jump));
>
>         /*
>          * Fill out some of the header fields ourselves because the
> --
> 2.26.2
>



[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux