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 >