https://git.reactos.org/?p=reactos.git;a=commitdiff;h=0395049986556503da00c2...
commit 0395049986556503da00c20dbfe69dc531984956 Author: Jérôme Gardou jerome.gardou@reactos.org AuthorDate: Fri May 21 10:49:53 2021 +0200 Commit: Jérôme Gardou jerome.gardou@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