From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from NAM12-MW2-obe.outbound.protection.outlook.com (NAM12-MW2-obe.outbound.protection.outlook.com [40.107.244.69]) by mx.groups.io with SMTP id smtpd.web12.41.1622070706319079661 for ; Wed, 26 May 2021 16:11:46 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="body hash did not verify" header.i=@amd.com header.s=selector1 header.b=YA9IO4BT; spf=permerror, err=parse error for token &{10 18 %{i}._ip.%{h}._ehlo.%{d}._spf.vali.email}: invalid domain name (domain: amd.com, ip: 40.107.244.69, mailfrom: brijesh.singh@amd.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=CREqDtdSPUf42JYcLWtVHWkCeLbgqiXupjUGIu7pZnR7uVY6K63c2k0zb98ChgsSaMj8H94cNaVlInCgbG4rX0LYC+X4XtSbQEyd/eeVqRdiAZN5fPI6aowNg6TOnSryGgY+JptHYMPA/QntxYaz6xUWXx4Byxg153mwwUXI8IU2Nev3GN1O8YBhmZx9C8zr2odhruNR65nKlgQVsksH/gucIyltlzxVJPJlToakNe+GRSlyMDQO09tIZokZFEhiGJYCpMOcjSRiFEruKXkpAOtOsbm1L15lg4lqX2gwxQkA/S94UGtf5uoL1K5OcuyPwp3+a0jcxSy1AtXsMXpeVw== 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=11ypd/mbF07B2Wof0lf+pDoF3GZewoY1P3P3R+DTz6w=; b=ocqtgwsgaufPp5D7GVU6qG6Y4Ktk/xDHJF4hBV/TOIJgu/R9mcl9UazVVQy1rIp6c2/dFy7LXoWi5HC9eop1UUhPRSVJXavMEvNcB7dAUJFWvG7gUnUmCyyyILCHfDmRmC8wSi1boU3AVcqOL1oAlpeeY0fDQKSTYLSSSglNFQHB+5vBBfXjwCEKs8321PUqEU7XBABmptU5K6prAb5rc5qBIIgePmhGZ086uXCS2FfHN8XPZSADt466BmMUVTGnvc3N+Fi7H7/4GH3JesbfeEhfhEiujXJ1W4pfXDg5aIo8xFWXf8Sq2PwNrOffbSfSgtb8k3DnmgMxVaXnwHCuEA== 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 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=11ypd/mbF07B2Wof0lf+pDoF3GZewoY1P3P3R+DTz6w=; b=YA9IO4BTjHh0yBraqq5kX6GkqmEmpHoEQwkt8oZD8wMYdrPKTsmlWHdVyKTGqHNwAn9km/jcSCX2fCfofDRoalNagUiWhNQASHjxWUoiAh83SGeSCKhsTiB/OT+aGyaG+s1YurhyZQlTZ1eh9B22yYqrdMTpDYGAVSyXfFy1pjU= Authentication-Results: linux.ibm.com; dkim=none (message not signed) header.d=none;linux.ibm.com; dmarc=none action=none header.from=amd.com; Received: from SN6PR12MB2718.namprd12.prod.outlook.com (2603:10b6:805:6f::22) by SA0PR12MB4512.namprd12.prod.outlook.com (2603:10b6:806:71::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4173.21; Wed, 26 May 2021 23:11:44 +0000 Received: from SN6PR12MB2718.namprd12.prod.outlook.com ([fe80::9898:5b48:a062:db94]) by SN6PR12MB2718.namprd12.prod.outlook.com ([fe80::9898:5b48:a062:db94%6]) with mapi id 15.20.4150.023; Wed, 26 May 2021 23:11:44 +0000 From: "Brijesh Singh" To: James Bottomley , Min Xu , Jiewen Yao , Tom Lendacky , Jordan Justen , Laszlo Ersek , Erdem Aktas , Eric Dong , Ray Ni , Rahul Kumar , devel@edk2.groups.io CC: Brijesh Singh , Ard Biesheuvel Subject: [PATCH RFC v3 09/22] OvmfPkg: add library to support registering GHCB GPA Date: Wed, 26 May 2021 18:11:05 -0500 Message-ID: <20210526231118.12946-10-brijesh.singh@amd.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210526231118.12946-1-brijesh.singh@amd.com> References: <20210526231118.12946-1-brijesh.singh@amd.com> X-Originating-IP: [165.204.77.1] X-ClientProxiedBy: SA0PR11CA0202.namprd11.prod.outlook.com (2603:10b6:806:1bc::27) To SN6PR12MB2718.namprd12.prod.outlook.com (2603:10b6:805:6f::22) Return-Path: brijesh.singh@amd.com MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from sbrijesh-desktop.amd.com (165.204.77.1) by SA0PR11CA0202.namprd11.prod.outlook.com (2603:10b6:806:1bc::27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4173.21 via Frontend Transport; Wed, 26 May 2021 23:11:43 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: a612d546-4e34-42c4-d2e9-08d9209ba0cd X-MS-TrafficTypeDiagnostic: SA0PR12MB4512: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:9508; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: T+Gc18Yol8ZUEf8cTGa/hEQpEn9zYOTg1j1G9smT+e5k3lXzHYxx+vNo6fyRJJDk4ah08TIr9L7lWS5PFyIzhEH8ZWEq4A7s9Mb7tRzw2w8rd5FVtOXsCeRAm1b2nVT/qLqHv0uuJtxexDa0h72j7ldoHErHXyEg7oPzPYKWkdGp4kbxdyeBhy6fS59aWJpc4r55+KHRTzKFDjdpgstuaKwsbkAkYrQldQ0RNZyTJCQHrsXmCbiG39+6xhzaABFG0IKfqGCYvM3spj0L8Ob5CveLJpLBrsZW3Uumg2FKkNfVIjjybgps5V0rMJtLbC/qGrIUrL8Mm7C8W+tcoDu7TQN8cx0BshXkseVdK05xGm9IKSob0YTo1BmDYRSpw+TWxeHzwbyVSd/gMjOcY0y4DI538cXYoB6xR0fefTAW3DCDfjO7ybh7w0PLhqf2wLUa/R1nXbFY8rUFixqdGfm170A55uTYKVKurfqMv/Lt2ujySJOAtCwU+OrveV0VjUhXJaZSL5h6fn3rQd8iu0HWvgpjFM1+aU+wtdoBG/cpAOSlW6dz4xrN2H1Vxq2zdz923eATfoj4wQFCRguP6/8qIemLPbxZ3ft0VS4XmBfIwCyBFI06neKb8tsL0EO8OTnZP9k4bPIvC9knR3zOIsG2Ssd20IRTH1JQFgjhnLN4iAMbE9EVx129lmjyuU+v0gKJSJCvve+7XIZli3t4e8hKPtJYc2bK1edX/89guM1v/MrxlyD/dy8vLG78lOWNiAuJnjkuGekfJ98Ev/Y+aQLTUdKg3M2iO/lQIDsXajooaeY= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SN6PR12MB2718.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(136003)(39860400002)(346002)(396003)(376002)(366004)(26005)(38100700002)(38350700002)(52116002)(19627235002)(4326008)(921005)(8936002)(86362001)(8676002)(7696005)(36756003)(66476007)(66556008)(66946007)(6666004)(316002)(956004)(16526019)(186003)(6486002)(2616005)(83380400001)(2906002)(7416002)(1076003)(44832011)(54906003)(5660300002)(110136005)(478600001)(966005);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData: =?us-ascii?Q?zF5M5OfV8ckfWdBcPLKUc5/HnuUcZjKMBbFY6UsO0FS968CVCSZTIWRwPVeL?= =?us-ascii?Q?4E7A/8nphvESHAOw+6HmONv8SZDuYt2SvvKhPN3EoHTOj2o1rKfeyFFhRE/7?= =?us-ascii?Q?4jnTiT70P9DZnI/3AEnzRICHBg4oYUn9UUoARNiDkO1KUF2QqQa5YYIVBEEx?= =?us-ascii?Q?xTGAHL+KZc4iuHAm1Qbz9jrZ50+AhwFnza9duPnOCiGSf1Mu+hBquZiiR0SV?= =?us-ascii?Q?dy1tFqFMcspJ9KCKqhjzY4ARAHLr7/2kObfRCFZv3piEpBGa4Y+0BYdWLxDz?= =?us-ascii?Q?60IMKK2OOiy/d0TsmSVgfc7LpDJAtqfuEn/vcyOvr4kCDGKwOwgFgpMxROEe?= =?us-ascii?Q?rXFo6rv1PGje4T+B3FdLZDIsz00NYR/G+3GhldcyTTFjdN3YNkKcXKr9fPjs?= =?us-ascii?Q?iBOcqOm/cRywlXueEv2NwplBkxB/PfA33Gcq42ir47gGnFD7XT/1vd+QdMUX?= =?us-ascii?Q?3I0TWTH66jVM8GT4+cYNnaWFe35re10IP2BsxsFaHYC1JrWoNKdQ1bIGgIxh?= =?us-ascii?Q?m17E8bduapspqZi/9+h3+uKy9Joo25yOUBzhqLdtUSCuzVS1W89A86IDbNRn?= =?us-ascii?Q?iEThflGav6QaY38wQ3LCXgEfGopvb3161ZhaUHhsQkghxwm8c01zXalQyPEF?= =?us-ascii?Q?h/8TAPdb107YbNvTT4UVUBht5x5oz+IPY8zl0yf+AR3bQxGY/h1/rrGBTBGk?= =?us-ascii?Q?Khkgi6eBPVDKtiHOPVb4SQ29Em5dWBnYvfjglK0Zh8tk7lENQgfia+58Ldqt?= =?us-ascii?Q?yvC8+6UHs5iIozr+LLSSWwSV0Z1hLBUcOUqfby5OSBvAqZ+xMR7fw+Dc7F+O?= =?us-ascii?Q?LS9fF6N4nS2tX5OiUGEHCEpdC6eflTjqEMWZoY8lyTrdukLSR+eBvCOkDtpa?= =?us-ascii?Q?oOhDkANc3u2kAcwNhtBMSffJIK14eSAKLXNgexVUZ92rW2BxY5pw6fpLYKXu?= =?us-ascii?Q?1WM4++YtK2serWpQWFqaw6y4ySzD2YiBCL8QE0cQE4eQXngxcSDwgVpigt+6?= =?us-ascii?Q?ZGZTUYURTDrwlFJytYJ4JzJDzDWopbdRfIX4lUsUDMQCa8SxQ/JMJwP9+QOA?= =?us-ascii?Q?wj7mPalTGELNDBnO9LzW7QSA8Z/Sc2HFpDJ3ahHagHu8fzTny43zqscEcmeV?= =?us-ascii?Q?R2ap+bT45lTK3i+m7GPYohCUA8+NSh2qK99Ia02cknhIFNQWiHrmSANft1bR?= =?us-ascii?Q?WLFT6mHYX1NehnIhIlcRjGq1i7wryaOjNk12iGUkGEsx4MXP8LE3H0Lqu3+m?= =?us-ascii?Q?jpMXGRiMqcjYw0Qy+sS4tcwlQL6zBmQS30gEOsoidg2DGYP/pTHouuBQYlHm?= =?us-ascii?Q?5Ap7g/HGRT7pOtiDS4QZRYNc?= X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: a612d546-4e34-42c4-d2e9-08d9209ba0cd X-MS-Exchange-CrossTenant-AuthSource: SN6PR12MB2718.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 May 2021 23:11:44.1557 (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: RnuHNizM8v4SuHQOMzcsqhL9pwdePC7cA1ZTgd8xdhiE6Qbg/gkjw0aJ0pxpE1BRAkzIJim5gJufBo9lGXgK2Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA0PR12MB4512 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3D3275 An SEV-SNP guest us required to perform GHCB GPA registration before using a GHCB. See the GHCB spec section 2.5.2 for more details. Add a library that can be called to perform the GHCB GPA registration. Cc: James Bottomley Cc: Min Xu Cc: Jiewen Yao Cc: Tom Lendacky Cc: Jordan Justen Cc: Ard Biesheuvel Cc: Laszlo Ersek Cc: Erdem Aktas Signed-off-by: Brijesh Singh --- OvmfPkg/OvmfPkg.dec | 4 + OvmfPkg/OvmfPkgIa32.dsc | 1 + OvmfPkg/OvmfPkgIa32X64.dsc | 1 + OvmfPkg/OvmfPkgX64.dsc | 1 + .../GhcbRegisterLib/GhcbRegisterLib.inf | 33 +++++++ OvmfPkg/Include/Library/GhcbRegisterLib.h | 27 ++++++ .../Library/GhcbRegisterLib/GhcbRegisterLib.c | 97 +++++++++++++++++++ 7 files changed, 164 insertions(+) create mode 100644 OvmfPkg/Library/GhcbRegisterLib/GhcbRegisterLib.inf create mode 100644 OvmfPkg/Include/Library/GhcbRegisterLib.h create mode 100644 OvmfPkg/Library/GhcbRegisterLib/GhcbRegisterLib.c diff --git a/OvmfPkg/OvmfPkg.dec b/OvmfPkg/OvmfPkg.dec index e00f8159f317..3886d43bd3de 100644 --- a/OvmfPkg/OvmfPkg.dec +++ b/OvmfPkg/OvmfPkg.dec @@ -106,6 +106,10 @@ [LibraryClasses] # XenPlatformLib|Include/Library/XenPlatformLib.h =20 + ## @libraryclass Register GHCB GPA + # + GhcbRegisterLib|Include/Library/GhcbRegisterLib.h + [Guids] gUefiOvmfPkgTokenSpaceGuid =3D {0x93bb96af, 0xb9f2, 0x4eb8, {= 0x94, 0x62, 0xe0, 0xba, 0x74, 0x56, 0x42, 0x36}} gEfiXenInfoGuid =3D {0xd3b46f3b, 0xd441, 0x1244, {= 0x9a, 0x12, 0x0, 0x12, 0x27, 0x3f, 0xc1, 0x4d}} diff --git a/OvmfPkg/OvmfPkgIa32.dsc b/OvmfPkg/OvmfPkgIa32.dsc index 33fbd767903e..7cbef8e82282 100644 --- a/OvmfPkg/OvmfPkgIa32.dsc +++ b/OvmfPkg/OvmfPkgIa32.dsc @@ -243,6 +243,7 @@ [LibraryClasses] [LibraryClasses.common] BaseCryptLib|CryptoPkg/Library/BaseCryptLib/BaseCryptLib.inf VmgExitLib|UefiCpuPkg/Library/VmgExitLibNull/VmgExitLibNull.inf + GhcbRegisterLib|OvmfPkg/Library/GhcbRegisterLib/GhcbRegisterLib.inf =20 [LibraryClasses.common.SEC] TimerLib|OvmfPkg/Library/AcpiTimerLib/BaseRomAcpiTimerLib.inf diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc b/OvmfPkg/OvmfPkgIa32X64.dsc index b13e5cfd9047..6b0bc02bd536 100644 --- a/OvmfPkg/OvmfPkgIa32X64.dsc +++ b/OvmfPkg/OvmfPkgIa32X64.dsc @@ -247,6 +247,7 @@ [LibraryClasses] [LibraryClasses.common] BaseCryptLib|CryptoPkg/Library/BaseCryptLib/BaseCryptLib.inf VmgExitLib|UefiCpuPkg/Library/VmgExitLibNull/VmgExitLibNull.inf + GhcbRegisterLib|OvmfPkg/Library/GhcbRegisterLib/GhcbRegisterLib.inf =20 [LibraryClasses.common.SEC] TimerLib|OvmfPkg/Library/AcpiTimerLib/BaseRomAcpiTimerLib.inf diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc index ea08e1fabc65..8d9a0a077601 100644 --- a/OvmfPkg/OvmfPkgX64.dsc +++ b/OvmfPkg/OvmfPkgX64.dsc @@ -247,6 +247,7 @@ [LibraryClasses] [LibraryClasses.common] BaseCryptLib|CryptoPkg/Library/BaseCryptLib/BaseCryptLib.inf VmgExitLib|OvmfPkg/Library/VmgExitLib/VmgExitLib.inf + GhcbRegisterLib|OvmfPkg/Library/GhcbRegisterLib/GhcbRegisterLib.inf =20 [LibraryClasses.common.SEC] TimerLib|OvmfPkg/Library/AcpiTimerLib/BaseRomAcpiTimerLib.inf diff --git a/OvmfPkg/Library/GhcbRegisterLib/GhcbRegisterLib.inf b/OvmfPkg/= Library/GhcbRegisterLib/GhcbRegisterLib.inf new file mode 100644 index 000000000000..8cc39ef7153b --- /dev/null +++ b/OvmfPkg/Library/GhcbRegisterLib/GhcbRegisterLib.inf @@ -0,0 +1,33 @@ +## @file +# GHCBRegisterLib Support Library. +# +# Copyright (C) 2021, Advanced Micro Devices, Inc. All rights reserved. +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +## + +[Defines] + INF_VERSION =3D 0x00010005 + BASE_NAME =3D GhcbRegisterLib + FILE_GUID =3D 0e913c15-12cd-430b-8714-ffe85672a77b + MODULE_TYPE =3D BASE + VERSION_STRING =3D 1.0 + LIBRARY_CLASS =3D GhcbRegisterLib + +# +# The following information is for reference only and not required by the = build tools. +# +# VALID_ARCHITECTURES =3D X64 +# + +[Sources.common] + GhcbRegisterLib.c + +[Packages] + MdePkg/MdePkg.dec + OvmfPkg/OvmfPkg.dec + UefiCpuPkg/UefiCpuPkg.dec + +[LibraryClasses] + BaseLib + BaseMemoryLib diff --git a/OvmfPkg/Include/Library/GhcbRegisterLib.h b/OvmfPkg/Include/Li= brary/GhcbRegisterLib.h new file mode 100644 index 000000000000..7d98b6eb36f8 --- /dev/null +++ b/OvmfPkg/Include/Library/GhcbRegisterLib.h @@ -0,0 +1,27 @@ +/** @file + + Declarations of utility functions used for GHCB GPA registration. + + Copyright (C) 2021, AMD Inc, All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#ifndef _GHCB_REGISTER_LIB_H_ +#define _GHCB_REGISTER_LIB_H_ + +/** + + This function can be used to register the GHCB GPA. + + @param[in] Address The physical address to registered. + +**/ +VOID +EFIAPI +GhcbRegister ( + IN EFI_PHYSICAL_ADDRESS Address + ); + +#endif // _GHCB_REGISTER_LIB_H_ diff --git a/OvmfPkg/Library/GhcbRegisterLib/GhcbRegisterLib.c b/OvmfPkg/Li= brary/GhcbRegisterLib/GhcbRegisterLib.c new file mode 100644 index 000000000000..7fe0aad75a1a --- /dev/null +++ b/OvmfPkg/Library/GhcbRegisterLib/GhcbRegisterLib.c @@ -0,0 +1,97 @@ +/** @file + GHCBRegister Support Library. + + Copyright (C) 2021, Advanced Micro Devices, Inc. All rights reserved. + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include +#include +#include +#include +#include +#include + +/** + Handle an SEV-SNP/GHCB protocol check failure. + + Notify the hypervisor using the VMGEXIT instruction that the SEV-SNP gue= st + wishes to be terminated. + + @param[in] ReasonCode Reason code to provide to the hypervisor for the + termination request. + +**/ +STATIC +VOID +SevEsProtocolFailure ( + IN UINT8 ReasonCode + ) +{ + MSR_SEV_ES_GHCB_REGISTER Msr; + + // + // Use the GHCB MSR Protocol to request termination by the hypervisor + // + Msr.GhcbPhysicalAddress =3D 0; + Msr.GhcbTerminate.Function =3D GHCB_INFO_TERMINATE_REQUEST; + Msr.GhcbTerminate.ReasonCodeSet =3D GHCB_TERMINATE_GHCB; + Msr.GhcbTerminate.ReasonCode =3D ReasonCode; + AsmWriteMsr64 (MSR_SEV_ES_GHCB, Msr.GhcbPhysicalAddress); + + AsmVmgExit (); + + ASSERT (FALSE); + CpuDeadLoop (); +} + +/** + + This function can be used to register the GHCB GPA. + + @param[in] Address The physical address to be registered. + +**/ +VOID +EFIAPI +GhcbRegister ( + IN EFI_PHYSICAL_ADDRESS Address + ) +{ + MSR_SEV_ES_GHCB_REGISTER Msr; + MSR_SEV_ES_GHCB_REGISTER CurrentMsr; + EFI_PHYSICAL_ADDRESS GuestFrameNumber; + + GuestFrameNumber =3D Address >> EFI_PAGE_SHIFT; + + // + // Save the current MSR Value + // + CurrentMsr.GhcbPhysicalAddress =3D AsmReadMsr64 (MSR_SEV_ES_GHCB); + + // + // Use the GHCB MSR Protocol to request to register the GPA. + // + Msr.GhcbPhysicalAddress =3D 0; + Msr.GhcbGpaRegister.Function =3D GHCB_INFO_GHCB_GPA_REGISTER_REQUEST; + Msr.GhcbGpaRegister.GuestFrameNumber =3D GuestFrameNumber; + AsmWriteMsr64 (MSR_SEV_ES_GHCB, Msr.GhcbPhysicalAddress); + + AsmVmgExit (); + + Msr.GhcbPhysicalAddress =3D AsmReadMsr64 (MSR_SEV_ES_GHCB); + + // + // If hypervisor responded with a different GPA than requested then fail= . + // + if ((Msr.GhcbGpaRegister.Function !=3D GHCB_INFO_GHCB_GPA_REGISTER_RESPO= NSE) || + (Msr.GhcbGpaRegister.GuestFrameNumber !=3D GuestFrameNumber)) { + SevEsProtocolFailure (GHCB_TERMINATE_GHCB_GENERAL); + } + + // + // Restore the MSR + // + AsmWriteMsr64 (MSR_SEV_ES_GHCB, CurrentMsr.GhcbPhysicalAddress); +} --=20 2.17.1