[ros-diffs] [ion] 20838: - Properly create,
grow and delete the kernel stack. Fixes potential
memory leaks introduced in 20806. Thanks to Filip for
verifying my math.
ion at svn.reactos.org
ion at svn.reactos.org
Fri Jan 13 22:57:13 CET 2006
- Properly create, grow and delete the kernel stack. Fixes potential
memory leaks introduced in 20806. Thanks to Filip for verifying my math.
Modified: trunk/reactos/ntoskrnl/ke/kthread.c
Modified: trunk/reactos/ntoskrnl/ps/idle.c
Modified: trunk/reactos/ntoskrnl/ps/kill.c
Modified: trunk/reactos/ntoskrnl/ps/thread.c
Modified: trunk/reactos/ntoskrnl/ps/win32.c
_____
Modified: trunk/reactos/ntoskrnl/ke/kthread.c
--- trunk/reactos/ntoskrnl/ke/kthread.c 2006-01-13 20:37:55 UTC (rev
20837)
+++ trunk/reactos/ntoskrnl/ke/kthread.c 2006-01-13 21:56:51 UTC (rev
20838)
@@ -853,9 +853,9 @@
Thread->Teb = Teb;
/* Set the Thread Stacks */
- Thread->InitialStack = (PCHAR)KernelStack + KERNEL_STACK_SIZE;
- Thread->StackBase = (PCHAR)KernelStack + KERNEL_STACK_SIZE;
- Thread->StackLimit = (ULONG_PTR)KernelStack;
+ Thread->InitialStack = (PCHAR)KernelStack;
+ Thread->StackBase = (PCHAR)KernelStack;
+ Thread->StackLimit = (ULONG_PTR)KernelStack - KERNEL_STACK_SIZE;
Thread->KernelStackResident = TRUE;
/*
_____
Modified: trunk/reactos/ntoskrnl/ps/idle.c
--- trunk/reactos/ntoskrnl/ps/idle.c 2006-01-13 20:37:55 UTC (rev
20837)
+++ trunk/reactos/ntoskrnl/ps/idle.c 2006-01-13 21:56:51 UTC (rev
20838)
@@ -63,7 +63,7 @@
BOOLEAN First)
{
PETHREAD Thread;
- PVOID KernelStack;
+ ULONG_PTR KernelStack;
extern unsigned int init_stack;
Thread = ExAllocatePool(NonPagedPool, sizeof(ETHREAD));
@@ -71,11 +71,11 @@
Thread->ThreadsProcess = Process;
if (First)
{
- KernelStack = (PVOID)init_stack;
+ KernelStack = init_stack;
}
else
{
- KernelStack = MmCreateKernelStack(FALSE);
+ KernelStack = (ULONG_PTR)MmCreateKernelStack(FALSE) +
KERNEL_STACK_SIZE;
}
KeInitializeThread(&Process->Pcb,
&Thread->Tcb,
@@ -84,8 +84,7 @@
NULL,
NULL,
NULL,
- KernelStack);
- Thread->Tcb.ApcQueueable = TRUE;
+ (PVOID)KernelStack);
InitializeListHead(&Thread->IrpList);
*ThreadPtr = Thread;
return STATUS_SUCCESS;
_____
Modified: trunk/reactos/ntoskrnl/ps/kill.c
--- trunk/reactos/ntoskrnl/ps/kill.c 2006-01-13 20:37:55 UTC (rev
20837)
+++ trunk/reactos/ntoskrnl/ps/kill.c 2006-01-13 21:56:51 UTC (rev
20838)
@@ -194,7 +194,7 @@
if(Thread->Tcb.Win32Thread != NULL) ExFreePool
(Thread->Tcb.Win32Thread);
/* Release the Kernel Stack */
- //MmDeleteKernelStack((PVOID)Thread->Tcb.StackLimit, FALSE);
+ MmDeleteKernelStack((PVOID)Thread->Tcb.StackLimit,
Thread->Tcb.StackLimit);
/* Dereference the Process */
ObDereferenceObject(Process);
_____
Modified: trunk/reactos/ntoskrnl/ps/thread.c
--- trunk/reactos/ntoskrnl/ps/thread.c 2006-01-13 20:37:55 UTC (rev
20837)
+++ trunk/reactos/ntoskrnl/ps/thread.c 2006-01-13 21:56:51 UTC (rev
20838)
@@ -116,7 +116,7 @@
KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
NTSTATUS Status;
HANDLE_TABLE_ENTRY CidEntry;
- PVOID KernelStack;
+ ULONG_PTR KernelStack;
/* Reference the Process by handle or pointer, depending on what we
got */
DPRINT("PspCreateThread: %x, %x, %x\n", ProcessHandle,
TargetProcess, ThreadContext);
@@ -206,7 +206,7 @@
/* Allocate Stack for non-GUI Thread */
DPRINT("Initialliazing Thread Stack\n");
- KernelStack = MmCreateKernelStack(FALSE);
+ KernelStack = (ULONG_PTR)MmCreateKernelStack(FALSE) +
KERNEL_STACK_SIZE;
/* Set the Process CID */
DPRINT("Initialliazing Thread PID and Parent Process\n");
@@ -236,7 +236,7 @@
NULL,
ThreadContext,
TebBase,
- KernelStack);
+ (PVOID)KernelStack);
} else {
@@ -254,7 +254,7 @@
StartContext,
NULL,
NULL,
- KernelStack);
+ (PVOID)KernelStack);
}
/*
@@ -269,10 +269,6 @@
DPRINT("Running Thread Notify \n");
PspRunCreateThreadNotifyRoutines(Thread, TRUE);
- /* FIXME: Use Lock */
- DPRINT("Apcs Queueable: %d \n", Thread->Tcb.ApcQueueable);
- Thread->Tcb.ApcQueueable = TRUE;
-
/* Suspend the Thread if we have to */
if (CreateSuspended) {
_____
Modified: trunk/reactos/ntoskrnl/ps/win32.c
--- trunk/reactos/ntoskrnl/ps/win32.c 2006-01-13 20:37:55 UTC (rev
20837)
+++ trunk/reactos/ntoskrnl/ps/win32.c 2006-01-13 21:56:51 UTC (rev
20838)
@@ -71,7 +71,8 @@
NTAPI
PsConvertToGuiThread(VOID)
{
- PVOID NewStack, OldStack;
+ ULONG_PTR NewStack;
+ PVOID OldStack;
PETHREAD Thread = PsGetCurrentThread();
PEPROCESS Process = PsGetCurrentProcess();
NTSTATUS Status;
@@ -102,7 +103,7 @@
if (!Thread->Tcb.LargeStack)
{
/* We don't create one */
- NewStack = MmCreateKernelStack(TRUE);
+ NewStack = (ULONG_PTR)MmCreateKernelStack(TRUE) +
KERNEL_LARGE_STACK_SIZE;
if (!NewStack)
{
/* Panic in user-mode */
@@ -114,8 +115,8 @@
KeEnterCriticalRegion();
/* Switch stacks */
- OldStack = KeSwitchKernelStack((PVOID)((ULONG_PTR)NewStack +
0x3000),
- NewStack);
+ OldStack = KeSwitchKernelStack((PVOID)NewStack,
+ (PVOID)(NewStack -
KERNEL_STACK_SIZE));
/* Leave the critical region */
KeLeaveCriticalRegion();
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.reactos.org/pipermail/ros-diffs/attachments/20060113/749bad57/attachment.html
More information about the Ros-diffs
mailing list