mmap(2) with MAP_ANON honouring offset although it shouldn't

Alexander Best alexbestms at math.uni-muenster.de
Mon Nov 2 21:05:59 UTC 2009


John Baldwin schrieb am 2009-11-02:
> On Friday 30 October 2009 10:38:24 pm Alexander Best wrote:
> > John Baldwin schrieb am 2009-10-21:
> > > On Wednesday 21 October 2009 11:51:04 am Alexander Best wrote:
> > > > although the mmap(2) manual states in section MAP_ANON:

> > > > "The offset argument is ignored."

> > > > this doesn't seem to be true. running

> > > > printf("%p\n", mmap((void*)0x1000, 0x1000, PROT_NONE, MAP_ANON,
> > > > -1,
> > > > 0x12345678));

> > > > and

> > > > printf("%p\n", mmap((void*)0x1000, 0x1000, PROT_NONE, MAP_ANON,
> > > > -1,
> > > > 0));

> > > > produces different outputs. i've attached a patch to solve the
> > > > problem. the
> > > > patch is similar to the one proposed in this PR, but should
> > > > apply
> > > > cleanly to
> > > > CURRENT: http://www.freebsd.org/cgi/query-pr.cgi?pr=kern/71258

> > > A simpler patch would be to simply set pos = 0 below the
> > > MAP_STACK
> > > line if
> > > MAP_ANON is set.

> > how about the following patch. problem seems to be that pos = 0
> > needs to be
> > set before pageoff is being calculated.

> I think that that patch is fine, but will defer to alc at .  I think he
> argued
> that any non-zero offset passed to MAP_ANON should fail with EINVAL.

thanks. if that's what the POSIX standard requests that's ok. however in that
case we need to change the mmap(2) manual, because right now it says in
section MAP_ANON:

"The offset argument is ignored."

which should be changed to something like:

"The offset argument must be zero."

also if the behaviour of MAP_ANON changes this also changes the semantics of
MAP_STACK since it implies MAP_ANON. so we need to decide if MAP_STACK should
silently reset any offset value to zero or like MAP_ANON should fail if offset
isn't zero in which case the MAP_STACK section of the mmap(2) manual needs to
be changed to someting like:

"MAP_STACK implies MAP_ANON, and requires offset to be zero."

cheers.
alex


More information about the freebsd-hackers mailing list