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]]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to