Finally...
Best regards, Alex Ionescu
On Mon, Feb 16, 2015 at 1:12 PM, jgardou@svn.reactos.org wrote:
Author: jgardou Date: Mon Feb 16 21:12:51 2015 New Revision: 66323
URL: http://svn.reactos.org/svn/reactos?rev=66323&view=rev Log: [KERNEL32] Revert r64525 - Always allocate a guard page at the bottom of the stack.
Modified: trunk/reactos/dll/win32/kernel32/client/utils.c
Modified: trunk/reactos/dll/win32/kernel32/client/utils.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/kernel32/client/u...
============================================================================== --- trunk/reactos/dll/win32/kernel32/client/utils.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/kernel32/client/utils.c [iso-8859-1] Mon Feb 16 21:12:51 2015 @@ -358,6 +358,7 @@ NTSTATUS Status; PIMAGE_NT_HEADERS Headers; ULONG_PTR Stack;
- BOOLEAN UseGuard; ULONG PageSize, Dummy, AllocationGranularity; SIZE_T StackReserveHeader, StackCommitHeader, GuardPageSize,
GuaranteedStackCommit; DPRINT("BaseCreateStack (hProcess: %p, Max: %lx, Current: %lx)\n", @@ -425,6 +426,18 @@ /* Update the Stack Position */ Stack += StackReserve - StackCommit;
- /* Check if we will need a guard page */
- if (StackReserve > StackCommit)
- {
Stack -= PageSize;StackCommit += PageSize;UseGuard = TRUE;- }
- else
- {
UseGuard = FALSE;- }
- /* Allocate memory for the stack */ Status = NtAllocateVirtualMemory(hProcess, (PVOID*)&Stack,
@@ -444,21 +457,25 @@ InitialTeb->StackLimit = (PVOID)Stack;
/* Create a guard page */
- GuardPageSize = PageSize;
- Status = NtProtectVirtualMemory(hProcess,
(PVOID*)&Stack,&GuardPageSize,PAGE_GUARD | PAGE_READWRITE,&Dummy);- if (!NT_SUCCESS(Status))
- {
DPRINT1("Failure to set guard page\n");return Status;- }
- /* Update the Stack Limit keeping in mind the Guard Page */
- InitialTeb->StackLimit = (PVOID)((ULONG_PTR)InitialTeb->StackLimit +
GuardPageSize);
- if (UseGuard)
- {
/* Set the guard page */GuardPageSize = PAGE_SIZE;Status = NtProtectVirtualMemory(hProcess,(PVOID*)&Stack,&GuardPageSize,PAGE_GUARD | PAGE_READWRITE,&Dummy);if (!NT_SUCCESS(Status)){DPRINT1("Failure to set guard page\n");return Status;}/* Update the Stack Limit keeping in mind the Guard Page */InitialTeb->StackLimit =(PVOID)((ULONG_PTR)InitialTeb->StackLimit +
GuardPageSize);}
/* We are done! */ return STATUS_SUCCESS;