From patchwork Tue Mar 10 14:11:06 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Claudiu Zissulescu X-Patchwork-Id: 131403 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [127.0.0.1]) by sourceware.org (Postfix) with ESMTP id 2384D4BA23CC for ; Tue, 10 Mar 2026 14:12:46 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 2384D4BA23CC Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=oracle.com header.i=@oracle.com header.a=rsa-sha256 header.s=corp-2025-04-25 header.b=nzymNHlI; dkim=pass (1024-bit key, unprotected) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-oracle-onmicrosoft-com header.b=AkLS3xmB X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by sourceware.org (Postfix) with ESMTPS id 05FED4B9DB6F for ; Tue, 10 Mar 2026 14:11:23 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 05FED4B9DB6F Authentication-Results: sourceware.org; dmarc=pass (p=reject dis=none) header.from=oracle.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=oracle.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 05FED4B9DB6F Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=205.220.165.32 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1773151884; cv=pass; b=k0tfu89SRPRPOdpbFD/rsAUWo/duXDEqGBMgRe0bItsA+TTeV+PkklAH1IVrItZUEuSU0OWGhQG5sobWjMNLB8Q+94rKRGQMfzA7/qe7JDujEwYwVmEmBHZNdI87GnZNt/vTpaFKkpbQAnyf4qjW50POJL1AmpMq3OgaAOaFx4w= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1773151884; c=relaxed/simple; bh=R+7v9CpkxLi5bfcqph6i3750F5edZ++j/13qrWrkgKU=; h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-ID: MIME-Version; b=p/cI4u3oEfdJA3uWrBKSKA9HXBUas5MIVpy+HaywaBKc5coVoBilaBH4BWqGKt2n6qcYZ1zpDl8My+i/O7qBhfTn7jbRBbPmmWruKUC1R9fHW1qtTpFBALu1fWyDuNuTZ2n4FCE/D8adzBvZsYy7nr1E75oQtb/sIe1/tVGyGYw= ARC-Authentication-Results: i=2; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 05FED4B9DB6F Received: from pps.filterd (m0246629.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62AAFs6n2347708; Tue, 10 Mar 2026 14:11:20 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=qIoe+Fiixw9vrrE7UgUC+ADEh+4kJRLcxK/3C0QoO2A=; b= nzymNHlIZrY0d2+X+aUpjMxYFmE+SuoxPBlECndmuxSCA0QbwN3R7GX0UyQ9z/Bx Ru5fjOmIgZQz2Iiwv6cax/F5jP1QuWroR1gCFPxbsObk7fuJg6zp7wLJrb6Gv6Kn rA8Huhr7GnpBL+L1JZurI5O4TxF54bBdgZI98uXzHDemOGd6Sxy4+MT6Adfl33tK uEy9DXrAgqrlz05nlwbxpA4Ui1XqLYhHLZZUsmFlC/RM6IlXAjyOAUB8gVroNlj9 +1HGNCijxUB0kRLL0vX2+ljUZqsByQNDQkVdaZUpkwWKyCkc8iffyaQ9lWCTXNTx mvaM5IHz0UIpVQCEJfjpdw== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4csmmaavmu-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 10 Mar 2026 14:11:19 +0000 (GMT) Received: from pps.filterd (phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 62ADlbMg040411; Tue, 10 Mar 2026 14:11:19 GMT Received: from ph7pr06cu001.outbound.protection.outlook.com (mail-westus3azon11010034.outbound.protection.outlook.com [52.101.201.34]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4crafa6tv9-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 10 Mar 2026 14:11:19 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=VOHz7zuU1BBAQq9MCP2ZloBaykdTL04ilWZRny0Oy0FSp4YHFq7KlWUFMvmdH6ADES71f7EjiMLcQzCkD9qLucakAvGB9lZ8u/UFdBRmuWe2jmTXSyUgECP82Mtb5zi5Lkv41/XqCJifNSlpLh9d2Ong00kxRCGP70aYGCBasN7roYn0tL5/gaz9YfNEfG+cym0Sr3yMX58wOEyIBXZheEKhhsR3pbg8B09Zt/2meBep1q217Rnz/8k4SDcrMgg8ouWa3rHmQKQx2ETVSEkE4muuHtFj45FnYJgREHBWjUQNpYXYPdufvjLw8x0KYW1Y6MAnPfD/R0o8Px5uQVxSaw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=qIoe+Fiixw9vrrE7UgUC+ADEh+4kJRLcxK/3C0QoO2A=; b=vAr80eYsjj2LsfaclRvKwDZXvCUkbY49Ai07ejKOnTwBfYUzebwZDSBHEJY3QndMWUtGlnELBmb+1BXKqCRkvxEcdykezSqG9RqsFZfIDtdqFYrcmh/Zm+kluGs0wC8yZRBHO6wsh5xY4Itc6EopEXZNQPs+6xThe8z1WTh+p9+s2jIM6g2ZO0+OETOO7vKqrIa1sqrO/brDrdvy3aU8MNvT0SGI6BrlJcMEjQVGBJ/kkXCCI7Psp8lsfPuuRmtVRdO081GVjQalxUB8KLihz0BCrv6yjTymIhzBEBOB3m2GjNpztiTiI8lmI7h5jy/4mzvk9bLoTQBc4XVTpanvfg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=qIoe+Fiixw9vrrE7UgUC+ADEh+4kJRLcxK/3C0QoO2A=; b=AkLS3xmBAeZ0DbQGiBj0+SPkTcC1eGhs+KAkMqQ5ZG+t7c3SchN8edty0ZTXrxylUABz8uX7XP6bmOlr3KwS5oxlDBicpIxB1cw5SLQv0fA8NE1F4PhTkCLUAvNNPvd3GuqSAM0Ao+/LE2wV60CE1RYQjmq7s3GlM1o1e0DtkFk= Received: from CY5PR10MB6011.namprd10.prod.outlook.com (2603:10b6:930:28::16) by IA3PR10MB8395.namprd10.prod.outlook.com (2603:10b6:208:57f::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9678.25; Tue, 10 Mar 2026 14:11:14 +0000 Received: from CY5PR10MB6011.namprd10.prod.outlook.com ([fe80::c792:6d38:1377:61cc]) by CY5PR10MB6011.namprd10.prod.outlook.com ([fe80::c792:6d38:1377:61cc%4]) with mapi id 15.20.9678.024; Tue, 10 Mar 2026 14:11:14 +0000 From: claudiu.zissulescu-ianculescu@oracle.com To: libc-alpha@sourceware.org Cc: elena.zannoni@oracle.com, cupertino.miranda@oracle.com, yury.khrustalev@arm.com Subject: [PATCH v3 1/2] rtld: Enable MTE for stack when specified in .dynamic Date: Tue, 10 Mar 2026 16:11:06 +0200 Message-ID: <20260310141107.43347-2-claudiu.zissulescu-ianculescu@oracle.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260310141107.43347-1-claudiu.zissulescu-ianculescu@oracle.com> References: <20260310141107.43347-1-claudiu.zissulescu-ianculescu@oracle.com> X-ClientProxiedBy: BE1P281CA0263.DEUP281.PROD.OUTLOOK.COM (2603:10a6:b10:86::12) To CY5PR10MB6011.namprd10.prod.outlook.com (2603:10b6:930:28::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY5PR10MB6011:EE_|IA3PR10MB8395:EE_ X-MS-Office365-Filtering-Correlation-Id: 01f49b6f-3884-4670-7308-08de7eaee3b2 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|366016|1800799024|376014|13003099007|18002099003|22082099003|56012099003; X-Microsoft-Antispam-Message-Info: xj2SkKf3QmIuX3pNzdsW6xIef90wplHZDg8rkkez/9LGnYSysxdkRfRpb18kscBkHL39yaCuX8lMjsgg5wfpFHpMLagLzKhK6z86ac/6499DHShuvVYGRldCcefHD/d4F9PJNULu0Fdws83Zz5BY2hXZQ0AI1pYJKI07AK+qLW7D2+OSD95u3/PG9h64bIH1ceF22JX8+dL5EcoiXeByaE72oW8IkAOU7vrjI8EwHHuWZT3jgEX2PnnsxKO6KpUQb67RRZD+x6tbCxHCD6ur9uQfGkyiBkNOvdZ3nxL3kHNyAvn1L+hlAIvEP+chQ13PU7eTQjix7S8zMdxiTa9vSGGH8G5LzZDHK9aNXOtn7O/umv1NF9/hmTMkb6by6zKfp0idN0E+iM0rsKCHPs+Rz6dS3pMrlPtK267m0t6b/s07uytQbGLtiq9TpSBRgSilgqQIxO+4+IsdpFben6lr/v57bTqHS9K4q6iQvq/PJLO35oFMR+wrjvGQbsNTBMAW98gSd5WCSv2DeUerIOUdBVJPKnN5mmuHSJqJYwNoF1ImBhi1gSzGqO83HnbIWRxnEoQ3Oj3lz91iqVrsA+Vebrdn0q5/TNpeLRaL9/BgJBhnulbqk4gGBlhDMT5DMmBmQJ256OZWTmJHyACwdbvaKSfMkBl4x7/TefR0+WfizMyOFXt1JAb3DNOG+ICDBlML X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CY5PR10MB6011.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(366016)(1800799024)(376014)(13003099007)(18002099003)(22082099003)(56012099003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: wemr0uxfjsDC0BXYqVkFZsR75S3AjUAbtwemVCjwFYB21VsTLNj+DFu30NCkK7u08cqjf0r+M7gKCzbYRS9cd8As7oazq/xA8eBU+t+oAPlI8qkO4Aw4SeewnDGHOO7PS5Hy4YqFddnfhlHdSXFLhicysEmPd1VJJ/oWP2oM0JQWAdokihi9fpUdQ9fbIdtCF73SukLlfvABUsp0fLp74suVtQkA79PFBoFD1EzGT4z7iG0JIdy0G5VpTkJgUYzYAiKTUrdp3YVwHQtRZ/AUvhZbeIr10XyKcendodjUOq17H5fTpXu0x1H3fZeEt+3FuatWpQ7OZLP5qDy4YiCu2MJ+vBbCIHVZkqOn2paJAzcIYzqUiEaDOwYfvgdFeyBkwpgwhTnzbAACgp4CSAPsX/inp77MIVlXivQcbzWcx9rXY/lOkBBZoS+rrrMsynH21Bt62WqqnaHmJS/4nvJRSirsvd+/+e6BPEDC2vi148vshxKfyJ22973dDvIDtUFVeLpL1BBa5EbsRdS2yeMOX7KPAtyB5/yB7NMVspbpwZIVOc/Vo1VzIYhBUrsR5EelpnhU9Dg6m+F5trt3kIUjSjnL58e9CdOSCRl6supGj68QWV3VRwtmecg2VxsoHae10LO7qU1/1NedN1Kjc2hFIx4mVTrqTl6nbfIWYjCHXIKK9ibYrfbUNLNmeFN2JwpufpmLIcgk3mx8AHfAsYRaH5yvaNEtrutf79VQSXvc7isMk3WKOBHPQeUJgti692cjg9dTGoJu30BBJJFhP7quqk1QV0jIxXr5iZ7n42cYwCWy7Ej/HMe2dojXH4LhtHO12fYnNQcouwQJgzYYNB+Z76b8vZn+IZ9gtx2TzlbV2PVKTViS/6flnzMF2Q+dg8MReUI/jO08YsNmVGW8b3gKJFNQftQJgWWkBkEURwoYKjT9kmnO530JZJjsWus1MgFJDbXL79im5V8XJleHiYzpEMjWYPox3LxaOCCmR0y7Oj6xIbVXxxW27WwfC1FxI+pI6d6KJU3LcGtBMjPTSsvQN70i/XDZHG6WeJO8vMF3iFSJTwEbdzA9CuVwHRJBJ/+78QpkZQhAST1z+1mkgMIvO8EgHQ13JBmItfh0p+0FaLt/d8h9fQ9R9oK8XLa5bbekVSUfCbFWiT55E2HMV3clFxSUJ3FO16DIgUvDDEpiOpTCXLmXbAotJX9dc+FIDA9JbadYb72J7JdBjBsIi4pRjv5o/P+VA6eU1xk4mbHABK/Afhm1GR4nZrt+uSABqgAIIhsAN6O9UP3g2hdR6/qySZffcpBXLpftmCldLZX/xiv1XFmfih8jRlGYxfeatP0DKYfrZYWiZy4NlFX2jOOJC8uf3RL93a7QEwZ0I0wvB7PX5OPtsX7UO3lCxBlv8GHfN98dyZdKq2979eV1aCFKgRoaJlGZd/WtDgf6XKzdVJAwRNbz2+/3aPHE4LIL5uelnLpzHHhJCjrqEzipnkAV41rUPU0zeq4lTO0HVca9p/xjxWn+OX6agYBFwOt1cZOiz+12vnHrSUTSqKXBrtro42pwr5NLL/u5Kn35vL/Bai/6q4cinPxMiRm7VwgwIlE/VIVnF8mJIGO8qRZKONrCnNq25Umj4epdK3rk5dc7PmrhveH/9+xCt5zGDTzEqc2qb/cxks0FX+pmfQyPeBJHHQpYQmhxqEScLQaPBMtWnr3KVCcLGJV1guuaznzIa8Wt6Eoo+zodqzUOIyJ8YvOH/NSxwbBkAmcMBwICv6EHEX9ewgralFw5Dm/Fjj3VirAu X-Exchange-RoutingPolicyChecked: nY344liBdO+ehmuXgabfz7qZHEwDT+lKea+QCF669kR8vMQqqrV9D3u1/PhdDeVVFNsUBCuVIXAjAi4jRDnnlJujVvg/cyFLsOqF51kCBD8UMBmodG8nDvV+mAnLVUPGVynKV4lBt3Ufrxsxib4xMznMrgIY75OOs4KNCFoH+F7jdPbBoIJESPekXXeUhjw/NujlUYCbtzqnepuIytpGw+icAF7KPAFa+dwc4vpi3VShZM95mssnQynzEwOW0s7ozy74hUcLohvzqVMH+wLmEVxxi/U7bSwPg4xVHnPppwGCumyEdXVOkMd/FUEk0x6z2qkzSzocmE4RAsJ4zZDN6g== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: A55sb7Q0tXjVgIWB5DZ5IqlEahDxMr4S3KZUt7e06B/Rv7Ilaj3j1DDLkvcPidMawcsH1uqMYj1yDE7gTIkXqpLOPX1hUARuEyroodHqHJDGiToi8DRrxoVUdYxTz1qyYdEyHjvrz1MUNghpOzk8CSqakRoVM4hnZjl/cmB4k99l8hS8NX8WEnHdJeFz8G+kpfOEqw3zjJ5RGXXbxBauajbnwrxrwA1CMf49kiu+dWa6J+1cHbkA3oI/IqlcMbs8qLmz1/gBMnpits3VVQtVNtPIaYxJlzOzrhHDE3Zq+VSQrD/5ICkn3fHd3d8A0s5Gu08fL4vbTapKsP7EWXSNvlOLH7uoi9Qo6dN0GUIVLlMXrByAsLhbnqelQRe7QZv/GzaQCQ2SiJZJBCw0KqkE6RGhNJAs0soASFCTpKnn9dbpAYpIcwSBvVGOWtb4oY6JC5GuyL0NG90sExyuBXySE900GTxEb0X3lr09Thz1bBCwPACwwTpJ2ygmz1ZnFOZdU6wahvfgTJg/ENa9weHiSFSduJ1ue1H7IqJWTFdrB2eqPuL3F/68zAlGmcyAXmPJEFxRU/YAQgEA+6axmVaXp93J7bUgYBjXEawRUJ3A6RI= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 01f49b6f-3884-4670-7308-08de7eaee3b2 X-MS-Exchange-CrossTenant-AuthSource: CY5PR10MB6011.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Mar 2026 14:11:14.5289 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: KlJeDchmD3d0AnVmP5vPklKndiXxck//HH2jsoSnmWmca+XuMwk9QAQt/yIIq/pbcqg1ess/uqpirRE5E0S41jjvmgCpwXmjKtOeDSCbl3qeFaadDXMUwMYqzr6nB9spfMEITsZ7IOqFEqSb5bRKbg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA3PR10MB8395 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-10_02,2026-03-09_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 mlxscore=0 mlxlogscore=999 adultscore=0 malwarescore=0 spamscore=0 suspectscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2602130000 definitions=main-2603100123 X-Proofpoint-GUID: 6KOy612dBW6n8XjUw_v0VhQOchxOKcHk X-Proofpoint-ORIG-GUID: 6KOy612dBW6n8XjUw_v0VhQOchxOKcHk X-Authority-Analysis: v=2.4 cv=U5efzOru c=1 sm=1 tr=0 ts=69b02687 cx=c_pps a=OOZaFjgC48PWsiFpTAqLcw==:117 a=OOZaFjgC48PWsiFpTAqLcw==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=Yq5XynenixoA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=EIcjfB9IiI4px24ztqRk:22 a=nZ40scU-AAAA:20 a=mDV3o1hIAAAA:8 a=yPCof4ZbAAAA:8 a=A_tRSssWj4vitUSkMHwA:9 a=bA3UWDv6hWIuX7UZL3qL:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzEwMDEyMyBTYWx0ZWRfXwIS++Qg2JJmU pIa3bXX18NP8qLKh+RV4UK/cPGLM61O3RiQ4iRNr/R9sEj37hilv2nN9QxwVzW+s/l8UtRbaeeP yeH5An55axxtVUb6F0XfJOTev9m7PKmLToJjr3Mf9zkK+g2SZyEJ5fHKxGV/ZeitUr3M3ixaCXh +UqdISj1QCeb+NLbQ2aCDLZIsTq4uNmTP5N+LL9grhzvjIA5X2WT1unvHQuI306aaJ1kJI1QIkS ootEi1YhpdW6VpnV4s+GnhedUUE3YYyBKnOFcpWpjwuJ03kYAqDJ41rF+RZGy4UlBsAVnzM/ID9 C188uY29NuTBkwjQ9RgSJeXiTp1xY0RV0GyPp++l5LqbzgxoMmK1ou1+Su5vWz38Z2PJ3K5Mvil WnZQzEBoqSQM8/k88i9MeyALinHd8jLfmMA6XMbB9lor5bqvw63vBdDyK+4cTPYWK4hMsnB1UhD fcSDvbNJPHMwi5/J00A== X-Spam-Status: No, score=-11.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_LOW, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED, SPF_HELO_NONE, SPF_NONE, TXREP, URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on 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~patchwork=sourceware.org@sourceware.org From: Cupertino Miranda This patch enables Memory Tag Extension (MTE) for stack tagging in the rtld. Parse DT_AARCH64_MEMTAG_STACK and DT_AARCH64_MEMTAG_MODE from the main program and enable stack memory tagging in the dynamic loader, as described in ARM's ABI [1] documentation. Ref: [1] https://github.com/ARM-software/abi-aa/blob/main/memtagabielf64/memtagabielf64.rst --- elf/elf.h | 7 +- sysdeps/aarch64/Makefile | 1 + sysdeps/aarch64/cpu-features.h | 12 +++ sysdeps/aarch64/dl-mte.c | 85 +++++++++++++++++++ sysdeps/aarch64/dl-prop.h | 4 + sysdeps/unix/sysv/linux/aarch64/Makefile | 4 + .../unix/sysv/linux/aarch64/dl-mte-stack.c | 45 ++++++++++ 7 files changed, 157 insertions(+), 1 deletion(-) create mode 100644 sysdeps/aarch64/dl-mte.c create mode 100644 sysdeps/unix/sysv/linux/aarch64/dl-mte-stack.c diff --git a/elf/elf.h b/elf/elf.h index 46a01281cb..02c4125cb1 100644 --- a/elf/elf.h +++ b/elf/elf.h @@ -3039,7 +3039,12 @@ enum #define DT_AARCH64_BTI_PLT (DT_LOPROC + 1) #define DT_AARCH64_PAC_PLT (DT_LOPROC + 3) #define DT_AARCH64_VARIANT_PCS (DT_LOPROC + 5) -#define DT_AARCH64_NUM 6 +#define DT_AARCH64_MEMTAG_MODE (DT_LOPROC + 9) +#define DT_AARCH64_MEMTAG_HEAP (DT_LOPROC + 11) +#define DT_AARCH64_MEMTAG_STACK (DT_LOPROC + 12) +#define DT_AARCH64_MEMTAG_GLOBALS (DT_LOPROC + 13) +#define DT_AARCH64_MEMTAG_GLOBALSSZ (DT_LOPROC + 15) +#define DT_AARCH64_NUM 16 /* AArch64 specific values for the st_other field. */ #define STO_AARCH64_VARIANT_PCS 0x80 diff --git a/sysdeps/aarch64/Makefile b/sysdeps/aarch64/Makefile index d6c5cc96ca..dfbc33d2f4 100644 --- a/sysdeps/aarch64/Makefile +++ b/sysdeps/aarch64/Makefile @@ -4,6 +4,7 @@ ifeq ($(subdir),elf) sysdep-dl-routines += \ dl-bti \ dl-gcs \ + dl-mte \ # sysdep-dl-routines tests += \ diff --git a/sysdeps/aarch64/cpu-features.h b/sysdeps/aarch64/cpu-features.h index 1fe35d986b..91e0ce9a90 100644 --- a/sysdeps/aarch64/cpu-features.h +++ b/sysdeps/aarch64/cpu-features.h @@ -74,4 +74,16 @@ struct cpu_features bool mops; }; +#define ARCH_MTE_MODE_SYNC (1 << 1) +#define ARCH_MTE_MODE_ASYNC (1 << 2) +#define AARCH64_CPU_FEATURE_MTE_STATE_STACK (1 << 3) + +#define AARCH64_CPU_FEATURE_MTE_STATE_MODE_MASK (0x3) +#define AARCH64_CPU_FEATURE_MTE_STATE_MODE_ASYNC (1) +#define AARCH64_CPU_FEATURE_MTE_STATE_MODE_SYNC (1 << 1) + +#ifndef ARCH_INIT_MEMORY_STACK_TAGGING +# define ARCH_INIT_MEMORY_STACK_TAGGING _dl_mte_stack_protect +#endif + #endif /* _CPU_FEATURES_AARCH64_H */ diff --git a/sysdeps/aarch64/dl-mte.c b/sysdeps/aarch64/dl-mte.c new file mode 100644 index 0000000000..e73c5311a6 --- /dev/null +++ b/sysdeps/aarch64/dl-mte.c @@ -0,0 +1,85 @@ +/* AArch64 MTE Stack functions. + Copyright (C) 2026 Free Software Foundation, Inc. + + 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 + +extern int _dl_mte_mode (void); + +void +_dl_mte_stack_check (struct link_map *l, + const char *program __attribute__((unused))) +{ + ElfW (Dyn) *d; + bool mte_enabled = false; + bool mte_mode_selected = false; + + for (d = l->l_ld; d->d_tag != DT_NULL; ++d) + { + if (d->d_tag == DT_AARCH64_MEMTAG_STACK) + { + GLRO (dl_aarch64_cpu_features).mte_state + |= AARCH64_CPU_FEATURE_MTE_STATE_STACK; + mte_enabled = true; + } + else if (d->d_tag == DT_AARCH64_MEMTAG_MODE) + { + GLRO (dl_aarch64_cpu_features).mte_state + &= ~AARCH64_CPU_FEATURE_MTE_STATE_MODE_MASK; + if (d->d_un.d_val == 1) + GLRO (dl_aarch64_cpu_features).mte_state + |= AARCH64_CPU_FEATURE_MTE_STATE_MODE_ASYNC; + else + GLRO (dl_aarch64_cpu_features).mte_state + |= AARCH64_CPU_FEATURE_MTE_STATE_MODE_SYNC; + mte_mode_selected = true; + } + } + + if (mte_enabled && mte_mode_selected) + { + int errval = 0; + _dl_mte_mode (); + GL (dl_stack_prot_flags) |= PROT_MTE; + + uintptr_t page = ((uintptr_t) __libc_stack_end + & -(uintptr_t) GLRO (dl_pagesize)); + + if (__mprotect ((void *) page, GLRO (dl_pagesize), + GL (dl_stack_prot_flags) +#if _STACK_GROWS_DOWN + | PROT_GROWSDOWN +#elif _STACK_GROWS_UP + | PROT_GROWSUP +#endif + ) != 0) + errval = errno; + + if (errval != 0) + { + const char *name = "MTE Stack"; + struct dl_exception exception; + _dl_exception_create (&exception, name, + N_("cannot set stack with PROT_MTE")); + _dl_signal_exception (errval, &exception, NULL); + } + } +} diff --git a/sysdeps/aarch64/dl-prop.h b/sysdeps/aarch64/dl-prop.h index cf236df59b..2ca0fd0f62 100644 --- a/sysdeps/aarch64/dl-prop.h +++ b/sysdeps/aarch64/dl-prop.h @@ -27,11 +27,15 @@ extern void _dl_bti_check (struct link_map *, const char *) extern void _dl_gcs_check (struct link_map *, const char *, int) attribute_hidden; +extern void _dl_mte_stack_check (struct link_map *, const char *) + attribute_hidden; + static inline void __attribute__ ((always_inline)) _rtld_main_check (struct link_map *m, const char *program) { _dl_bti_check (m, program); _dl_gcs_check (m, program, 0); + _dl_mte_stack_check (m, program); } static inline void __attribute__ ((always_inline)) diff --git a/sysdeps/unix/sysv/linux/aarch64/Makefile b/sysdeps/unix/sysv/linux/aarch64/Makefile index 57461fded7..a2e79cf3d6 100644 --- a/sysdeps/unix/sysv/linux/aarch64/Makefile +++ b/sysdeps/unix/sysv/linux/aarch64/Makefile @@ -9,6 +9,10 @@ modules-names += \ LDFLAGS-tst-tlsdesc-pac = -rdynamic $(objpfx)tst-tlsdesc-pac.out: $(objpfx)tst-tlsdesc-pac-mod.so + +sysdep-dl-routines += \ + dl-mte-stack \ + # sysdep-dl-routines endif ifeq ($(subdir),misc) diff --git a/sysdeps/unix/sysv/linux/aarch64/dl-mte-stack.c b/sysdeps/unix/sysv/linux/aarch64/dl-mte-stack.c new file mode 100644 index 0000000000..c93ca6a670 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/dl-mte-stack.c @@ -0,0 +1,45 @@ +/* Memory tagging handling for GNU dynamic linker. AArch64 version. + Copyright (C) 2026 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 + +#define MTE_ALLOWED_TAGS (0xfffe << PR_MTE_TAG_SHIFT) + +int +_dl_mte_mode (void) +{ + int err = 0; + + if (GLRO (dl_aarch64_cpu_features).mte_state + & AARCH64_CPU_FEATURE_MTE_STATE_MODE_SYNC) + err = __prctl (PR_SET_TAGGED_ADDR_CTRL, + (PR_TAGGED_ADDR_ENABLE | PR_MTE_TCF_SYNC | MTE_ALLOWED_TAGS), + 0, 0, 0); + else if (GLRO (dl_aarch64_cpu_features).mte_state + & AARCH64_CPU_FEATURE_MTE_STATE_MODE_ASYNC) + err = __prctl (PR_SET_TAGGED_ADDR_CTRL, + (PR_TAGGED_ADDR_ENABLE | PR_MTE_TCF_ASYNC + | MTE_ALLOWED_TAGS), + 0, 0, 0); + + return (err != 0 + && (GLRO (dl_aarch64_cpu_features).mte_state + & AARCH64_CPU_FEATURE_MTE_STATE_MODE_MASK) != 0); +} From patchwork Tue Mar 10 14:11:07 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Claudiu Zissulescu X-Patchwork-Id: 131404 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [127.0.0.1]) by sourceware.org (Postfix) with ESMTP id 4F53E4B9DB6A for ; Tue, 10 Mar 2026 14:14:23 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 4F53E4B9DB6A Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=oracle.com header.i=@oracle.com header.a=rsa-sha256 header.s=corp-2025-04-25 header.b=C3QMp1Bo; dkim=pass (1024-bit key, unprotected) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-oracle-onmicrosoft-com header.b=AAcsX+4c X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by sourceware.org (Postfix) with ESMTPS id AD1B54B9DB5D for ; Tue, 10 Mar 2026 14:11:27 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org AD1B54B9DB5D Authentication-Results: sourceware.org; dmarc=pass (p=reject dis=none) header.from=oracle.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=oracle.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org AD1B54B9DB5D Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=205.220.165.32 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1773151887; cv=pass; b=h+KHMDbBImp36QGtB49EpsX/3gNF61ONY2893xRnzh3eGAAYLVv5Rq2sGhtd/3VLjDYMcwKbqlWcr2wproFNrlblDl7RE0yfLiLD6zAoBLtUg/8ne+anHQjdNOCKHqS34AZnsYKAYPSQtaPDPU3jH1u9bL/mEpmDADEIdOW98rU= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1773151887; c=relaxed/simple; bh=++FQwVdy87o45LkXDQnv6WhMh2jm1++ZQm0Zn1gWRSA=; h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-ID: MIME-Version; b=uGZdHHx7MfpIpqzypxuqrVO+EJ2q0nXwRGLMMtAl7B6rS4ITwQrvO9BvmmhbRePWFpYwYYsF9vu48hbP6RyZhTxW5PqaAH1DIFrxbH/gEmmGKgqYUGgamrNNatF8l+pr4oZEmw9htabUk5zMsDSyucpa+r5IG1y/SxsFtnhyY+U= ARC-Authentication-Results: i=2; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org AD1B54B9DB5D Received: from pps.filterd (m0246629.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62AA8M5o2348180; Tue, 10 Mar 2026 14:11:24 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=XJteCT/FYStnQQitLT3SgYn7LBhROHmmFfF6Fm12rp4=; b= C3QMp1BoLakHTxpiGcicdd/VhzhrirsbMS7TdHF8msCvE0UIttElYFWKIz/1rkhA 553Iv3K8oqpV3/WTKklSZRQYQdCxzRWkNweJnLp9WiOZ2x5GUA28dwDmNceNMlDt XvP7CD3HULnWsmGhYvdNLmC4pwh8gR2sKoScDao5EA9e894bVFfuINkCir2lF+CQ ma2w7x3EZkFC+muBV/H2pfCJUkd98+z0BlT994RAcnGoPXsf9Srs/dmKva8Cl323 HVbl6xvSXFCBIZPRmy0UI2N5fi1fhl8rUPTWVaKIKX5c8C5qZiPrHUS8NIzJhGBi whhHdVStxkfBhQznAWc5WA== Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4csmmaavn3-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 10 Mar 2026 14:11:23 +0000 (GMT) Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 62AE3bFa007729; Tue, 10 Mar 2026 14:11:23 GMT Received: from ch1pr05cu001.outbound.protection.outlook.com (mail-northcentralusazon11010051.outbound.protection.outlook.com [52.101.193.51]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4crafa51s2-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 10 Mar 2026 14:11:23 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=MaevJOeBTJjulorjozp7wgB4H25ABmr30556ymfFagM2hTbferDYv8VGi0ksuvLNO06QV/v2pR55ol9DojIqyVVrgKb8cR9KP8m2GYnV9VBpRuobqUST2A0adrW8KDEq+dy9chR8smT+adftykxJdUoze+nh3w6CdmztyKdh0lJGf2ppTiACJVSkfC+xtEBK5KtJ45wILfQl2nfBZ5gZqRZ1X5uikpokABSaqRqQ2efo/3lemyrNVlCJ3gjLPu926Es6iSR89+I9xYMoquok0scUy/axyEABY0XgyLnNvfXq5Sk1hES4QM1Dswgf+GpfviLLCF1uhaW9WMZemKvj/g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=XJteCT/FYStnQQitLT3SgYn7LBhROHmmFfF6Fm12rp4=; b=Xo0YdQlNFxA7S8AxsvJWzWK3x2ONmVeVXSbeJ9r+c7eO9yhGgFITKUUwgbxMnGxnHOpMbHtCkaFeP/Ce16auqV155oR/42EjJwH6QAquA0yRmeH3MGl8zHXJyesxmHPMDHJmFz6aqOq0TRvhGzNFx9mkuMv7ZhC9r8ZJgfaD6KOBsRrSs94h06ay3tft4EQk/An6tzAcP9PkDOQxsv8GnatKopoaLGfg13qCHIVJQObQBpX6u7Eitl/NYxBmSYQUQASJ/7mMz9x4l3lTWUzeLdNH2rc4YFkhQK9cReFUVrPYxtOod2QYZbd6COKXkgDMSm4EHWBmiMuBc9pYwtEmtQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=XJteCT/FYStnQQitLT3SgYn7LBhROHmmFfF6Fm12rp4=; b=AAcsX+4c3fsqNE1gXVttTOmogNzBgOhsRXLvKPo3KTWd33H/xw9VuriNiJEM+6jTM6/68FlVKWQuNoX+6pdKAlIrUfx7U0MHIsHIfTeTN/rKpUuy6golPrWNi9gsui5LENDvO8IvQgpiro7RuB9b0yhcEyY/wYMGPrZoSFd30rY= Received: from CY5PR10MB6011.namprd10.prod.outlook.com (2603:10b6:930:28::16) by IA3PR10MB8395.namprd10.prod.outlook.com (2603:10b6:208:57f::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9678.25; Tue, 10 Mar 2026 14:11:19 +0000 Received: from CY5PR10MB6011.namprd10.prod.outlook.com ([fe80::c792:6d38:1377:61cc]) by CY5PR10MB6011.namprd10.prod.outlook.com ([fe80::c792:6d38:1377:61cc%4]) with mapi id 15.20.9678.024; Tue, 10 Mar 2026 14:11:19 +0000 From: claudiu.zissulescu-ianculescu@oracle.com To: libc-alpha@sourceware.org Cc: elena.zannoni@oracle.com, cupertino.miranda@oracle.com, yury.khrustalev@arm.com Subject: [PATCH v3 2/2] aarch64: Add memory tagging support for setjmp/longjmp routines Date: Tue, 10 Mar 2026 16:11:07 +0200 Message-ID: <20260310141107.43347-3-claudiu.zissulescu-ianculescu@oracle.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260310141107.43347-1-claudiu.zissulescu-ianculescu@oracle.com> References: <20260310141107.43347-1-claudiu.zissulescu-ianculescu@oracle.com> X-ClientProxiedBy: BE0P281CA0003.DEUP281.PROD.OUTLOOK.COM (2603:10a6:b10:a::13) To CY5PR10MB6011.namprd10.prod.outlook.com (2603:10b6:930:28::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY5PR10MB6011:EE_|IA3PR10MB8395:EE_ X-MS-Office365-Filtering-Correlation-Id: e0eb61b4-c833-4534-a5ae-08de7eaee61c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|366016|1800799024|376014|13003099007|18002099003|22082099003|56012099003; X-Microsoft-Antispam-Message-Info: nnFD45iWoW0s29agA3or+sjxoxV+Zjs0C4Ls1oKsL8UAs9frW5GrV7+3Psvw1e8X/mkD01axvKlD4SFRwXDXcRhQwY/Jy2GfH/584gUxg172BpGranlmizpbVj4DBl9DQhDhSlwO4vYquz1cyleIEkm82qLftqATFvetkyhiZcpasb4jj7ZmsBfZ+TT1V55GiVBUfd0jWQJOH5W22u0ei16Q2Gk8217mH6kCuJYTOyAw/AVOLjZdHT9fGq47MFAE9hmTSq+NZj0KLWs4aiz3GENcg2/JxBHuPinQ2fF3dLp/MoQ8uBdTzRiYM2ihGYyCv1YeO2PdKY2cJ3TsF3YE88tbT5aV3UNLFlcJmSLrHMN/I+CJAzsk5S0mDRl40NUVPxQxRM4MojU5c4AZ5KYAbKMRS7R0ffn79BuQ/Lh3cz7GBbc1KJgyxo+WCTUMMLGBHssf/ygiLZjyI5r5bxi/SNLteVlxgVSWE+XAl7bwOnqQ2FaCquWjHLjlLFF2n6Mfgl9oEIg+WofGlzE//xEAYaz4SLr7t4WcckCX39kQ6xe4ffqFbHBn/zsGwyzDdrF3Wz7fkRhNDjItbTjtWfY9KhAGLcSr4TQGXF1JitGrX0Bgn/5MVud4mHOg2YT4x3R11/GEy7QkYErpb02RZQM7sm5PZVaJlyupa/0V9ZrxrIWw0xlZb8WlJKWC+weIH/sRMDb9gwB3Us4HZkUTmsaP3k2X5+ooDfeqeB1FNJWXxtc= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CY5PR10MB6011.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(366016)(1800799024)(376014)(13003099007)(18002099003)(22082099003)(56012099003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: tg2pJEugiFF0kYEbSbga0muOLZnPX4/15Gg6msaYS381qmg4312Sj7Sl8y1HTGpTh8oSupTy6j13szS9COquWdSbQ37usVxm/ksbeCeDdy3gDq8OTmEE/SY5MMCZHLlFKZzOUBBmYzi9lvrV5qEOermDKSQBOzQC7M43aK9HTOpAceu97V453gu0IYW9Br2z2k68RvLNt7BZ2f5F8gUOJFc2GdiJH9Z0yTbAVgBikh14/p+hv9GHMJc9Sf6xdGIt/Rrlt1ciQ4eeKCfm7LldV/lV3JfJY+CkqoIfFjWC7+bB4UGQVDYcTsojHRvuFtuUgDvahxSb1DyS90lxv5s7lvrPodA/nVJJmcj6DGM0To2V3riGqi5h/YZ7Xspgxok7+SqLE5uA9BhQshIpe4nia71QFTPIXf50lr0iLtnQ6H/bSK2EL9FgErtoK1MrnE0XfOH4bENPAcB/lDKy/juSEgghNmxmvlz2auUsnVfzRq9JyIwsXzc8XwT7fhDfsan4p+g82dlCEpotiE5OM6oG9DNDYNHyAHio7f6CCFeUpY3/6xCN1h2bYOHs4KhzMFabqAfIpvPB5ggK7n9XB8h4ZPKdcmJz4PgIznpBk8uMj+6vCJRrREVTeD/takYEF42F7zk0OOc83stdViUHhcS4Kn3wHT1fia5JsYjafcDU2ykdu+BgZlw76UxOc8vA8MJ9RrVkMKUNv9Oz5zpvwK0oHCvtG4zS3wLZZhoyBRRTFaLriahwU3BNiU74WtyQRaY+M+POjMeJbxPleBTRxltVf4btDeNJzxMyF7qNethnU9K5gpmJDC2wlXfwxqPIydgVIY7iIoVvfSWShLXnpw4euCFoZ9JXQiTHifMNINwLgJMK0q4PgRyKgaZdclM4XroTC8JjLhU7GwBJ2QuCpLKPQWsaiB/r9mc7Dan95YdG1lcPeo4jG1tVSc2zd7c+LIUcbuLpeiYe8+BIg2YV0VpWibwu5IAf2iMLnoFH2FQ64CZLEqfQWdYDj26GLjkgdOvmaQOtayWXKiAGf6u6W3bIrVyyF/CnXH6kvEZYhkz+pxBaffCKWGL5SUy8fGu/E6BKNWbspf7tHyAwcpLL4rOgZt7C9WPp58nrLBzzWUVLR6tkDmzTWxi6bOutbE6CxmK/FFIsdsmTNDmT5QIbfZz1ydVv1kjj2uWi/cJVWSiFc3t6B5jQNJZWwodGFKGkAqj+x8A+W7qSUJNbnHi2No+BUOh4Uf/lNI6FLsEu3dLCvpluV6Wx54fapWSrqWixGyWViYPHzyWJxEjBCMq6JkcEe2O6GLIrdQWs/mBbyiZeNF0Awi2rtlXneChSNsLn7GoR2pee9kM4nfcYxV7o9IJ7js7jeRdsOqNL5HQ16IlkXvlg0ArUOvYs3Nd7bnQuz2/Xg4oPTmtHZ4AKdwhXKj7t5f3WZj7w9SnTrN6xOsjsqoV3+2BLS0eu906CWMldIM5GgLylMKcPkOauA8nHxupvK7MynHQ4oMmPYHOUHzdeFDo9DVm6ilhjzqSy+hTghvrEaXjYsrcy2IgCOTKQ1eHn4Lgw5ambqgPYB0cuaNRZAmnGXgZ+i0OrrNU/Vccu2zZu1NLNBxSYqPeC5hg6o7DHB9+EN+yOc3TKQKURh0HDRQKPBEptV70sp/Lk7P6436zc57vRrKwAN8urpXYyFQsrDQyJ2MEJSYK1Evlg2JgVD88XwQAhsT7abkOqA8i8NjYlz/huNJP6ECa8BsqnsZp7QOIfeMTPgugA9ikQIpKPkw3Q65HOQJcH/hKNq2mFoBGn X-Exchange-RoutingPolicyChecked: tLi8sw2ZR3WbGpv3PgXPltRE+NQZmIwt9m62WFwlqcESWj67YRIXSR4yB/2dCp+Af5gcSJomubDOHPBTmQBi385Jh3FM2rgSE5xHQRGr21xkghafgwaiIEhtAzXBmMg1Knj30SzyBuqOHY68bOahgY3h1uA1YGwZqRr5jz+BKMDvb/MSUCl/W+cZd6tw86p+7vTRNN3/oi778djjyfSK+18cjAHdwFDcdu9yn3kMF3k5KYNo7i25LFnGeARGxpqEBjqgGYfevb9mz5ikilU1z/pevAPyOWg7QR3z+F9I+g2xN47j4Qp1Wnlw1zsvdm0I5Xq42yDsKrbgciXDb7jk0A== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: o1QcTHO+uY1yofnVeCoknc57hpyUgu54byiuICbtq3Zex9tfv/3KhI3PSnrZ4B+OE3VEmnwMKXrYScyOTQey6OeCp1xgpfvd8jgtyeUqDeWIO0Nk+DQpX+bHjTxz59QTFvEsL5T+iHKLf6/lttLw+GNo1nf2vP4AGS4851QJUxZ81HD/qf3RRgGfzbNWDT41SDWtlaxYXlf+Sq6JRm8KC3W5P1SBJzEhXtZU3CP7Lf8wywUgRwkbZrfown1U7PVAGicmKJ8ui7E88OZ3nKV8+mujqg9UAfua5sF0UB4R/h9miVjhjfCLkH/81LpCA7WQmNdJFugt80+pRV6HleagLQmtWmBjoSkh31ritr3LUL46EvrUURuWIHxpaXyBdRgCXFA0XkRaxER0YVclp3+qtILdQcttzpKJiccYg48JGqGef2Sc7UyXGVxPTx401J775G2NxdIexKDnRAYtN1oCXyyPcWO5K1zuXHhb7ZuaZtXIfXp9V5Q29/nyRU4iHmnSsrByFC25DPSMiyduFa4Vc3T/q+Cx0LXNQswaZZRiM24a9rrcNY0xO6N6evisQ1L7VmvzANMwvVsi7ZD4eyF9Xl9W9AJ3edNYqjfHmrs0Pz0= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: e0eb61b4-c833-4534-a5ae-08de7eaee61c X-MS-Exchange-CrossTenant-AuthSource: CY5PR10MB6011.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Mar 2026 14:11:18.5295 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: BxfNbLHVu7dlQvfkOraaC41Vuabv7QjxsHIcYKmv9OIrUoeJJCz5+8L0dkIoB5Q9SLyFk9uIgOZJbdKTB6K/5GKr565/ZkBphM3Gmb9nv1uLbs2oFrhtlDRANwkQKqU21rjhTZFd/g5p2jQYdlniNA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA3PR10MB8395 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-10_02,2026-03-09_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 suspectscore=0 adultscore=0 bulkscore=0 spamscore=0 phishscore=0 malwarescore=0 mlxlogscore=999 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2602130000 definitions=main-2603100123 X-Proofpoint-GUID: N5mEja3XLPJsaGtEDUN45CJJIpQi2D4_ X-Proofpoint-ORIG-GUID: N5mEja3XLPJsaGtEDUN45CJJIpQi2D4_ X-Authority-Analysis: v=2.4 cv=U5efzOru c=1 sm=1 tr=0 ts=69b0268c b=1 cx=c_pps a=WeWmnZmh0fydH62SvGsd2A==:117 a=WeWmnZmh0fydH62SvGsd2A==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=Yq5XynenixoA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=EIcjfB9IiI4px24ztqRk:22 a=mDV3o1hIAAAA:8 a=yPCof4ZbAAAA:8 a=oXJCjtbPXt_rcvK5rK8A:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzEwMDEyMyBTYWx0ZWRfX6Jn//PW3ENzW wGUvqw/1NO47MfrZtq2ghm1Tk+2oj/JOOFKBqMCniuTZEa5I+snloW8YVGEXmUTmKTzOo5DBrUk +ezhvC4g9liduFDBYoyEMclOrFArj1UXInZnPpHcHMvleXgflmVq8lnmXjP4Js2Ch5bhBZd75rS QbwCChPvXdmYYFW97Rq3qXdk2Itbu1EBdYg3Nif8/H73WyRwH4wctv0K7qEB+f4OZ2TnMndazA/ 5kEzKrr8w02s4IgMZZfMFtHHlF+tJtPk/C3TkXBW4Tqacz+TN+JLH8lQ1HrDSVyW7xPo3MsGm2I pVETmw7frnsnzpp0/C1sqlPEfhFzHbm4dQf2teMJDoHZxiyisCKe9AgAH0bBZeQp/FZomhi/Edg pC61YP8fy38S/alPu/S8ejdq7e3x84eK7bIbHQpBUTh70etT1ycwQXDHqFAMV7NMCXCSQ5tpUaZ rif9BWw6Eh8fsfzltRQ== X-Spam-Status: No, score=-11.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_BLOCKED, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED, SPF_HELO_NONE, SPF_NONE, TXREP, URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on 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~patchwork=sourceware.org@sourceware.org From: Claudiu Zissulescu When we perform stack sanitization using AArch64 memory tagging instructions, there may be instances where the tagged memory stack is not properly cleaned. Consequently, any further use of this memory could lead to false tag mismatch exceptions. One situation where this can occur is when a sanitized function terminates exceptionally, as in the case of a longjmp. Therefore, when executing a longjmp, it's essential to clean the tagged stack memory. This patch modifies the longjmp implementation by adding stack cleanup operations, a corresponding test, and necessary configuration adjustments to check if stack sanitization using memory tagging is supported by the compiler. This patch relies on the USE_MTAG macro, which must be defined through the --enable-memory-tagging option. Signed-off-by: Claudiu Zissulescu --- configure | 36 +++++++++++ configure.ac | 17 +++++ sysdeps/aarch64/Makefile | 9 +++ sysdeps/aarch64/__longjmp.S | 33 ++++++++++ sysdeps/aarch64/tst-mte-jmp.c | 108 ++++++++++++++++++++++++++++++++ sysdeps/aarch64/tst-mte-stack.c | 74 ++++++++++++++++++++++ 6 files changed, 277 insertions(+) create mode 100644 sysdeps/aarch64/tst-mte-jmp.c create mode 100644 sysdeps/aarch64/tst-mte-stack.c diff --git a/configure b/configure index 0841355583..ddb2afd381 100755 --- a/configure +++ b/configure @@ -9406,6 +9406,42 @@ have-libgcc_s = $libc_cv_have_libgcc_s" +# Determine whether the compiler can do stack sanitization using +# memtags. +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -fsanitize=memtag-stack" >&5 +printf %s "checking for -fsanitize=memtag-stack... " >&6; } +if test ${libc_cv_memtag_stack+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) libc_cv_memtag_stack=no +if test "$memory_tagging" = yes; then + # Only available on architectures that support it. + case $host_cpu in + aarch64) + if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS -Werror -fsanitize=memtag-stack -march=armv8.5-a+memtag -xc /dev/null -S -o /dev/null' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } +then : + libc_cv_memtag_stack=yes +else case e in #( + e) libc_cv_memtag_stack=no ;; +esac +fi + ;; + esac +fi + ;; +esac +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $libc_cv_memtag_stack" >&5 +printf "%s\n" "$libc_cv_memtag_stack" >&6; } +config_vars="$config_vars +have-memtag-sanitizer = $libc_cv_memtag_stack" + enable_gsframe=no if test $use_sframe = yes; then # SFrame requires to be explicit enabled by the architecture diff --git a/configure.ac b/configure.ac index ea81b0ea62..cb74188bf9 100644 --- a/configure.ac +++ b/configure.ac @@ -2148,6 +2148,23 @@ LIBC_CONFIG_VAR([have-libgcc_s], [$libc_cv_have_libgcc_s]) AC_SUBST(libc_cv_test_cc_mprefer_vector_width) AC_SUBST(test_enable_cet) +# Determine whether the compiler can do stack sanitization using +# memtags. +AC_CACHE_CHECK(for -fsanitize=memtag-stack, libc_cv_memtag_stack, [dnl +libc_cv_memtag_stack=no +if test "$memory_tagging" = yes; then + # Only available on architectures that support it. + case $host_cpu in + aarch64) + LIBC_TRY_CC_OPTION([$CFLAGS $CPPFLAGS -Werror -fsanitize=memtag-stack -march=armv8.5-a+memtag], + [libc_cv_memtag_stack=yes], + [libc_cv_memtag_stack=no]) + ;; + esac +fi +]) +LIBC_CONFIG_VAR([have-memtag-sanitizer], [$libc_cv_memtag_stack]) + enable_gsframe=no if test $use_sframe = yes; then # SFrame requires to be explicit enabled by the architecture diff --git a/sysdeps/aarch64/Makefile b/sysdeps/aarch64/Makefile index dfbc33d2f4..fcb3c60022 100644 --- a/sysdeps/aarch64/Makefile +++ b/sysdeps/aarch64/Makefile @@ -86,6 +86,15 @@ tests-internal += \ # tests-internal $(objpfx)tst-sme-clone3: $(objpfx)clone3.o $(objpfx)__arm_za_disable.o + +ifeq (yes,$(have-memtag-sanitizer)) +tests += tst-mte-jmp \ + tst-mte-stack +CFLAGS-tst-mte-jmp.c += -fsanitize=memtag-stack -march=armv8.5-a+memtag +LDFLAGS-tst-mte-jmp += -Wl,-z,memtag-stack -Wl,-z,memtag-mode=sync +CFLAGS-tst-mte-stack.c += -fsanitize=memtag-stack -march=armv8.5-a+memtag -w +LDFLAGS-tst-mte-stack += -Wl,-z,memtag-stack -Wl,-z,memtag-mode=sync +endif endif ifeq ($(subdir),malloc) diff --git a/sysdeps/aarch64/__longjmp.S b/sysdeps/aarch64/__longjmp.S index c4c8d72e51..62849babb8 100644 --- a/sysdeps/aarch64/__longjmp.S +++ b/sysdeps/aarch64/__longjmp.S @@ -25,6 +25,11 @@ ENTRY (__longjmp) +#ifdef USE_MTAG + .arch armv8.5-a + .arch_extension memtag +#endif + #if IS_IN(libc) /* Disable ZA state of SME in libc.a and libc.so, but not in ld.so. */ CALL_LIBC_ARM_ZA_DISABLE @@ -136,6 +141,34 @@ L(gcs_done): #ifdef PTR_DEMANGLE PTR_DEMANGLE (x4, x4, x3) #endif + +#ifdef USE_MTAG +#define count x2 +#define tmp x2 + + subps count, x4, sp + beq L(tag_done) + tbz count, 4, L(tag_clean32) + stg sp, [sp], 16 +L(tag_clean32): + tbz count, 5, L(tag_clean64) + st2g sp, [sp], 32 +L(tag_clean64): + lsr count, count, 6 + cbz count, L(tag_done) + + mov tmp, sp +L(tag_loop): + st2g sp, [tmp], 32 + st2g sp, [tmp], 32 + cmp x4, tmp + bhi L(tag_loop) +L(tag_done): + +#undef count +#undef tmp +#endif + mov sp, x4 /* longjmp_target probe takes 3 arguments, address of jump buffer diff --git a/sysdeps/aarch64/tst-mte-jmp.c b/sysdeps/aarch64/tst-mte-jmp.c new file mode 100644 index 0000000000..664d872d0d --- /dev/null +++ b/sysdeps/aarch64/tst-mte-jmp.c @@ -0,0 +1,108 @@ +/* Test for longjmp when we use MTE stack sanitation. + Copyright (C) 2026 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 +#include +#include + +static jmp_buf jumpBuffer; + +/* Exception handler for MTE memory fails. */ +void +handler (int nSig) +{ + /* We hit the exception. Return error. */ + FAIL_EXIT1 ("MTE exception hit"); +} + +/* Register an exception handler. */ +static void +setHandler (void) +{ + signal (SIGSEGV, handler); +} + +/* The longjmp call is an abnormal exit, thus it lets the stack memory + mte dirty. No exception is thrown here. */ +__attribute__((noinline)) +static void +foo (void) +{ + volatile unsigned char x[15]; + volatile unsigned char *ptr = &x[0]; + + for (int i = 0; i < sizeof (x); ++i) + ptr[i] = 0xcc; + + longjmp (jumpBuffer, 1); // simulate throw +} + + +/* Reads data, from a pointer of a given size. No MTE sanitization + for this one, any dirty memory should trap here. */ +__attribute__((noinline, no_sanitize("memtag-stack"))) +static void +hwasan_read(char *p, int size) { + volatile char __attribute__ ((unused)) sink; + for (int i = 0; i < size; ++i) + sink = p[i]; +} + +/* Creates a local array, large enough to include any previously tag + dirty stack memory. */ +__attribute__((noinline, no_sanitize("memtag-stack"))) +static void +after_catch (void) +{ + char x[10000]; + hwasan_read (&x[0], sizeof(x)); +} + +__attribute__((noinline)) +static void f (void) { + if (setjmp (jumpBuffer) == 0) { + foo (); + } else { + after_catch (); + } +} + +static int +do_test (void) +{ + unsigned long hwcap2; + + hwcap2 = getauxval (AT_HWCAP2); + if ((hwcap2 & HWCAP2_MTE) == 0) + return EXIT_UNSUPPORTED; + + setHandler (); + f (); + return 0; +} + +#include diff --git a/sysdeps/aarch64/tst-mte-stack.c b/sysdeps/aarch64/tst-mte-stack.c new file mode 100644 index 0000000000..16777f0c80 --- /dev/null +++ b/sysdeps/aarch64/tst-mte-stack.c @@ -0,0 +1,74 @@ +/* Test for longjmp when we use MTE stack sanitation. + Copyright (C) 2026 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 +#include + +/* Exception handler for MTE memory fails. */ +void +handler (int nSig) +{ + /* We hit the exception. */ + exit (0); +} + +/* Register an exception handler. */ +static void +setHandler (void) +{ + signal (SIGSEGV, handler); +} + +void __attribute__((noinline)) +use (volatile unsigned char *ptr) +{ + ptr[0] = 0x41; + ptr[1] = 0x42; +} + +static int +do_test (void) +{ + volatile unsigned char array[15]; + volatile unsigned char *ptr = &array[0]; + unsigned long hwcap2; + + hwcap2 = getauxval (AT_HWCAP2); + if ((hwcap2 & HWCAP2_MTE) == 0) + return EXIT_UNSUPPORTED; + + setHandler(); + use (ptr); + + /* Write to memory beyond the 16 byte granule (offsest 0x10) MTE should + generate an exception If the offset is less than 0x10 no SIGSEGV will + occur. */ + ptr[0x10] = 0x55; + FAIL_EXIT1 ("MTE exception is not hit"); +} + +#include