From b3f049be4fb4e16009c2275eac6dba1d73ea5a66 Mon Sep 17 00:00:00 2001 From: Alex Ionescu Date: Sun, 17 Oct 2004 03:43:26 +0000 Subject: [PATCH] KeStackAttach: Acquire lock before getting thread svn path=/trunk/; revision=11305 --- reactos/ntoskrnl/ke/i386/kernel.c | 20 +++++++++++--------- reactos/ntoskrnl/ke/process.c | 4 ++-- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/reactos/ntoskrnl/ke/i386/kernel.c b/reactos/ntoskrnl/ke/i386/kernel.c index f4ca505e7b1..c2865a6f8f6 100644 --- a/reactos/ntoskrnl/ke/i386/kernel.c +++ b/reactos/ntoskrnl/ke/i386/kernel.c @@ -134,30 +134,31 @@ KePrepareForApplicationProcessorInit(ULONG Id) VOID KeApplicationProcessorInit(VOID) { - PKPCR KPCR; + PKPCR Pcr; ULONG Offset; /* * Create a PCR for this processor */ Offset = InterlockedIncrement((LONG *)&PcrsAllocated) - 1; - KPCR = (PKPCR)(KPCR_BASE + (Offset * PAGE_SIZE)); - MmCreateVirtualMappingForKernel((PVOID)KPCR, + Pcr = (PKPCR)(KPCR_BASE + (Offset * PAGE_SIZE)); + MmCreateVirtualMappingForKernel((PVOID)Pcr, PAGE_READWRITE, &PcrPages[Offset], 1); - memset(KPCR, 0, PAGE_SIZE); - KPCR->ProcessorNumber = (UCHAR)Offset; - KPCR->Self = KPCR; - KPCR->Irql = HIGH_LEVEL; + memset(Pcr, 0, PAGE_SIZE); + Pcr->ProcessorNumber = (UCHAR)Offset; + Pcr->Self = Pcr; + Pcr->Tib.Self = &Pcr->Tib; + Pcr->Irql = HIGH_LEVEL; /* Mark the end of the exception handler list */ - KPCR->Tib.ExceptionList = (PVOID)-1; + Pcr->Tib.ExceptionList = (PVOID)-1; /* * Initialize the GDT */ - KiInitializeGdt(KPCR); + KiInitializeGdt(Pcr); /* * It is now safe to process interrupts @@ -215,6 +216,7 @@ KeInit1(PCHAR CommandLine, PULONG LastKernelAddress) KPCR = (PKPCR)KPCR_BASE; memset(KPCR, 0, PAGE_SIZE); KPCR->Self = (PKPCR)KPCR_BASE; + KPCR->Tib.Self = (PKPCR_TIB)KPCR_BASE; KPCR->Irql = HIGH_LEVEL; KPCR->GDT = KiBootGdt; KPCR->IDT = (PUSHORT)KiIdt; diff --git a/reactos/ntoskrnl/ke/process.c b/reactos/ntoskrnl/ke/process.c index 064d6dbc2b6..fbd28bcc13b 100644 --- a/reactos/ntoskrnl/ke/process.c +++ b/reactos/ntoskrnl/ke/process.c @@ -16,7 +16,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* $Id: process.c,v 1.29 2004/10/13 22:27:03 ion Exp $ +/* $Id: process.c,v 1.30 2004/10/17 03:43:26 ion Exp $ * * PROJECT: ReactOS kernel * FILE: ntoskrnl/ke/process.c @@ -138,8 +138,8 @@ KeStackAttachProcess ( KIRQL OldIrql; PKTHREAD Thread; - Thread = KeGetCurrentThread(); OldIrql = KeAcquireDispatcherDatabaseLock(); + Thread = KeGetCurrentThread(); /* Crash system if DPC is being executed! */ if (KeIsExecutingDpc()) {