mirror of
git://sourceware.org/git/newlib-cygwin.git
synced 2025-01-31 11:30:56 +08:00
* mmap.cc (gen_create_protect): Always generate WRITECOPY protection
for private maps. (fixup_mmaps_after_fork): Fix calculation of WRITECOPY protection for VirtualProtect. Add some words to the comment.
This commit is contained in:
parent
4e8e54543e
commit
2193d02b4d
@ -1,3 +1,10 @@
|
||||
2005-12-12 Corinna Vinschen <corinna@vinschen.de>
|
||||
|
||||
* mmap.cc (gen_create_protect): Always generate WRITECOPY protection
|
||||
for private maps.
|
||||
(fixup_mmaps_after_fork): Fix calculation of WRITECOPY protection for
|
||||
VirtualProtect. Add some words to the comment.
|
||||
|
||||
2005-12-10 Christopher Faylor <cgf@timesys.com>
|
||||
|
||||
* dirent.h: Change the rest of the d_ino's to __deprecated_d_ino.
|
||||
|
@ -98,8 +98,10 @@ gen_create_protect (DWORD openflags, int flags)
|
||||
{
|
||||
DWORD ret = PAGE_READONLY;
|
||||
|
||||
if (openflags & GENERIC_WRITE)
|
||||
ret = priv (flags) ? PAGE_WRITECOPY : PAGE_READWRITE;
|
||||
if (priv (flags))
|
||||
ret = PAGE_WRITECOPY;
|
||||
else if (openflags & GENERIC_WRITE)
|
||||
ret = PAGE_READWRITE;
|
||||
|
||||
/* Ignore EXECUTE permission on 9x. */
|
||||
if ((openflags & GENERIC_EXECUTE)
|
||||
@ -1963,16 +1965,16 @@ fixup_mmaps_after_fork (HANDLE parent)
|
||||
"address %p, %E", address);
|
||||
return -1;
|
||||
}
|
||||
else if ((mbi.AllocationProtect & PAGE_WRITECOPY)
|
||||
else if ((mbi.AllocationProtect == PAGE_WRITECOPY
|
||||
|| mbi.AllocationProtect == PAGE_EXECUTE_WRITECOPY)
|
||||
&& (mbi.Protect == PAGE_READWRITE
|
||||
|| mbi.Protect == PAGE_EXECUTE_READWRITE))
|
||||
{
|
||||
/* A PAGE_WRITECOPY page which has been written to is
|
||||
set to PAGE_READWRITE, but that's an incompatible
|
||||
protection to set the page to. */
|
||||
mbi.Protect &= ~PAGE_READWRITE;
|
||||
mbi.Protect |= PAGE_WRITECOPY;
|
||||
}
|
||||
/* A WRITECOPY page which has been written to is set to
|
||||
READWRITE, but that's an incompatible protection to
|
||||
set the page to. Convert the protection to WRITECOPY
|
||||
so that the below VirtualProtect doesn't fail. */
|
||||
mbi.Protect <<= 1;
|
||||
|
||||
if (!ReadProcessMemory (parent, address, address,
|
||||
mbi.RegionSize, NULL))
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user