On 06/13/19 10:40, David Woodhouse wrote: > The DX register is supposed to contain the required alignment for the > allocation. It was zero, and SeaBIOS doesn't (well, didn't) cope well > with that. Set it appropriately. > > Also set BX to indicate the regions it's OK to allocate in too. That > wasn't being initialised and was just using whatever the previous user > of the structure had left there. > > Finally, actually return an error if the allocation fails. Instead of > going all the way through into the CSM and just letting it have a bogus > pointer to the E820 data. > > Signed-off-by: David Woodhouse <dw...@infradead.org> > Reviewed-by: Hao A Wu <hao.a...@intel.com> > --- > OvmfPkg/Csm/LegacyBiosDxe/LegacyBootSupport.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/OvmfPkg/Csm/LegacyBiosDxe/LegacyBootSupport.c > b/OvmfPkg/Csm/LegacyBiosDxe/LegacyBootSupport.c > index 211750c012..cd4cd24f42 100644 > --- a/OvmfPkg/Csm/LegacyBiosDxe/LegacyBootSupport.c > +++ b/OvmfPkg/Csm/LegacyBiosDxe/LegacyBootSupport.c > @@ -928,7 +928,9 @@ GenericLegacyBoot ( > if (CopySize > Private->Legacy16Table->E820Length) { > ZeroMem (&Regs, sizeof (EFI_IA32_REGISTER_SET)); > Regs.X.AX = Legacy16GetTableAddress; > + Regs.X.BX = (UINT16) 0x0; // Any region > Regs.X.CX = (UINT16) CopySize; > + Regs.X.DX = (UINT16) 0x4; // Alignment > Private->LegacyBios.FarCall86 ( > &Private->LegacyBios, > Private->Legacy16Table->Compatibility16CallSegment, > @@ -942,6 +944,7 @@ GenericLegacyBoot ( > Private->Legacy16Table->E820Length = (UINT32) CopySize; > if (Regs.X.AX != 0) { > DEBUG ((EFI_D_ERROR, "Legacy16 E820 length insufficient\n")); > + return EFI_OUT_OF_RESOURCES; > } else { > CopyMem ( > (VOID *)(UINTN) Private->Legacy16Table->E820Pointer, >
Acked-by: Laszlo Ersek <ler...@redhat.com> -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#42375): https://edk2.groups.io/g/devel/message/42375 Mute This Topic: https://groups.io/mt/32050165/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-