From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 19365 invoked by alias); 3 May 2019 11:33:57 -0000 Mailing-List: contact cygwin-help@cygwin.com; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner@cygwin.com Mail-Followup-To: cygwin@cygwin.com Received: (qmail 19356 invoked by uid 89); 3 May 2019 11:33:56 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-1.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.1 spammy=dumped, ac X-HELO: mail-ot1-f43.google.com Received: from mail-ot1-f43.google.com (HELO mail-ot1-f43.google.com) (209.85.210.43) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 03 May 2019 11:33:55 +0000 Received: by mail-ot1-f43.google.com with SMTP id w6so4978550otl.7 for ; Fri, 03 May 2019 04:33:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to; bh=6P5hEmaB1+IOj3/tq5gbnGJ4msX4BvdkFgdh+nqSXEQ=; b=uO5w/JEm0av4XKy/GWF2C8vAbNaFWL92VY05Zb/9xoMemNcrGFPMsmhPd1M61PUQdG xdbkbk3y7sYBTaqMHSR2jCZiyw7nmaqulIVEhZjQBK9MPtcQCYzYnm/8drsdzoAy8okR WhyyBOkdoOJwMTVZYXgbRvU/UXHkvl6ITLb69mAMJiAmzskeg3Eb5t4RM22yJ0oc1ePE FnSx6pQeZPgVGnlKqHZlbNSkwPrYHv8ooMGCRMqHG7Moq2T9ezZQBChWdRWy86TwUwe0 Rdu3qvSDdKR1U4AdO81rVG+a95SUBnSLDcSGdOBuwD1y5xbiIUkoHIjWNoofMeTYX5yS OSSQ== MIME-Version: 1.0 From: Stanislav Kascak Date: Fri, 03 May 2019 11:33:00 -0000 Message-ID: Subject: possible problem with memory allocation using calloc/mmap/munmap To: cygwin@cygwin.com Content-Type: text/plain; charset="UTF-8" X-SW-Source: 2019-05/txt/msg00033.txt.bz2 Hello cygwin team, I came across a problem with memory allocation/deallocation when trying to compile and run tests of openldap under cygwin. I created a test program to simulate sequence of actions. First a bigger chunk of memory (>~262kB) is allocated using calloc(), then mmap() is called with requested memory size much bigger than actual file size. Subsequently, munmap() to free previous mmap(), and at the end an attempt to access memory allocated with calloc(). That last memory access is causing Segmentation fault. It seems that when mmap() is called with length argument exceeding size of file, only memory to fit that file is allocated. munmap() however frees the full specified length. Since (at least on my computer) big chunk of memory allocated by calloc() is located after mmap() allocation, munmap() frees even memory of that calloc(). I'm not sure if this is only a problem of my environment, or there is something I'm missing. Below is the test (notice that memory allocated by mmap() is only 64k bytes in front of the memory allocated by calloc(), not 32MB as requested). My system is Windows 7 64 bit, cygwin64 3.0.7. Best regards, Stanislav Kascak $ cat a.c #include #include #include #include #include #include #include int main(int argc, char** argv){ char* x; char* y; int fd; size_t s1 = 0x40000; size_t s2 = 0x2000000; x = (char*)calloc(1, s1); if(x == NULL){ printf("calloc failed\n"); } x[0] = 'a'; fd = open("testfile", O_RDONLY); if(fd == -1){ printf("open failed: %d\n", errno); } y = mmap(NULL, s2, PROT_READ, MAP_SHARED, fd, 0); if(y == MAP_FAILED){ printf("mmap failed: %d\n", errno); } close(fd); printf("%lx -> %c\n", x, x[0]); printf("%lx\n", y); if(munmap(y, s2)){ printf("munmap failed: %d\n", errno); } printf("%lx -> %c\n", x, x[0]); free(x); } $ gcc a.c $ echo "testdata" > testfile $ ./a.exe 6fffffb0010 -> a 6fffffa0000 Segmentation fault (core dumped) $ uname -a CYGWIN_NT-6.1 myhost 3.0.7(0.338/5/3) 2019-04-30 18:08 x86_64 Cygwin -- Problem reports: http://cygwin.com/problems.html FAQ: http://cygwin.com/faq/ Documentation: http://cygwin.com/docs.html Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple