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've tested mmap with MAP_STACK and the offset gets discarded just as documented in mmap(2). with the patch the offset handling with MAP_ANON and MAP_STACK (implies MAP_ANON) are the same. another short question: why does the second call when doing printf("%p\n", mmap((void*)0x1000, 0x1000, PROT_READ|PROT_WRITE, MAP_STACK, -1, 0x0)); printf("%p\n", mmap((void*)0x1000, 0x1000, PROT_READ|PROT_WRITE, MAP_STACK, -1, 0x0)); fail? doesn't MAP_STACK allow mapping the same region twice? printf("%p\n", mmap((void*)0x1000, 0x1000, PROT_READ|PROT_WRITE, MAP_STACK, -1, 0x0)); printf("%p\n", mmap((void*)0x2000, 0x1000, PROT_READ|PROT_WRITE, MAP_STACK, -1, 0x0)); works just as expected. cheers. alex
--- /usr/src/sys/vm/vm_mmap.c 2009-10-28 21:37:53.000000000 +0100 +++ ./vm_mmap.c 2009-10-31 03:22:44.000000000 +0100 @@ -241,9 +241,11 @@ ((prot & (PROT_READ | PROT_WRITE)) != (PROT_READ | PROT_WRITE))) return (EINVAL); flags |= MAP_ANON; - pos = 0; } + if (flags & MAP_ANON) + pos = 0; + /* * Align the file position to a page boundary, * and save its page offset component. @@ -300,7 +302,6 @@ handle = NULL; handle_type = OBJT_DEFAULT; maxprot = VM_PROT_ALL; - pos = 0; } else { /* * Mapping file, get fp for validation and
_______________________________________________ freebsd-hackers@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-hackers To unsubscribe, send any mail to "freebsd-hackers-unsubscr...@freebsd.org"