From patchwork Wed Nov 25 11:36:31 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Topi Miettinen X-Patchwork-Id: 41188 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id B39DB3959C80; Wed, 25 Nov 2020 11:36:59 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org B39DB3959C80 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1606304219; bh=xESQiU88c1ELSdOpZQVCR+yK5OVS+l17Ahj9/UDax9Q=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=Tqg4xTeXL3NKYeInrQzZewD04plrJU5AD5czT1l/cMvbh7r7gnbBFnauUQGhqjxf5 GDwMGOwZoxbv/dmpCvDZNX5jQ28Cv9Gl+ngB3RjVotuiLvE3vmzjAz5xxQidU7wvBQ Oyvy0fKwpHtnqFlgkz0Wn3XM3lTT5oPdQ9fgS860= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-lf1-x143.google.com (mail-lf1-x143.google.com [IPv6:2a00:1450:4864:20::143]) by sourceware.org (Postfix) with ESMTPS id E80293959C6C for ; Wed, 25 Nov 2020 11:36:56 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org E80293959C6C Received: by mail-lf1-x143.google.com with SMTP id s27so2669668lfp.5 for ; Wed, 25 Nov 2020 03:36:56 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=xESQiU88c1ELSdOpZQVCR+yK5OVS+l17Ahj9/UDax9Q=; b=JEVWXDzSyHSIccyb628RNRzLtp1j/+aWx9ZslJR94xaBHVZfyylQl8OIjc+c5DNF4z fioLBvUWeOewQP1UDkbEO56RbHIL8lxKe/zJTf2cyI4h3pYD+H3VSPqMT3JoBdaatuGJ cAmhXk5pDPTqk9zMVA5CEoZRd6V1pa87C6p9Q3sUDFA4rEXdrEtV92AKrpBX38c7v69f 9hhAcH08yXEPXTo8TNxUOYvCVlTspxNvqgRa451JnhUoxyagaKmiWBVb16+Ft4vTcXU4 Bo94uysrNgf5o4C/DLH27MPcy2BxEab9P/bOFL1MoLRyxUic+cjRqsfWsBnkphXJs5I3 qO/w== X-Gm-Message-State: AOAM5335fRfhjJxLTTgt6VO8kxBmNx49Mg56FXv6krmC8Fysx7E7nWOf rQmHh2fRBDhrFXZXKuKAQVzpw+68EFIJiQ== X-Google-Smtp-Source: ABdhPJx/neOUnbOV/eNf5Yh8gvxC+rjYhYG6/sJZd44MEJZPUPUgEeDWgsnLQb5VJxc4NhgAEJj8/A== X-Received: by 2002:ac2:5475:: with SMTP id e21mr1186316lfn.153.1606304215508; Wed, 25 Nov 2020 03:36:55 -0800 (PST) Received: from localhost.localdomain (88-114-211-119.elisa-laajakaista.fi. [88.114.211.119]) by smtp.gmail.com with ESMTPSA id e15sm224271lfn.292.2020.11.25.03.36.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 25 Nov 2020 03:36:55 -0800 (PST) To: libc-alpha@sourceware.org Subject: [PATCH 2/3] malloc: use mmap() to improve ASLR Date: Wed, 25 Nov 2020 13:36:31 +0200 Message-Id: <20201125113632.6486-3-toiwoton@gmail.com> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20201125113632.6486-1-toiwoton@gmail.com> References: <20201125113632.6486-1-toiwoton@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-8.9 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, 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-Patchwork-Original-From: Topi Miettinen via Libc-alpha From: Topi Miettinen Reply-To: Topi Miettinen Cc: Topi Miettinen Errors-To: libc-alpha-bounces@sourceware.org Sender: "Libc-alpha" sbrk() returns rather predictable allocations because they are located close to the data segment. Let's use mmap() instead, except if instructed by a tunable. --- v2: use tunable Signed-off-by: Topi Miettinen --- malloc/arena.c | 11 +++++++++-- malloc/morecore.c | 10 ++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/malloc/arena.c b/malloc/arena.c index 202daf15b0..129e231bae 100644 --- a/malloc/arena.c +++ b/malloc/arena.c @@ -295,14 +295,21 @@ ptmalloc_init (void) #ifdef SHARED /* In case this libc copy is in a non-default namespace, never use brk. - Likewise if dlopened from statically linked program. */ + Likewise if dlopened from statically linked program. + Otherwise the use of brk is controlled by a tunable + glibc.malloc.use_sbrk. */ Dl_info di; struct link_map *l; if (_dl_open_hook != NULL || (_dl_addr (ptmalloc_init, &di, &l, NULL) != 0 - && l->l_ns != LM_ID_BASE)) + && l->l_ns != LM_ID_BASE) +#if HAVE_TUNABLES + || !TUNABLE_GET (use_sbrk, int32_t, NULL) +#endif + ) __morecore = __failing_morecore; + #endif thread_arena = &main_arena; diff --git a/malloc/morecore.c b/malloc/morecore.c index 72e655f84f..d5da5ffc45 100644 --- a/malloc/morecore.c +++ b/malloc/morecore.c @@ -38,12 +38,22 @@ libc_hidden_proto (__sbrk) # define NULL 0 #endif +#if HAVE_TUNABLES +# define TUNABLE_NAMESPACE malloc +#endif +#include + /* Allocate INCREMENT more bytes of data space, and return the start of data space, or NULL on errors. If INCREMENT is negative, shrink data space. */ void * __default_morecore (ptrdiff_t increment) { + /* Tunable glibc.malloc.use_sbrk controls use of 'sbrk()'. */ +#if HAVE_TUNABLES + if (!TUNABLE_GET (use_sbrk, int32_t, NULL)) + return NULL; +#endif void *result = (void *) __sbrk (increment); if (result == (void *) -1) return NULL;