From patchwork Fri Dec 18 19:29:52 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Earnshaw X-Patchwork-Id: 41475 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 5E015393BC0C; Fri, 18 Dec 2020 19:30:16 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 5E015393BC0C DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1608319816; bh=GnrW4cTg7W8eUG0zr9gmdn5NKEFtzJCajaXJqWYMB5c=; 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=ctTuSElg4SK0Ll0xKMYDE5I+0YhjQXYWhL2LYKfVrC41NUilL8bZpLuwsH2fu3syT xP32L1XyxPe1j2qC249zuUUYoLPahznYGqMOCwdhzjjFpquoI114AZA/I0BvE1lic0 ljVK2/hb+hITj1hkvAO67CIZza8e/9sj1QiCAouE= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by sourceware.org (Postfix) with ESMTP id C41F9386181A for ; Fri, 18 Dec 2020 19:30:10 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org C41F9386181A Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 218CB1042; Fri, 18 Dec 2020 11:30:10 -0800 (PST) Received: from eagle.buzzard.freeserve.co.uk (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 51BFC3F66E; Fri, 18 Dec 2020 11:30:09 -0800 (PST) To: libc-alpha@sourceware.org Subject: [PATCH v4 1/6] config: Allow memory tagging to be enabled when configuring glibc Date: Fri, 18 Dec 2020 19:29:52 +0000 Message-Id: <20201218192957.11035-2-rearnsha@arm.com> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20201218192957.11035-1-rearnsha@arm.com> References: <20201218192957.11035-1-rearnsha@arm.com> MIME-Version: 1.0 X-Spam-Status: No, score=-13.8 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, 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: Richard Earnshaw via Libc-alpha From: Richard Earnshaw Reply-To: Richard Earnshaw Cc: Richard Earnshaw Errors-To: libc-alpha-bounces@sourceware.org Sender: "Libc-alpha" This patch adds the configuration machinery to allow memory tagging to be enabled from the command line via the configure option --enable-memory-tagging. The current default is off, though in time we may change that once the API is more stable. --- INSTALL | 14 ++++++++++++++ config.h.in | 3 +++ config.make.in | 2 ++ configure | 22 ++++++++++++++++++++++ configure.ac | 15 +++++++++++++++ manual/install.texi | 13 +++++++++++++ 6 files changed, 69 insertions(+) diff --git a/INSTALL b/INSTALL index accdc39821..de75e72760 100644 --- a/INSTALL +++ b/INSTALL @@ -142,6 +142,20 @@ if 'CFLAGS' is specified it must enable optimization. For example: non-CET processors. '--enable-cet' has been tested for i686, x86_64 and x32 on CET processors. +'--enable-memory-tagging' + Enable memory tagging support if the architecture supports it. + When the GNU C Library is built with this option then the resulting + library will be able to control the use of tagged memory when + hardware support is present by use of the tunable + 'glibc.mem.tagging'. This includes the generation of tagged memory + when using the 'malloc' APIs. + + At present only AArch64 platforms with MTE provide this + functionality, although the library will still operate (without + memory tagging) on older versions of the architecture. + + The default is to disable support for memory tagging. + '--disable-profile' Don't build libraries with profiling information. You may want to use this option if you don't plan to do profiling. diff --git a/config.h.in b/config.h.in index b823c8e080..eca2d66a2c 100644 --- a/config.h.in +++ b/config.h.in @@ -160,6 +160,9 @@ /* Define if __stack_chk_guard canary should be randomized at program startup. */ #undef ENABLE_STACKGUARD_RANDOMIZE +/* Define if memory tagging support should be enabled. */ +#undef USE_MTAG + /* Package description. */ #undef PKGVERSION diff --git a/config.make.in b/config.make.in index 1ac9417245..7ae27564fd 100644 --- a/config.make.in +++ b/config.make.in @@ -84,6 +84,8 @@ mach-interface-list = @mach_interface_list@ experimental-malloc = @experimental_malloc@ +memory-tagging = @memory_tagging@ + nss-crypt = @libc_cv_nss_crypt@ static-nss-crypt = @libc_cv_static_nss_crypt@ diff --git a/configure b/configure index 4795e721e5..6a35553805 100755 --- a/configure +++ b/configure @@ -676,6 +676,7 @@ build_nscd libc_cv_static_nss_crypt libc_cv_nss_crypt build_crypt +memory_tagging experimental_malloc enable_werror all_warnings @@ -781,6 +782,7 @@ enable_all_warnings enable_werror enable_multi_arch enable_experimental_malloc +enable_memory_tagging enable_crypt enable_nss_crypt enable_systemtap @@ -1450,6 +1452,8 @@ Optional Features: architectures --disable-experimental-malloc disable experimental malloc features + --enable-memory-tagging enable memory tagging if supported by the + architecture [default=no] --disable-crypt do not build nor install the passphrase hashing library, libcrypt --enable-nss-crypt enable libcrypt to use nss @@ -3519,6 +3523,24 @@ fi +# Check whether --enable-memory-tagging was given. +if test "${enable_memory_tagging+set}" = set; then : + enableval=$enable_memory_tagging; memory_tagging=$enableval +else + memory_tagging=no +fi + +if test "$memory_tagging" = yes; then + # Only enable this on architectures that support it. + case $host_cpu in + aarch64) + $as_echo "#define USE_MTAG 1" >>confdefs.h + + ;; + esac +fi + + # Check whether --enable-crypt was given. if test "${enable_crypt+set}" = set; then : enableval=$enable_crypt; build_crypt=$enableval diff --git a/configure.ac b/configure.ac index 93e68fb696..43cfac9d48 100644 --- a/configure.ac +++ b/configure.ac @@ -311,6 +311,21 @@ AC_ARG_ENABLE([experimental-malloc], [experimental_malloc=yes]) AC_SUBST(experimental_malloc) +AC_ARG_ENABLE([memory-tagging], + AC_HELP_STRING([--enable-memory-tagging], + [enable memory tagging if supported by the architecture @<:@default=no@:>@]), + [memory_tagging=$enableval], + [memory_tagging=no]) +if test "$memory_tagging" = yes; then + # Only enable this on architectures that support it. + case $host_cpu in + aarch64) + AC_DEFINE(USE_MTAG) + ;; + esac +fi +AC_SUBST(memory_tagging) + AC_ARG_ENABLE([crypt], AC_HELP_STRING([--disable-crypt], [do not build nor install the passphrase hashing library, libcrypt]), diff --git a/manual/install.texi b/manual/install.texi index 648f366371..8f26bb2a81 100644 --- a/manual/install.texi +++ b/manual/install.texi @@ -171,6 +171,19 @@ NOTE: @option{--enable-cet} has been tested for i686, x86_64 and x32 on non-CET processors. @option{--enable-cet} has been tested for i686, x86_64 and x32 on CET processors. +@item --enable-memory-tagging +Enable memory tagging support if the architecture supports it. When +@theglibc{} is built with this option then the resulting library will +be able to control the use of tagged memory when hardware support is +present by use of the tunable @samp{glibc.mem.tagging}. This includes +the generation of tagged memory when using the @code{malloc} APIs. + +At present only AArch64 platforms with MTE provide this functionality, +although the library will still operate (without memory tagging) on +older versions of the architecture. + +The default is to disable support for memory tagging. + @item --disable-profile Don't build libraries with profiling information. You may want to use this option if you don't plan to do profiling.