Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com Message-ID: <20040714194718.24047.qmail@web90105.mail.scd.yahoo.com> Date: Wed, 14 Jul 2004 12:47:18 -0700 (PDT) From: Tenedor Roquefort Subject: mmapped memory lost after fork To: cygwin AT cygwin DOT com MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="0-1728788562-1089834438=:22169" Note-from-DJ: This may be spam --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 #include #include 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--