From 24a0cabddc59403172d9d3bb94dec40afe711c85 Mon Sep 17 00:00:00 2001 From: "bmeurer@chromium.org" Date: Tue, 10 Sep 2013 05:54:15 +0000 Subject: [PATCH] Use PAGE_NOACCESS for guard pages in Windows. Up until now we used PAGE_GUARD for guard pages in Windows, which will raise a STATUS_GUARD_PAGE_VIOLATION exception on first access and grant regular access afterwards. This behavior is required to implement automatic stack checking, or more generally to implement applications that monitor the growth of large dynamic data structures. However, this is not what we want for our guard pages, which are used as a security mechanism. What we really want is PAGE_NOACCESS here, which is the Windows-equivalent of PROT_NONE that we use on all other platforms. R=cdn@chromium.org Review URL: https://codereview.chromium.org/23458022 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@16604 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/platform-cygwin.cc | 2 +- src/platform-posix.cc | 2 +- src/platform-win32.cc | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/platform-cygwin.cc b/src/platform-cygwin.cc index f2154a4..6b41417 100644 --- a/src/platform-cygwin.cc +++ b/src/platform-cygwin.cc @@ -344,7 +344,7 @@ bool VirtualMemory::Guard(void* address) { if (NULL == VirtualAlloc(address, OS::CommitPageSize(), MEM_COMMIT, - PAGE_READONLY | PAGE_GUARD)) { + PAGE_NOACCESS)) { return false; } return true; diff --git a/src/platform-posix.cc b/src/platform-posix.cc index 504d140..b111213 100644 --- a/src/platform-posix.cc +++ b/src/platform-posix.cc @@ -152,7 +152,7 @@ void OS::ProtectCode(void* address, const size_t size) { void OS::Guard(void* address, const size_t size) { #if defined(__CYGWIN__) DWORD oldprotect; - VirtualProtect(address, size, PAGE_READONLY | PAGE_GUARD, &oldprotect); + VirtualProtect(address, size, PAGE_NOACCESS, &oldprotect); #else mprotect(address, size, PROT_NONE); #endif diff --git a/src/platform-win32.cc b/src/platform-win32.cc index c98489f..8247d2e 100644 --- a/src/platform-win32.cc +++ b/src/platform-win32.cc @@ -865,7 +865,7 @@ void OS::ProtectCode(void* address, const size_t size) { void OS::Guard(void* address, const size_t size) { DWORD oldprotect; - VirtualProtect(address, size, PAGE_READONLY | PAGE_GUARD, &oldprotect); + VirtualProtect(address, size, PAGE_NOACCESS, &oldprotect); } @@ -1441,7 +1441,7 @@ bool VirtualMemory::Guard(void* address) { if (NULL == VirtualAlloc(address, OS::CommitPageSize(), MEM_COMMIT, - PAGE_READONLY | PAGE_GUARD)) { + PAGE_NOACCESS)) { return false; } return true; -- 2.7.4