On Fri, Nov 5, 2021 at 7:37 PM Vitaly Cheptsov wrote: > > Hi Leif, > > I assume you mean the commit description, because the commit message is in the topic. A topic is not a commit message. The commit message is what comes after the topic. > I believe something like that would do: > > CpuExceptionHandlerLib supplies misaligned GDT to the outer world > (e.g. ArchSetupExceptionStack) when PcdCpuStackGuard is enabled. > This happens because it uses an array of UINT8 for the mNewGdt > variable, which alignment is 1 byte versus required 8 bytes. As a result > ArchSetupExceptionStack always returns EFI_INVALID_PARAMETER in OVMF Ia32 > with XCODE5 and CLANGPDB at least. > > Fix this by allocating extra space in mNewGdt and then aligning the pointer > upwards. But I'm happy with this one. Best Regards, Leif > Best wishes, > Vitaly > > > On 5 Nov 2021, at 22:28, Leif Lindholm wrote: > > > > UefiCpuPkg maintainers - please respond. > > > > Meanwhile, Vitaly, could you please provide a commit message? > > The BZ link is needed, but it's not a substitute. > > > > / > > Leif > > > > On Mon, Sep 20, 2021 at 17:13:47 +0300, Vitaly Cheptsov wrote: > >> REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3639 > >> > >> > >> > >> Cc: Jiewen Yao > >> > >> Cc: Eric Dong > >> > >> Cc: Michael Kinney > >> > >> Cc: Jian J Wang > >> > >> Cc: Jeff Fan > >> > >> Cc: Mikhail Krichanov > >> > >> Cc: Marvin Häuser > >> > >> Signed-off-by: Vitaly Cheptsov > >> > >> --- > >> > >> .../Library/CpuExceptionHandlerLib/DxeException.c | 12 +++++++----- > >> > >> 1 file changed, 7 insertions(+), 5 deletions(-) > >> > >> > >> > >> diff --git a/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeException.c b/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeException.c > >> > >> index fd59f09ecd..12874811e1 100644 > >> > >> --- a/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeException.c > >> > >> +++ b/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeException.c > >> > >> @@ -22,7 +22,7 @@ EXCEPTION_HANDLER_DATA mExceptionHandlerData; > >> > >> > >> > >> UINT8 mNewStack[CPU_STACK_SWITCH_EXCEPTION_NUMBER * > >> > >> CPU_KNOWN_GOOD_STACK_SIZE]; > >> > >> -UINT8 mNewGdt[CPU_TSS_GDT_SIZE]; > >> > >> +UINT8 mNewGdt[CPU_TSS_GDT_SIZE + IA32_GDT_ALIGNMENT]; > >> > >> > >> > >> /** > >> > >> Common exception handler. > >> > >> @@ -238,6 +238,7 @@ InitializeCpuExceptionHandlersEx ( > >> > >> CPU_EXCEPTION_INIT_DATA EssData; > >> > >> IA32_DESCRIPTOR Idtr; > >> > >> IA32_DESCRIPTOR Gdtr; > >> > >> + UINT8 *Gdt; > >> > >> > >> > >> // > >> > >> // To avoid repeat initialization of default handlers, the caller should pass > >> > >> @@ -259,6 +260,7 @@ InitializeCpuExceptionHandlersEx ( > >> > >> if (PcdGetBool (PcdCpuStackGuard)) { > >> > >> if (InitData == NULL) { > >> > >> SetMem (mNewGdt, sizeof (mNewGdt), 0); > >> > >> + Gdt = ALIGN_POINTER (mNewGdt, IA32_GDT_ALIGNMENT); > >> > >> > >> > >> AsmReadIdtr (&Idtr); > >> > >> AsmReadGdtr (&Gdtr); > >> > >> @@ -270,11 +272,11 @@ InitializeCpuExceptionHandlersEx ( > >> > >> EssData.X64.StackSwitchExceptionNumber = CPU_STACK_SWITCH_EXCEPTION_NUMBER; > >> > >> EssData.X64.IdtTable = (VOID *)Idtr.Base; > >> > >> EssData.X64.IdtTableSize = Idtr.Limit + 1; > >> > >> - EssData.X64.GdtTable = mNewGdt; > >> > >> - EssData.X64.GdtTableSize = sizeof (mNewGdt); > >> > >> - EssData.X64.ExceptionTssDesc = mNewGdt + Gdtr.Limit + 1; > >> > >> + EssData.X64.GdtTable = Gdt; > >> > >> + EssData.X64.GdtTableSize = CPU_TSS_GDT_SIZE; > >> > >> + EssData.X64.ExceptionTssDesc = Gdt + Gdtr.Limit + 1; > >> > >> EssData.X64.ExceptionTssDescSize = CPU_TSS_DESC_SIZE; > >> > >> - EssData.X64.ExceptionTss = mNewGdt + Gdtr.Limit + 1 + CPU_TSS_DESC_SIZE; > >> > >> + EssData.X64.ExceptionTss = Gdt + Gdtr.Limit + 1 + CPU_TSS_DESC_SIZE; > >> > >> EssData.X64.ExceptionTssSize = CPU_TSS_SIZE; > >> > >> > >> > >> InitData = &EssData; > >> > >> -- > >> > >> 2.30.1 (Apple Git-130) > >> > >> > >> > >> > >> > >> > >> > >>