From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-db3eur04on2088.outbound.protection.outlook.com [40.107.6.88]) by sourceware.org (Postfix) with ESMTPS id C12113858D1E for ; Tue, 18 Apr 2023 12:57:58 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org C12113858D1E Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=arm.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=fd5X3G7R+Rz4jnfmVk1GQx7LUUH+7VEiAheVe2GG6Jw=; b=EmITd9fDM4a9Z6/7tWEswUND8eTs1b3nKUVDuLOyxKE6thMPDMOmhz/imUJDkR5M96i851Jd8zzO10xQ/e/RemVs0abMcKo9FtOYqd6fc9UEPNM/7BP4Yykd7lPprCso7KF4Jwxf1MCNR5Nzkg6D7G3509Lxt9zyRjHxz6x48jM= Received: from DUZP191CA0046.EURP191.PROD.OUTLOOK.COM (2603:10a6:10:4f8::15) by AS8PR08MB9669.eurprd08.prod.outlook.com (2603:10a6:20b:617::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.45; Tue, 18 Apr 2023 12:57:54 +0000 Received: from DBAEUR03FT057.eop-EUR03.prod.protection.outlook.com (2603:10a6:10:4f8:cafe::23) by DUZP191CA0046.outlook.office365.com (2603:10a6:10:4f8::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.47 via Frontend Transport; Tue, 18 Apr 2023 12:57:54 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 63.35.35.123 as permitted sender) receiver=protection.outlook.com; client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com; pr=C Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by DBAEUR03FT057.mail.protection.outlook.com (100.127.142.182) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.20 via Frontend Transport; Tue, 18 Apr 2023 12:57:54 +0000 Received: ("Tessian outbound e13c2446394c:v136"); Tue, 18 Apr 2023 12:57:54 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: fc8096c10b0878ce X-CR-MTA-TID: 64aa7808 Received: from 5fccb469e2d3.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 53FDC580-9739-4FA6-A739-C712054148CF.1; Tue, 18 Apr 2023 12:57:47 +0000 Received: from EUR04-HE1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 5fccb469e2d3.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Tue, 18 Apr 2023 12:57:47 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=EsnobqppcADIys6A0cO8ogCREuGbBjii2eaLNHevFSShw90jt7qHn1BN+cn8prsUCRFuKfZw/pr8bdSKiNlkkDR7QWxP26KuVweLhr+MbGl8QS48M99hc2k4h7pNFZZSnQsUXHTW29ZMF4FygUf38QNyb3txuiLZZ7s18T6Pi/pXgnthFAloNr3Kv4GxDBZgRUIn7K5b/ed27CWEgFGztwMy8/O8wfy2MnbHFyTEVR3GA/8DJ8KZPCxqF49A5+ZQLI/1h3S1O/fSshKYBqh792oeadQyyUoYN9tZka5JFUl2Lkv31Zvgben1WBA3vul1oGFnKF6ZcctFMpVMaOrlZg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=fd5X3G7R+Rz4jnfmVk1GQx7LUUH+7VEiAheVe2GG6Jw=; b=V+ihBsa4EVC4gOKZYCmHSnDBTv7jgyD/Gk2zqIQW1BG8fgyo5QvloxXYd8XFZlOrgkGPx73m7an9BUsbkAgFT7IllZVeyTjlh1wbqe4prWVIp+IfiuSQkB0izIGrs2xXb/zyLM9azt7tsK5pZ+Imw3oebfgk4EkZhjzcFYXpGzxfiCYfPhpjAa7CzDCv8F3x6yyhGtH+iEaktm56xBfNlFU7Z2gtZQe95JizttEVUEOjd62/RkguYF//nhCCEJ1hPktvf3ItuSh0arvbeTbfs2IYDu95fj7KvBUOWg5aioMmbf9kFwc2OmfTfasXApnC2H0V1l+v/weqQ8jiRPASdw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=fd5X3G7R+Rz4jnfmVk1GQx7LUUH+7VEiAheVe2GG6Jw=; b=EmITd9fDM4a9Z6/7tWEswUND8eTs1b3nKUVDuLOyxKE6thMPDMOmhz/imUJDkR5M96i851Jd8zzO10xQ/e/RemVs0abMcKo9FtOYqd6fc9UEPNM/7BP4Yykd7lPprCso7KF4Jwxf1MCNR5Nzkg6D7G3509Lxt9zyRjHxz6x48jM= Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; Received: from DB9PR08MB7179.eurprd08.prod.outlook.com (2603:10a6:10:2cc::19) by AS2PR08MB8287.eurprd08.prod.outlook.com (2603:10a6:20b:556::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.45; Tue, 18 Apr 2023 12:57:45 +0000 Received: from DB9PR08MB7179.eurprd08.prod.outlook.com ([fe80::242d:33fe:1c48:bd8]) by DB9PR08MB7179.eurprd08.prod.outlook.com ([fe80::242d:33fe:1c48:bd8%6]) with mapi id 15.20.6298.045; Tue, 18 Apr 2023 12:57:44 +0000 Date: Tue, 18 Apr 2023 13:57:28 +0100 From: Szabolcs Nagy To: Joe Simmons-Talbott , libc-alpha@sourceware.org Subject: Re: [PATCH v4 2/2] aarch64: Set the syscall register right before doing the syscall. Message-ID: References: <20230411133004.2268170-1-josimmon@redhat.com> <20230417212034.3890596-1-josimmon@redhat.com> <20230417212034.3890596-3-josimmon@redhat.com> Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <20230417212034.3890596-3-josimmon@redhat.com> X-ClientProxiedBy: LO4P123CA0346.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:18d::9) To DB9PR08MB7179.eurprd08.prod.outlook.com (2603:10a6:10:2cc::19) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: DB9PR08MB7179:EE_|AS2PR08MB8287:EE_|DBAEUR03FT057:EE_|AS8PR08MB9669:EE_ X-MS-Office365-Filtering-Correlation-Id: ab0aed5e-7768-4173-9814-08db400c8695 x-checkrecipientrouted: true NoDisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: 4+DUAMvaEAXyYUFkrRq5cT+2VdbznD18AvHVntKLM0BOWda8Oe6xD/8ZDWQmQwISHHXMnuLd+jKrnGxvhos2M+TdQeSvQfGI1pHPY9bMJWHP+QzgWOaRsLohZhYVsw0zTZg9A2LQuzDEiqIckOsx/Q9hBhI1jT2D+CORgzS4a4ig5VXaW3H5ofC//+jPfAOaAHstzJBkzwveJSHt/Sni3cEjnLEdmkFT4VN+XIU8XdPShVKJ9zlSW4amBqy1DEI7wf7rkJsDBLgK4bGtUROsJ9qljfI0u2APWR3YR5XwldNyBaUdRifJjWTRpGqAIuOSXX4fJSx0IgX19GB0/YUQrm+82Aqw7Z+LrEZcjMA6xPuifaeBynhKqGFkUtxWv2uYypYCosm4m4xTeCU1hvH9kBRSXqH+vb5ZT/ZBNm1GL66S0vnfM5RqJriPWTj8chNA8SxjTgsIyde8GTyoNYBdlx+e0Rsf6L7oPLbg9dOSxokXYfTnV+EcQly4s139uawDta/MClOOipR5YA0tKB3c3JLOB/t60KBih8tR37ic2oM5aeNFe+k3ztKKhtYVSPnp X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DB9PR08MB7179.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(4636009)(366004)(136003)(346002)(396003)(376002)(39860400002)(451199021)(6512007)(6506007)(26005)(186003)(478600001)(6486002)(36756003)(5660300002)(6666004)(8676002)(2906002)(44832011)(8936002)(316002)(66476007)(41300700001)(86362001)(66556008)(66946007)(38100700002)(2616005)(83380400001);DIR:OUT;SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS2PR08MB8287 Original-Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DBAEUR03FT057.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 15ccb4b4-f75a-4603-d03c-08db400c7fcc X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: HI0fqeQhgLkqrOz/wqblGeXVW911oUGqATlHf8ZVs4VNiS904MKN4YNUj91aJVPgN14W3zac0kljcsnoPldAr65aAZOm1wL55NAifILAlBHsUsl2VUNiGRS5yIqNraCpkWhzQl/poT83rUoDOTkNm6YQ+LSUiaXv2aa25poMiGdpWVcesTIUWcD3oGbyLtDjnLr01rz8oAiB/uNWVymGbPZecqqN8muGkkPP8Xuyf+RC78sOO7GTx5P+qhEW7vpWzAy/Kb4GO6LQn9mPwdQxUsFhbnu6eynTQiJbb2LtXG8iRDU3enaEEXKsqnX1M+z7F5HY/7AiMHqqmRe9sIrSJz1cuLqs6i1tunltrF1s0rnHt0ot05VpRkt52H/CQ0XLUi885gQiIQ9TN/BOYhye3/cFshtcrIjA7ruaNOEwv9lI1nsm2Yzn4O0gdxaoyMOkV4MBLPYw/6B4hQsQvkYA/GZvoN6xRDoYinPRPCrDnS+U8UcwZfvX/FE8MStivx12IS16DUzaRNUjM7RJYuCP9oESQqagG3Um6vWJfwzcKKz85dbNp1K5GajPEN41zESBxpiZA8Ix5EVp0m5rocEt0WDRo0KM2T0egKz8X7f58ppvlrbgc4TIkrTgGZebtPWAyPFR2/YWv2E+pL7mK91UcFLtGtoNhN1+LJEVkO/H6K9Apl0mCZ84VeDrH5SQjJzU8+Y0Yep2x6geHvYZANYsTQ== X-Forefront-Antispam-Report: CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(13230028)(4636009)(396003)(39860400002)(136003)(376002)(346002)(451199021)(46966006)(36840700001)(40470700004)(478600001)(6666004)(8936002)(8676002)(316002)(41300700001)(82740400003)(70586007)(70206006)(40480700001)(81166007)(356005)(40460700003)(186003)(2906002)(6512007)(336012)(26005)(6506007)(86362001)(83380400001)(36756003)(47076005)(82310400005)(2616005)(36860700001)(5660300002)(6486002)(44832011);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Apr 2023 12:57:54.4793 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ab0aed5e-7768-4173-9814-08db400c8695 X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-AuthSource: DBAEUR03FT057.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB9669 X-Spam-Status: No, score=-11.7 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,FORGED_SPF_HELO,GIT_PATCH_0,KAM_DMARC_NONE,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_NONE,TXREP,T_SCC_BODY_TEXT_LINE,UNPARSEABLE_RELAY autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: The 04/17/2023 17:20, Joe Simmons-Talbott via Libc-alpha wrote: > To make identifying syscalls easier during call tree analysis load the > syscall number just before performing the syscall. > > Compiler optimizations can place quite a few instructions between the > setting of the syscall number and the syscall instruction. During call > tree analysis the number of instructions between the two can lead to > more difficulty for both tools and humans in properly identifying the > syscall number. Having the syscall number set in the prior instruction > to the syscall instruction makes this task easier and less error prone. > Being able to reliably identify syscalls made by a given API will make > it easier to understand and verify the safety and security of glibc. since the code has !__builtin_constant_p(name) case how would that be handled by these tools? > --- > sysdeps/unix/sysv/linux/aarch64/sysdep.h | 20 +++++++++++++++++--- > 1 file changed, 17 insertions(+), 3 deletions(-) > > diff --git a/sysdeps/unix/sysv/linux/aarch64/sysdep.h b/sysdeps/unix/sysv/linux/aarch64/sysdep.h > index e94d1703ad..b91656fdff 100644 > --- a/sysdeps/unix/sysv/linux/aarch64/sysdep.h > +++ b/sysdeps/unix/sysv/linux/aarch64/sysdep.h > @@ -167,14 +167,28 @@ > > # define HAVE_CLONE3_WRAPPER 1 > > +# define MSTR_HELPER(x) # x > +# define MSTR(x) MSTR_HELPER(x) > + i dont see this used. > # undef INTERNAL_SYSCALL_RAW > # define INTERNAL_SYSCALL_RAW(name, nr, args...) \ > ({ long _sys_result; \ > { \ > LOAD_ARGS_##nr (args) \ > - register long _x8 asm ("x8") = (name); \ > - asm volatile ("svc 0 // syscall " # name \ > - : "=r" (_x0) : "r"(_x8) ASM_ARGS_##nr : "memory"); \ > + if (__builtin_constant_p(name)) \ > + asm volatile ("mov x8, %1\n" \ > + "svc 0 // syscall " # name \ > + : "=r" (_x0) \ > + : "i" (name) ASM_ARGS_##nr \ > + : "x8", "memory"); \ > + else \ > + { \ > + register long _x8 asm ("x8") = (name); \ > + asm volatile ("svc 0 // syscall " # name \ > + : "=r" (_x0) \ > + : "r"(_x8) ASM_ARGS_##nr \ > + : "memory"); \ > + } \ > _sys_result = _x0; \ > } \ > _sys_result; }) i guess this is ok. i would probably move the generated comment to the mov x8,%1 line and remove it in the non-const case. but i rarely look at compiler output.. it seems the only cases when the name is non-const are nptl/nptl_setxid.c: result = INTERNAL_SYSCALL_NCS (xidcmd->syscall_no, 3, xidcmd->id[0], nptl/nptl_setxid.c: result = INTERNAL_SYSCALL_NCS (cmdp->syscall_no, 3, which in turn only happens for syscalls sysdeps/unix/sysv/linux/setuid.c: return INLINE_SETXID_SYSCALL (setuid32, 1, uid); sysdeps/unix/sysv/linux/setuid.c: return INLINE_SETXID_SYSCALL (setuid, 1, uid); sysdeps/unix/sysv/linux/setreuid.c: return INLINE_SETXID_SYSCALL (setreuid32, 2, ruid, euid); sysdeps/unix/sysv/linux/setreuid.c: return INLINE_SETXID_SYSCALL (setreuid, 2, ruid, euid); sysdeps/unix/sysv/linux/setegid.c: result = INLINE_SETXID_SYSCALL (setresgid32, 3, -1, gid, -1); sysdeps/unix/sysv/linux/setegid.c: result = INLINE_SETXID_SYSCALL (setresgid, 3, -1, gid, -1); sysdeps/unix/sysv/linux/setregid.c: return INLINE_SETXID_SYSCALL (setregid32, 2, rgid, egid); sysdeps/unix/sysv/linux/setregid.c: return INLINE_SETXID_SYSCALL (setregid, 2, rgid, egid); sysdeps/unix/sysv/linux/setgid.c: return INLINE_SETXID_SYSCALL (setgid32, 1, gid); sysdeps/unix/sysv/linux/setgid.c: return INLINE_SETXID_SYSCALL (setgid, 1, gid); sysdeps/unix/sysv/linux/setgroups.c: return INLINE_SETXID_SYSCALL (setgroups32, 2, n, groups); sysdeps/unix/sysv/linux/setgroups.c: return INLINE_SETXID_SYSCALL (setgroups, 2, n, groups); sysdeps/unix/sysv/linux/setresgid.c: return INLINE_SETXID_SYSCALL (setresgid32, 3, rgid, egid, sgid); sysdeps/unix/sysv/linux/setresgid.c: return INLINE_SETXID_SYSCALL (setresgid, 3, rgid, egid, sgid); sysdeps/unix/sysv/linux/setresuid.c: return INLINE_SETXID_SYSCALL (setresuid32, 3, ruid, euid, suid); sysdeps/unix/sysv/linux/setresuid.c: return INLINE_SETXID_SYSCALL (setresuid, 3, ruid, euid, suid); sysdeps/unix/sysv/linux/seteuid.c: result = INLINE_SETXID_SYSCALL (setresuid32, 3, -1, uid, -1); sysdeps/unix/sysv/linux/seteuid.c: result = INLINE_SETXID_SYSCALL (setresuid, 3, -1, uid, -1); so if we wanted we could have a switch statement in setxid and make all syscalls compile time const (other than explicit external calls to syscall())