]> git.proxmox.com Git - mirror_edk2.git/blobdiff - UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c
UefiCpuPkg/PiSmmCpuDxeSmm: Fix SMM stack offset is not correct
[mirror_edk2.git] / UefiCpuPkg / PiSmmCpuDxeSmm / MpService.c
index 4bcd217917d7f42b8b834bae6dd5fddab02e0ee4..6227b2428a1e3e1644ea7bb0e607d7137266aa8e 100644 (file)
@@ -23,6 +23,8 @@ SPIN_LOCK                                   *mPFLock = NULL;
 SMM_CPU_SYNC_MODE                           mCpuSmmSyncMode;\r
 BOOLEAN                                     mMachineCheckSupported = FALSE;\r
 \r
+extern UINTN mSmmShadowStackSize;\r
+\r
 /**\r
   Performs an atomic compare exchange operation to get semaphore.\r
   The compare exchange operation must be performed using\r
@@ -920,7 +922,7 @@ Gen4GPageTable (
     // Add two more pages for known good stack and stack guard page,\r
     // then find the lower 2MB aligned address.\r
     //\r
-    High2MBoundary = (mSmmStackArrayEnd - mSmmStackSize + EFI_PAGE_SIZE * 2) & ~(SIZE_2MB-1);\r
+    High2MBoundary = (mSmmStackArrayEnd - mSmmStackSize - mSmmShadowStackSize + EFI_PAGE_SIZE * 2) & ~(SIZE_2MB-1);\r
     PagesNeeded = ((High2MBoundary - Low2MBoundary) / SIZE_2MB) + 1;\r
   }\r
   //\r
@@ -971,7 +973,7 @@ Gen4GPageTable (
           // Mark the guard page as non-present\r
           //\r
           Pte[Index] = PageAddress | mAddressEncMask;\r
-          GuardPage += mSmmStackSize;\r
+          GuardPage += (mSmmStackSize + mSmmShadowStackSize);\r
           if (GuardPage > mSmmStackArrayEnd) {\r
             GuardPage = 0;\r
           }\r