From nobody Sun May 19 05:22:48 2024 Delivered-To: importer@patchew.org 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+75033+1787277+3901457@groups.io; helo=mail02.groups.io; 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+75033+1787277+3901457@groups.io; arc=fail (BodyHash is different from the expected one); dmarc=fail(p=none dis=none) header.from=amd.com Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1620766244731511.2565552952335; Tue, 11 May 2021 13:50:44 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id PPW0YY1788612xZTLPq8Wqkm; Tue, 11 May 2021 13:50:44 -0700 X-Received: from NAM11-CO1-obe.outbound.protection.outlook.com (NAM11-CO1-obe.outbound.protection.outlook.com [40.107.220.54]) by mx.groups.io with SMTP id smtpd.web10.2876.1620766243173228967 for ; Tue, 11 May 2021 13:50:43 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=HnfWBe0e5uoTBXFRkDN20D8OIInXSQd7Y4S272y8YgMDffpSwlPd+07HKmknJuNV711radnhUWUTua3Z+jwHREz3mMT+ruFAOEMJ+Dxq5toH14Rlq5IzLp9AYAa9yUEdweSKZTgjjptLJCDe2AuYQpXtfq4iz+S8Xuetv0SGuziFlTXkNOfcjmbdRi+1+YYsVzEbcRt2Y16UsprctnIU2t5Gz6OzAMfYJ7c5iYThkgPW5ZjZ3OrPduCtVuRGmzFRmlxzd5kPpdI4rw6qB1nwOFX/7ZtvYXGf70WgarNtUMLrjDPwnD5B1myLAIuzIhYBZ9S0LepnSEPRcGCR2+AQdw== 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-SenderADCheck; bh=FzuZ/cREd6PwWNwmW1VSrMfQK2bT1I6/e82MXifTbyw=; b=T0giytPcTCwb31ug++d1FzeCRkZQPcEpke1IbZOUc6AhRMB51yWF/CwVN9nAJFRyZrqU+SPJgsOxLje+Bcstf7KU35Vo28Id6AGWIHNrMjE96mWw+0kDq1M5geaTcjjaNV6PLuoa/8hyX958cAQf0bAHGwOBhZVXsuRzPgPYqcBhiTewPrZDOwhxYbuQPfSh/PgHEMDHklmZndsnuUs++hD2e0tlOk/AxSoWHlZy+7Ws4se8NdbL30sBiJzTwMiWzJ4wP6pU8VmDQDWGyv9+FFS7O5wH2KEchEQAJRj2GjUtMqEdAYJWpUfJwiyFGnOZ1y0zaKso9v++nGD7q23UDA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none X-Received: from DM5PR12MB1355.namprd12.prod.outlook.com (2603:10b6:3:6e::7) by DM6PR12MB2891.namprd12.prod.outlook.com (2603:10b6:5:188::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4108.30; Tue, 11 May 2021 20:50:39 +0000 X-Received: from DM5PR12MB1355.namprd12.prod.outlook.com ([fe80::b914:4704:ad6f:aba9]) by DM5PR12MB1355.namprd12.prod.outlook.com ([fe80::b914:4704:ad6f:aba9%12]) with mapi id 15.20.4129.025; Tue, 11 May 2021 20:50:39 +0000 From: "Lendacky, Thomas" To: devel@edk2.groups.io CC: Brijesh Singh , Eric Dong , Ray Ni , Laszlo Ersek , Rahul Kumar Subject: [edk2-devel] [PATCH] UefiCpuPkg/MpInitLib: Allocate a separate SEV-ES AP reset stack area Date: Tue, 11 May 2021 15:50:24 -0500 Message-ID: <1162d1f4fe09048aaafba6f6ea3046bebd34fc2b.1620766224.git.thomas.lendacky@amd.com> X-Originating-IP: [165.204.77.1] X-ClientProxiedBy: SN4PR0201CA0032.namprd02.prod.outlook.com (2603:10b6:803:2e::18) To DM5PR12MB1355.namprd12.prod.outlook.com (2603:10b6:3:6e::7) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-Received: from tlendack-t1.amd.com (165.204.77.1) by SN4PR0201CA0032.namprd02.prod.outlook.com (2603:10b6:803:2e::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4129.25 via Frontend Transport; Tue, 11 May 2021 20:50:38 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: deb77862-2ae5-4d6b-3ca8-08d914be6f31 X-MS-TrafficTypeDiagnostic: DM6PR12MB2891: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:10000; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam-Message-Info: Q+tnpXAVD7cFFF9RtnYETBP+UlyV4t7NzdL4THvip2WuQj/W8UsKP/IFWpUAzC6HCa2iIQkDkQclf6GLZqhPRKl20szeXAFelrv2uq9owGAueopfSAUtNkIqxnGi/QXWGYKgRDaeAP7I/yZwSYoEnpLIBa3ih0vDrvIYB8KE6fhIPyNOS0PAFxqkE2ZoOJGqgxoEpb+X6QopZYFc3rTVmBMArRhMTp9yhGAxL6KFMVmS78QYx0DOiMRIIkIJcQDdJh7Ks/AAIilWXUsxSAQXcDcbQ9lP8Z1rDw+5icu8JauVzxTsoK8CYl0cOmrU6oGXT0xfuviEJ8GhFWCPhkXWywUQz5L++6kS87UqREIDR0dY6gBtsmUy5DINRMAHocdRIQVZhM5hnwAIhqgVXTpJxQkV1cFcAz8m6Va8FR6m+z6Uh5nMWQmvNb1D4ldtgsotgHhbaAKUMr0eDW6VSW2N9ODy1MP0h184603DSr8lh+j5yTYyiG5ksouFNsfd7pMJm35NH86huN51FkdXdurg+QsE0ReU+AmlYHuzQf/hqOvyX9dyCkOBo73kfNRlncCzbXGJXuFVsp+Wc7cxBVaz2mhE11zvebHT+Zsgjh1d/rtSZAy5yCKwUz+vUEVIGG0+SrJNdmRkVBu/5DFzXEPBxc1WyzCCf/gNQxKyqw1pvefJBSBPdPwKgGL+f5DyIRExH0OC9/9ul7/jIX008RENQD4DmhQBuLjo/smH27YhU1c6JU/xIexTbNET1tKfg91z X-MS-Exchange-AntiSpam-MessageData: =?us-ascii?Q?Ihuqn++hBDcECTAixUik0678RAmEHMwWkm9maCI7hMjfeb5I90gAT/57k6nQ?= =?us-ascii?Q?5a3SI832D94OSK9K2uEyonxyHLh5ZipHw/+SRiUkC+vvEay1qUOEUWWq5fCV?= =?us-ascii?Q?QVLogPSKSznH0NJqwSPf/UYbGF+9ZyplHu5XxniYGkyKJKelgDvMhmCg8iUV?= =?us-ascii?Q?brVeK549sJfNdiC1wm+eD8YLNL0m67IwTABgQ50DpRbBoD3Hf9M8hoD9VAsg?= =?us-ascii?Q?kzf9zIuG+Z9KP3CVo9xtiI/9QoOhr41qt9XfaT8ZZDEQT4ou3BYLw9cu54IY?= =?us-ascii?Q?9Rb6QacHBVuwtb5QhGRZ1ly5WwXE0vbKA9WdigklxAPHkDxvfH57RfQaJ2ot?= =?us-ascii?Q?kHgtThk6Ub/FGKDU6MzyD1j+F8vlpTI5AgIsVVHTNXznMAYPaAo20cM17NC0?= =?us-ascii?Q?whNy5Ckl3SOpaFXTyAa3mz+aBJ+zio7c5e2JejNocnggxV9AO1S51XdWBmPx?= =?us-ascii?Q?1w5vm1YP+94bRithAopyWP/Su0+naGolNL1uOy2XKZLtDY9isqck25HTByFx?= =?us-ascii?Q?oX9qfbjK7WlLVe9Y3ioUL+SKfQyQsNCh1Fe046XDraU4NUApHsTno6GLQ7jR?= =?us-ascii?Q?/YKjYC9TFMOBjs6P78VemgLyaG7x4bQLAcWpY6aPyRQ4IH4DDXNIzklC8Uax?= =?us-ascii?Q?mAU5s81SPituG5WNJRuWCfLf+BSwlg2Nxn1ZPAP+ShnxBQrvQlLZP/+cP9K2?= =?us-ascii?Q?gkBTgR+8DxagdJac0jO72uCOYCbRCUysgo6cMgssmAriAmpUKFSfS4pvOH+Z?= =?us-ascii?Q?0IjzfO6aDANeO/W1mNRB/JGQDeDIQpG1RDmLhUN7ORIndBCmMp+hfguRiBpy?= =?us-ascii?Q?s3MTdw3hzMYrIn0Tk4ZtBbQMnfJLw8FpBpWdLi+VYbuooCVxp+BploA5SwgN?= =?us-ascii?Q?AmTDjeVuI0Bz4PoixGeOYZ7kLrYwt+VO15/gzlCEDiJFFnmDemgHp/3kMvwk?= =?us-ascii?Q?e+lBCp5UWq0sFxxZJ0/LID3A/yZuqAoATHhQd+Ug0OviGwYUqr8CsIKYDGkX?= =?us-ascii?Q?PchftckV8+138VyCRPiGGoE1JPUraZQVj6McTFsNELrHl1YkIxEskHHAemlR?= =?us-ascii?Q?M1C1PAeBk/mzk9etD7dcGXfGqlUaGQiy8U7vUO964KedLQLlzQNcELPjicip?= =?us-ascii?Q?7XcpDyGTH43DkuIKYK1b4MI15LnTMWR0fQ2pyLaEt4sbSfgDmbnKPVGa6ghh?= =?us-ascii?Q?XktLy9EZcF+aviunREVpixcxDcwRSbnH28/DA48kiORSYT55VfhTy89kicHY?= =?us-ascii?Q?6ayti2ztU/HDZi2Dc8wwRq1yqIrJVYLWzXCQkuR32pcL6d+KDnpX2fX3E+Jk?= =?us-ascii?Q?l9cQP6CrDLN0suXmPfz4wHQG?= X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: deb77862-2ae5-4d6b-3ca8-08d914be6f31 X-MS-Exchange-CrossTenant-AuthSource: DM5PR12MB1355.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 May 2021 20:50:39.3674 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 5Yfaym/8rCPDJIQrT7YNEkO9B6Psok75qneCa1Q8rtK8cdotK0t2ZUrZHHqjlVsHGJtSdJtjPbP38nnScu8ZyA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB2891 Precedence: Bulk List-Unsubscribe: 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,thomas.lendacky@amd.com X-Gm-Message-State: xy4PLucR0E9DcEZGsZS5dS4wx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1620766244; bh=TPBzUJ2SHTxf7sM+OXEhrZ1zCcMMNaPBnM9Djm7K7GA=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=lM9btLqNN7Ul6PtJVh8ibcMRbIIOjh80XXwUCs8mhkIK8cEGGgRqaW8go29bpXQOGVM kq7lYIMlMZEA5hsdFqJxcTacYe0GJMzPUbZDhYPb6lV1sHCtojbzyqs4hMjqluJmxe6jC 7a6KLRVFW092SFYx+XeSzRLhDTs5VuNqIl0= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3D3324 The SEV-ES stacks currently share a page with the reset code and data. Separate the SEV-ES stacks from the reset vector code and data to avoid possible stack overflows from overwriting the code and/or data. When SEV-ES is enabled, invoke the GetWakeupBuffer() routine a second time to allocate a new area, below the reset vector and data. Both the PEI and DXE versions of GetWakeupBuffer() are changed to track the previous reset buffer allocation in order to ensure that the new buffer allocation is below the previous allocation. Fixes: 7b7508ad784d16a5208c8d12dff43aef6df0835b Cc: Eric Dong Cc: Ray Ni Cc: Laszlo Ersek Cc: Rahul Kumar Signed-off-by: Tom Lendacky --- UefiCpuPkg/Library/MpInitLib/DxeMpLib.c | 12 ++++- UefiCpuPkg/Library/MpInitLib/MpLib.c | 48 +++++++++++++------- UefiCpuPkg/Library/MpInitLib/PeiMpLib.c | 14 ++++-- 3 files changed, 54 insertions(+), 20 deletions(-) diff --git a/UefiCpuPkg/Library/MpInitLib/DxeMpLib.c b/UefiCpuPkg/Library/M= pInitLib/DxeMpLib.c index 7839c249760e..fdfa0755d37a 100644 --- a/UefiCpuPkg/Library/MpInitLib/DxeMpLib.c +++ b/UefiCpuPkg/Library/MpInitLib/DxeMpLib.c @@ -29,6 +29,11 @@ VOID *mReservedApLoopFunc =3D NULL; UINTN mReservedTopOfApStack; volatile UINT32 mNumberToFinish =3D 0; =20 +// +// Begin wakeup buffer allocation below 0x88000 +// +STATIC EFI_PHYSICAL_ADDRESS mWakeupBuffer =3D 0x88000; + /** Enable Debug Agent to support source debugging on AP function. =20 @@ -102,7 +107,7 @@ GetWakeupBuffer ( // LagacyBios driver depends on CPU Arch protocol which guarantees below // allocation runs earlier than LegacyBios driver. // - StartAddress =3D 0x88000; + StartAddress =3D mWakeupBuffer; Status =3D gBS->AllocatePages ( AllocateMaxAddress, MemoryType, @@ -112,6 +117,11 @@ GetWakeupBuffer ( ASSERT_EFI_ERROR (Status); if (EFI_ERROR (Status)) { StartAddress =3D (EFI_PHYSICAL_ADDRESS) -1; + } else { + // + // Next wakeup buffer allocation must be below this allocation + // + mWakeupBuffer =3D StartAddress; } =20 DEBUG ((DEBUG_INFO, "WakeupBufferStart =3D %x, WakeupBufferSize =3D %x\n= ", diff --git a/UefiCpuPkg/Library/MpInitLib/MpLib.c b/UefiCpuPkg/Library/MpIn= itLib/MpLib.c index dc2a54aa31e8..a76dae437606 100644 --- a/UefiCpuPkg/Library/MpInitLib/MpLib.c +++ b/UefiCpuPkg/Library/MpInitLib/MpLib.c @@ -1164,20 +1164,6 @@ GetApResetVectorSize ( AddressMap->SwitchToRealSize + sizeof (MP_CPU_EXCHANGE_INFO); =20 - // - // The AP reset stack is only used by SEV-ES guests. Do not add to the - // allocation if SEV-ES is not enabled. - // - if (PcdGetBool (PcdSevEsIsEnabled)) { - // - // Stack location is based on APIC ID, so use the total number of - // processors for calculating the total stack area. - // - Size +=3D AP_RESET_STACK_SIZE * PcdGet32 (PcdCpuMaxLogicalProcessorNum= ber); - - Size =3D ALIGN_VALUE (Size, CPU_STACK_ALIGNMENT); - } - return Size; } =20 @@ -1207,9 +1193,39 @@ AllocateResetVector ( CpuMpData->AddressMap.ModeTransitionOf= fset ); // - // The reset stack starts at the end of the buffer. + // The AP reset stack is only used by SEV-ES guests. Do not allocate it + // if SEV-ES is not enabled. // - CpuMpData->SevEsAPResetStackStart =3D CpuMpData->WakeupBuffer + ApRese= tVectorSize; + if (PcdGetBool (PcdSevEsIsEnabled)) { + UINTN ApResetStackSize; + + // + // Stack location is based on ProcessorNumber, so use the total numb= er + // of processors for calculating the total stack area. + // + ApResetStackSize =3D AP_RESET_STACK_SIZE * + PcdGet32 (PcdCpuMaxLogicalProcessorNumber); + + // + // Invoke GetWakeupBuffer a second time to allocate the stack area + // below 1MB. The returned buffer will be page aligned and sized and + // below the previously allocated buffer. + // + CpuMpData->SevEsAPResetStackStart =3D GetWakeupBuffer (ApResetStackS= ize); + + // + // Check to be sure that the "allocate below" behavior hasn't change= d. + // This will also catch a failed allocation, as "-1" is returned on + // failure. + // + if (CpuMpData->SevEsAPResetStackStart >=3D CpuMpData->WakeupBuffer) { + DEBUG ((DEBUG_ERROR, + "SEV-ES AP reset stack is not below wakeup buffer\n")); + + ASSERT (FALSE); + CpuDeadLoop (); + } + } } BackupAndPrepareWakeupBuffer (CpuMpData); } diff --git a/UefiCpuPkg/Library/MpInitLib/PeiMpLib.c b/UefiCpuPkg/Library/M= pInitLib/PeiMpLib.c index 3989bd6a7a9f..4d09e89b4128 100644 --- a/UefiCpuPkg/Library/MpInitLib/PeiMpLib.c +++ b/UefiCpuPkg/Library/MpInitLib/PeiMpLib.c @@ -11,6 +11,8 @@ #include #include =20 +STATIC UINT64 mWakeupBuffer =3D BASE_1MB; + /** S3 SMM Init Done notification function. =20 @@ -220,11 +222,11 @@ GetWakeupBuffer ( // Need memory under 1MB to be collected here // WakeupBufferEnd =3D Hob.ResourceDescriptor->PhysicalStart + Hob.Re= sourceDescriptor->ResourceLength; - if (WakeupBufferEnd > BASE_1MB) { + if (WakeupBufferEnd > mWakeupBuffer) { // - // Wakeup buffer should be under 1MB + // Wakeup buffer should be under 1MB and under the previous one // - WakeupBufferEnd =3D BASE_1MB; + WakeupBufferEnd =3D mWakeupBuffer; } while (WakeupBufferEnd > WakeupBufferSize) { // @@ -244,6 +246,12 @@ GetWakeupBuffer ( } DEBUG ((DEBUG_INFO, "WakeupBufferStart =3D %x, WakeupBufferSize = =3D %x\n", WakeupBufferStart, WakeupBufferSize)); + + // + // Next wakeup buffer allocation must be below this allocation + // + mWakeupBuffer =3D WakeupBufferStart; + return (UINTN)WakeupBufferStart; } } --=20 2.31.0 -=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 (#75033): https://edk2.groups.io/g/devel/message/75033 Mute This Topic: https://groups.io/mt/82757192/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-