]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Core/DxeIplPeim/X64/VirtualMemory.c
MdeModulePkg/DxeIplPeim: fix incorrect page table split during protecting
[mirror_edk2.git] / MdeModulePkg / Core / DxeIplPeim / X64 / VirtualMemory.c
index 26116e420ca4f1c7873a4f4b2ca9fc67058e8fcc..bbdfa2bb8ecdb57a4d7f5bd6115c525a4f593072 100644 (file)
@@ -472,6 +472,8 @@ SetPageTablePoolReadOnly (
       //\r
       // The smaller granularity of page must be needed.\r
       //\r
+      ASSERT (Level > 1);\r
+\r
       NewPageTable = AllocatePageTableMemory (1);\r
       ASSERT (NewPageTable != NULL);\r
 \r
@@ -481,10 +483,10 @@ SetPageTablePoolReadOnly (
             ++EntryIndex) {\r
         NewPageTable[EntryIndex] = PhysicalAddress  | AddressEncMask |\r
                                    IA32_PG_P | IA32_PG_RW;\r
-        if (Level > 1) {\r
+        if (Level > 2) {\r
           NewPageTable[EntryIndex] |= IA32_PG_PS;\r
         }\r
-        PhysicalAddress += LevelSize[Level];\r
+        PhysicalAddress += LevelSize[Level - 1];\r
       }\r
 \r
       PageTable[Index] = (UINT64)(UINTN)NewPageTable | AddressEncMask |\r