{ Page1G, SIZE_1GB, PAGING_1G_ADDRESS_MASK_64 },\r
};\r
\r
-UINTN mInternalCr3;\r
+UINTN mInternalCr3;\r
+BOOLEAN mIsShadowStack = FALSE;\r
\r
/**\r
Set the internal page table base address.\r
if ((Attributes & EFI_MEMORY_RO) != 0) {\r
if (IsSet) {\r
NewPageEntry &= ~(UINT64)IA32_PG_RW;\r
- if (mInternalCr3 != 0) {\r
+ if (mIsShadowStack) {\r
// Environment setup\r
// ReadOnly page need set Dirty bit for shadow stack\r
NewPageEntry |= IA32_PG_D;\r
EFI_STATUS Status;\r
\r
SetPageTableBase (Cr3);\r
-\r
- Status = SmmSetMemoryAttributes (BaseAddress, Length, EFI_MEMORY_RO);\r
+ mIsShadowStack = TRUE;\r
+ Status = SmmSetMemoryAttributes (BaseAddress, Length, EFI_MEMORY_RO);\r
\r
SetPageTableBase (0);\r
+ mIsShadowStack = FALSE;\r
\r
return Status;\r
}\r