REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3639
Cc: Jiewen Yao <[email protected]> Cc: Eric Dong <[email protected]> Cc: Michael Kinney <[email protected]> Cc: Jian J Wang <[email protected]> Cc: Jeff Fan <[email protected]> Cc: Mikhail Krichanov <[email protected]> Cc: Marvin Häuser <[email protected]> Signed-off-by: Vitaly Cheptsov <[email protected]> --- .../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) -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#80874): https://edk2.groups.io/g/devel/message/80874 Mute This Topic: https://groups.io/mt/85741694/21656 Group Owner: [email protected] Unsubscribe: https://edk2.groups.io/g/devel/unsub [[email protected]] -=-=-=-=-=-=-=-=-=-=-=-
