From patchwork Thu Oct 26 17:11:40 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adhemerval Zanella Netto X-Patchwork-Id: 738332 Delivered-To: patch@linaro.org Received: by 2002:ab3:1905:0:b0:23f:8cfb:5ad7 with SMTP id u5csp1311623ltc; Thu, 26 Oct 2023 10:12:08 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHeYvbwYzFhVbbCJURFVjhV0oVVnwW9EQW3NlTt5PSiAAhX5ay33FEN0un/kfFkPsGJJ3nS X-Received: by 2002:a05:6102:101b:b0:457:c445:69f3 with SMTP id q27-20020a056102101b00b00457c44569f3mr207859vsp.34.1698340328719; Thu, 26 Oct 2023 10:12:08 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1698340328; cv=pass; d=google.com; s=arc-20160816; b=YaShkRJkcOepSlWhpXBiP03ceijj4kH2dMYlJ7gr+o+l7q423yrlfjFjF/jh59jIUX myrKZZjwRoVnY87dbIorL9J8vMRsKKNhbdDSMl1CTy6rV7FoHUTj9KZyztcGyOqzUNGF yzv4aASduCDhO6V9C+J9DWVbgYepwF1G7gmN6GJYXFdYOa0p/jrzA6oZ1UBdBpKPvccn FazVMDKA946GjW1cIzNwRAMFijr2G7RBWIr2cNGgYpYzQHKh8nwSTZtFPSO4vyrt7OIh CZKnrv9UZitmYQxX4sgwNohQOWiSxiltkYw9agD6UOvKZKdzp05CP7u38GE1ZzcGE4pZ Ndew== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:to:from :dkim-signature:arc-filter:dmarc-filter:delivered-to; bh=P82T3XiHlcAORYon69t5gtQ9Xhw+Xw3KC0QpBrGYFAQ=; fh=Lbqp+rs2mRBTG5C9ik7cirOzlOF2+U9yLxjtEQVqExY=; b=IMHBHdXqguGtLfEBZHYhSX7ZV2BSd/dqxJyj52f6u3MoB9IMlaUDRVksDlHY/rFn5a Cic1rQ9nrFYzRcUG99WuDhQSRVtZNI/G5xaSegesZaZnvYoCpmzhqQ6yl7n3kOXZucrO COefS5uwJdDfTodQ3nM7Bvd0ZV//vnx/7C8O9syUQEuUXkklsaLuH22vEY1QIw6NybV9 UMHJKnJEFWpjz1k1A9tHDc+Hg+s3zk3/hp2+pydrfQR8q8M9yRH7AuKnkzlHYEkSyHFG d7Z22ay3bFh5yWFjj0hNHZsSjziJXK9ZqXWIBwcCH2Rv+zkcVJO3XA2YFV7Q6Ho/otoU 7wSw== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=mNCJPPSB; arc=pass (i=1); spf=pass (google.com: domain of libc-alpha-bounces+patch=linaro.org@sourceware.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="libc-alpha-bounces+patch=linaro.org@sourceware.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from server2.sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id dt31-20020a05620a479f00b00770eaca9182si9640291qkb.303.2023.10.26.10.12.08 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 26 Oct 2023 10:12:08 -0700 (PDT) Received-SPF: pass (google.com: domain of libc-alpha-bounces+patch=linaro.org@sourceware.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) client-ip=2620:52:3:1:0:246e:9693:128c; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=mNCJPPSB; arc=pass (i=1); spf=pass (google.com: domain of libc-alpha-bounces+patch=linaro.org@sourceware.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="libc-alpha-bounces+patch=linaro.org@sourceware.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 4C49B385414F for ; Thu, 26 Oct 2023 17:12:08 +0000 (GMT) X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-pf1-x434.google.com (mail-pf1-x434.google.com [IPv6:2607:f8b0:4864:20::434]) by sourceware.org (Postfix) with ESMTPS id 93C793858C2A for ; Thu, 26 Oct 2023 17:11:53 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 93C793858C2A Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=linaro.org ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 93C793858C2A Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::434 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1698340316; cv=none; b=NtFP9snnyehy8YYXR37uqFKYwyvtl2k4lCkHB59+phYN0RpYpeXcqVoEsTsHQ//cn72vf25US8s3hkcTr+3MD85ay0hysF7P7LLKuakmplP0wLUva+9/mXtybz008fPDjofAX5CDw5Q4/HXRebde0880XMbYlMxuX9R52+gTpHU= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1698340316; c=relaxed/simple; bh=YXj8f/nMi4Loh2EH2RC257eclpZ4ggJfMEt6u6AsvYQ=; h=DKIM-Signature:From:To:Subject:Date:Message-Id:MIME-Version; b=IaR4pd++ti1kQxDVUyoKeBJ9sBSaamePbBnGy7uE7g1pk7bOjq00rJ6IPrEg8a2zn3YvcqlW2Cmoj1qzGS7qw3KHGmP43r7oL4ex3x3aTEdhDMz7sfLx4GkPn2b/jiWtBZz4AKXsUvBBAHRk1kENW01OdDx42MCgkOgDN4fEpiQ= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-pf1-x434.google.com with SMTP id d2e1a72fcca58-6b2018a11efso1149380b3a.0 for ; Thu, 26 Oct 2023 10:11:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1698340312; x=1698945112; darn=sourceware.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=P82T3XiHlcAORYon69t5gtQ9Xhw+Xw3KC0QpBrGYFAQ=; b=mNCJPPSB5Z9TZEtrip8y8ORwAVvp8BpX02PafYmiUKU5ioF4VMERcK4Z8/UU9Roum+ BsTfRKwf69VrKdD4k2ZFSgCLspnse6Jvm+1Ul6k2vDfS8Oqeqh/BhY20oQWyvNtoDJXC qXVVkFrMMXBOBAj8RxG28s8JS8MC77H2REoFSrWl8xanY5MwY6J/4UOAXtPlHgabMiYY rMelXtYNm6+o9lCqe+N83l58F1qfdHVVEvCCBksPsI05D1XXhwdLbwwednMp+JgM/rm/ wIbdKl7mkmWPmNvYPMop5d4jYKTIMN0v5ZpsC1TLY89dSLYLe42Sos4HApRuOeOZP57S qLsQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1698340312; x=1698945112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=P82T3XiHlcAORYon69t5gtQ9Xhw+Xw3KC0QpBrGYFAQ=; b=DGwH/5hGLLFxg4vjjoIfHufzsGAvxKPvHVbof+BqWmjBEgIv9dWtIJKEkFArK0Rqys LIUrWxEufJJ7GC2wPiy9JXV2FNxoPr0Cte3tsAl0SaspJh3qbPb4PF9gsfpDp4jAvIqL i/0ytAeutqvfcQpOgsXPWHqHw+zft5+GvATl9xJbR9TdhUtIOe/B286L+KdbIefmvDcO ZeQWAVMunMKKH3w2yCKVCjGjvIjFwUw2Xr7Lbz5U0Wt5xFqC4w/AWlLfRLFILT0PpoG0 j08+zXS2ahy70cCOkVyaUJA8+q7s2GvZARXI+U4WUzChpDWgPGYLHzh8sxazvmdJarDC uhlQ== X-Gm-Message-State: AOJu0YxYRgPotvysyVBj3Yo9DUnEcVPjkTgjioELHMh/XdunnqWlAst7 fDpP/393Pri7hv2C6m0IZH3lsmP5K+Nh8p/XgCmV+A== X-Received: by 2002:a05:6a21:819e:b0:15e:7323:5c0f with SMTP id pd30-20020a056a21819e00b0015e73235c0fmr460157pzb.16.1698340311930; Thu, 26 Oct 2023 10:11:51 -0700 (PDT) Received: from mandiga.. ([2804:1b3:a7c3:a647:ad90:6e37:bd13:fb33]) by smtp.gmail.com with ESMTPSA id w18-20020aa78592000000b006bee5ad4efasm11516394pfn.67.2023.10.26.10.11.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 26 Oct 2023 10:11:51 -0700 (PDT) From: Adhemerval Zanella To: libc-alpha@sourceware.org, Ian Rogers , Francesco Nigro , Carlos O'Donell , Siddhesh Poyarekar Subject: [PATCH 1/5] linux: Add __set_vma_name Date: Thu, 26 Oct 2023 14:11:40 -0300 Message-Id: <20231026171144.2188549-2-adhemerval.zanella@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231026171144.2188549-1-adhemerval.zanella@linaro.org> References: <20231026171144.2188549-1-adhemerval.zanella@linaro.org> MIME-Version: 1.0 X-Spam-Status: No, score=-12.0 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libc-alpha-bounces+patch=linaro.org@sourceware.org Linux 5.17 added support to naming anonymous virtual memory areas through the prctl syscall. The __set_vma_name is a wrapper to avoid optimizing the prctl call if the kernel does not support it. If the kernel does not support PR_SET_VMA_ANON_NAME, prctl returns EINVAL. And it also returns the same error for an invalid argument. Since it is an internal-only API, it assumes well-formatted input: aligned START, with (START, START+LEN) being a valid memory range, and NAME with a limit of 80 characters without an invalid one ("\\`$[]"). --- include/sys/prctl.h | 5 ++++ sysdeps/generic/setvmaname.h | 27 +++++++++++++++++ sysdeps/unix/sysv/linux/Makefile | 1 + sysdeps/unix/sysv/linux/setvmaname.c | 44 ++++++++++++++++++++++++++++ sysdeps/unix/sysv/linux/setvmaname.h | 27 +++++++++++++++++ 5 files changed, 104 insertions(+) create mode 100644 sysdeps/generic/setvmaname.h create mode 100644 sysdeps/unix/sysv/linux/setvmaname.c create mode 100644 sysdeps/unix/sysv/linux/setvmaname.h diff --git a/include/sys/prctl.h b/include/sys/prctl.h index d33f3a290e..8e8e05b07c 100644 --- a/include/sys/prctl.h +++ b/include/sys/prctl.h @@ -3,6 +3,11 @@ # ifndef _ISOMAC +# ifndef PR_SET_VMA +# define PR_SET_VMA 0x53564d41 +# define PR_SET_VMA_ANON_NAME 0 +# endif + extern int __prctl (int __option, ...); libc_hidden_proto (__prctl) diff --git a/sysdeps/generic/setvmaname.h b/sysdeps/generic/setvmaname.h new file mode 100644 index 0000000000..43ebd93822 --- /dev/null +++ b/sysdeps/generic/setvmaname.h @@ -0,0 +1,27 @@ +/* Utilities functions to name memory mappings. + Copyright (C) 2023 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef __SETVMANAME_H +#define __SETVMANAME_H + +static inline void __set_vma_name (void *start, size_t len_in, + const char *name) +{ +} + +#endif diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile index 063719bae6..250df6f455 100644 --- a/sysdeps/unix/sysv/linux/Makefile +++ b/sysdeps/unix/sysv/linux/Makefile @@ -97,6 +97,7 @@ sysdep_routines += \ readahead \ setfsgid \ setfsuid \ + setvmaname \ signalfd \ splice \ sysctl \ diff --git a/sysdeps/unix/sysv/linux/setvmaname.c b/sysdeps/unix/sysv/linux/setvmaname.c new file mode 100644 index 0000000000..6459a158ac --- /dev/null +++ b/sysdeps/unix/sysv/linux/setvmaname.c @@ -0,0 +1,44 @@ +/* Utilities functions to name memory mappings. + Copyright (C) 2023 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#include +#include +#include +#include + +/* If PR_SET_VMA_ANON_NAME is not supported by the kernel, prctl returns + EINVAL. However, it also returns the same error for invalid argument. + Since it is an internal-only API, it assumes well formatted input: + aligned START, with (START, START+LEN) being a valid memory range, + and NAME with a limit of 80 characters without invalid one ("\\`$[]"). */ + +void +__set_vma_name (void *start, size_t len_in, const char *name) +{ + static int prctl_supported = 1; + if (atomic_load_relaxed (&prctl_supported) == 0) + return; + + int r = INTERNAL_SYSCALL_CALL (prctl, PR_SET_VMA, PR_SET_VMA_ANON_NAME, + start, len_in, name); + if (r == 0 || r != -EINVAL) + return; + + atomic_store_relaxed (&prctl_supported, 0); + return; +} diff --git a/sysdeps/unix/sysv/linux/setvmaname.h b/sysdeps/unix/sysv/linux/setvmaname.h new file mode 100644 index 0000000000..0f875dbf5a --- /dev/null +++ b/sysdeps/unix/sysv/linux/setvmaname.h @@ -0,0 +1,27 @@ +/* Utilities functions to name memory mappings. + Copyright (C) 2023 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef __SETVMANAME_H +#define __SETVMANAME_H + +/* Set the NAME to the anonymous memory map START with size of LEN. + It assumes well-formatted input. */ +void __set_vma_name (void *start, size_t len, const char *name) + attribute_hidden; + +#endif From patchwork Thu Oct 26 17:11:41 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adhemerval Zanella Netto X-Patchwork-Id: 738333 Delivered-To: patch@linaro.org Received: by 2002:ab3:1905:0:b0:23f:8cfb:5ad7 with SMTP id u5csp1311873ltc; Thu, 26 Oct 2023 10:12:31 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGDCREEMxgJ7iHkAclN8FhCTlTzmgE8uADR0o0lThnOt/+cHqB1oP6jdfJLEo6iUT9pIHWu X-Received: by 2002:a05:622a:1a91:b0:418:af7:e001 with SMTP id s17-20020a05622a1a9100b004180af7e001mr159580qtc.41.1698340350911; Thu, 26 Oct 2023 10:12:30 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1698340350; cv=pass; d=google.com; s=arc-20160816; b=jRgUfuZNzobDoO4yJ8p2bv7SBKZLrFMANq6MGL/WryKGATwqXdqFh9xzLgziQk5lMU GtYhe3VEDfVExmvbJ7CPzGL1bsibBG4+I+qScMupqNi/HogyC20qmHFtpitn/nv/uvJx LxfB+LWZEcZLHvEJ8J0yPSCQC2sqv0CmzU7c2190rrztQ6gGW0uQFgnYdZRM2gku89yI u2PswOfhPAgZaVV2miAUvqdB3FyIpuK3LvotI+S7j1A+omUQ42Ws0OuaOunRcsyOMNwo fW4DuyWDneCxySRm8lfyMCAT9ArWfChb5POREIKf/HyJYDKc3eA+a7joN6XWATArIWhF +Mfw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:to:from :dkim-signature:arc-filter:dmarc-filter:delivered-to; bh=s8RVhP5i91O39KSQjCyRzBdQQD/6GnedOsUOtoDrF/Y=; fh=Lbqp+rs2mRBTG5C9ik7cirOzlOF2+U9yLxjtEQVqExY=; b=cBQNvI61b4xfAT7Wi8E5jKXRsPkI0lQxoVV4BNBIHODnKQfNf0EO2W/h7vlKjVrIUg 97H42SqisicyuURR2rREYgza/DqOiT5ady+oNIrucjes2UaML4yMlnjz5UdPrhKHkirL kUJtle7gONNQUOfSG2N3pBNmbJJ4liDBGTlvNLbHZIbeCGO37V6oyNlKCwI+46TDRLrG VOppRuY/wu9/sigz1ofLAYqEF/DL2Q6o5GmgQ0EHhUppt7HIZbvAyhA8pKEBGnTFZBlg 03YX66eDQcUiGDXMOxudSFCgD01eXPkE+iCnFmCOAoNTibL77u0zkMlwSzav7ZOtzS6e L0rQ== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b="Vb6kBX/6"; arc=pass (i=1); spf=pass (google.com: domain of libc-alpha-bounces+patch=linaro.org@sourceware.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="libc-alpha-bounces+patch=linaro.org@sourceware.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from server2.sourceware.org (server2.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id d9-20020a05622a05c900b0041972df884fsi10013136qtb.578.2023.10.26.10.12.30 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 26 Oct 2023 10:12:30 -0700 (PDT) Received-SPF: pass (google.com: domain of libc-alpha-bounces+patch=linaro.org@sourceware.org designates 8.43.85.97 as permitted sender) client-ip=8.43.85.97; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b="Vb6kBX/6"; arc=pass (i=1); spf=pass (google.com: domain of libc-alpha-bounces+patch=linaro.org@sourceware.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="libc-alpha-bounces+patch=linaro.org@sourceware.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 82FF13861835 for ; Thu, 26 Oct 2023 17:12:29 +0000 (GMT) X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-pf1-x42e.google.com (mail-pf1-x42e.google.com [IPv6:2607:f8b0:4864:20::42e]) by sourceware.org (Postfix) with ESMTPS id 99A0A3858C2B for ; Thu, 26 Oct 2023 17:11:55 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 99A0A3858C2B Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=linaro.org ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 99A0A3858C2B Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::42e ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1698340320; cv=none; b=RG9kekIo3MK/2dsji/dXsC50db60J90aSuw6agA80CF+q/rzTQEuiIMyPX9IrIStg4NvUwbti+aBV3SaEeV7HvJYG8FSU2JEQ4W7/9xMQhvdqStIQtyd8oaqDOMU3rBtmToU6aTjLvYy9Tshjpy+lWyMbyy6KBQ56R8uMLv2jsA= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1698340320; c=relaxed/simple; bh=8RRL5kABKc1J1lzV6b7gDsG4ZHPjL9tbGRf2dOdaMtU=; h=DKIM-Signature:From:To:Subject:Date:Message-Id:MIME-Version; b=BI1UDC8yujIYvwpD7gcRmkl+VqQNJnvdp2PziJiw6kA73X51MMP8Cchn7S2OYAW7aKC55dHboSvqQ0lTZhyWlOsIL7T4O50rNiEs6niKlwdn78iCpvj6EqxZNjIYw92c7191OEF6oA7owfU1MtP6kbCm6xsm9HckMqdb58Kv6K8= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-pf1-x42e.google.com with SMTP id d2e1a72fcca58-6b5af4662b7so1091249b3a.3 for ; Thu, 26 Oct 2023 10:11:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1698340314; x=1698945114; darn=sourceware.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=s8RVhP5i91O39KSQjCyRzBdQQD/6GnedOsUOtoDrF/Y=; b=Vb6kBX/6m/BYulPE58ToeYGawvgef9EUPqx/tf5Tci5jXvXH8WlRKTsazqpY4XcXMn gxjHbqatMo0VXTm172ut+X2hZiSVYb092m7uCXxd65odg4zWwpfv+w/hI34zWv4WB/YW EqAQp0ujGlfXq0BuqpLZAHXC/fqzS8GB12Q4tExgJrUqlUMoQxaL+4vlW6cSJg6W6v9+ mdtI026G88Ybk962mh+wTgr6oHFfwUjp8t450s/z30rnzPBmHuipzE4qRPFyOXk+/EUa lr+AeJ/XGq3T7z11eS+qvgdC3nCiClODqoo1G2vIsmpArk2j+dLHK3WH5NxhrfoXIqyM P/qQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1698340314; x=1698945114; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=s8RVhP5i91O39KSQjCyRzBdQQD/6GnedOsUOtoDrF/Y=; b=C0vql8bsiBrY0QfqdwrknjtpD8p2fgaQZdorzABID/Mz7UgM2ZewwqCgZw1B3NEykP v4cREUHV2d42mmEubEMfD8tl+hZnqTYhEqZCJPnlxWDLRd2Vhhtk7LNH/Xlw1NgJFeg7 wRrrxYiiVZp4uMSc20huE55Iaz5lbcz3PAPUSSPKA8XAXXtcoyLUuloUq+mL+GXHgQ+x KwLDjHpBAqLy3oxLREi01tTyJBcUT4uI8OmooM8Hk+pH7hFfjSAd4L9KeXBPGbIZPdax WfM/44rMuQOOZQ4HVCA4/74XX7MxJMmFBLwt3Nc+KgdM+1waELpbzhUT48nYA5LPsfZ6 pRrg== X-Gm-Message-State: AOJu0YwVKcflQQoqJcLFu5Qey1EJJkQehYACEEfawqoCsxCXA7ldSlwv srUks5utx8quDjpZVUwmXpCwerm2mMFDapLM5LV2uw== X-Received: by 2002:a05:6a00:1142:b0:692:af9c:d96a with SMTP id b2-20020a056a00114200b00692af9cd96amr140932pfm.5.1698340314098; Thu, 26 Oct 2023 10:11:54 -0700 (PDT) Received: from mandiga.. ([2804:1b3:a7c3:a647:ad90:6e37:bd13:fb33]) by smtp.gmail.com with ESMTPSA id w18-20020aa78592000000b006bee5ad4efasm11516394pfn.67.2023.10.26.10.11.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 26 Oct 2023 10:11:53 -0700 (PDT) From: Adhemerval Zanella To: libc-alpha@sourceware.org, Ian Rogers , Francesco Nigro , Carlos O'Donell , Siddhesh Poyarekar Subject: [PATCH 2/5] support: Add support_set_vma_name Date: Thu, 26 Oct 2023 14:11:41 -0300 Message-Id: <20231026171144.2188549-3-adhemerval.zanella@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231026171144.2188549-1-adhemerval.zanella@linaro.org> References: <20231026171144.2188549-1-adhemerval.zanella@linaro.org> MIME-Version: 1.0 X-Spam-Status: No, score=-12.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libc-alpha-bounces+patch=linaro.org@sourceware.org Check if kernel supports prctl (PR_SET_VMA, PR_SET_VMA_ANON_NAME, ...). --- support/Makefile | 1 + support/support.h | 4 +++ support/support_set_vma_name.c | 49 ++++++++++++++++++++++++++++++++++ 3 files changed, 54 insertions(+) create mode 100644 support/support_set_vma_name.c diff --git a/support/Makefile b/support/Makefile index 917a858bd1..54a8cc30ac 100644 --- a/support/Makefile +++ b/support/Makefile @@ -80,6 +80,7 @@ libsupport-routines = \ support_select_modifies_timeout \ support_select_normalizes_timeout \ support_set_small_thread_stack_size \ + support_set_vma_name \ support_shared_allocate \ support_small_stack_thread_attribute \ support_socket_so_timestamp_time64 \ diff --git a/support/support.h b/support/support.h index b7f76bf080..659ef25b06 100644 --- a/support/support.h +++ b/support/support.h @@ -235,6 +235,10 @@ void support_stack_free (struct support_stack *stack); The returned value is the lowest file descriptor number. */ int support_open_dev_null_range (int num, int flags, mode_t mode); + +/* Check if kernel supports set VMA range name. */ +extern bool support_set_vma_name (void); + __END_DECLS #endif /* SUPPORT_H */ diff --git a/support/support_set_vma_name.c b/support/support_set_vma_name.c new file mode 100644 index 0000000000..41f5dea409 --- /dev/null +++ b/support/support_set_vma_name.c @@ -0,0 +1,49 @@ +/* Check if kernel supports set VMA range name. + Copyright (C) 2023 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#include +#include +#include +#include +#ifdef __linux__ +# include +#endif + +bool +support_set_vma_name (void) +{ +#ifdef __linux__ + size_t size = sysconf (_SC_PAGESIZE); + if (size == -1) + FAIL_EXIT1 ("sysconf (_SC_PAGESIZE): %m\n"); + + void *vma = xmmap (0, + size, + PROT_NONE, + MAP_PRIVATE|MAP_ANONYMOUS|MAP_NORESERVE, + -1); + + int r = prctl (PR_SET_VMA, PR_SET_VMA_ANON_NAME, vma, size, "vmaname"); + + xmunmap (vma, size); + + return r == 0; +#else + return false; +#endif +} From patchwork Thu Oct 26 17:11:42 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adhemerval Zanella Netto X-Patchwork-Id: 738334 Delivered-To: patch@linaro.org Received: by 2002:ab3:1905:0:b0:23f:8cfb:5ad7 with SMTP id u5csp1312139ltc; Thu, 26 Oct 2023 10:12:56 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHst8HDu+KAHokwQnTHWm2dnq5FVNNzqX7C6elXP3tPV8dQBSMGxyXZK/GNacKC+ROXWszL X-Received: by 2002:a05:6214:3007:b0:653:5bed:83d4 with SMTP id ke7-20020a056214300700b006535bed83d4mr295007qvb.30.1698340376629; Thu, 26 Oct 2023 10:12:56 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1698340376; cv=pass; d=google.com; s=arc-20160816; b=JMkOBq82cAzJL0V6XA2kTMQCh3iU5wOTo5I9rPP3/76bWcrXbkm7WOfS6Y2kAnPNrT XU36OzeMdQ4HSALM7GIwYLqAYJZ48UTgsu6tc+9ud+nTg7koKCnIiZsFjpwKQQfigmnO QlFx5dHfrFvImCXaDrc0bLurrMZGnoVQxKwhd5AUXw/hsNXZCFBq4iSoDEZjt75EjHW+ nkFMtc7bbwBx4DhCGr/LeAd4ATzOqqmwBnYdYIYfs5ITo3zJ9yLbKFnbDIhcaU5/AE0/ IVkBYLNXahhtqWnstMI3DzOSA3V0G88xMsGKkWIuWSid61dmtKKmR8Y/H526Fv/ItBVM iYIw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:to:from :dkim-signature:arc-filter:dmarc-filter:delivered-to; bh=utSWdvQl98iM9LBNL1svLmWLEXYk5MyyPql06V1kCt4=; fh=Lbqp+rs2mRBTG5C9ik7cirOzlOF2+U9yLxjtEQVqExY=; b=o5gvjmIAhmQEblp7hcqVh/EYlFZy+7DIVZ5HyCCsRrUCyTSEgiqGTPLX8yILso/2pc kGcx1ZBFptN2b3O1kJGKEdwCK87GDCV2wJoHve8XGjacvew8IzQ8zP/T2yHGNbXwTbje dZ41bTLPIJnbDPV65/0J6ZFRNRbVfETQOFdavLN7twy41huCiBHgeenhkFbCvY09y3B7 UfRbfk29CIq3iZZ3YFuveqm2wCHCeEtT73GZeQDSwXbmrm/jm8wT7JLPQieFXxrAm74e NIOECNNhZBPMXo4dFoTNs7WzyS5XXZnbEZ4ueFqnGqyjA59i/7sbCj6RNZmEpzi9OizR /o9w== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=dWxUlOH8; arc=pass (i=1); spf=pass (google.com: domain of libc-alpha-bounces+patch=linaro.org@sourceware.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="libc-alpha-bounces+patch=linaro.org@sourceware.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from server2.sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id oh8-20020a056214438800b0066cee934ae4si10101810qvb.229.2023.10.26.10.12.56 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 26 Oct 2023 10:12:56 -0700 (PDT) Received-SPF: pass (google.com: domain of libc-alpha-bounces+patch=linaro.org@sourceware.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) client-ip=2620:52:3:1:0:246e:9693:128c; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=dWxUlOH8; arc=pass (i=1); spf=pass (google.com: domain of libc-alpha-bounces+patch=linaro.org@sourceware.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="libc-alpha-bounces+patch=linaro.org@sourceware.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 1165E3858025 for ; Thu, 26 Oct 2023 17:12:56 +0000 (GMT) X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-pf1-x42e.google.com (mail-pf1-x42e.google.com [IPv6:2607:f8b0:4864:20::42e]) by sourceware.org (Postfix) with ESMTPS id 5D1CD385C414 for ; Thu, 26 Oct 2023 17:11:59 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 5D1CD385C414 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=linaro.org ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 5D1CD385C414 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::42e ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1698340321; cv=none; b=LYPQTIiFKxJARiqfWa5UoCiF52YpODoJqdEObaNabYlx9YI1fq0AXhn7vTSnC023TjIuOZ7tLalIk/QCpoIDrCyXJjZnQJXS2F5tqu1rq/gZY7feoQS4CVTRM5iBtvRJ6NjxHEGstKHUBYEj5oxfu/cisN7Mi64F6aKs/u9/rBc= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1698340321; c=relaxed/simple; bh=l8vV3WJkYT21asT5LcSedDaKdeFb/WqwQuwiByv2tBI=; h=DKIM-Signature:From:To:Subject:Date:Message-Id:MIME-Version; b=O2rda0eV+zpx3xEpE4O2HRmXAGnpGMhkKha5v72Xk9mo5kLjNbG1aWvGMTJFnHD7R8EEU+2q+b2JGTl13isRlfzUWlDusG9vzhx4MYS0a9hKgAXsANtcsljAublQtlSvjUm4C6ByWTDjEhsRUszoJ31lTLAZk2uhLk6j7Xpgj3s= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-pf1-x42e.google.com with SMTP id d2e1a72fcca58-6b87c1edfd5so1101627b3a.1 for ; Thu, 26 Oct 2023 10:11:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1698340318; x=1698945118; darn=sourceware.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=utSWdvQl98iM9LBNL1svLmWLEXYk5MyyPql06V1kCt4=; b=dWxUlOH8U5rm7CGtFoRVuIseFZnQ5kah/ku74HjHEGuqFmNphLFD8uDiqJe21cTvDE Av+vGlhUX1PP+dMIPF8aUTw9dTjQAn0Ht+FUe0CUWZ/GWCaGTqOdxH7FVSWIviAEzzXN gARV51W7maTdpchDjoTr6w9gVVmbJZ/cxmM0NRw18Or8TL9MNFGhR1H98O7K6QTopln+ l60fwEObeSf4YE/GXddpSHcZFc+xsnxmY1BhmpsDw/4PdLC1+J7i2fsrhnvXIvGVGeTK uR3MQskPXpbJZl1KjnJZqe+a+03eQJDudWr+skDO4nB7kZNw/SN+n6aVJqm6lXYg3upa ignQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1698340318; x=1698945118; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=utSWdvQl98iM9LBNL1svLmWLEXYk5MyyPql06V1kCt4=; b=Vg/2XM637ZHP7fibollindXqYXjAijagRXYyKrNCSO+bNixpj0sfVRJpOCgVPpFGD9 zQDNzR5g0BdlC5If8L6fKHSg0wJBWtX7rzFmKcPCgVsAKfncGOdLsvpOPIQcIFIQO9Fs e7T0xLctJLWKHmeVRsMQSxoOZnWLXO+8+OB5B3A24UkP92n1pIJEjsr1oQWXttmcylKb Tksq7bXrLvqCiCDIQ3oFVRXBz51ymOfEdQVC1m7YFFUp8nq0t9auTGGxPkJF9vhD86HS mnkxyD6w9qsxk7EY3hsplb/FLg6jbgpa5vRx/787k1aKMA7FgxkPd1krRSCt0kmbxmgY T17Q== X-Gm-Message-State: AOJu0YwsFg7i6JQKVH3smLOXrFyuA6zOdEkrkTBuFmMQyCmfoaj37gFT ocTCcSV3GXFyc0jBh0cD+ZlQluAm0RnyTU5ncFbLdQ== X-Received: by 2002:a05:6a20:4406:b0:153:a461:d96e with SMTP id ce6-20020a056a20440600b00153a461d96emr507938pzb.47.1698340317868; Thu, 26 Oct 2023 10:11:57 -0700 (PDT) Received: from mandiga.. ([2804:1b3:a7c3:a647:ad90:6e37:bd13:fb33]) by smtp.gmail.com with ESMTPSA id w18-20020aa78592000000b006bee5ad4efasm11516394pfn.67.2023.10.26.10.11.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 26 Oct 2023 10:11:57 -0700 (PDT) From: Adhemerval Zanella To: libc-alpha@sourceware.org, Ian Rogers , Francesco Nigro , Carlos O'Donell , Siddhesh Poyarekar Subject: [PATCH 3/5] nptl: Decorate thread stack on pthread_create Date: Thu, 26 Oct 2023 14:11:42 -0300 Message-Id: <20231026171144.2188549-4-adhemerval.zanella@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231026171144.2188549-1-adhemerval.zanella@linaro.org> References: <20231026171144.2188549-1-adhemerval.zanella@linaro.org> MIME-Version: 1.0 X-Spam-Status: No, score=-12.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libc-alpha-bounces+patch=linaro.org@sourceware.org Linux 4.5 removed thread stack annotations due to the complexity of computing them [1], and Linux added PR_SET_VMA_ANON_NAME on 5.17 as a way to name anonymous virtual memory areas. This patch adds decoration on the stack created and used by pthread_create, for glibc crated thread stack the /proc/self/maps will now show: [anon: glibc: pthread stack: ] And for user-provided stacks: [anon: glibc: pthread user stack: ] The guard page is not decorated, and the mapping name is cleared when the thread finishes its execution (so the cached stack does not have any name associated). Co-authored-by: Ian Rogers Checked on x86_64-linux-gnu aarch64 aarch64-linux-gnu. [1] https://github.com/torvalds/linux/commit/65376df582174ffcec9e6471bf5b0dd79ba05e4a --- elf/Makefile | 3 + elf/tst-decorate-maps.c | 160 ++++++++++++++++++++++++++++++++++++++++ nptl/allocatestack.c | 40 ++++++++++ nptl/pthread_create.c | 6 ++ 4 files changed, 209 insertions(+) create mode 100644 elf/tst-decorate-maps.c diff --git a/elf/Makefile b/elf/Makefile index 9176cbf1e3..a82590703c 100644 --- a/elf/Makefile +++ b/elf/Makefile @@ -303,6 +303,7 @@ tests := \ tst-array4 \ tst-array5 \ tst-auxv \ + tst-decorate-maps \ tst-dl-hash \ tst-leaks1 \ tst-stringtable \ @@ -3018,3 +3019,5 @@ LDFLAGS-tst-dlclose-lazy-mod1.so = -Wl,-z,lazy,--no-as-needed $(objpfx)tst-dlclose-lazy-mod1.so: $(objpfx)tst-dlclose-lazy-mod2.so $(objpfx)tst-dlclose-lazy.out: \ $(objpfx)tst-dlclose-lazy-mod1.so $(objpfx)tst-dlclose-lazy-mod2.so + +$(objpfx)tst-decorate-maps: $(shared-thread-library) diff --git a/elf/tst-decorate-maps.c b/elf/tst-decorate-maps.c new file mode 100644 index 0000000000..bbb7972094 --- /dev/null +++ b/elf/tst-decorate-maps.c @@ -0,0 +1,160 @@ +/* Check the VMA name decoration. + Copyright (C) 2023 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifndef MAP_STACK +# define MAP_STACK 0 +#endif + +static pthread_barrier_t b; + +static void * +tf (void *closure) +{ + /* Wait the thread startup, so thread stack is allocated. */ + xpthread_barrier_wait (&b); + + /* Wait the test to read the process mapiping. */ + xpthread_barrier_wait (&b); + + return NULL; +} + +struct proc_maps_t +{ + int n_def_threads; + int n_user_threads; +}; + +static struct proc_maps_t +read_proc_maps (void) +{ + if (test_verbose) + printf ("=== print process %jd memory mapping ===\n", + (intmax_t) getpid ()); + struct proc_maps_t r = { 0 }; + + FILE *f = xfopen ("/proc/self/maps", "r"); + char *line = NULL; + size_t line_len = 0; + while (xgetline (&line, &line_len, f)) + { + if (test_verbose) + printf ("%s", line); + if (strstr (line, "[anon: glibc: pthread stack:") != NULL) + r.n_def_threads++; + else if (strstr (line, "[anon: glibc: pthread user stack:") != NULL) + r.n_user_threads++; + } + free (line); + xfclose (f); + + if (test_verbose) + printf ("===\n"); + return r; +} + +static void +do_test_threads (bool set_guard) +{ + enum + { + num_def_threads = 8, + num_user_threads = 2, + num_threads = num_def_threads + num_user_threads, + }; + + xpthread_barrier_init (&b, NULL, num_threads + 1); + + pthread_t thr[num_threads]; + { + int i = 0; + for (; i < num_threads - num_user_threads; i++) + { + pthread_attr_t attr; + xpthread_attr_init (&attr); + /* The guard page is not annotated. */ + if (!set_guard) + xpthread_attr_setguardsize (&attr, 0); + thr[i] = xpthread_create (&attr, tf, NULL); + xpthread_attr_destroy (&attr); + } + for (; i < num_threads; i++) + { + pthread_attr_t attr; + xpthread_attr_init (&attr); + size_t stacksize = support_small_thread_stack_size (); + void *stack = xmmap (0, + stacksize, + PROT_READ | PROT_WRITE, + MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, + -1); + xpthread_attr_setstack (&attr, stack, stacksize); + if (!set_guard) + xpthread_attr_setguardsize (&attr, 0); + thr[i] = xpthread_create (&attr, tf, NULL); + xpthread_attr_destroy (&attr); + } + } + + /* Wait all threads to finshed statup and stack allocation. */ + xpthread_barrier_wait (&b); + + { + struct proc_maps_t r = read_proc_maps (); + TEST_COMPARE (r.n_def_threads, num_def_threads); + TEST_COMPARE (r.n_user_threads, num_user_threads); + } + + /* Let the threads finish. */ + xpthread_barrier_wait (&b); + + for (int i = 0; i < num_threads; i++) + xpthread_join (thr[i]); + + { + struct proc_maps_t r = read_proc_maps (); + TEST_COMPARE (r.n_def_threads, 0); + TEST_COMPARE (r.n_user_threads, 0); + } +} + +static int +do_test (void) +{ + support_need_proc ("Reads /proc/self/maps to get stack names."); + + if (!support_set_vma_name ()) + FAIL_UNSUPPORTED ("kernel does not support PR_SET_VMA_ANON_NAME"); + + do_test_threads (false); + do_test_threads (true); + + return 0; +} + +#include diff --git a/nptl/allocatestack.c b/nptl/allocatestack.c index f9d8cdfd08..97d0efec10 100644 --- a/nptl/allocatestack.c +++ b/nptl/allocatestack.c @@ -33,6 +33,8 @@ #include #include #include +#include +#include /* Default alignment of stack. */ #ifndef STACK_ALIGN @@ -577,3 +579,41 @@ allocate_stack (const struct pthread_attr *attr, struct pthread **pdp, return 0; } + +/* Maximum supported name from initial kernel support, not exported + by user API. */ +#define ANON_VMA_NAME_MAX_LEN 80 + +#define SET_STACK_NAME(__prefix, __stack, __stacksize, __tid) \ + ({ \ + char __stack_name[sizeof (__prefix) + \ + INT_BUFSIZE_BOUND (unsigned int)]; \ + _Static_assert (sizeof __stack_name <= ANON_VMA_NAME_MAX_LEN, \ + "VMA name size larger than maximum supported"); \ + __snprintf (__stack_name, sizeof (__stack_name), __prefix "%u", \ + (unsigned int) __tid); \ + __set_vma_name (__stack, __stacksize, __stack_name); \ + }) + +/* Add or remove an associated name to the PD VMA stack. */ +static void +name_stack_maps (struct pthread *pd, bool set) +{ +#if _STACK_GROWS_DOWN && !defined(NEED_SEPARATE_REGISTER_STACK) + void *stack = pd->stackblock + pd->guardsize; +#else + void *stack = pd->stackblock; +#endif + size_t stacksize = pd->stackblock_size - pd->guardsize; + + if (!set) + __set_vma_name (stack, stacksize, NULL); + else + { + unsigned int tid = pd->tid; + if (pd->user_stack) + SET_STACK_NAME (" glibc: pthread user stack: ", stack, stacksize, tid); + else + SET_STACK_NAME (" glibc: pthread stack: ", stack, stacksize, tid); + } +} diff --git a/nptl/pthread_create.c b/nptl/pthread_create.c index 6a41d50109..63cb684f04 100644 --- a/nptl/pthread_create.c +++ b/nptl/pthread_create.c @@ -369,6 +369,9 @@ start_thread (void *arg) /* Initialize pointers to locale data. */ __ctype_init (); + /* Name the thread stack if kernel supports it. */ + name_stack_maps (pd, true); + /* Register rseq TLS to the kernel. */ { bool do_rseq = THREAD_GETMEM (pd, flags) & ATTR_FLAG_DO_RSEQ; @@ -571,6 +574,9 @@ start_thread (void *arg) /* Free the TCB. */ __nptl_free_tcb (pd); + /* Remove the associated name from the thread stack. */ + name_stack_maps (pd, false); + out: /* We cannot call '_exit' here. '_exit' will terminate the process. From patchwork Thu Oct 26 17:11:43 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adhemerval Zanella Netto X-Patchwork-Id: 738335 Delivered-To: patch@linaro.org Received: by 2002:ab3:1905:0:b0:23f:8cfb:5ad7 with SMTP id u5csp1312417ltc; Thu, 26 Oct 2023 10:13:19 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGudEOw8mOUuFXN2PQ1AE4KYh0WxngI6RopddP3dV2LFVS8dHAPH0/4NU6pzWA787GftKzu X-Received: by 2002:a05:620a:450a:b0:778:aea6:55a2 with SMTP id t10-20020a05620a450a00b00778aea655a2mr18742967qkp.5.1698340399426; Thu, 26 Oct 2023 10:13:19 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1698340399; cv=pass; d=google.com; s=arc-20160816; b=wHPhdhQcjLz+EyKC7oWJvJoGcoMajugk1cpRr2p7iDDVlumjoXAo1CHba5fK+nUopl ZFQCLVjxpdNJBmQrhy89gLo+WdXiT6GgwSyfeJwNYj32BkoBMBpsDxuxeFhC0bmRyzlg dl6Az7X5XKHgTVUecXkqdMLeHrV+Wo2YXHL48LHxlUKlLSYYP+jcrprff8Eq/CNj10l6 e/DSOUWQPyrM3FS4eiTjYaE6L9QOB/2cU+ez9swBxT3U/7R1UDce91Ke4PwaHm7g+tPp dWQJ192Pd0opaN1s/RiIjE0zrXwyk/JLgI8xWAFQ5xlcyMgxyLZ16/girhsoTKxs262T vRrw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:to:from :dkim-signature:arc-filter:dmarc-filter:delivered-to; bh=wo3j3cgs16+wBEnOD2t8WWgHLIkkkYccGtYZ32ia+pE=; fh=Lbqp+rs2mRBTG5C9ik7cirOzlOF2+U9yLxjtEQVqExY=; b=sfgEVFMwuDQu8c+2UN8KdAf//jF6pkthQj1JxkmcV2lwt21mSYizPgy8ZEGpqiyU+P OLv6QCMD9jZ6A9OrMOtTl3vAOMz9MRk2Y4wwBSdRPXHqWSUUaJW73Qm8xq2wfFVEEDU5 KtoPtEeZsLpYk/YwAH0B7aDtngwoc+CfSBZgjtuc3RB5qm/x7HT02+eL0V693/tBg68f 49DL94RzyzQEOB1wWHNsAfU/n39vQDT0Kjm89FaAp8QrkkWs0rFtLsiaSIT4vu090DEc H3XXQDY5XxL+GhZhkQcQ7LhGEOEuFezSRdt5lOAaq1TSGp2pyILZ6YXGSYGyKkGg7wnD WcMw== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b="ahP/FPSC"; arc=pass (i=1); spf=pass (google.com: domain of libc-alpha-bounces+patch=linaro.org@sourceware.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="libc-alpha-bounces+patch=linaro.org@sourceware.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from server2.sourceware.org (server2.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id i19-20020a05620a405300b0076cb6c9e0a6si8701379qko.336.2023.10.26.10.13.19 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 26 Oct 2023 10:13:19 -0700 (PDT) Received-SPF: pass (google.com: domain of libc-alpha-bounces+patch=linaro.org@sourceware.org designates 8.43.85.97 as permitted sender) client-ip=8.43.85.97; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b="ahP/FPSC"; arc=pass (i=1); spf=pass (google.com: domain of libc-alpha-bounces+patch=linaro.org@sourceware.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="libc-alpha-bounces+patch=linaro.org@sourceware.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 149973858020 for ; Thu, 26 Oct 2023 17:13:19 +0000 (GMT) X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-pf1-x432.google.com (mail-pf1-x432.google.com [IPv6:2607:f8b0:4864:20::432]) by sourceware.org (Postfix) with ESMTPS id 8ED383856965 for ; Thu, 26 Oct 2023 17:12:01 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 8ED383856965 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=linaro.org ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 8ED383856965 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::432 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1698340323; cv=none; b=AoOiLtrPXS2nYuHHx+YrfBu7gWz0SgyRvPrkjwoqefIUsoc3EQQjKp9GRjypIwzdIIkufy1291RIScxL3sqCl4Ky5e/IuiP9anj9yEjNuYbkel+aWq36W5UdFzXeIVsKLXFUynNnMyNoEeVWpkcqbF3En2RCc1yVWVDTnYo6PfU= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1698340323; c=relaxed/simple; bh=mJO+ueXBeLo99PiBCPtFZ0vvHPrgn066vjsi9RU+Nr4=; h=DKIM-Signature:From:To:Subject:Date:Message-Id:MIME-Version; b=HhKIAjS93Hma5NsHtJDdxlxQbNxvmS8vWVDkZA5Tfe8LAcBDUQJJT+tkC317j7s8C/f1OXxp75OwddFluMdx9d+iXobRe5Ys2JU7tB5f35c0IJk/GGEFh2kg3qQ3HnSJbcOfub/SkqV7hZiojjc4CUMbLkkznWPf/vopOc+UPlQ= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-pf1-x432.google.com with SMTP id d2e1a72fcca58-6b1ef786b7fso1126603b3a.3 for ; Thu, 26 Oct 2023 10:12:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1698340320; x=1698945120; darn=sourceware.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=wo3j3cgs16+wBEnOD2t8WWgHLIkkkYccGtYZ32ia+pE=; b=ahP/FPSCIPZGn+pv/LIH+a9PbK4HteWBxFxqvD7p+C39R/vIn9VpYZoFnnJVlnr9t/ uRlyMG36aU6NqxaKNjLUMCYRaX+10Cg02tN7InvDTnX9Pvf56GpfFjIrZlbAmuoMf3YX +nOiwPM6WMxoa6ncTvwZpjyM6CQiLhzrVvffordCTuhWpdWSF49qwcOcjhHiGLWiPXfN pvU78LW7MG7zKX2TciiawplxlW0HxTgSwOnzyK3rDOH/VNsoL/6YaqBqmzsCn7QvQkTh LHxpym9nWzuOQPK1Q3vATVpVhWb/2eK32lxzdmbAmkQfoKzxrKbVaL7XPYDrLoTxHjM2 t15A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1698340320; x=1698945120; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=wo3j3cgs16+wBEnOD2t8WWgHLIkkkYccGtYZ32ia+pE=; b=HWOUXOcD+b+MYg67IF+bU81MaSf8zzrjufOK5wxe3+ArJkpwu1eHRGKEkwZiMMw/O8 kEF/djgn9v3HbsKPTMDHSGjvDSwT7tdtuOX6Fs2dm78yTmweS5svO6YFYsOtXcU2x9+4 nqKfYLs5T9SS6V9rW/BkN05SQEDT1mZEhPnnvU8Vr810kEqbajxSCk+b6Uy6qWZ8jbGK SOu6sm1KqprQADA9Ae8vWs/1Zy6hmZozM3sgPSnNJ6FNz3ViIrnC82bMMHSIyp8rb2+l ZaolZMlgv5Nrke+TbZcz0ZGhg8+0q4JjzTa9bYCxhqEois7Ca5ybEHLouwFbC5dZ4dv6 H4tA== X-Gm-Message-State: AOJu0YyOhJVK7EBJW3XjAvtx5Diz9wvzDaFVTt5dFKvmpdSUPOSWE9io 2kr+UdrbL9baUELmYP/bpm7cZUbAhwGNV1IvKOuXvg== X-Received: by 2002:a05:6a00:1a10:b0:6b1:cc77:4d2 with SMTP id g16-20020a056a001a1000b006b1cc7704d2mr135083pfv.15.1698340320076; Thu, 26 Oct 2023 10:12:00 -0700 (PDT) Received: from mandiga.. ([2804:1b3:a7c3:a647:ad90:6e37:bd13:fb33]) by smtp.gmail.com with ESMTPSA id w18-20020aa78592000000b006bee5ad4efasm11516394pfn.67.2023.10.26.10.11.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 26 Oct 2023 10:11:59 -0700 (PDT) From: Adhemerval Zanella To: libc-alpha@sourceware.org, Ian Rogers , Francesco Nigro , Carlos O'Donell , Siddhesh Poyarekar Subject: [PATCH 4/5] malloc: Decorate malloc maps Date: Thu, 26 Oct 2023 14:11:43 -0300 Message-Id: <20231026171144.2188549-5-adhemerval.zanella@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231026171144.2188549-1-adhemerval.zanella@linaro.org> References: <20231026171144.2188549-1-adhemerval.zanella@linaro.org> MIME-Version: 1.0 X-Spam-Status: No, score=-12.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libc-alpha-bounces+patch=linaro.org@sourceware.org Add anonymous mmap annotations on loader malloc, malloc when it allocates memory with mmap, and on malloc arena. The /proc/self/maps will now print: [anon: glibc: malloc arena] [anon: glibc: malloc] [anon: glibc: loader malloc] On arena allocation, glibc annotates only the read/write mapping. Checked on x86_64-linux-gnu and aarch64-linux-gnu. --- elf/Makefile | 4 ++++ elf/dl-minimal-malloc.c | 2 ++ elf/tst-decorate-maps.c | 37 ++++++++++++++++++++++++++++++++ malloc/arena.c | 4 ++++ malloc/malloc.c | 5 +++++ nptl/Makefile | 4 ++++ sysdeps/aarch64/Makefile | 5 ++++- sysdeps/unix/sysv/linux/Makefile | 4 ++++ 8 files changed, 64 insertions(+), 1 deletion(-) diff --git a/elf/Makefile b/elf/Makefile index a82590703c..c3cf63a443 100644 --- a/elf/Makefile +++ b/elf/Makefile @@ -3021,3 +3021,7 @@ $(objpfx)tst-dlclose-lazy.out: \ $(objpfx)tst-dlclose-lazy-mod1.so $(objpfx)tst-dlclose-lazy-mod2.so $(objpfx)tst-decorate-maps: $(shared-thread-library) + +tst-decorate-maps-ENV = \ + GLIBC_TUNABLES=glibc.malloc.arena_max=8:glibc.malloc.mmap_threshold=1024 +tst-decorate-maps-ARGS = 8 diff --git a/elf/dl-minimal-malloc.c b/elf/dl-minimal-malloc.c index 27549645d0..da36986269 100644 --- a/elf/dl-minimal-malloc.c +++ b/elf/dl-minimal-malloc.c @@ -26,6 +26,7 @@ #include #include #include +#include static void *alloc_ptr, *alloc_end, *alloc_last_block; @@ -60,6 +61,7 @@ __minimal_malloc (size_t n) MAP_ANON|MAP_PRIVATE, -1, 0); if (page == MAP_FAILED) return NULL; + __set_vma_name (page, nup, " glibc: loader malloc"); if (page != alloc_end) alloc_ptr = page; alloc_end = page + nup; diff --git a/elf/tst-decorate-maps.c b/elf/tst-decorate-maps.c index bbb7972094..bf508489c4 100644 --- a/elf/tst-decorate-maps.c +++ b/elf/tst-decorate-maps.c @@ -32,15 +32,22 @@ static pthread_barrier_t b; +static int expected_n_arenas; + static void * tf (void *closure) { + void *p = xmalloc (1024); + /* Wait the thread startup, so thread stack is allocated. */ xpthread_barrier_wait (&b); /* Wait the test to read the process mapiping. */ + xpthread_barrier_wait (&b); + free (p); + return NULL; } @@ -48,6 +55,9 @@ struct proc_maps_t { int n_def_threads; int n_user_threads; + int n_arenas; + int n_malloc_mmap; + int n_loader_malloc_mmap; }; static struct proc_maps_t @@ -69,6 +79,12 @@ read_proc_maps (void) r.n_def_threads++; else if (strstr (line, "[anon: glibc: pthread user stack:") != NULL) r.n_user_threads++; + else if (strstr (line, "[anon: glibc: malloc arena]") != NULL) + r.n_arenas++; + else if (strstr (line, "[anon: glibc: malloc]") != NULL) + r.n_malloc_mmap++; + else if (strstr (line, "[anon: glibc: loader malloc]") != NULL) + r.n_loader_malloc_mmap++; } free (line); xfclose (f); @@ -90,6 +106,9 @@ do_test_threads (bool set_guard) xpthread_barrier_init (&b, NULL, num_threads + 1); + /* Issue a large malloc to trigger a mmap call. */ + void *p = xmalloc (256 * 1024); + pthread_t thr[num_threads]; { int i = 0; @@ -128,6 +147,10 @@ do_test_threads (bool set_guard) struct proc_maps_t r = read_proc_maps (); TEST_COMPARE (r.n_def_threads, num_def_threads); TEST_COMPARE (r.n_user_threads, num_user_threads); + TEST_COMPARE (r.n_arenas, expected_n_arenas); + TEST_COMPARE (r.n_malloc_mmap, 1); + /* On some architectures the loader might use more than one page. */ + TEST_VERIFY (r.n_loader_malloc_mmap >= 1); } /* Let the threads finish. */ @@ -140,8 +163,22 @@ do_test_threads (bool set_guard) struct proc_maps_t r = read_proc_maps (); TEST_COMPARE (r.n_def_threads, 0); TEST_COMPARE (r.n_user_threads, 0); + TEST_COMPARE (r.n_arenas, expected_n_arenas); + TEST_COMPARE (r.n_malloc_mmap, 1); + TEST_VERIFY (r.n_loader_malloc_mmap >= 1); } + + free (p); +} + +static void +do_prepare (int argc, char *argv[]) +{ + TEST_VERIFY_EXIT (argc == 2); + expected_n_arenas = strtol (argv[1], NULL, 10); + expected_n_arenas = expected_n_arenas - 1; } +#define PREPARE do_prepare static int do_test (void) diff --git a/malloc/arena.c b/malloc/arena.c index 6f03955ff2..d1e214ac2e 100644 --- a/malloc/arena.c +++ b/malloc/arena.c @@ -17,6 +17,7 @@ not, see . */ #include +#include #define TUNABLE_NAMESPACE malloc #include @@ -436,6 +437,9 @@ alloc_new_heap (size_t size, size_t top_pad, size_t pagesize, return 0; } + /* Only considere the actual usable range. */ + __set_vma_name (p2, size, " glibc: malloc arena"); + madvise_thp (p2, size); h = (heap_info *) p2; diff --git a/malloc/malloc.c b/malloc/malloc.c index d0bbbf3710..78a531bc7a 100644 --- a/malloc/malloc.c +++ b/malloc/malloc.c @@ -218,6 +218,7 @@ #include #include +#include #include #include /* needed for malloc_stats */ @@ -2428,6 +2429,8 @@ sysmalloc_mmap (INTERNAL_SIZE_T nb, size_t pagesize, int extra_flags, mstate av) madvise_thp (mm, size); #endif + __set_vma_name (mm, size, " glibc: malloc"); + /* The offset to the start of the mmapped region is stored in the prev_size field of the chunk. This allows us to adjust returned start address to @@ -2513,6 +2516,8 @@ sysmalloc_mmap_fallback (long int *s, INTERNAL_SIZE_T nb, madvise_thp (mbrk, size); #endif + __set_vma_name (mbrk, size, " glibc: malloc"); + /* Record that we no longer have a contiguous sbrk region. After the first time mmap is used as backup, we do not ever rely on contiguous space since this could incorrectly bridge regions. */ diff --git a/nptl/Makefile b/nptl/Makefile index ffa5722e48..d969419af7 100644 --- a/nptl/Makefile +++ b/nptl/Makefile @@ -699,6 +699,10 @@ tst-audit-threads-ENV = LD_AUDIT=$(objpfx)tst-audit-threads-mod1.so tst-setuid1-static-ENV = \ LD_LIBRARY_PATH=$(ld-library-path):$(common-objpfx)elf:$(common-objpfx)nss +tst-pthread-proc-maps-ENV = \ + GLIBC_TUNABLES=glibc.malloc.arena_max=8:glibc.malloc.mmap_threshold=1024 +tst-pthread-proc-maps-ARGS = 8 + # The tests here better do not run in parallel. ifeq ($(run-built-tests),yes) ifneq ($(filter %tests,$(MAKECMDGOALS)),) diff --git a/sysdeps/aarch64/Makefile b/sysdeps/aarch64/Makefile index 6a9559e5f5..6c80ee8479 100644 --- a/sysdeps/aarch64/Makefile +++ b/sysdeps/aarch64/Makefile @@ -67,5 +67,8 @@ sysdep_routines += __mtag_tag_zero_region \ endif ifeq ($(subdir),malloc) -sysdep_malloc_debug_routines = __mtag_tag_zero_region __mtag_tag_region +sysdep_malloc_debug_routines += \ + __mtag_tag_zero_region \ + __mtag_tag_region \ + # sysdep_malloc_debug_routines endif diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile index 250df6f455..2a8c49ca36 100644 --- a/sysdeps/unix/sysv/linux/Makefile +++ b/sysdeps/unix/sysv/linux/Makefile @@ -53,6 +53,10 @@ CFLAGS-assert-perr.c += -DFATAL_PREPARE_INCLUDE='' endif ifeq ($(subdir),malloc) +sysdep_malloc_debug_routines += \ + setvmaname \ + # sysdep_malloc_debug_routines + CFLAGS-malloc.c += -DMORECORE_CLEARS=2 endif From patchwork Thu Oct 26 17:11:44 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adhemerval Zanella Netto X-Patchwork-Id: 738336 Delivered-To: patch@linaro.org Received: by 2002:ab3:1905:0:b0:23f:8cfb:5ad7 with SMTP id u5csp1312612ltc; Thu, 26 Oct 2023 10:13:35 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEhO/C2en/N/mHWAJMLKihC9ZNfStQSEdcF3C/odgnlKGw1P1CUj+bHxdQZkh9Oscehnq3x X-Received: by 2002:ad4:594b:0:b0:66d:1f29:3ea8 with SMTP id eo11-20020ad4594b000000b0066d1f293ea8mr233696qvb.57.1698340415735; Thu, 26 Oct 2023 10:13:35 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1698340415; cv=pass; d=google.com; s=arc-20160816; b=Ur7kudl1ANmzKy0BM7gQyoDsXi0118csBYO3Rumvj/rKp4HiqiMknxSsOjmXyGBNtl iU2X5atnSFQfSRTeeoVgGXzJUkMI4EBOrutTcDqnLgEb4DAgaOC+35XiQ68aur4vWqiS WWgybhqBWHYr2pQ+nm5wxfnEdL7xvd3jNYaMtvi0urPcofyoZPn5dvD+zCD+pW2e+qFL IM+CRXAVxB2jAMplCogkqFVpg4oRdPRuTwjkYZNX/M5CgPpBiHrTwap6mDFrLT0JbwbE YXYkrf7RjVuyk9xVQhxZlkneEyPS1PlE1D8q2rO3A/OJiOilZeTZJIaU+L8XLVQeS0cA l6mw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:to:from :dkim-signature:arc-filter:dmarc-filter:delivered-to; bh=AuEyVWSJ7DsKUMa1yDoscVDOdz5BQpDjkPiwROVWQRU=; fh=Lbqp+rs2mRBTG5C9ik7cirOzlOF2+U9yLxjtEQVqExY=; b=Opzf3IxawWGaiHH8QG7HXyE04lzRnJdXpm+YBA24l3NCtBkCU/p75KJqJdEzHw3xer 079uJX+Tlg+mu7WObZffHSPQaH1Dx272PMEedIMdCxLQcjbzit6Z58lAO2XD+4cvuFsD VT6/Fr5T/IP0dAaswFttXi0Ql2+WZipyZdsZZGcS7OSlfnZ9gt1BmmnjZVQPJ+3K4VJN ZyE+DI7/Ifct1KJV0KcPcDM3/PYH2DzE1ZcxYqZKL1ndm6OwGASyWFiMTC071fIlHpfu ZkFuZ3zhQ2gieGwL8+xNJLF9Fz1pDBNhVTobkL9d695x1BEIKGSPMshBQ4+0LynNKK7k 9UkQ== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=AIWBCJci; arc=pass (i=1); spf=pass (google.com: domain of libc-alpha-bounces+patch=linaro.org@sourceware.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="libc-alpha-bounces+patch=linaro.org@sourceware.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from server2.sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id k16-20020ad44510000000b0065b284d5678si9532095qvu.109.2023.10.26.10.13.35 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 26 Oct 2023 10:13:35 -0700 (PDT) Received-SPF: pass (google.com: domain of libc-alpha-bounces+patch=linaro.org@sourceware.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) client-ip=2620:52:3:1:0:246e:9693:128c; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=AIWBCJci; arc=pass (i=1); spf=pass (google.com: domain of libc-alpha-bounces+patch=linaro.org@sourceware.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="libc-alpha-bounces+patch=linaro.org@sourceware.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 288F8385350C for ; Thu, 26 Oct 2023 17:13:35 +0000 (GMT) X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-pf1-x42d.google.com (mail-pf1-x42d.google.com [IPv6:2607:f8b0:4864:20::42d]) by sourceware.org (Postfix) with ESMTPS id 28F50385840C for ; Thu, 26 Oct 2023 17:12:04 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 28F50385840C Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=linaro.org ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 28F50385840C Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::42d ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1698340327; cv=none; b=UgD1vW1X0yVtuEa1LjuKrmXP8Np/98sLiGW61wyfC068mL0ZWym5LpmsQvmvITIsQ4rMzp4NVaJO2EOErZCZCZA+I3LoeT+/nzehgGmuumfdF47MvA8ouq6i675LCm1wRykMON3bRTZhqs8+3tKUeieOSlPKH/KAuJwU/0AhdpQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1698340327; c=relaxed/simple; bh=MaK5Xv6njvvXip1gUIhFMG8RujKPPMi65avj//kgvus=; h=DKIM-Signature:From:To:Subject:Date:Message-Id:MIME-Version; b=PpzZ6FPDOEgfgMAUq8CktIbmcjIIUJD+VbG2Pxipa/bpVz3kalEqkmCaFN89Ytt7F6WPTHFmaDC6n2SBpWp4EN/7KIwednP1kww0KP5k655w0T83tFSpIhZwHrfQ7kQSmxUntoSlYhzI5nMwoc5LR7GKCr6cQF8rf3auBChtc+Q= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-pf1-x42d.google.com with SMTP id d2e1a72fcca58-6b1e46ca282so1130192b3a.2 for ; Thu, 26 Oct 2023 10:12:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1698340323; x=1698945123; darn=sourceware.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=AuEyVWSJ7DsKUMa1yDoscVDOdz5BQpDjkPiwROVWQRU=; b=AIWBCJciru1+HNJeX2nWScALNT++73j6+AP1GK7Z7QGSHMA8r610XpHOmy/hyYbZ91 mDkP7qnqf/k7E5NPtqJu8mxgCxXtpokFYqfmOt4lrkqWgdHzOz+iDKdVC5CkJPBja2O0 TeObwd0IPnxtB+ioeei7BzNUEmOV2CMYw+44KTdcd9aRKgyUQxfkhL35E/YOcjeqGT2f seS22cpl1uE0bUvAtNTO7YoGuM4vYLQuIWl7l4CxqTtLdnDLJEZrqlBvoQVJmF5Z0mvD tklbHIACk3QgMj8JAaaTQaJvj/vUsQeI3EqjpwgHoGPxZQ10wvUuRMvKtYONa8BPThVQ hzQQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1698340323; x=1698945123; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=AuEyVWSJ7DsKUMa1yDoscVDOdz5BQpDjkPiwROVWQRU=; b=R4oJmktyXui8IUTohW9pqjU10fB85M/lMHYPGdHxTCmXGay94eLAfqQOyaPsWcZjQo bmnxlbACErsMIqUcxQQFizyGbXpDEBHFflXOnzRCleBPAcZKo0tOXTCMEIg5bF+UeNoa Y6dOBKw5mDb6tbuZHWFsHmu6djwg4xWi6kWOxBon+AvobktvUjC0yKGxcyPkfOhJmfuJ KiSakJsUHKcZM8GQFWxTKfYhmB/oplxcBL3N/G1Xbhb5OpJzdhLprXYC5nCr2EiBQdjE GG88nWZH5KM/zLoe8LfEgbl1VQCXydoRHfH1RpmxQqWddV+YkBPm5XVSO5xeIRVb0XGA bSLg== X-Gm-Message-State: AOJu0YwyRp72PlyzIK6XF4SqQnC05JoQOFeRh3ey4otQoEgaQhtVNDZK T8NlKmJAittx78vM+/YTdHp+5StXUDAS+zXy7S2Xng== X-Received: by 2002:a05:6a00:1886:b0:692:a727:1fdd with SMTP id x6-20020a056a00188600b00692a7271fddmr103239pfh.4.1698340322692; Thu, 26 Oct 2023 10:12:02 -0700 (PDT) Received: from mandiga.. ([2804:1b3:a7c3:a647:ad90:6e37:bd13:fb33]) by smtp.gmail.com with ESMTPSA id w18-20020aa78592000000b006bee5ad4efasm11516394pfn.67.2023.10.26.10.12.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 26 Oct 2023 10:12:01 -0700 (PDT) From: Adhemerval Zanella To: libc-alpha@sourceware.org, Ian Rogers , Francesco Nigro , Carlos O'Donell , Siddhesh Poyarekar Subject: [PATCH 5/5] elf: Add glibc.mem.decorate_maps tunable Date: Thu, 26 Oct 2023 14:11:44 -0300 Message-Id: <20231026171144.2188549-6-adhemerval.zanella@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231026171144.2188549-1-adhemerval.zanella@linaro.org> References: <20231026171144.2188549-1-adhemerval.zanella@linaro.org> MIME-Version: 1.0 X-Spam-Status: No, score=-12.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libc-alpha-bounces+patch=linaro.org@sourceware.org The PR_SET_VMA_ANON_NAME support is only enabled through a configurable kernel switch, mainly because assigning a name to a anonymous virtual memory area might prevent that area from being merged with adjacent virtual memory areas. For instance, with the following code: void *p1 = mmap (NULL, 1024 * 4096, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); void *p2 = mmap (p1 + (1024 * 4096), 1024 * 4096, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); The kernel will potentially merge both mappings resulting in only one segment of size 0x800000. If the segment is names with PR_SET_VMA_ANON_NAME with different names, it results in two mappings. Although this will unlikely be an issue for pthread stacks and malloc arenas (since for pthread stacks the guard page will result in a PROT_NONE segment, similar to the alignment requirement for the arena block), it still might prevent the mmap memory allocated for detail malloc. There is also another potential scalability issue, where the prctl requires to take the mmap global lock which is still not fully fixed in Linux [1] (for pthread stacks and arenas, it is mitigated by the stack cached and the arena reuse). So this patch disables anonymous mapping annotations as default and add a new tunable, glibc.mem.decorate_maps, can be used to enable it. [1] https://lwn.net/Articles/906852/ Checked on x86_64-linux-gnu and aarch64-linux-gnu. --- NEWS | 5 +++++ elf/Makefile | 2 +- elf/dl-tunables.list | 5 +++++ manual/tunables.texi | 12 ++++++++++++ sysdeps/unix/sysv/linux/setvmaname.c | 4 ++++ 5 files changed, 27 insertions(+), 1 deletion(-) diff --git a/NEWS b/NEWS index 9432564444..67f6e63b14 100644 --- a/NEWS +++ b/NEWS @@ -38,6 +38,11 @@ Major new features: and the wfN format length modifiers for arguments pointing to types int_fastN_t or uint_fastN_t, as specified in draft ISO C2X. +* A new tunable, glibc.mem.decorate_maps, can be used to add additional + information on underlying memory allocated by the glibc (for instance, + on thread stack created by pthread_create or memory allocated by + malloc). + Deprecated and removed features, and other changes affecting compatibility: * The ldconfig program now skips file names containing ';' or ending in diff --git a/elf/Makefile b/elf/Makefile index c3cf63a443..2603b90961 100644 --- a/elf/Makefile +++ b/elf/Makefile @@ -3023,5 +3023,5 @@ $(objpfx)tst-dlclose-lazy.out: \ $(objpfx)tst-decorate-maps: $(shared-thread-library) tst-decorate-maps-ENV = \ - GLIBC_TUNABLES=glibc.malloc.arena_max=8:glibc.malloc.mmap_threshold=1024 + GLIBC_TUNABLES=glibc.malloc.arena_max=8:glibc.malloc.mmap_threshold=1024:glibc.mem.decorate_maps=1 tst-decorate-maps-ARGS = 8 diff --git a/elf/dl-tunables.list b/elf/dl-tunables.list index 695ba7192e..888d2ede04 100644 --- a/elf/dl-tunables.list +++ b/elf/dl-tunables.list @@ -160,6 +160,11 @@ glibc { maxval: 255 security_level: SXID_IGNORE } + decorate_maps { + type: INT_32 + minval: 0 + maxval: 1 + } } rtld { diff --git a/manual/tunables.texi b/manual/tunables.texi index 776fd93fd9..2a5ad73e9d 100644 --- a/manual/tunables.texi +++ b/manual/tunables.texi @@ -653,6 +653,18 @@ support in the kernel if this tunable has any non-zero value. The default value is @samp{0}, which disables all memory tagging. @end deftp +@deftp Tunable glibc.mem.decorate_maps +If the kernel supports naming anonymous virtual memory areas (since +Linux version 5.17), this tunable can be used to control whether +@theglibc{} decorates the underlying memory obtained from operating +system with a string describing its usage (for instance, on the thread +stack created by @code{ptthread_create} or memory allocated by +@code{malloc}). + +This tunable takes a value of 0 and 1, where 1 enables the feature. +The default value is @samp{0}, which disables the decoration. +@end deftp + @node gmon Tunables @section gmon Tunables @cindex gmon tunables diff --git a/sysdeps/unix/sysv/linux/setvmaname.c b/sysdeps/unix/sysv/linux/setvmaname.c index 6459a158ac..466a0a004d 100644 --- a/sysdeps/unix/sysv/linux/setvmaname.c +++ b/sysdeps/unix/sysv/linux/setvmaname.c @@ -20,6 +20,7 @@ #include #include #include +#include /* If PR_SET_VMA_ANON_NAME is not supported by the kernel, prctl returns EINVAL. However, it also returns the same error for invalid argument. @@ -30,6 +31,9 @@ void __set_vma_name (void *start, size_t len_in, const char *name) { + if (TUNABLE_GET (glibc, mem, decorate_maps, int32_t, NULL) == 0) + return; + static int prctl_supported = 1; if (atomic_load_relaxed (&prctl_supported) == 0) return;