From 0395049986556503da00c20dbfe69dc531984956 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Gardou?= Date: Fri, 21 May 2021 10:49:53 +0200 Subject: [PATCH] [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