https://git.reactos.org/?p=reactos.git;a=commitdiff;h=0395049986556503da00c…
commit 0395049986556503da00c20dbfe69dc531984956
Author: Jérôme Gardou <jerome.gardou(a)reactos.org>
AuthorDate: Fri May 21 10:49:53 2021 +0200
Commit: Jérôme Gardou <jerome.gardou(a)reactos.org>
CommitDate: Fri May 21 10:52:55 2021 +0200
[NTOS:KE] Do not call MmSetPageProtect for the Pentium Lock Errata
CORE-17589
---
ntoskrnl/ke/i386/cpu.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/ntoskrnl/ke/i386/cpu.c b/ntoskrnl/ke/i386/cpu.c
index 3b07453af53..bdc92f908fd 100644
--- a/ntoskrnl/ke/i386/cpu.c
+++ b/ntoskrnl/ke/i386/cpu.c
@@ -1089,6 +1089,7 @@ KiI386PentiumLockErrataFixup(VOID)
{
KDESCRIPTOR IdtDescriptor = {0, 0, 0};
PKIDTENTRY NewIdt, NewIdt2;
+ PMMPTE PointerPte;
/* Allocate memory for a new IDT */
NewIdt = ExAllocatePool(NonPagedPool, 2 * PAGE_SIZE);
@@ -1114,7 +1115,10 @@ KiI386PentiumLockErrataFixup(VOID)
_enable();
/* Set the first 7 entries as read-only to produce a fault */
- MmSetPageProtect(NULL, NewIdt, PAGE_READONLY);
+ PointerPte = MiAddressToPte(NewIdt);
+ ASSERT(PointerPte->u.Hard.Write == 1);
+ PointerPte->u.Hard.Write = 0;
+ KeInvalidateTlbEntry(NewIdt);
}
BOOLEAN