From nobody Wed May 15 04:34:26 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+112769+1787277+3901457@groups.io; arc=fail (BodyHash is different from the expected one) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1703100730609973.0358167225686; Wed, 20 Dec 2023 11:32:10 -0800 (PST) Return-Path: DKIM-Signature: a=rsa-sha256; bh=LFSM026SImnz/2qBAuIFdnn0Cu+MT84dNCN2UbfG9Kk=; c=relaxed/simple; d=groups.io; h=ARC-Seal:ARC-Message-Signature:ARC-Authentication-Results:Received-SPF:From:To:CC:Subject:Date:Message-ID:MIME-Version:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Transfer-Encoding:Content-Type; s=20140610; t=1703100730; v=1; b=Jp9pBmCFIwmFc97F9ljiuk8fSF9zhKJxkXVP1S6KyIb0c+pJxATdrhMowyRRqWQuNcBB1BjY JjvOv+lDKT0DiXqHsKZo+Xi8W7Dnv9fSXjVKfh61vwqwv6BZZ1V3A+ePhX+NznH4EYG/5aVAvOI 0Jjw+esKYbdgy+RSUEwTXWXw= X-Received: by 127.0.0.2 with SMTP id GZQQYY1788612x65OZHu5Ith; Wed, 20 Dec 2023 11:32:10 -0800 X-Received: from NAM12-MW2-obe.outbound.protection.outlook.com (NAM12-MW2-obe.outbound.protection.outlook.com [40.107.244.67]) by mx.groups.io with SMTP id smtpd.web10.30497.1703100729498797104 for ; Wed, 20 Dec 2023 11:32:09 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=CLcqkfcNJRw9tJZopNaO/zV1CrI1YO0MzEhAWmYvQbLYegFyNH4UsiU7IDr+Ez1ZG5QReJns3e+LObKvsfOXy7VjIlQgTFRnjDPGViPT1XIEYJk8TIGL80b04nv6jQ01JD0YKKbK++Rt/iprcUSPWGpQs2ajoFdjK2wokhA6g9uv9R+ijcUvF+/RLHjRh1c+eSxOqrGjlMx45c2MvOvMUJURl8gaw6DvljH4OMu9e3nJ0Us0K3AY3IvLx1XKYRwwzHSKEC9xRXJBH0jySGsq/PbTy5/PuieAh76IMkblBCoOYrAX6iMZxDvEkwNTfnCjWX3G2rUN3OrS6korpLHyBQ== 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=DdmvjYydEYkWlb/xF6H7KBrb4tdNkFjsQt/Qf5u7EIk=; b=lIAhT44k8Toe42hFm3an4t534IkHLHWsZ+4W3EEivjpxtl5N4uv4aRS4zX8FZVGc3fcsg+8Aqi1rRiVIeTy3c71UoRUlsojRwPugObjYQCUyO32vOpgEnIfukAKZ22GaObchIYSLPu19Hjoji/HNIUciG85ZorSiKeV2nVFXP+7prerZhBcxbj8YUte1sql4a1T1XUYqOyZlABujfnlBANyeIf+zKk2FyVfUuRoSwBoksUtLBfMpMjGqtovEWVGwhTCOxkd39mX0T+WiKqiob73fOpp0kZ49haM4MqBd/+Lr/hBXi/iD4BjD5PKRjeD7+grrnEZq6mUVdeOfKQU8ZQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.118.232) smtp.rcpttodomain=edk2.groups.io smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) X-Received: from SN6PR05CA0034.namprd05.prod.outlook.com (2603:10b6:805:de::47) by DM6PR12MB4483.namprd12.prod.outlook.com (2603:10b6:5:2a2::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7113.18; Wed, 20 Dec 2023 19:32:05 +0000 X-Received: from SN1PEPF0002636C.namprd02.prod.outlook.com (2603:10b6:805:de:cafe::71) by SN6PR05CA0034.outlook.office365.com (2603:10b6:805:de::47) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7113.18 via Frontend Transport; Wed, 20 Dec 2023 19:32:04 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.118.232) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+112769+1787277+3901457@groups.io; helo=mail02.groups.io; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.118.232 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.118.232; helo=mail.nvidia.com; pr=C X-Received: from mail.nvidia.com (216.228.118.232) by SN1PEPF0002636C.mail.protection.outlook.com (10.167.241.137) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7113.14 via Frontend Transport; Wed, 20 Dec 2023 19:32:04 +0000 X-Received: from drhqmail203.nvidia.com (10.126.190.182) by mail.nvidia.com (10.127.129.5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41; Wed, 20 Dec 2023 11:31:51 -0800 X-Received: from drhqmail203.nvidia.com (10.126.190.182) by drhqmail203.nvidia.com (10.126.190.182) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41; Wed, 20 Dec 2023 11:31:51 -0800 X-Received: from jake-build.nvidia.com (10.127.8.11) by mail.nvidia.com (10.126.190.182) with Microsoft SMTP Server id 15.2.986.41 via Frontend Transport; Wed, 20 Dec 2023 11:31:51 -0800 From: "Jake Garver via groups.io" To: CC: , , , , , , Jake Garver Subject: [edk2-devel] [PATCH v2] BaseTools/GenFw: Correct offset when relocating an ADR Date: Wed, 20 Dec 2023 11:31:39 -0800 Message-ID: <1089e51f1e60222d591d92de518e664be7843123.1703099891.git.jake@nvidia.com> MIME-Version: 1.0 X-NVConfidentiality: public X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN1PEPF0002636C:EE_|DM6PR12MB4483:EE_ X-MS-Office365-Filtering-Correlation-Id: 713900f8-2549-4d7c-d4c9-08dc019258e9 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Message-Info: DM1QlFK3iNBRoKWhLSa37GbIGb1BE2uX1UqCKQoNwr0t0e72Q+GI/4g6UpVjorNiy3tkpquPPOYce1yJxpDgqDC06ilKfeyILfC40HdZn1mD6P9p8KEmHrodEBh1hmSNu4VQwsiAEpwOVhp30frwAAFbenCgQGngkrOf5+rK0jiDahrpsoa944iQSmbceTtmCw2ND0+/sA+eJwpQ03CyHXu66/hhjQN308qzcPJ/+JPrlgJBvcKhFoCDpXliavAHQJ1fKQSifPkRdw82QUTxjhF8WbQwBPf6WB4RrjKrS0XpN63c66fyEZeF6CCLJa9a9Le5N8DtemhIiZrDuWgGjUU+I9RBG6RWeQiOULBpXou+OhlACaE9/sNcdjxsmZ3r724LtyhjZZk0nVSBaNvfptttYR+Y/iEWo8sZXnCudLvQdDaklE0xeqwfRkPWBDxrCG7xAAVV/IOBBvOfUw9ajS2iLUu+mDQbuzQo80/2i42MZ3ng/KOH2lvIQf0BxFZGtBxW6V2BT9PzLVNajieHHIy8ls1/kifUDBPgPmLAWaya6woURwbi5P5xT+nLlLbv3JnvUCQHZTVtKgYJxPfcO2gOLB/TCoxj4E4kCheTWSuT6wRsjhg8d5C8u+UQnqm4OpVKb0/bsH5Nm4q9ky13tn3AjWCIe3oaXU5zc4+CMi8JtMMDVhK7VHa9D7ZmUiE82KrH7V5XXlZtyDgTIdn6Q+BabY2jTjzONaOzlSqCSVRXo0vOk5diypSwzB7OY1uG X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Dec 2023 19:32:04.7246 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 713900f8-2549-4d7c-d4c9-08dc019258e9 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.118.232];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: SN1PEPF0002636C.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB4483 Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,jake@nvidia.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: qpIUekHl95LGSyZHmpe8QwXzx1787277AA= Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1703100731607100003 Content-Type: text/plain; charset="utf-8" In the R_AARCH64_ADR_GOT_PAGE case on AARCH64, we may encounter an ADR instead of an ADRP when the toolchain is working around Cortex-A53 erratum #843419. If that's the case, be sure to calculate the offset appropriately. This resolves an issue experienced when building a StandaloneMm image with stack protection enabled on GCC compiled with "--enable-fix-cortex-a53-843419". This scenario sometimes generates an ADR with a R_AARCH64_ADR_GOT_PAGE relocation. In this scenario, the following code is being generated by the toolchain: # Load to set the stack canary 2ffc: 10028020 adr x0, 8000 3008: f940d400 ldr x0, [x0, #424] # Load to check the stack canary 30cc: b0000020 adrp x0, 8000 30d0: f940d400 ldr x0, [x0, #424] GenFw rewrote that to: # Load to set the stack canary 2ffc: 10000480 adr x0, 0x308c 3008: 912ec000 add x0, x0, #0xbb0 # Load to check the stack canary 30cc: f0000460 adrp x0, 0x92000 30d0: 912ec000 add x0, x0, #0xbb0 Note that we're now setting the stack canary from the wrong address, resulting in an erroneous stack fault. After this fix, the offset will be calculated correctly for an ADR and the stack canary is set correctly. Signed-off-by: Jake Garver Reviewed-by: Rebecca Cran --- Notes: v2: Implement approach proposed by Ard Biesheuvel. - title changed to: Correct offset when relocating an ADR v1: Original title: Change opcode when converting ADR to ADRP BaseTools/Source/C/GenFw/Elf64Convert.c | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/BaseTools/Source/C/GenFw/Elf64Convert.c b/BaseTools/Source/C/G= enFw/Elf64Convert.c index 9911db65af..9d04fc612e 100644 --- a/BaseTools/Source/C/GenFw/Elf64Convert.c +++ b/BaseTools/Source/C/GenFw/Elf64Convert.c @@ -1562,7 +1562,27 @@ WriteSections64 ( // subsequent LDR instruction (covered by a R_AARCH64_LD64_GOT= _LO12_NC // relocation) into an ADD instruction - this is handled above. // - Offset =3D (Sym->st_value - (Rel->r_offset & ~0xfff)) >> 12; + // In order to handle Cortex-A53 erratum #843419, the GCC tool= chain + // may convert an ADRP instruction at the end of a page (0xffc + // offset) into an ADR instruction. If so, be sure to calculat= e the + // offset for an ADR instead of ADRP. + // + if ((*(UINT32 *)Targ & BIT31) =3D=3D 0) { + // + // Calculate the offset for an ADR. + // + Offset =3D (Sym->st_value & ~0xfff) - Rel->r_offset; + if (Offset < -0x100000 || Offset > 0xfffff) { + Error (NULL, 0, 3000, "Invalid", "WriteSections64(): %s d= ue to its size (> 1 MB), unable to relocate ADR.", + mInImageName); + break; + } + } else { + // + // Calculate the offset for an ADRP. + // + Offset =3D (Sym->st_value - (Rel->r_offset & ~0xfff)) >> 12; + } =20 *(UINT32 *)Targ &=3D 0x9000001f; *(UINT32 *)Targ |=3D ((Offset & 0x1ffffc) << (5 - 2)) | ((Offs= et & 0x3) << 29); --=20 2.34.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#112769): https://edk2.groups.io/g/devel/message/112769 Mute This Topic: https://groups.io/mt/103287393/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-