Mail Archives: cygwin/2004/07/14/15:47:29
--0-1728788562-1089834438=:22169
Content-Type: text/plain; charset=us-ascii
Content-Id:
Content-Disposition: inline
I'm using Cygwin 1.5.10-3 and have found what seems to
be a fork/mmap bug. I have two examples where a forked
child cannot access memory that was mmapped by the
parent. The problem seems to arise when the parent
munmaps some pages (different from the ones the child
will try to access) before forking.
In the example below, the parent mmaps 2 pages,
munmaps the first page, writes to the second page and
forks. Then both parent and child try to access the
second page, the parent succeeds but the child dies
trying. The examples work on Linux without the child
dying. Has this problem been documented before and is
there a known fix?
Thanks.
#include <stdio.h>
#include <sys/mman.h>
#include <unistd.h>
int main ()
{
char *p;
int sz = 0x2000;
int keep = 0x1000;
int offset;
int magic = 0x33;
int pid;
int rv;
p = (char *) mmap (0, sz, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
printf ("mmap() = %p\n", p);
/* keep upper chunk -> segv */
rv = munmap (p, keep);
offset = keep + 0x42;
printf ("munmap() = %d\n",rv);
p[offset] = magic;
pid = fork ();
switch (pid)
{
case (-1):
printf ("fork() failed\n");
break;
case (0):
printf ("child touching %p\n", &(p[offset]));
printf ("child M[%p] = 0x%x\n",
&(p[offset]), p[offset]);
break;
default:
printf ("parent touching %p\n", &(p[offset]));
printf ("parent M[%p] = 0x%x\n",
&(p[offset]), p[offset]);
break;
}
return 0;
}
__________________________________
Do you Yahoo!?
Yahoo! Mail - 50x more storage than other providers!
http://promotions.yahoo.com/new_mail
--0-1728788562-1089834438=:22169
Content-Type: application/octet-stream; name="mmap1.c"
Content-Transfer-Encoding: base64
Content-Description: mmap1.c
Content-Disposition: attachment; filename="mmap1.c"
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzeXMvbW1hbi5oPgojaW5j
bHVkZSA8dW5pc3RkLmg+CgojZGVmaW5lIE1BWCAyCgppbnQgbWFpbiAoKQp7
CiAgICBjaGFyICpwW01BWF07CiAgICBpbnQgc3pbTUFYXSA9IHsweDIwMDAs
IDB4MTAwMH07CiAgICBpbnQga2VlcCA9IDB4MTAwMDsKICAgIGludCBvZmZz
ZXQgPSAweDQyOwogICAgaW50IG1hZ2ljID0gMHgzMzsKICAgIGludCBpOwog
ICAgaW50IHBpZDsKICAgIGludCBydjsKCiAgICBmb3IoaT0wOyBpPE1BWDsg
aSsrKQogICAgewogICAgICAgIHBbaV0gPSAoY2hhciAqKSBtbWFwICgwLCBz
eltpXSwgUFJPVF9SRUFEfFBST1RfV1JJVEUsIE1BUF9QUklWQVRFfE1BUF9B
Tk9OWU1PVVMsIC0xLCAwKTsKICAgICAgICBwcmludGYgKCJtbWFwKCkgPSAl
cFxuIiwgcFtpXSk7CiAgICB9CgojZGVmaW5lIEtFRVBMTwojaWZkZWYgS0VF
UExPCiAgICAvKiBrZWVwIGxvd2VyIGNodW5rIC0+IHNlZ3YgKi8KICAgIHJ2
ID0gbXVubWFwIChwWzBdK2tlZXAsIHN6WzBdLWtlZXApOwojZWxzZQogICAg
Lyoga2VlcCB1cHBlciBjaHVuayAtPiBvayAqLwogICAgcnYgPSBtdW5tYXAg
KHBbMF0sIGtlZXApOwojZW5kaWYKCiAgICBwcmludGYgKCJtdW5tYXAoKSA9
ICVkXG4iLHJ2KTsKCiAgICBpID0gMTsKICAgIHBbaV1bb2Zmc2V0XSA9IG1h
Z2ljOwoKICAgIHBpZCA9IGZvcmsgKCk7CgogICAgc3dpdGNoIChwaWQpCiAg
ICB7CiAgICBjYXNlICgtMSk6CiAgICAgICAgcHJpbnRmICgiZm9yaygpIGZh
aWxlZFxuIik7CiAgICAgICAgYnJlYWs7CiAgICBjYXNlICgwKToKICAgICAg
ICBwcmludGYgKCJjaGlsZCB0b3VjaGluZyAlcFxuIiwgJihwW2ldW29mZnNl
dF0pKTsKICAgICAgICBwcmludGYgKCJjaGlsZCBNWyVwXSA9IDB4JXhcbiIs
ICYocFtpXVtvZmZzZXRdKSwgcFtpXVtvZmZzZXRdKTsKICAgICAgICBicmVh
azsKICAgIGRlZmF1bHQ6CiAgICAgICAgcHJpbnRmICgicGFyZW50IHRvdWNo
aW5nICVwXG4iLCAmKHBbaV1bb2Zmc2V0XSkpOwogICAgICAgIHByaW50ZiAo
InBhcmVudCBNWyVwXSA9IDB4JXhcbiIsICYocFtpXVtvZmZzZXRdKSwgcFtp
XVtvZmZzZXRdKTsKICAgICAgICBicmVhazsKICAgIH0KCiAgICByZXR1cm4g
MDsKfQo=
--0-1728788562-1089834438=:22169
Content-Type: application/octet-stream; name="mmap2.c"
Content-Transfer-Encoding: base64
Content-Description: mmap2.c
Content-Disposition: attachment; filename="mmap2.c"
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzeXMvbW1hbi5oPgojaW5j
bHVkZSA8dW5pc3RkLmg+CgppbnQgbWFpbiAoKQp7CiAgICBjaGFyICpwOwog
ICAgaW50IHN6ID0gMHgyMDAwOwogICAgaW50IGtlZXAgPSAweDEwMDA7CiAg
ICBpbnQgb2Zmc2V0OwogICAgaW50IG1hZ2ljID0gMHgzMzsKICAgIGludCBw
aWQ7CiAgICBpbnQgcnY7CgogICAgcCA9IChjaGFyICopIG1tYXAgKDAsIHN6
LCBQUk9UX1JFQUR8UFJPVF9XUklURSwgTUFQX1BSSVZBVEV8TUFQX0FOT05Z
TU9VUywgLTEsIDApOwogICAgcHJpbnRmICgibW1hcCgpID0gJXBcbiIsIHAp
OwoKI2RlZmluZSBLRUVQTE8KI2lmZGVmIEtFRVBMTwogICAgLyoga2VlcCBs
b3dlciBjaHVuayAtPiBvayAqLwogICAgcnYgPSBtdW5tYXAgKHAra2VlcCwg
c3ota2VlcCk7CiAgICBvZmZzZXQgPSAweDQyOwojZWxzZQogICAgLyoga2Vl
cCB1cHBlciBjaHVuayAtPiBzZWd2ICovCiAgICBydiA9IG11bm1hcCAocCwg
a2VlcCk7CiAgICBvZmZzZXQgPSBrZWVwICsgMHg0MjsKI2VuZGlmCgogICAg
cHJpbnRmICgibXVubWFwKCkgPSAlZFxuIixydik7CgogICAgcFtvZmZzZXRd
ID0gbWFnaWM7CgogICAgcGlkID0gZm9yayAoKTsKCiAgICBzd2l0Y2ggKHBp
ZCkKICAgIHsKICAgIGNhc2UgKC0xKToKICAgICAgICBwcmludGYgKCJmb3Jr
KCkgZmFpbGVkXG4iKTsKICAgICAgICBicmVhazsKICAgIGNhc2UgKDApOgog
ICAgICAgIHByaW50ZiAoImNoaWxkIHRvdWNoaW5nICVwXG4iLCAmKHBbb2Zm
c2V0XSkpOwogICAgICAgIHByaW50ZiAoImNoaWxkIE1bJXBdID0gMHgleFxu
IiwgJihwW29mZnNldF0pLCBwW29mZnNldF0pOwogICAgICAgIGJyZWFrOwog
ICAgZGVmYXVsdDoKICAgICAgICBwcmludGYgKCJwYXJlbnQgdG91Y2hpbmcg
JXBcbiIsICYocFtvZmZzZXRdKSk7CiAgICAgICAgcHJpbnRmICgicGFyZW50
IE1bJXBdID0gMHgleFxuIiwgJihwW29mZnNldF0pLCBwW29mZnNldF0pOwog
ICAgICAgIGJyZWFrOwogICAgfQoKICAgIHJldHVybiAwOwp9Cg==
--0-1728788562-1089834438=:22169
Content-Type: text/plain; charset=us-ascii
--
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/
--0-1728788562-1089834438=:22169--
- Raw text -