This is the mail archive of the
cygwin
mailing list for the Cygwin project.
Re: [BUG] mprotect() on Windows NT 5+
- From: Corinna Vinschen <corinna-cygwin at cygwin dot com>
- To: cygwin at cygwin dot com
- Date: Thu, 15 Jul 2004 19:11:52 +0200
- Subject: Re: [BUG] mprotect() on Windows NT 5+
- References: <1089908398.40f6aeaed7044@imp1-q.free.fr>
- Reply-to: cygwin at cygwin dot com
On Jul 15 18:19, Xavier Joubert wrote:
> Hello dear Cygwin developpers !
>
>
> This is my first post here, so I would like to begin by sending you a big thank
> for Cygwin ! This is a great tool to port programs to Windows.
Thanks :-)
> I think I found a bug in mprotect() implementation. This call is unable to set
> some protections (PROT_READ|PROT_WRITE for example) on a given memory area,
> while it can set some others (PROT_NONE or PROT_READ for example) on the same
> memory area. From my tests, it seems to happen only on WNT5+ (ie. Windows 2000
> and Windows XP - detailed results below).
Thanks for the helpful testcase.
The cause is a limitation in newer Windows NT versions, which make sense.
Well, sort of. The protection modes PAGE_READWRITE and PAGE_WRITECOPY are
mutually exlusive, which is enforced in calls to VirtualProtect since W2K.
Since your example uses MAP_PRIVATE, which Cygwin maps to PAGE_WRITECOPY,
trying to protect with MAP_WRITE, which internally maps to PAGE_READWRTE,
fails on W2K and later. I've checked in a fix, so that mprotect tests for
the original protection mode of the first page in the area, and uses
READWRITE or WRITECOPY, whichever matches the original protection.
Corinna
--
Corinna Vinschen Please, send mails regarding Cygwin to
Cygwin Co-Project Leader mailto:cygwin@cygwin.com
Red Hat, Inc.
--
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
Problem reports: http://cygwin.com/problems.html
Documentation: http://cygwin.com/docs.html
FAQ: http://cygwin.com/faq/