This is the mail archive of the cygwin mailing list for the Cygwin project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Possible bug with mmap on XP?

On Feb  2 18:16, Dave Bodenstab wrote:
> I searched the mailing list archives and googled, but failed to find
> anything specific to XP regarding this...
> I am using the latest version (1.5.19-4) of Cygwin.
> I had previously ported a unix prog that used mmap to Cygwin.  On win2k
> it works fine.  When I copied the prog to a newly-installed win XP
> professional system, I get:
>   mmap failed (Permission denied)
> when attempting to do a 
>   mmap(0,1500,PROT_EXEC|PROT_READ|PROT_WRITE,MAP_PRIVATE,<the fd>,0)
> I've found that changing the permissions (chmod +x) on the file being
> mmap'ed makes the problem go away.
> Is this the way things are supposed to work on XP?

This is a constraint of the underlying OS, yes.  The old implementation
of mmap used up to 1.5.18 didn't support PROT_EXEC at all, it was just
fake.  Since 1.5.19, PROT_EXEC mapping is now supported correctly, which
means, the underlying NT functions are called requesting PAGE_EXECUTE

But here's the problem.  To create file mappings with PAGE_EXECUTE
protection, the file must be opened with GENERIC_EXECUTE access. 
This is done internally in mmap, but it fails if the file doesn't
have the execute permission set.

Whether or not this behaviour is backed by SUSv3, I'm not sure.  SUSv3
states "if an implementation cannot support the combination of access
types specified by prot, the call to mmap() shall fail.", so here's one
situation in which the implementation can't support the combination of
access types specified by prot.


Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Project Co-Leader          cygwin AT cygwin DOT com
Red Hat

Unsubscribe info:
Problem reports:

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]