From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-lf1-x144.google.com (mail-lf1-x144.google.com [IPv6:2a00:1450:4864:20::144]) by sourceware.org (Postfix) with ESMTPS id 84937384A026 for ; Tue, 24 Nov 2020 11:59:25 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 84937384A026 Received: by mail-lf1-x144.google.com with SMTP id d17so28464580lfq.10 for ; Tue, 24 Nov 2020 03:59:25 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=ltgd6JAGh6DfSofQsgrbA8ZYlYWO3D6BoKMZL2XfV+o=; b=BAAmlQSdUwqCKaMbPRBMExyZ1Ah/rck6GV9lU2SwI/OlV6vuBS6ZCMtNCg3eMNcIWf AcsJ2haa5cPsCqJnj78ROLWCM50jHCmOgYVudsUK1fYmggV5GWJw0z8T9vuMXAKNn79y S5TPIPAXwaI0NJ2xYI6r3yJyuz/b9M6MZhOEZ548c8szguDmpw9mjft4kr0cH62ATJ2H XDhGQpihQBNeXe4JwH5+xfn+9uY9G1WSErvx2esXj8iNznY27S1i7CyXSWqAT92wQKFj pcms9HTkprarmw1hgn8YEbJr//ktXYg7cHA8bQ4nbhqshMXSPl1nAjEc689nP3IaY0J1 Qdcw== X-Gm-Message-State: AOAM531QCLogm/bstLZemXAndHdMdcaZrtzPB+vPOfkl3IUZi9Q3oJeX 4xHhuavNAsxfeaEioh4Ac30= X-Google-Smtp-Source: ABdhPJxY96itDC4hP+7DG3G8Nx6FtUDAHRo9Iq0Cj93BqpGn0u1mSGlpZ1iTtTFt2twafThhEUpipA== X-Received: by 2002:a19:505:: with SMTP id 5mr162292lff.578.1606219164316; Tue, 24 Nov 2020 03:59:24 -0800 (PST) Received: from [192.168.1.39] (88-114-211-119.elisa-laajakaista.fi. [88.114.211.119]) by smtp.gmail.com with ESMTPSA id g18sm1784651lfb.0.2020.11.24.03.59.23 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 24 Nov 2020 03:59:23 -0800 (PST) Subject: Re: [RFC PATCH 0/3] Improved ALSR To: Florian Weimer Cc: Topi Miettinen via Libc-alpha , Szabolcs Nagy References: <20201004130938.64575-1-toiwoton@gmail.com> <20201123164112.GH20578@arm.com> <015eb923-b4dc-57dc-b9bf-cdeb38fa2c15@gmail.com> <87tutf4uib.fsf@oldenburg2.str.redhat.com> <87pn432e0q.fsf@oldenburg2.str.redhat.com> From: Topi Miettinen Message-ID: Date: Tue, 24 Nov 2020 13:59:20 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.5.0 MIME-Version: 1.0 In-Reply-To: <87pn432e0q.fsf@oldenburg2.str.redhat.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-2.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, NICE_REPLY_A, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 24 Nov 2020 11:59:27 -0000 On 24.11.2020 13.24, Florian Weimer wrote: > * Topi Miettinen: > >> On 23.11.2020 23.45, Florian Weimer wrote: >>> * Topi Miettinen via Libc-alpha: >>> >>>> $ time ./malloc-vs-sbrk >>>> >>>> real 0m1.923s >>>> user 0m0.160s >>>> sys 0m1.762s >>>> $ time ./malloc-vs-sbrk 1 >>>> >>>> real 0m2.847s >>>> user 0m0.176s >>>> sys 0m2.669s >>> Does the difference go away if you change the mmap granularity to >>> 128 KiB? I think this happens under the covers (on the kernel side) >>> with sbrk. >> >> Does not seem so, 56% increase: > > But the test does not seem very realistic because the pages are never > faulted in. Sorry, I didn't check that before. Right, this changes the equation dramatically: # time ./malloc-vs-sbrk real 0m19.498s user 0m1.192s sys 0m18.302s # time ./malloc-vs-sbrk 1 real 0m19.428s user 0m1.276s sys 0m18.146s FYI, the effect of full ASLR of mmap() by kernel also seems small: # echo 3 >/proc/sys/kernel/randomize_va_space # time ./malloc-vs-sbrk real 0m19.489s user 0m1.263s sys 0m18.211s # time ./malloc-vs-sbrk 1 real 0m19.532s user 0m1.148s sys 0m18.366s # cat malloc-vs-sbrk.c #include #include #include #include #include #define ROUNDS 1000 #define SIZES 4 #define SIZE_FACTOR 3 #define SIZE_BASE (128 * 1024) int main(int argc, char **argv) { if (argc == 2) { for (int i = 0; i < ROUNDS; i++) { for (int j = 0; j < SIZES; j++) { size_t s = SIZE_BASE * (1 << (j * SIZE_FACTOR)); void *ptr = mmap(NULL, s, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); if (ptr == MAP_FAILED) { fprintf(stderr, "mmap() failed, size %zu iter %d\n", s, i); return 1; } memset(ptr, 0, s); munmap(ptr, s); } } } else { for (int i = 0; i < ROUNDS; i++) { for (int j = 0; j < SIZES; j++) { size_t s = SIZE_BASE * (1 << (j * SIZE_FACTOR)); void *ptr = sbrk(s); if (ptr == (void *) -1) { fprintf(stderr, "sbrk() failed, size %zu iter %d\n", s, i); return 1; } memset(ptr, 0, s); sbrk(-s); } } } return 0; } -Topi