[ros-dev] [ros-diffs] [jgardou] 66323: [KERNEL32] Revert r64525 - Always allocate a guard page at the bottom of the stack.
Alex Ionescu
ionucu at videotron.ca
Tue Feb 17 09:52:01 UTC 2015
Finally...
Best regards,
Alex Ionescu
On Mon, Feb 16, 2015 at 1:12 PM, <jgardou at 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/utils.c?rev=66323&r1=66322&r2=66323&view=diff
>
> ==============================================================================
> --- 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;
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.reactos.org/pipermail/ros-dev/attachments/20150217/13890df3/attachment.html>
More information about the Ros-dev
mailing list