From nobody Tue May 7 20:49:47 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+72351+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+72351+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1614718142; cv=none; d=zohomail.com; s=zohoarc; b=KsXF1SwyoWVS6VzkW3pmUDAx8oAVUhFJTj/2oQz0u4pu4MHJsDHlA1fHBreHgfA3tQHN0FqAuuw6VcTQ9zgmSW5Kj3IPLLNA08zMida4uJIkzQE16XB/o0F7XLVRfwwlfu5Svrk2jWtJ/clb9wQpbDKk/TpcvK5EA58SmALqn3c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614718142; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=LcJnjLf6CPEYzKd3SM8NgY5ydvrKSJrfUp5Y8kyKMfU=; b=Mv6zPcrmfvdPaeNtFQObeSTJmgm6ikZHqdpDx8/jclrLsutqoC5mLHDeCDkgNhnHCRTm6NBdWjLLQyfXPNJFdJhVhMHV1KjwIjRVmc4zehjWrl2rA+pL2MKV7sM14+nsstGHbrxjyu3EJN0F582oCtfEyT1j2QqB3jQ/YJwQamE= ARC-Authentication-Results: i=1; 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+72351+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) header.from= Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1614718142203760.4716156166811; Tue, 2 Mar 2021 12:49:02 -0800 (PST) Return-Path: X-Received: by 127.0.0.2 with SMTP id hqETYY1788612xQVe9slvcCD; Tue, 02 Mar 2021 12:49:01 -0800 X-Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.158.5]) by mx.groups.io with SMTP id smtpd.web12.449.1614718133325719576 for ; Tue, 02 Mar 2021 12:48:53 -0800 X-Received: from pps.filterd (m0098419.ppops.net [127.0.0.1]) by mx0b-001b2d01.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id 122KhpaM055083; Tue, 2 Mar 2021 15:48:50 -0500 X-Received: from ppma01dal.us.ibm.com (83.d6.3fa9.ip4.static.sl-reverse.com [169.63.214.131]) by mx0b-001b2d01.pphosted.com with ESMTP id 371vn9g71x-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 02 Mar 2021 15:48:50 -0500 X-Received: from pps.filterd (ppma01dal.us.ibm.com [127.0.0.1]) by ppma01dal.us.ibm.com (8.16.0.42/8.16.0.42) with SMTP id 122KkqMP028086; Tue, 2 Mar 2021 20:48:49 GMT X-Received: from b03cxnp08025.gho.boulder.ibm.com (b03cxnp08025.gho.boulder.ibm.com [9.17.130.17]) by ppma01dal.us.ibm.com with ESMTP id 371qmuagwh-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 02 Mar 2021 20:48:49 +0000 X-Received: from b03ledav006.gho.boulder.ibm.com (b03ledav006.gho.boulder.ibm.com [9.17.130.237]) by b03cxnp08025.gho.boulder.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 122KmloN27984316 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 2 Mar 2021 20:48:47 GMT X-Received: from b03ledav006.gho.boulder.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 26D23C605B; Tue, 2 Mar 2021 20:48:47 +0000 (GMT) X-Received: from b03ledav006.gho.boulder.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 91ED2C6055; Tue, 2 Mar 2021 20:48:46 +0000 (GMT) X-Received: from amdrome1.watson.ibm.com (unknown [9.2.130.16]) by b03ledav006.gho.boulder.ibm.com (Postfix) with ESMTP; Tue, 2 Mar 2021 20:48:46 +0000 (GMT) From: "Tobin Feldman-Fitzthum" To: devel@edk2.groups.io Cc: Dov Murik , Tobin Feldman-Fitzthum , Tobin Feldman-Fitzthum , James Bottomley , Hubertus Franke , Brijesh Singh , Ashish Kalra , Jon Grimm , Tom Lendacky Subject: [edk2-devel] [RFC PATCH 01/14] OvmfPkg/BaseMemEncryptLib: Support to issue unencrypted hypercall Date: Tue, 2 Mar 2021 15:48:26 -0500 Message-Id: <20210302204839.82042-2-tobin@linux.ibm.com> In-Reply-To: <20210302204839.82042-1-tobin@linux.ibm.com> References: <20210302204839.82042-1-tobin@linux.ibm.com> MIME-Version: 1.0 X-TM-AS-GCONF: 00 Precedence: Bulk List-Unsubscribe: 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,tobin@linux.ibm.com X-Gm-Message-State: CB3cCu0FoC9KNJ6gTpo8pB8Hx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1614718141; bh=OCM3zm0bewCD0drQ7Qp9bImco+joymeN/Lrv+fiD8hQ=; h=Cc:Date:From:Reply-To:Subject:To; b=s21V3dfv87Oh4hY6BC/CmoB2ostBFYCBybIixT7DpYZQtF1N4hCw4b9Q0DfV8KdVfKh 2FyTgc/3Ipz5zC1Zcxodq4FH35adxyNZ1Fdyt1TMrlmYsxsBNOOJdX/r6gxaPUAGfLYxG 9HAZfzPrYfDltRQeQadZkCU4tAfwceTOkuI= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" From: Brijesh Singh By default all the SEV guest memory regions are considered encrypted, if a guest changes the encryption attribute of the page (e.g mark a page as decrypted) then notify hypervisor. Hypervisor will need to track the unencrypted pages. The information will be used during guest live migration, guest page migration and guest debugging. Invoke hypercall via the new hypercall library. This hypercall is used to notify hypervisor when a page is marked as 'decrypted' (i.e C-bit removed). Cc: Jordan Justen Cc: Laszlo Ersek Cc: Ard Biesheuvel Signed-off-by: Brijesh Singh Signed-off-by: Ashish Kalra --- .../DxeMemEncryptSevLib.inf | 1 + .../PeiMemEncryptSevLib.inf | 1 + .../X64/PeiDxeVirtualMemory.c | 18 ++++++++++++++++++ 3 files changed, 20 insertions(+) diff --git a/OvmfPkg/Library/BaseMemEncryptSevLib/DxeMemEncryptSevLib.inf b= /OvmfPkg/Library/BaseMemEncryptSevLib/DxeMemEncryptSevLib.inf index f2e162d680..aefcd7c0f7 100644 --- a/OvmfPkg/Library/BaseMemEncryptSevLib/DxeMemEncryptSevLib.inf +++ b/OvmfPkg/Library/BaseMemEncryptSevLib/DxeMemEncryptSevLib.inf @@ -49,6 +49,7 @@ DebugLib MemoryAllocationLib PcdLib + MemEncryptHypercallLib =20 [FeaturePcd] gUefiOvmfPkgTokenSpaceGuid.PcdSmmSmramRequire diff --git a/OvmfPkg/Library/BaseMemEncryptSevLib/PeiMemEncryptSevLib.inf b= /OvmfPkg/Library/BaseMemEncryptSevLib/PeiMemEncryptSevLib.inf index 03a78c32df..7503f56a0b 100644 --- a/OvmfPkg/Library/BaseMemEncryptSevLib/PeiMemEncryptSevLib.inf +++ b/OvmfPkg/Library/BaseMemEncryptSevLib/PeiMemEncryptSevLib.inf @@ -49,6 +49,7 @@ DebugLib MemoryAllocationLib PcdLib + MemEncryptHypercallLib =20 [FeaturePcd] gUefiOvmfPkgTokenSpaceGuid.PcdSmmSmramRequire diff --git a/OvmfPkg/Library/BaseMemEncryptSevLib/X64/PeiDxeVirtualMemory.c= b/OvmfPkg/Library/BaseMemEncryptSevLib/X64/PeiDxeVirtualMemory.c index d3455e812b..98a1d2e3a8 100644 --- a/OvmfPkg/Library/BaseMemEncryptSevLib/X64/PeiDxeVirtualMemory.c +++ b/OvmfPkg/Library/BaseMemEncryptSevLib/X64/PeiDxeVirtualMemory.c @@ -15,6 +15,7 @@ #include #include #include +#include =20 #include "VirtualMemory.h" =20 @@ -585,6 +586,9 @@ SetMemoryEncDec ( UINT64 AddressEncMask; BOOLEAN IsWpEnabled; RETURN_STATUS Status; + UINTN Size; + BOOLEAN CBitChanged; + PHYSICAL_ADDRESS OrigPhysicalAddress; =20 // // Set PageMapLevel4Entry to suppress incorrect compiler/analyzer warnin= gs. @@ -636,6 +640,10 @@ SetMemoryEncDec ( =20 Status =3D EFI_SUCCESS; =20 + Size =3D Length; + CBitChanged =3D FALSE; + OrigPhysicalAddress =3D PhysicalAddress; + while (Length !=3D 0) { // @@ -695,6 +703,7 @@ SetMemoryEncDec ( )); PhysicalAddress +=3D BIT30; Length -=3D BIT30; + CBitChanged =3D TRUE; } else { // // We must split the page @@ -749,6 +758,7 @@ SetMemoryEncDec ( SetOrClearCBit (&PageDirectory2MEntry->Uint64, Mode); PhysicalAddress +=3D BIT21; Length -=3D BIT21; + CBitChanged =3D TRUE; } else { // // We must split up this page into 4K pages @@ -791,6 +801,7 @@ SetMemoryEncDec ( SetOrClearCBit (&PageTableEntry->Uint64, Mode); PhysicalAddress +=3D EFI_PAGE_SIZE; Length -=3D EFI_PAGE_SIZE; + CBitChanged =3D TRUE; } } } @@ -808,6 +819,13 @@ SetMemoryEncDec ( // CpuFlushTlb(); =20 + // + // Notify Hypervisor on C-bit status + // + if (CBitChanged) { + SetMemoryEncDecHypercall3 (OrigPhysicalAddress, EFI_SIZE_TO_PAGES(Size= ), !Mode); + } + Done: // // Restore page table write protection, if any. --=20 2.20.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 (#72351): https://edk2.groups.io/g/devel/message/72351 Mute This Topic: https://groups.io/mt/81036363/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- From nobody Tue May 7 20:49:47 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+72352+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+72352+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1614718140; cv=none; d=zohomail.com; s=zohoarc; b=R8tau+FGjmLqDV8eCaf4+eLmqy04Is/ckwbJ5O0Cbvk/IFts2FP7GlbFpgbcOc2TtWhztrXVA+Dx4s9X7Ldg2yhfhibGVVmsv9FPclQOCUijhL6IChpeeJS1Z07/GCDD1d2831C5rTwFyiGXcJUQmGBLQOLABq1DfPaLpHuyzDw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614718140; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=5FAwcz5U+kmU+pHgMbU6AX4sbzsOWPdrnL89xSHW6Vc=; b=XlVjVj++Cou3VMy/IgYz9NBywXF8ob94GnAqE5orz9O+/eF/CXQeCZ8RQ4B2AnVvPIWvvS+6RtGiRkJ6Ew/Q39OfTf/yI4XgQy1vW/Eq9QnlYbfBVfyjJwAtL3iqkpGR53zbz4buzFdXpyluKMrk890ERG5Q0iWmOCAanOZfc8I= ARC-Authentication-Results: i=1; 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+72352+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) header.from= Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1614718140625495.67168724798944; Tue, 2 Mar 2021 12:49:00 -0800 (PST) Return-Path: X-Received: by 127.0.0.2 with SMTP id WZAWYY1788612xLXgpfeBOaw; Tue, 02 Mar 2021 12:49:00 -0800 X-Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.158.5]) by mx.groups.io with SMTP id smtpd.web08.462.1614718133489745823 for ; Tue, 02 Mar 2021 12:48:53 -0800 X-Received: from pps.filterd (m0098420.ppops.net [127.0.0.1]) by mx0b-001b2d01.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id 122KiwJI019726; Tue, 2 Mar 2021 15:48:51 -0500 X-Received: from ppma03dal.us.ibm.com (b.bd.3ea9.ip4.static.sl-reverse.com [169.62.189.11]) by mx0b-001b2d01.pphosted.com with ESMTP id 371vnsr51r-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 02 Mar 2021 15:48:51 -0500 X-Received: from pps.filterd (ppma03dal.us.ibm.com [127.0.0.1]) by ppma03dal.us.ibm.com (8.16.0.42/8.16.0.42) with SMTP id 122Km6r1013619; Tue, 2 Mar 2021 20:48:50 GMT X-Received: from b03cxnp08025.gho.boulder.ibm.com (b03cxnp08025.gho.boulder.ibm.com [9.17.130.17]) by ppma03dal.us.ibm.com with ESMTP id 37103w5sja-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 02 Mar 2021 20:48:50 +0000 X-Received: from b03ledav006.gho.boulder.ibm.com (b03ledav006.gho.boulder.ibm.com [9.17.130.237]) by b03cxnp08025.gho.boulder.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 122KmltS27984324 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 2 Mar 2021 20:48:47 GMT X-Received: from b03ledav006.gho.boulder.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id C5B5AC605A; Tue, 2 Mar 2021 20:48:47 +0000 (GMT) X-Received: from b03ledav006.gho.boulder.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 3CCA5C6055; Tue, 2 Mar 2021 20:48:47 +0000 (GMT) X-Received: from amdrome1.watson.ibm.com (unknown [9.2.130.16]) by b03ledav006.gho.boulder.ibm.com (Postfix) with ESMTP; Tue, 2 Mar 2021 20:48:47 +0000 (GMT) From: "Tobin Feldman-Fitzthum" To: devel@edk2.groups.io Cc: Dov Murik , Tobin Feldman-Fitzthum , Tobin Feldman-Fitzthum , James Bottomley , Hubertus Franke , Brijesh Singh , Ashish Kalra , Jon Grimm , Tom Lendacky Subject: [edk2-devel] [RFC PATCH 02/14] OvmfPkg/PlatformPei: Mark SEC GHCB page in the page encrpytion bitmap. Date: Tue, 2 Mar 2021 15:48:27 -0500 Message-Id: <20210302204839.82042-3-tobin@linux.ibm.com> In-Reply-To: <20210302204839.82042-1-tobin@linux.ibm.com> References: <20210302204839.82042-1-tobin@linux.ibm.com> MIME-Version: 1.0 X-TM-AS-GCONF: 00 Precedence: Bulk List-Unsubscribe: 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,tobin@linux.ibm.com X-Gm-Message-State: IT6XCSFimYsfC3XEjoYLK3rGx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1614718140; bh=xo+WPbwLhwsn2QInzbpmWf+GQeawBM5PmOyJbjs5h2Q=; h=Cc:Date:From:Reply-To:Subject:To; b=sSj0JVy3oSXEQK1EPpeGI/YKiM8VU6shxhSWLstjH0+OGATc4P3qG0WSc8cPsm4z403 /5EjbpBXl9OFqB7Nx5xrKtd6gC7dRsU5anYE4qo88XqGW8ByO5TdHp76HvV75btOSpnhS L91KF9YpLZM7r3IKqPGSjulMlJ/X3h8VYtY= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" From: Ashish Kalra Mark the SEC GHCB page that is mapped as unencrypted in ResetVector code in the hypervisor page encryption bitmap. Cc: Jordan Justen Cc: Laszlo Ersek Cc: Ard Biesheuvel Signed-off-by: Ashish Kalra --- OvmfPkg/PlatformPei/AmdSev.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/OvmfPkg/PlatformPei/AmdSev.c b/OvmfPkg/PlatformPei/AmdSev.c index dddffdebda..c72eeb37c5 100644 --- a/OvmfPkg/PlatformPei/AmdSev.c +++ b/OvmfPkg/PlatformPei/AmdSev.c @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include @@ -52,6 +53,15 @@ AmdSevEsInitialize ( PcdStatus =3D PcdSetBoolS (PcdSevEsIsEnabled, TRUE); ASSERT_RETURN_ERROR (PcdStatus); =20 + // + // GHCB_BASE setup during reset-vector needs to be marked as + // decrypted in the hypervisor page encryption bitmap. + // + SetMemoryEncDecHypercall3 (FixedPcdGet32 (PcdOvmfSecGhcbBase), + EFI_SIZE_TO_PAGES(FixedPcdGet32 (PcdOvmfSecGhcbSize)), + FALSE + ); + // // Allocate GHCB and per-CPU variable pages. // Since the pages must survive across the UEFI to OS transition --=20 2.20.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 (#72352): https://edk2.groups.io/g/devel/message/72352 Mute This Topic: https://groups.io/mt/81036364/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- From nobody Tue May 7 20:49:47 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+72354+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+72354+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1614718141; cv=none; d=zohomail.com; s=zohoarc; b=SC3tPakEW6yvEKcMVArJSbmmcnjM9uTf6MvGutm2o3jEiXkWab8vKH050/7+EqwPTXfpaAB1ZUohYIwqSAP65XsoXyzZRKc3LSlXhPG6GPtmMlB345r9a+/tRN8moW8d696WHdZvXPfyQNyQT4p/J6SWYnhtI7/j6qgmHST4IFg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614718141; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=tBwzYQ4QcpZpwya+oIJED/U8GiDb9x/NunK3kVNuFnU=; b=MelkQgFm+NRct+hAb1F24lYeThAe0isNctKL42JxBpfZdfC5+DOKKO2qFEl6ONMqxGGRA9NcYljudWShwNrl0LPwDYq12WVoettk8z18qw4SjPkpNYZmPsDDKL+hBrNbs1+OIs0cFEtWG+rfY2OhTeHApQJiP3kD5wdwRQjDSsA= ARC-Authentication-Results: i=1; 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+72354+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) header.from= Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1614718141315499.41055118586394; Tue, 2 Mar 2021 12:49:01 -0800 (PST) Return-Path: X-Received: by 127.0.0.2 with SMTP id aGghYY1788612x8j8tnYfxQK; Tue, 02 Mar 2021 12:49:00 -0800 X-Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.158.5]) by mx.groups.io with SMTP id smtpd.web10.447.1614718133777471556 for ; Tue, 02 Mar 2021 12:48:53 -0800 X-Received: from pps.filterd (m0098416.ppops.net [127.0.0.1]) by mx0b-001b2d01.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id 122KhKtt191359; Tue, 2 Mar 2021 15:48:52 -0500 X-Received: from ppma03dal.us.ibm.com (b.bd.3ea9.ip4.static.sl-reverse.com [169.62.189.11]) by mx0b-001b2d01.pphosted.com with ESMTP id 371vn7r865-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 02 Mar 2021 15:48:51 -0500 X-Received: from pps.filterd (ppma03dal.us.ibm.com [127.0.0.1]) by ppma03dal.us.ibm.com (8.16.0.42/8.16.0.42) with SMTP id 122Km6Xv013755; Tue, 2 Mar 2021 20:48:50 GMT X-Received: from b03cxnp08026.gho.boulder.ibm.com (b03cxnp08026.gho.boulder.ibm.com [9.17.130.18]) by ppma03dal.us.ibm.com with ESMTP id 37103w5sjd-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 02 Mar 2021 20:48:50 +0000 X-Received: from b03ledav006.gho.boulder.ibm.com (b03ledav006.gho.boulder.ibm.com [9.17.130.237]) by b03cxnp08026.gho.boulder.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 122Kmmac17498462 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 2 Mar 2021 20:48:48 GMT X-Received: from b03ledav006.gho.boulder.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 7153BC6055; Tue, 2 Mar 2021 20:48:48 +0000 (GMT) X-Received: from b03ledav006.gho.boulder.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id DC0B4C605D; Tue, 2 Mar 2021 20:48:47 +0000 (GMT) X-Received: from amdrome1.watson.ibm.com (unknown [9.2.130.16]) by b03ledav006.gho.boulder.ibm.com (Postfix) with ESMTP; Tue, 2 Mar 2021 20:48:47 +0000 (GMT) From: "Tobin Feldman-Fitzthum" To: devel@edk2.groups.io Cc: Dov Murik , Tobin Feldman-Fitzthum , Tobin Feldman-Fitzthum , James Bottomley , Hubertus Franke , Brijesh Singh , Ashish Kalra , Jon Grimm , Tom Lendacky Subject: [edk2-devel] [RFC PATCH 03/14] OvmfPkg/PlatformDxe: Add support for SEV live migration. Date: Tue, 2 Mar 2021 15:48:28 -0500 Message-Id: <20210302204839.82042-4-tobin@linux.ibm.com> In-Reply-To: <20210302204839.82042-1-tobin@linux.ibm.com> References: <20210302204839.82042-1-tobin@linux.ibm.com> MIME-Version: 1.0 X-TM-AS-GCONF: 00 Precedence: Bulk List-Unsubscribe: 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,tobin@linux.ibm.com X-Gm-Message-State: EMgKm8fyEud6wMdpDJOyXffxx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1614718140; bh=iC+1OLh2P54uxMSxhr2U1z39YSKZLsFzWofHM5WeJQc=; h=Cc:Date:From:Reply-To:Subject:To; b=k6wwnxAkqw/YA4ZldkljXNKHM2S/cDpTXxGvoZMECC4+h6UAt+3BpjQThXw30czXxmQ YgLA+gmsGRPDmqbB81dLTGLXoDsaNtLCTGRaCrQh9yAhut8Zdk5y1xSJSQHbeKE9Hw+EY O4s68vE7X0mWe1M5nKY9q/IebwSab41vtZU= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" From: Ashish Kalra Detect for KVM hypervisor and check for SEV live migration feature support via KVM_FEATURE_CPUID, if detected setup a new UEFI enviroment variable to indicate OVMF support for SEV live migration. Signed-off-by: Ashish Kalra --- OvmfPkg/OvmfPkg.dec | 1 + OvmfPkg/PlatformDxe/Platform.inf | 2 + OvmfPkg/Include/Guid/MemEncryptLib.h | 16 +++++ OvmfPkg/PlatformDxe/PlatformConfig.h | 5 ++ OvmfPkg/PlatformDxe/AmdSev.c | 99 ++++++++++++++++++++++++++++ OvmfPkg/PlatformDxe/Platform.c | 6 ++ 6 files changed, 129 insertions(+) create mode 100644 OvmfPkg/Include/Guid/MemEncryptLib.h create mode 100644 OvmfPkg/PlatformDxe/AmdSev.c diff --git a/OvmfPkg/OvmfPkg.dec b/OvmfPkg/OvmfPkg.dec index 4348bb45c6..4450d78b91 100644 --- a/OvmfPkg/OvmfPkg.dec +++ b/OvmfPkg/OvmfPkg.dec @@ -122,6 +122,7 @@ gQemuKernelLoaderFsMediaGuid =3D {0x1428f772, 0xb64a, 0x441e, {= 0xb8, 0xc3, 0x9e, 0xbd, 0xd7, 0xf8, 0x93, 0xc7}} gGrubFileGuid =3D {0xb5ae312c, 0xbc8a, 0x43b1, {= 0x9c, 0x62, 0xeb, 0xb8, 0x26, 0xdd, 0x5d, 0x07}} gConfidentialComputingSecretGuid =3D {0xadf956ad, 0xe98c, 0x484c, {= 0xae, 0x11, 0xb5, 0x1c, 0x7d, 0x33, 0x64, 0x47}} + gMemEncryptGuid =3D {0x0cf29b71, 0x9e51, 0x433a, {= 0xa3, 0xb7, 0x81, 0xf3, 0xab, 0x16, 0xb8, 0x75}} =20 [Ppis] # PPI whose presence in the PPI database signals that the TPM base addre= ss diff --git a/OvmfPkg/PlatformDxe/Platform.inf b/OvmfPkg/PlatformDxe/Platfor= m.inf index 14727c1220..2896f0a1d1 100644 --- a/OvmfPkg/PlatformDxe/Platform.inf +++ b/OvmfPkg/PlatformDxe/Platform.inf @@ -24,6 +24,7 @@ PlatformConfig.c PlatformConfig.h PlatformForms.vfr + AmdSev.c =20 [Packages] MdePkg/MdePkg.dec @@ -56,6 +57,7 @@ [Guids] gEfiIfrTianoGuid gOvmfPlatformConfigGuid + gMemEncryptGuid =20 [Depex] gEfiHiiConfigRoutingProtocolGuid AND diff --git a/OvmfPkg/Include/Guid/MemEncryptLib.h b/OvmfPkg/Include/Guid/Me= mEncryptLib.h new file mode 100644 index 0000000000..8264a647af --- /dev/null +++ b/OvmfPkg/Include/Guid/MemEncryptLib.h @@ -0,0 +1,16 @@ +/** @file + AMD Memory Encryption GUID, define a new GUID for defining + new UEFI enviroment variables assocaiated with SEV Memory Encryption. + Copyright (c) 2020, AMD Inc. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent +**/ + +#ifndef __MEMENCRYPT_LIB_H__ +#define __MEMENCRYPT_LIB_H__ + +#define MEMENCRYPT_GUID \ +{0x0cf29b71, 0x9e51, 0x433a, {0xa3, 0xb7, 0x81, 0xf3, 0xab, 0x16, 0xb8, 0x= 75}} + +extern EFI_GUID gMemEncryptGuid; + +#endif diff --git a/OvmfPkg/PlatformDxe/PlatformConfig.h b/OvmfPkg/PlatformDxe/Pla= tformConfig.h index 716514da21..4f662aafa4 100644 --- a/OvmfPkg/PlatformDxe/PlatformConfig.h +++ b/OvmfPkg/PlatformDxe/PlatformConfig.h @@ -44,6 +44,11 @@ PlatformConfigLoad ( OUT UINT64 *OptionalElements ); =20 +VOID +AmdSevSetConfig( + VOID + ); + // // Feature flags for OptionalElements. // diff --git a/OvmfPkg/PlatformDxe/AmdSev.c b/OvmfPkg/PlatformDxe/AmdSev.c new file mode 100644 index 0000000000..1f804984b7 --- /dev/null +++ b/OvmfPkg/PlatformDxe/AmdSev.c @@ -0,0 +1,99 @@ +/**@file + Detect KVM hypervisor support for SEV live migration and if + detected, setup a new UEFI enviroment variable indicating + OVMF support for SEV live migration. + Copyright (c) 2020, Advanced Micro Devices. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent +**/ +// +// The package level header files this module uses +// + +#include +#include +#include +#include +#include +#include + +/** + Figures out if we are running inside KVM HVM and + KVM HVM supports SEV Live Migration feature. + @retval TRUE KVM was detected and Live Migration supported + @retval FALSE KVM was not detected or Live Migration not supported +**/ +BOOLEAN +KvmDetectSevLiveMigrationFeature( + VOID + ) +{ + UINT8 Signature[13]; + UINT32 mKvmLeaf =3D 0; + UINT32 RegEax, RegEbx, RegEcx, RegEdx; + + Signature[12] =3D '\0'; + for (mKvmLeaf =3D 0x40000000; mKvmLeaf < 0x40010000; mKvmLeaf +=3D 0x100= ) { + AsmCpuid (mKvmLeaf, + NULL, + (UINT32 *) &Signature[0], + (UINT32 *) &Signature[4], + (UINT32 *) &Signature[8]); + + if (!AsciiStrCmp ((CHAR8 *) Signature, "KVMKVMKVM\0\0\0")) { + DEBUG (( + DEBUG_ERROR, + "%a: KVM Detected, signature =3D %s\n", + __FUNCTION__, + Signature + )); + + RegEax =3D 0x40000001; + RegEcx =3D 0; + AsmCpuid (0x40000001, &RegEax, &RegEbx, &RegEcx, &RegEdx); + if (RegEax & (1 << 14)) { + DEBUG (( + DEBUG_ERROR, + "%a: Live Migration feature supported\n", + __FUNCTION__ + )); + return TRUE; + } + } + } + + return FALSE; +} + +/** + Function checks if SEV Live Migration support is available, if present t= hen it sets + a UEFI enviroment variable to be queried later using Runtime services. + **/ +VOID +AmdSevSetConfig( + VOID + ) +{ + EFI_STATUS Status; + BOOLEAN SevLiveMigrationEnabled; + + SevLiveMigrationEnabled =3D KvmDetectSevLiveMigrationFeature(); + + if (SevLiveMigrationEnabled) { + Status =3D gRT->SetVariable ( + L"SevLiveMigrationEnabled", + &gMemEncryptGuid, + EFI_VARIABLE_NON_VOLATILE | + EFI_VARIABLE_BOOTSERVICE_ACCESS | + EFI_VARIABLE_RUNTIME_ACCESS, + sizeof (BOOLEAN), + &SevLiveMigrationEnabled + ); + + DEBUG (( + DEBUG_ERROR, + "%a: Setting SevLiveMigrationEnabled variable, status =3D %lx\n", + __FUNCTION__, + Status + )); + } +} diff --git a/OvmfPkg/PlatformDxe/Platform.c b/OvmfPkg/PlatformDxe/Platform.c index f2e51960ce..9a19b9f6b1 100644 --- a/OvmfPkg/PlatformDxe/Platform.c +++ b/OvmfPkg/PlatformDxe/Platform.c @@ -763,6 +763,12 @@ PlatformInit ( { EFI_STATUS Status; =20 + // + // Set Amd Sev configuation + // + AmdSevSetConfig(); + + ExecutePlatformConfig (); =20 mConfigAccess.ExtractConfig =3D &ExtractConfig; --=20 2.20.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 (#72354): https://edk2.groups.io/g/devel/message/72354 Mute This Topic: https://groups.io/mt/81036366/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- From nobody Tue May 7 20:49:47 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+72355+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+72355+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1614718147; cv=none; d=zohomail.com; s=zohoarc; b=iR/o5xpEPuj/CzJICE7hzTQ0Uj+m2f04Bj6tZnOXJHSDuVJc15A2QGfbAe2ptr1P7g0eXW/iKoN/3hNs+QSQszYMI1AodPUKnl+AXweMZf6kvVgYM7pq6F7/3yBa61d1xsJmSjsAMWks2DHoLbpmcr6SeFn5ytSOe2emr6s15CE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614718147; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=99GIk2N7ccbzt4VZ0++fWYZwnNAo0Uo2TCAwDwuXkLU=; b=QRQ8ZVxhlu+mAVFge7Wdrm8UXK5qZJUnoqq1oAGEUClc8puEzpoHMlDwfNSWIvMAvgFkYlIoLDeFfJrPHNBe7Onv6i0O2s9bAzpaKCznXXZvDG5w1jftzngG9Em1NH4ATPXuA40MR2fkHw1KnkGZmDCaLBFI60rITerhdTLbT84= ARC-Authentication-Results: i=1; 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+72355+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) header.from= Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 16147181475785.1838602677901235; Tue, 2 Mar 2021 12:49:07 -0800 (PST) Return-Path: X-Received: by 127.0.0.2 with SMTP id VhjoYY1788612x5XdGL5FYTb; Tue, 02 Mar 2021 12:49:07 -0800 X-Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) by mx.groups.io with SMTP id smtpd.web11.428.1614718135166558875 for ; Tue, 02 Mar 2021 12:48:55 -0800 X-Received: from pps.filterd (m0098409.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id 122KjLvQ043039; Tue, 2 Mar 2021 15:48:52 -0500 X-Received: from ppma01dal.us.ibm.com (83.d6.3fa9.ip4.static.sl-reverse.com [169.63.214.131]) by mx0a-001b2d01.pphosted.com with ESMTP id 371vp083yx-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 02 Mar 2021 15:48:52 -0500 X-Received: from pps.filterd (ppma01dal.us.ibm.com [127.0.0.1]) by ppma01dal.us.ibm.com (8.16.0.42/8.16.0.42) with SMTP id 122KkqnU028108; Tue, 2 Mar 2021 20:48:51 GMT X-Received: from b03cxnp08027.gho.boulder.ibm.com (b03cxnp08027.gho.boulder.ibm.com [9.17.130.19]) by ppma01dal.us.ibm.com with ESMTP id 371qmuagws-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 02 Mar 2021 20:48:51 +0000 X-Received: from b03ledav006.gho.boulder.ibm.com (b03ledav006.gho.boulder.ibm.com [9.17.130.237]) by b03cxnp08027.gho.boulder.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 122KmnAN8651486 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 2 Mar 2021 20:48:49 GMT X-Received: from b03ledav006.gho.boulder.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 1C2A8C6057; Tue, 2 Mar 2021 20:48:49 +0000 (GMT) X-Received: from b03ledav006.gho.boulder.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 877C0C6059; Tue, 2 Mar 2021 20:48:48 +0000 (GMT) X-Received: from amdrome1.watson.ibm.com (unknown [9.2.130.16]) by b03ledav006.gho.boulder.ibm.com (Postfix) with ESMTP; Tue, 2 Mar 2021 20:48:48 +0000 (GMT) From: "Tobin Feldman-Fitzthum" To: devel@edk2.groups.io Cc: Dov Murik , Tobin Feldman-Fitzthum , Tobin Feldman-Fitzthum , James Bottomley , Hubertus Franke , Brijesh Singh , Ashish Kalra , Jon Grimm , Tom Lendacky Subject: [edk2-devel] [RFC PATCH 04/14] OvmfPkg/AmdSev: Base for Confidential Migration Handler Date: Tue, 2 Mar 2021 15:48:29 -0500 Message-Id: <20210302204839.82042-5-tobin@linux.ibm.com> In-Reply-To: <20210302204839.82042-1-tobin@linux.ibm.com> References: <20210302204839.82042-1-tobin@linux.ibm.com> MIME-Version: 1.0 X-TM-AS-GCONF: 00 Precedence: Bulk List-Unsubscribe: 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,tobin@linux.ibm.com X-Gm-Message-State: cIbw2PZYa7M2rfjwnKHC2TEJx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1614718147; bh=iGG5h7nxbq9rCVfGfN/v5UuxeQvINEMyM7cHQQR1PuY=; h=Cc:Date:From:Reply-To:Subject:To; b=v5Th3eeaqdm/Iw5hmUcYOi2R97spBxxG3pAURcRp7MkgI26SSfS25ARRI1UMHJaRXbL dxJQA/ySoC/6xEslBjFrM0aIEwBnsRbqG/ONULLl8p1irMsIcbAfNqupnhB3Fj/FZq4Mr 24m/vAAaqfIuWlecw+HOzo4qcdf1gDuqN5k= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" Base enablement of DXE driver that supports confidential migration. Signed-off-by: Tobin Feldman-Fitzthum --- OvmfPkg/OvmfPkg.dec | 5 ++ OvmfPkg/AmdSev/AmdSevX64.dsc | 1 + OvmfPkg/AmdSev/AmdSevX64.fdf | 1 + .../ConfidentialMigrationDxe.inf | 39 +++++++++ .../ConfidentialMigrationDxe.c | 83 +++++++++++++++++++ 5 files changed, 129 insertions(+) create mode 100644 OvmfPkg/AmdSev/ConfidentialMigration/ConfidentialMigrat= ionDxe.inf create mode 100644 OvmfPkg/AmdSev/ConfidentialMigration/ConfidentialMigrat= ionDxe.c diff --git a/OvmfPkg/OvmfPkg.dec b/OvmfPkg/OvmfPkg.dec index 4450d78b91..402c3b61fa 100644 --- a/OvmfPkg/OvmfPkg.dec +++ b/OvmfPkg/OvmfPkg.dec @@ -324,6 +324,11 @@ gUefiOvmfPkgTokenSpaceGuid.PcdOvmfHostBridgePciDevId|0|UINT16|0x1b gUefiOvmfPkgTokenSpaceGuid.PcdQemuSmbiosValidated|FALSE|BOOLEAN|0x21 =20 + ## Set via FW_CFG to enable confidentialmigration as source or target. + # + gUefiOvmfPkgTokenSpaceGuid.PcdIsConfidentialMigrationTarget|FALSE|BOOLEA= N|0x46 + gUefiOvmfPkgTokenSpaceGuid.PcdStartConfidentialMigrationHandler|FALSE|BO= OLEAN|0x47 + ## The IO port aperture shared by all PCI root bridges. # gUefiOvmfPkgTokenSpaceGuid.PcdPciIoBase|0x0|UINT64|0x22 diff --git a/OvmfPkg/AmdSev/AmdSevX64.dsc b/OvmfPkg/AmdSev/AmdSevX64.dsc index ca21fd6e5f..fa68143663 100644 --- a/OvmfPkg/AmdSev/AmdSevX64.dsc +++ b/OvmfPkg/AmdSev/AmdSevX64.dsc @@ -787,6 +787,7 @@ !endif OvmfPkg/AmdSev/SecretDxe/SecretDxe.inf OvmfPkg/AmdSev/Grub/Grub.inf + OvmfPkg/AmdSev/ConfidentialMigration/ConfidentialMigrationDxe.inf !if $(BUILD_SHELL) =3D=3D TRUE ShellPkg/Application/Shell/Shell.inf { diff --git a/OvmfPkg/AmdSev/AmdSevX64.fdf b/OvmfPkg/AmdSev/AmdSevX64.fdf index c0098502aa..6ef6dc89f2 100644 --- a/OvmfPkg/AmdSev/AmdSevX64.fdf +++ b/OvmfPkg/AmdSev/AmdSevX64.fdf @@ -273,6 +273,7 @@ INF MdeModulePkg/Universal/Disk/UdfDxe/UdfDxe.inf INF OvmfPkg/LinuxInitrdDynamicShellCommand/LinuxInitrdDynamicShellCommand= .inf !endif INF OvmfPkg/AmdSev/SecretDxe/SecretDxe.inf +INF OvmfPkg/AmdSev/ConfidentialMigration/ConfidentialMigrationDxe.inf INF OvmfPkg/AmdSev/Grub/Grub.inf !if $(BUILD_SHELL) =3D=3D TRUE INF ShellPkg/Application/Shell/Shell.inf diff --git a/OvmfPkg/AmdSev/ConfidentialMigration/ConfidentialMigrationDxe.= inf b/OvmfPkg/AmdSev/ConfidentialMigration/ConfidentialMigrationDxe.inf new file mode 100644 index 0000000000..a4906a2451 --- /dev/null +++ b/OvmfPkg/AmdSev/ConfidentialMigration/ConfidentialMigrationDxe.inf @@ -0,0 +1,39 @@ +## @file +# +# Copyright (C) 2021 IBM Corporation. +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +## + +[Defines] + INF_VERSION =3D 0x00010005 + BASE_NAME =3D ConfidentialMigration + FILE_GUID =3D 5c2978f4-f175-434b-9e6c-9b03bd7e346f + MODULE_TYPE =3D DXE_DRIVER + VERSION_STRING =3D 1.0 + ENTRY_POINT =3D LaunchMigrationHandler + +[Sources] + ConfidentialMigrationDxe.c + +[Packages] + MdePkg/MdePkg.dec + OvmfPkg/OvmfPkg.dec + UefiCpuPkg/UefiCpuPkg.dec + +[LibraryClasses] + MemoryAllocationLib + DebugLib + UefiBootServicesTableLib + MpInitLib + UefiDriverEntryPoint + +[Protocols] + gEfiMpServiceProtocolGuid + +[Pcd] + gUefiOvmfPkgTokenSpaceGuid.PcdIsConfidentialMigrationTarget + gUefiOvmfPkgTokenSpaceGuid.PcdStartConfidentialMigrationHandler + +[Depex] + gEfiMpServiceProtocolGuid diff --git a/OvmfPkg/AmdSev/ConfidentialMigration/ConfidentialMigrationDxe.= c b/OvmfPkg/AmdSev/ConfidentialMigration/ConfidentialMigrationDxe.c new file mode 100644 index 0000000000..6d9fe7043b --- /dev/null +++ b/OvmfPkg/AmdSev/ConfidentialMigration/ConfidentialMigrationDxe.c @@ -0,0 +1,83 @@ +/** @file + In-guest support for confidential migration + + Copyright (C) 2021 IBM Coporation. + SPDX-License-Identifier: BSD-2-Clause-Patent +**/ +#include +#include +#include +#include +#include + +UINTN MigrationHandlerCpuIndex; + +VOID +EFIAPI +MigrationHandlerMain ( + IN OUT VOID *Buffer + ) +{ + DebugPrint (DEBUG_INFO,"MIGRATION Handler Started\n"); +} + +EFI_STATUS +EFIAPI +LaunchMigrationHandler ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +{ + EFI_MP_SERVICES_PROTOCOL *MpProto; + EFI_PROCESSOR_INFORMATION Tcb; + EFI_STATUS Status; + UINTN NumProc; + UINTN NumEnabled; + + gST =3D SystemTable; + gBS =3D gST->BootServices; + gRT =3D gST->RuntimeServices; + + Status =3D EFI_NOT_STARTED; + + if (!PcdGetBool(PcdStartConfidentialMigrationHandler)) { + return 0; + } + + // + // Use the MP Service protocol to start Migration Handler on AP + // + gBS->LocateProtocol (&gEfiMpServiceProtocolGuid, NULL, (void**)&MpProto); + MpProto->GetNumberOfProcessors (MpProto, &NumProc, &NumEnabled); + if (NumProc < 2) { + DebugPrint (DEBUG_ERROR,"Only one vCPU enabled. Please start an extra = for the MH.\n"); + return 0; + } + + MigrationHandlerCpuIndex =3D NumProc - 1; + + EFI_EVENT Event; + MpProto->GetProcessorInfo (MpProto, MigrationHandlerCpuIndex, &Tcb); + if (Tcb.StatusFlag !=3D 7) { + gBS->CreateEvent (EVT_TIMER, TPL_NOTIFY, NULL, NULL, &Event); + + Status =3D MpProto->StartupThisAP(MpProto, MigrationHandlerMain, 1, Ev= ent, + 0, MpProto, NULL); + } + if (Status !=3D EFI_SUCCESS) { + DebugPrint (DEBUG_ERROR,"Failed to start Migration Handler\n"); + return 0; + } + + // + // If we are the target, wait for incoming migration. Otherwise, + // procede with the boot. + // + if (PcdGetBool(PcdIsConfidentialMigrationTarget)) { + DebugPrint (DEBUG_INFO,"Waiting for incoming confidential migration.\n= "); + DisableInterrupts (); + CpuDeadLoop (); + } + + return 0; +} --=20 2.20.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 (#72355): https://edk2.groups.io/g/devel/message/72355 Mute This Topic: https://groups.io/mt/81036368/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- From nobody Tue May 7 20:49:47 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+72357+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+72357+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1614718149; cv=none; d=zohomail.com; s=zohoarc; b=BEN8Dtu90CzCfoGdta5U1WExt+D09lsg/DWTcj5uZfXITqxtBSUvE4lCGJHZC01ICheKbAlFzkL9kPJTbx1ONjcxH2hAon7kpfIVF4JlYkaY5SoSZl/7TJNnuNI9bnhnIio30BVqq5FgF1zATtj1EIPMyT1ib8qOjOLMu1AB2tY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614718149; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=LlE5KE63eHhD19g6uljD8MGqAtshilmYCZARDicSnb4=; b=Y1zz0oKcAntS8oobxPW7fVGaRvzWh6j3gd53G0eKS0xX/LTaa0xfkyI9Aud2FwRk6s9eYFh3mG6DYUU13mTCiBzHtkEzeKCL+tSGwS9HiJkTYLl26/hUOkt9Hb3Dx9qh7JpfABPlBOXLKvJKYlI7pmGWOEjLQ99+8G+CWodIkig= ARC-Authentication-Results: i=1; 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+72357+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) header.from= Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1614718149586905.8229540521937; Tue, 2 Mar 2021 12:49:09 -0800 (PST) Return-Path: X-Received: by 127.0.0.2 with SMTP id oUn8YY1788612xRCTzourzXS; Tue, 02 Mar 2021 12:49:09 -0800 X-Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) by mx.groups.io with SMTP id smtpd.web11.430.1614718136873894637 for ; Tue, 02 Mar 2021 12:48:57 -0800 X-Received: from pps.filterd (m0098421.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id 122KhIk0124657; Tue, 2 Mar 2021 15:48:55 -0500 X-Received: from ppma03wdc.us.ibm.com (ba.79.3fa9.ip4.static.sl-reverse.com [169.63.121.186]) by mx0a-001b2d01.pphosted.com with ESMTP id 371vn7r7uh-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 02 Mar 2021 15:48:52 -0500 X-Received: from pps.filterd (ppma03wdc.us.ibm.com [127.0.0.1]) by ppma03wdc.us.ibm.com (8.16.0.42/8.16.0.42) with SMTP id 122KmYGl025961; Tue, 2 Mar 2021 20:48:51 GMT X-Received: from b03cxnp08027.gho.boulder.ibm.com (b03cxnp08027.gho.boulder.ibm.com [9.17.130.19]) by ppma03wdc.us.ibm.com with ESMTP id 37128ga1y2-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 02 Mar 2021 20:48:51 +0000 X-Received: from b03ledav006.gho.boulder.ibm.com (b03ledav006.gho.boulder.ibm.com [9.17.130.237]) by b03cxnp08027.gho.boulder.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 122KmnLd6095188 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 2 Mar 2021 20:48:49 GMT X-Received: from b03ledav006.gho.boulder.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id BB24AC6057; Tue, 2 Mar 2021 20:48:49 +0000 (GMT) X-Received: from b03ledav006.gho.boulder.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 32603C605F; Tue, 2 Mar 2021 20:48:49 +0000 (GMT) X-Received: from amdrome1.watson.ibm.com (unknown [9.2.130.16]) by b03ledav006.gho.boulder.ibm.com (Postfix) with ESMTP; Tue, 2 Mar 2021 20:48:49 +0000 (GMT) From: "Tobin Feldman-Fitzthum" To: devel@edk2.groups.io Cc: Dov Murik , Tobin Feldman-Fitzthum , Tobin Feldman-Fitzthum , James Bottomley , Hubertus Franke , Brijesh Singh , Ashish Kalra , Jon Grimm , Tom Lendacky Subject: [edk2-devel] [RFC PATCH 05/14] OvmfPkg/PlatfomPei: Set Confidential Migration PCD Date: Tue, 2 Mar 2021 15:48:30 -0500 Message-Id: <20210302204839.82042-6-tobin@linux.ibm.com> In-Reply-To: <20210302204839.82042-1-tobin@linux.ibm.com> References: <20210302204839.82042-1-tobin@linux.ibm.com> MIME-Version: 1.0 X-TM-AS-GCONF: 00 Precedence: Bulk List-Unsubscribe: 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,tobin@linux.ibm.com X-Gm-Message-State: GTZjJMMBFMbw3E1fDGMWMVZSx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1614718149; bh=2wUX5IKHeDcgFjaNRlDzCl2sRzbiXqGh983/AZBmsjE=; h=Cc:Date:From:Reply-To:Subject:To; b=gh6VTtP2zg6YUtW5cGsBiZwnNNxRhDHsatBBRU/o0pxEzKj8Q2lcXSIR21fBC6T3RlO AdpVXMfEeu3ISSYFCE22wclVwVM09rPRcAZpwXXwx92hNUi2IyJFQsfLWcXw+DBFCtu44 jCHXyV+KI+tyVN31PEGWHV12w5AaNH+nE50= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" Confidential Migration relies on two boolean PCDs set from FW_CFG Signed-off-by: Tobin Feldman-Fitzthum --- OvmfPkg/PlatformPei/PlatformPei.inf | 2 ++ OvmfPkg/PlatformPei/Platform.c | 10 ++++++++++ 2 files changed, 12 insertions(+) diff --git a/OvmfPkg/PlatformPei/PlatformPei.inf b/OvmfPkg/PlatformPei/Plat= formPei.inf index 6ef77ba7bb..66e6fcfa4f 100644 --- a/OvmfPkg/PlatformPei/PlatformPei.inf +++ b/OvmfPkg/PlatformPei/PlatformPei.inf @@ -92,6 +92,8 @@ gUefiOvmfPkgTokenSpaceGuid.PcdOvmfDecompressionScratchEnd gUefiOvmfPkgTokenSpaceGuid.PcdQ35TsegMbytes gUefiOvmfPkgTokenSpaceGuid.PcdQ35SmramAtDefaultSmbase + gUefiOvmfPkgTokenSpaceGuid.PcdStartConfidentialMigrationHandler + gUefiOvmfPkgTokenSpaceGuid.PcdIsConfidentialMigrationTarget gEfiMdePkgTokenSpaceGuid.PcdGuidedExtractHandlerTableAddress gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize diff --git a/OvmfPkg/PlatformPei/Platform.c b/OvmfPkg/PlatformPei/Platform.c index 96468701e3..5926c8d414 100644 --- a/OvmfPkg/PlatformPei/Platform.c +++ b/OvmfPkg/PlatformPei/Platform.c @@ -275,6 +275,15 @@ NoexecDxeInitialization ( UPDATE_BOOLEAN_PCD_FROM_FW_CFG (PcdSetNxForStack); } =20 +VOID +ConfidentialMigrationInitialization ( + VOID + ) +{ + UPDATE_BOOLEAN_PCD_FROM_FW_CFG (PcdStartConfidentialMigrationHandler); + UPDATE_BOOLEAN_PCD_FROM_FW_CFG (PcdIsConfidentialMigrationTarget); +} + VOID PciExBarInitialization ( VOID @@ -752,6 +761,7 @@ InitializePlatform ( =20 InstallClearCacheCallback (); AmdSevInitialize (); + ConfidentialMigrationInitialization (); MiscInitialization (); InstallFeatureControlCallback (); =20 --=20 2.20.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 (#72357): https://edk2.groups.io/g/devel/message/72357 Mute This Topic: https://groups.io/mt/81036371/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- From nobody Tue May 7 20:49:47 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+72356+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+72356+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1614718143; cv=none; d=zohomail.com; s=zohoarc; b=fRo5+ZiCIFia0kybkSk7PptWR/3h8BVS6lxt4vUD/ZmviQ7z3yx74wWc1Ev4TsBwo1JgjGnox77u0Ptch5V9XoCYAu2WHytR37CQ+dfp+sulTDThTj92ujMkTBU2kMGvcgX7lCCSq6jb3dZibwYiBfE6Ql8sgI8PEm5Yd65GYIQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614718143; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=6SSHJAd+vJzyUJborHjZYio/FEQE1hktNCMNu2cngj8=; b=LcOoiBxIRGQ7lnw+tDb1gHa9H/AIyDMXuMMDNFAGkONWehsY4AnCO0MpcG3Q2E/b3sysXnwlVmxxk8/HObsf6+7Js1mSE4Qepg1ELI6wWBDLWj7hQrdkb8MiAJlDn3RNWMAnAidz9L39iCwmilg6qnObiC06/ghAs1y9QQ/8fh0= ARC-Authentication-Results: i=1; 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+72356+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) header.from= Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1614718143668224.3715958236861; Tue, 2 Mar 2021 12:49:03 -0800 (PST) Return-Path: X-Received: by 127.0.0.2 with SMTP id hDMUYY1788612xFZXVajuVRR; Tue, 02 Mar 2021 12:49:03 -0800 X-Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) by mx.groups.io with SMTP id smtpd.web11.429.1614718135742541507 for ; Tue, 02 Mar 2021 12:48:55 -0800 X-Received: from pps.filterd (m0098421.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id 122KhIUu124625; Tue, 2 Mar 2021 15:48:53 -0500 X-Received: from ppma03wdc.us.ibm.com (ba.79.3fa9.ip4.static.sl-reverse.com [169.63.121.186]) by mx0a-001b2d01.pphosted.com with ESMTP id 371vn7r7uw-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 02 Mar 2021 15:48:53 -0500 X-Received: from pps.filterd (ppma03wdc.us.ibm.com [127.0.0.1]) by ppma03wdc.us.ibm.com (8.16.0.42/8.16.0.42) with SMTP id 122KmYdH025964; Tue, 2 Mar 2021 20:48:52 GMT X-Received: from b03cxnp08028.gho.boulder.ibm.com (b03cxnp08028.gho.boulder.ibm.com [9.17.130.20]) by ppma03wdc.us.ibm.com with ESMTP id 37128ga1y4-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 02 Mar 2021 20:48:52 +0000 X-Received: from b03ledav006.gho.boulder.ibm.com (b03ledav006.gho.boulder.ibm.com [9.17.130.237]) by b03cxnp08028.gho.boulder.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 122KmocI37028240 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 2 Mar 2021 20:48:50 GMT X-Received: from b03ledav006.gho.boulder.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 66550C605B; Tue, 2 Mar 2021 20:48:50 +0000 (GMT) X-Received: from b03ledav006.gho.boulder.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id D1216C6061; Tue, 2 Mar 2021 20:48:49 +0000 (GMT) X-Received: from amdrome1.watson.ibm.com (unknown [9.2.130.16]) by b03ledav006.gho.boulder.ibm.com (Postfix) with ESMTP; Tue, 2 Mar 2021 20:48:49 +0000 (GMT) From: "Tobin Feldman-Fitzthum" To: devel@edk2.groups.io Cc: Dov Murik , Tobin Feldman-Fitzthum , Tobin Feldman-Fitzthum , James Bottomley , Hubertus Franke , Brijesh Singh , Ashish Kalra , Jon Grimm , Tom Lendacky Subject: [edk2-devel] [RFC PATCH 06/14] OvmfPkg/AmdSev: Setup Migration Handler Mailbox Date: Tue, 2 Mar 2021 15:48:31 -0500 Message-Id: <20210302204839.82042-7-tobin@linux.ibm.com> In-Reply-To: <20210302204839.82042-1-tobin@linux.ibm.com> References: <20210302204839.82042-1-tobin@linux.ibm.com> MIME-Version: 1.0 X-TM-AS-GCONF: 00 Precedence: Bulk List-Unsubscribe: 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,tobin@linux.ibm.com X-Gm-Message-State: 8EzANq3XhMcr4aFslwBjLCysx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1614718143; bh=ImJQAOFTTwEDqJhV8QPr5lvhTfnbNPTsr+A9Ewia4Qo=; h=Cc:Date:From:Reply-To:Subject:To; b=s0CXawMdHVauDUuDXd4CMl25SZOBzJmE8EN50WP2ZVc/LBh+ubUt+eVFHBhAA2Ej6Yv UMwNT4oZcV2Pn3azFYgCVT0PzECyr3jY5mdjMKGYWk6QxcB0vYiQ7M1kga72tEG014/5n zaMI2HZOjm6YAQuneMaOkJnVhgsvNGGyu6k= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" The migration handler communicates with the hypervisor using a special mailbox, a page of shared memory where pending commands can be written. Another shared page is used to pass the incoming or outgoing guest memory pages. These pages are set aside in MEMFD, which this patch expands, and reserved as runtime memory in ConfidentialMigrationPei, which this patch introduces. Signed-off-by: Tobin Feldman-Fitzthum --- OvmfPkg/OvmfPkg.dec | 5 +++ OvmfPkg/AmdSev/AmdSevX64.dsc | 1 + OvmfPkg/AmdSev/AmdSevX64.fdf | 12 ++++--- .../ConfidentialMigrationPei.inf | 35 +++++++++++++++++++ .../ConfidentialMigrationPei.c | 25 +++++++++++++ 5 files changed, 74 insertions(+), 4 deletions(-) create mode 100644 OvmfPkg/AmdSev/ConfidentialMigration/ConfidentialMigrat= ionPei.inf create mode 100644 OvmfPkg/AmdSev/ConfidentialMigration/ConfidentialMigrat= ionPei.c diff --git a/OvmfPkg/OvmfPkg.dec b/OvmfPkg/OvmfPkg.dec index 402c3b61fa..5c55e3c7c9 100644 --- a/OvmfPkg/OvmfPkg.dec +++ b/OvmfPkg/OvmfPkg.dec @@ -318,6 +318,11 @@ gUefiOvmfPkgTokenSpaceGuid.PcdSevLaunchSecretBase|0x0|UINT32|0x42 gUefiOvmfPkgTokenSpaceGuid.PcdSevLaunchSecretSize|0x0|UINT32|0x43 =20 + ## Area used by the confidential migration handler to communicate with + # the hypervisor. + gUefiOvmfPkgTokenSpaceGuid.PcdConfidentialMigrationMailboxBase|0x0|UINT3= 2|0x48 + gUefiOvmfPkgTokenSpaceGuid.PcdConfidentialMigrationMailboxSize|0x0|UINT3= 2|0x49 + [PcdsDynamic, PcdsDynamicEx] gUefiOvmfPkgTokenSpaceGuid.PcdEmuVariableEvent|0|UINT64|2 gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFlashVariablesEnable|FALSE|BOOLEAN|0x10 diff --git a/OvmfPkg/AmdSev/AmdSevX64.dsc b/OvmfPkg/AmdSev/AmdSevX64.dsc index fa68143663..4f748a0015 100644 --- a/OvmfPkg/AmdSev/AmdSevX64.dsc +++ b/OvmfPkg/AmdSev/AmdSevX64.dsc @@ -620,6 +620,7 @@ UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume2Pei.inf UefiCpuPkg/CpuMpPei/CpuMpPei.inf OvmfPkg/AmdSev/SecretPei/SecretPei.inf + OvmfPkg/AmdSev/ConfidentialMigration/ConfidentialMigrationPei.inf =20 !if $(TPM_ENABLE) =3D=3D TRUE OvmfPkg/Tcg/Tcg2Config/Tcg2ConfigPei.inf diff --git a/OvmfPkg/AmdSev/AmdSevX64.fdf b/OvmfPkg/AmdSev/AmdSevX64.fdf index 6ef6dc89f2..94468f2ca0 100644 --- a/OvmfPkg/AmdSev/AmdSevX64.fdf +++ b/OvmfPkg/AmdSev/AmdSevX64.fdf @@ -36,10 +36,10 @@ FV =3D SECFV =20 [FD.MEMFD] BaseAddress =3D $(MEMFD_BASE_ADDRESS) -Size =3D 0xD00000 +Size =3D 0xE00000 ErasePolarity =3D 1 BlockSize =3D 0x10000 -NumBlocks =3D 0xD0 +NumBlocks =3D 0xE0 =20 0x000000|0x006000 gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPageTablesBase|gUefiOvmfPkgTokenSpace= Guid.PcdOvmfSecPageTablesSize @@ -68,11 +68,14 @@ gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecGhcbBackupBase|gUe= fiOvmfPkgTokenSpaceGuid.P 0x010000|0x010000 gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPeiTempRamBase|gUefiOvmfPkgTokenSpace= Guid.PcdOvmfSecPeiTempRamSize =20 -0x020000|0x0E0000 +0x020000|0x003000 +gUefiOvmfPkgTokenSpaceGuid.PcdConfidentialMigrationMailboxBase|gUefiOvmfPk= gTokenSpaceGuid.PcdConfidentialMigrationMailboxSize + +0x120000|0x0E0000 gUefiOvmfPkgTokenSpaceGuid.PcdOvmfPeiMemFvBase|gUefiOvmfPkgTokenSpaceGuid.= PcdOvmfPeiMemFvSize FV =3D PEIFV =20 -0x100000|0xC00000 +0x200000|0xC00000 gUefiOvmfPkgTokenSpaceGuid.PcdOvmfDxeMemFvBase|gUefiOvmfPkgTokenSpaceGuid.= PcdOvmfDxeMemFvSize FV =3D DXEFV =20 @@ -145,6 +148,7 @@ INF MdeModulePkg/Core/DxeIplPeim/DxeIpl.inf INF UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume2Pei.inf INF UefiCpuPkg/CpuMpPei/CpuMpPei.inf INF OvmfPkg/AmdSev/SecretPei/SecretPei.inf +INF OvmfPkg/AmdSev/ConfidentialMigration/ConfidentialMigrationPei.inf =20 !if $(TPM_ENABLE) =3D=3D TRUE INF OvmfPkg/Tcg/Tcg2Config/Tcg2ConfigPei.inf diff --git a/OvmfPkg/AmdSev/ConfidentialMigration/ConfidentialMigrationPei.= inf b/OvmfPkg/AmdSev/ConfidentialMigration/ConfidentialMigrationPei.inf new file mode 100644 index 0000000000..918cf22abd --- /dev/null +++ b/OvmfPkg/AmdSev/ConfidentialMigration/ConfidentialMigrationPei.inf @@ -0,0 +1,35 @@ +## @file +# PEI support for confidential migration. +# +# Copyright (C) 2021 IBM Corporation. +# +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +## + +[Defines] + INF_VERSION =3D 0x00010005 + BASE_NAME =3D ConfidentialMigration + FILE_GUID =3D a747792e-71a1-4c24-84a9-a76a0a279878 + MODULE_TYPE =3D PEIM + VERSION_STRING =3D 1.0 + ENTRY_POINT =3D InitializeConfidentialMigrationPei + +[Sources] + ConfidentialMigrationPei.c + +[Packages] + OvmfPkg/OvmfPkg.dec + MdePkg/MdePkg.dec + +[LibraryClasses] + HobLib + PeimEntryPoint + PcdLib + +[FixedPcd] + gUefiOvmfPkgTokenSpaceGuid.PcdConfidentialMigrationMailboxBase + gUefiOvmfPkgTokenSpaceGuid.PcdConfidentialMigrationMailboxSize + +[Depex] + TRUE diff --git a/OvmfPkg/AmdSev/ConfidentialMigration/ConfidentialMigrationPei.= c b/OvmfPkg/AmdSev/ConfidentialMigration/ConfidentialMigrationPei.c new file mode 100644 index 0000000000..ce304bc07b --- /dev/null +++ b/OvmfPkg/AmdSev/ConfidentialMigration/ConfidentialMigrationPei.c @@ -0,0 +1,25 @@ +/** @file + Reserve memory for confidential migration handler. + + Copyright (C) 2020 IBM Corporation. + SPDX-License-Identifier: BSD-2-Clause-Patent +**/ +#include +#include +#include + +EFI_STATUS +EFIAPI +InitializeConfidentialMigrationPei ( + IN EFI_PEI_FILE_HANDLE FileHandle, + IN CONST EFI_PEI_SERVICES **PeiServices + ) +{ + BuildMemoryAllocationHob ( + PcdGet32 (PcdConfidentialMigrationMailboxBase), + PcdGet32 (PcdConfidentialMigrationMailboxSize), + EfiRuntimeServicesData + ); + + return EFI_SUCCESS; +} --=20 2.20.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 (#72356): https://edk2.groups.io/g/devel/message/72356 Mute This Topic: https://groups.io/mt/81036370/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- From nobody Tue May 7 20:49:47 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+72365+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+72365+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1614718197; cv=none; d=zohomail.com; s=zohoarc; b=YqLoFWk8SaTermsNab2aqImq2WRQeyFwXecYyO8T0jjjaHUzwS3DLUuQs10/PREfemz90PCviq5qyEVoVT5RUaR5Px14PoP6FqKFoFeK0hqNLTOD9khfii6LGeD6r7ZMVRyimqEWUSCHwm5X1sLvt0UXOh9ZYfm9mg5DLq6pukM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614718197; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=jwTHAi22yj5nLXjZ01QMRnI7aZW+vbxUTtG8yka6fkU=; b=bXCRF9lhq+GSQ4kkIdP6IkZUJ2gLTvhWo016aDWq3Q2Gfbk87+F0/PMqM1k71vKmE8pvlrHnN8Blqdnszu+RaIF2RebhjL3NmDqChEAKRYDLeIMea7OsovblyELhTGuGE+nxR3k2+3Afs0Tvy0bnr40sJkKZfpUZ5qyIC3lFajc= ARC-Authentication-Results: i=1; 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+72365+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) header.from= Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1614718197922688.7518253515582; Tue, 2 Mar 2021 12:49:57 -0800 (PST) Return-Path: X-Received: by 127.0.0.2 with SMTP id DPrgYY1788612xBxcaJpNdGN; Tue, 02 Mar 2021 12:49:57 -0800 X-Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) by mx.groups.io with SMTP id smtpd.web08.482.1614718196826762954 for ; Tue, 02 Mar 2021 12:49:57 -0800 X-Received: from pps.filterd (m0098421.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id 122KhJHk124690; Tue, 2 Mar 2021 15:49:54 -0500 X-Received: from ppma03dal.us.ibm.com (b.bd.3ea9.ip4.static.sl-reverse.com [169.62.189.11]) by mx0a-001b2d01.pphosted.com with ESMTP id 371vn7r8un-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 02 Mar 2021 15:49:54 -0500 X-Received: from pps.filterd (ppma03dal.us.ibm.com [127.0.0.1]) by ppma03dal.us.ibm.com (8.16.0.42/8.16.0.42) with SMTP id 122Km8v4014171; Tue, 2 Mar 2021 20:48:53 GMT X-Received: from b03cxnp07027.gho.boulder.ibm.com (b03cxnp07027.gho.boulder.ibm.com [9.17.130.14]) by ppma03dal.us.ibm.com with ESMTP id 37103w5sk0-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 02 Mar 2021 20:48:53 +0000 X-Received: from b03ledav006.gho.boulder.ibm.com (b03ledav006.gho.boulder.ibm.com [9.17.130.237]) by b03cxnp07027.gho.boulder.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 122KmpY917563910 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 2 Mar 2021 20:48:51 GMT X-Received: from b03ledav006.gho.boulder.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 109FCC605B; Tue, 2 Mar 2021 20:48:51 +0000 (GMT) X-Received: from b03ledav006.gho.boulder.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 7C15BC6055; Tue, 2 Mar 2021 20:48:50 +0000 (GMT) X-Received: from amdrome1.watson.ibm.com (unknown [9.2.130.16]) by b03ledav006.gho.boulder.ibm.com (Postfix) with ESMTP; Tue, 2 Mar 2021 20:48:50 +0000 (GMT) From: "Tobin Feldman-Fitzthum" To: devel@edk2.groups.io Cc: Dov Murik , Tobin Feldman-Fitzthum , Tobin Feldman-Fitzthum , James Bottomley , Hubertus Franke , Brijesh Singh , Ashish Kalra , Jon Grimm , Tom Lendacky Subject: [edk2-devel] [RFC PATCH 07/14] OvmfPkg/AmdSev: MH support for mailbox protocol Date: Tue, 2 Mar 2021 15:48:32 -0500 Message-Id: <20210302204839.82042-8-tobin@linux.ibm.com> In-Reply-To: <20210302204839.82042-1-tobin@linux.ibm.com> References: <20210302204839.82042-1-tobin@linux.ibm.com> MIME-Version: 1.0 X-TM-AS-GCONF: 00 Precedence: Bulk List-Unsubscribe: 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,tobin@linux.ibm.com X-Gm-Message-State: 8celPlfKrlwkc8PK8mLiWc7Vx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1614718197; bh=C9IHICFcSiuXjlTmKifD/fB6GRsEqtFw+9wLRjiVASw=; h=Cc:Date:From:Reply-To:Subject:To; b=acB45wqz83LyEyQKYqA44DYy4ExZZNW26tzQYbGG+rGopsa4hsIR1gngwpfJmafLFpY msHMJSna4DhpOSvOzD6Xw4uIpoEPOWPmyMCvBnFimE0drktowj/IvFyalK/OtbKYxBUHe apaqjGFSITSlp445LAX6ZlryTOsbeUAR/Bc= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" The migration handler communicates with the hypervisor via a shared mailbox page. The MH can perform four functions at the behest of the HV: init, save page, restore page, and reset. Signed-off-by: Tobin Feldman-Fitzthum --- .../ConfidentialMigrationDxe.inf | 1 + .../ConfidentialMigrationDxe.c | 78 +++++++++++++++++++ 2 files changed, 79 insertions(+) diff --git a/OvmfPkg/AmdSev/ConfidentialMigration/ConfidentialMigrationDxe.= inf b/OvmfPkg/AmdSev/ConfidentialMigration/ConfidentialMigrationDxe.inf index a4906a2451..49457d5d17 100644 --- a/OvmfPkg/AmdSev/ConfidentialMigration/ConfidentialMigrationDxe.inf +++ b/OvmfPkg/AmdSev/ConfidentialMigration/ConfidentialMigrationDxe.inf @@ -34,6 +34,7 @@ [Pcd] gUefiOvmfPkgTokenSpaceGuid.PcdIsConfidentialMigrationTarget gUefiOvmfPkgTokenSpaceGuid.PcdStartConfidentialMigrationHandler + gUefiOvmfPkgTokenSpaceGuid.PcdConfidentialMigrationMailboxBase =20 [Depex] gEfiMpServiceProtocolGuid diff --git a/OvmfPkg/AmdSev/ConfidentialMigration/ConfidentialMigrationDxe.= c b/OvmfPkg/AmdSev/ConfidentialMigration/ConfidentialMigrationDxe.c index 6d9fe7043b..8402fcc4fa 100644 --- a/OvmfPkg/AmdSev/ConfidentialMigration/ConfidentialMigrationDxe.c +++ b/OvmfPkg/AmdSev/ConfidentialMigration/ConfidentialMigrationDxe.c @@ -9,16 +9,94 @@ #include #include #include +#include =20 +// +// Functions implemented by the migration handler +// +#define MH_FUNC_INIT 0 +#define MH_FUNC_SAVE_PAGE 1 +#define MH_FUNC_RESTORE_PAGE 2 +#define MH_FUNC_RESET 3 + +// +// Return codes for MH functions +// +#define MH_SUCCESS 0 +#define MH_INVALID_FUNC (-1) +#define MH_AUTH_ERR (-2) + +// +// Index of CPU that MH runs on. +// UINTN MigrationHandlerCpuIndex; =20 +// +// Mailbox for communication with hypervisor +// +typedef volatile struct { + UINT64 nr; + UINT64 gpa; + UINT32 do_prefetch; + UINT32 ret; + UINT32 go; + UINT32 done; +} MH_COMMAND_PARAMETERS; + + VOID EFIAPI MigrationHandlerMain ( IN OUT VOID *Buffer ) { + UINT64 params_base; + MH_COMMAND_PARAMETERS *params; + VOID *page_va; + DebugPrint (DEBUG_INFO,"MIGRATION Handler Started\n"); + + params_base =3D PcdGet32 (PcdConfidentialMigrationMailboxBase); + params =3D (VOID *)params_base; + page_va =3D (VOID *)params_base + 0x1000; + + DisableInterrupts(); + params->go =3D 0; + + while (1) { + while (!params->go) { + CpuPause(); + } + params->done =3D 0; + + switch (params->nr) { + case MH_FUNC_INIT: + params->ret =3D MH_SUCCESS; + break; + + case MH_FUNC_SAVE_PAGE: + CopyMem(page_va, (VOID *)params->gpa, 4096); + params->ret =3D MH_SUCCESS; + break; + + case MH_FUNC_RESTORE_PAGE: + CopyMem((VOID *)params->gpa, page_va, 4096); + params->ret =3D MH_SUCCESS; + break; + + case MH_FUNC_RESET: + params->ret =3D MH_SUCCESS; + break; + + default: + params->ret =3D MH_INVALID_FUNC; + break; + } + + params->go =3D 0; + params->done =3D 1; + + } } =20 EFI_STATUS --=20 2.20.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 (#72365): https://edk2.groups.io/g/devel/message/72365 Mute This Topic: https://groups.io/mt/81036401/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- From nobody Tue May 7 20:49:47 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+72358+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+72358+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1614718149; cv=none; d=zohomail.com; s=zohoarc; b=l4xWFvAn4TW6XNvMopze5S9sS8HhHYJetnrMHdlopCELDh2OpLZJkgCG4aSlU4Nz1d2dfdcYqlb+wu/unInrGRsntcW9z6hUyhV0uMV5lKCn/iCCX0YWJ/Na6HoPQVkhefgwBWISWzVnZTWJLDxFs2nZnXiDQMEVFxp60pQ1vAc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614718149; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=9JRmdnWqHJVWxYsjE+aqLIZryTFUPsMuHL8qSdYYoRw=; b=J7IZxBbhn21pIz/IkXAD3d/b1rCECMfkPghTCN/fFu+uDqpoB74NuRFr5jU1wWqelAlcg+cbGCfNzlsERQ873/pJLiY+G5tFGA3HKtzdoBm8giclBsnr1FvoZdj1dc8MqD71l3vGWDt3IjQPs6OCXOPcIdZJaAjxwOmANgrkqXw= ARC-Authentication-Results: i=1; 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+72358+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) header.from= Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1614718149981804.2443553541718; Tue, 2 Mar 2021 12:49:09 -0800 (PST) Return-Path: X-Received: by 127.0.0.2 with SMTP id sgzPYY1788612xQDbcGtQESS; Tue, 02 Mar 2021 12:49:09 -0800 X-Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) by mx.groups.io with SMTP id smtpd.web09.445.1614718137955573779 for ; Tue, 02 Mar 2021 12:48:57 -0800 X-Received: from pps.filterd (m0098410.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id 122Khg5x086245; Tue, 2 Mar 2021 15:48:55 -0500 X-Received: from ppma05wdc.us.ibm.com (1b.90.2fa9.ip4.static.sl-reverse.com [169.47.144.27]) by mx0a-001b2d01.pphosted.com with ESMTP id 371vncg7y5-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 02 Mar 2021 15:48:55 -0500 X-Received: from pps.filterd (ppma05wdc.us.ibm.com [127.0.0.1]) by ppma05wdc.us.ibm.com (8.16.0.42/8.16.0.42) with SMTP id 122KmN6S016543; Tue, 2 Mar 2021 20:48:53 GMT X-Received: from b03cxnp07027.gho.boulder.ibm.com (b03cxnp07027.gho.boulder.ibm.com [9.17.130.14]) by ppma05wdc.us.ibm.com with ESMTP id 371b00xpys-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 02 Mar 2021 20:48:53 +0000 X-Received: from b03ledav006.gho.boulder.ibm.com (b03ledav006.gho.boulder.ibm.com [9.17.130.237]) by b03cxnp07027.gho.boulder.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 122Kmpqs27918626 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 2 Mar 2021 20:48:51 GMT X-Received: from b03ledav006.gho.boulder.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id AFE06C6057; Tue, 2 Mar 2021 20:48:51 +0000 (GMT) X-Received: from b03ledav006.gho.boulder.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 268CBC6055; Tue, 2 Mar 2021 20:48:51 +0000 (GMT) X-Received: from amdrome1.watson.ibm.com (unknown [9.2.130.16]) by b03ledav006.gho.boulder.ibm.com (Postfix) with ESMTP; Tue, 2 Mar 2021 20:48:51 +0000 (GMT) From: "Tobin Feldman-Fitzthum" To: devel@edk2.groups.io Cc: Dov Murik , Tobin Feldman-Fitzthum , Tobin Feldman-Fitzthum , James Bottomley , Hubertus Franke , Brijesh Singh , Ashish Kalra , Jon Grimm , Tom Lendacky Subject: [edk2-devel] [RFC PATCH 08/14] UefiCpuPkg/MpInitLib: temp removal of MpLib cleanup Date: Tue, 2 Mar 2021 15:48:33 -0500 Message-Id: <20210302204839.82042-9-tobin@linux.ibm.com> In-Reply-To: <20210302204839.82042-1-tobin@linux.ibm.com> References: <20210302204839.82042-1-tobin@linux.ibm.com> MIME-Version: 1.0 X-TM-AS-GCONF: 00 Precedence: Bulk List-Unsubscribe: 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,tobin@linux.ibm.com X-Gm-Message-State: r0BRBbwuniAT05w78DcAAJNbx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1614718149; bh=HHlMXDKJoJaYC8CWYKKDyGhNH6PvO4uhLWlgbhP+gEo=; h=Cc:Date:From:Reply-To:Subject:To; b=v0LMRkX4SIURpWd6AU1klqKD+9xMmVvWrjXPRVJI4fCz6Nz+MqBa8bfLEOXU1jJYdiB FU0zTK65YXvssBPjb+X3sbxRWJGgmYfTmfMbMzSFATzrpUsx0ky1seXu39qJqmd3LYktJ Ba5GkYllWUlh2mmNj/jJY+iv9ultJJtUGa0= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" The Migration Handdler is started using the Mp Service, which is only designed to function during boot time. The MH needs to run continuously. In the abscence of a generalized persitent Mp Service, temporary alterations were made to keep the MH running. Here, we skip registering the ExitBootServices callback that would normally clean up the APs. Obviously this is not suitable for production, as it does not generalize for multiple APs (it leaves all APs untouched rather than just the MH) and it introduces a weird dependency where the MpLib needs an OVMF PCD. Signed-off-by: Tobin Feldman-Fitzthum --- UefiCpuPkg/Library/MpInitLib/DxeMpInitLib.inf | 2 ++ UefiCpuPkg/Library/MpInitLib/DxeMpLib.c | 21 ++++++++++++------- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/UefiCpuPkg/Library/MpInitLib/DxeMpInitLib.inf b/UefiCpuPkg/Lib= rary/MpInitLib/DxeMpInitLib.inf index 1771575c69..71cc968de8 100644 --- a/UefiCpuPkg/Library/MpInitLib/DxeMpInitLib.inf +++ b/UefiCpuPkg/Library/MpInitLib/DxeMpInitLib.inf @@ -39,6 +39,7 @@ MdePkg/MdePkg.dec MdeModulePkg/MdeModulePkg.dec UefiCpuPkg/UefiCpuPkg.dec + OvmfPkg/OvmfPkg.dec =20 [LibraryClasses] BaseLib @@ -76,3 +77,4 @@ gUefiCpuPkgTokenSpaceGuid.PcdSevEsWorkAreaBase ## = SOMETIMES_CONSUMES gEfiMdeModulePkgTokenSpaceGuid.PcdCpuStackGuard ## = CONSUMES gEfiMdeModulePkgTokenSpaceGuid.PcdGhcbBase ## = CONSUMES + gUefiOvmfPkgTokenSpaceGuid.PcdStartConfidentialMigrationHandler diff --git a/UefiCpuPkg/Library/MpInitLib/DxeMpLib.c b/UefiCpuPkg/Library/M= pInitLib/DxeMpLib.c index 7839c24976..7d59ec4a92 100644 --- a/UefiCpuPkg/Library/MpInitLib/DxeMpLib.c +++ b/UefiCpuPkg/Library/MpInitLib/DxeMpLib.c @@ -569,14 +569,19 @@ InitMpGlobalData ( ); ASSERT_EFI_ERROR (Status); =20 - Status =3D gBS->CreateEvent ( - EVT_SIGNAL_EXIT_BOOT_SERVICES, - TPL_CALLBACK, - MpInitChangeApLoopCallback, - NULL, - &mMpInitExitBootServicesEvent - ); - ASSERT_EFI_ERROR (Status); + // + // Workaround for persistent processes . + // + if (!PcdGetBool (PcdStartConfidentialMigrationHandler)) { + Status =3D gBS->CreateEvent ( + EVT_SIGNAL_EXIT_BOOT_SERVICES, + TPL_CALLBACK, + MpInitChangeApLoopCallback, + NULL, + &mMpInitExitBootServicesEvent + ); + ASSERT_EFI_ERROR (Status); + } =20 Status =3D gBS->CreateEventEx ( EVT_NOTIFY_SIGNAL, --=20 2.20.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 (#72358): https://edk2.groups.io/g/devel/message/72358 Mute This Topic: https://groups.io/mt/81036373/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- From nobody Tue May 7 20:49:47 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+72359+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+72359+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1614718146; cv=none; d=zohomail.com; s=zohoarc; b=HVJLBv7WY7dOhjTWW8Ky1QO09+KW7f0z7WHLIF0Ks5mMdF5AEnsH8Hs0TEwG3QFuB0apumxu5l/ZFzoelgvf2rJ959aHKaH6o76Q4SA+z+VSs+7J3ndJkRDXlRywFXHv/nFbXaiFmaEfPKTtZTuP6NGkv87CjeBt+Q15N7HDfnA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614718146; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=3pfsp2oa214eWXzzw8jIRxwlBSkFPFK9e4LGDgGPvrw=; b=DpqBLKfFnwjeX6EF3I6aXDffmjJWKe5PG0uR2MszCGzy/s41wIyiAbXjk/PzxF790q4v4Gtu1mqQCTHHB0XYjfE9e57hCFBbpa1Qz5BQr83Da6rqD8CY453DSqK2JvJPSPI0L9pM31ywtRUqWtNiAUnFLn52g1cn7SLQdz4OvAQ= ARC-Authentication-Results: i=1; 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+72359+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) header.from= Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1614718146744284.2454898005393; Tue, 2 Mar 2021 12:49:06 -0800 (PST) Return-Path: X-Received: by 127.0.0.2 with SMTP id 2WCnYY1788612xPWMPHdCngH; Tue, 02 Mar 2021 12:49:06 -0800 X-Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) by mx.groups.io with SMTP id smtpd.web10.452.1614718138162249741 for ; Tue, 02 Mar 2021 12:48:58 -0800 X-Received: from pps.filterd (m0098394.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id 122KiMNV068644; Tue, 2 Mar 2021 15:48:55 -0500 X-Received: from ppma03wdc.us.ibm.com (ba.79.3fa9.ip4.static.sl-reverse.com [169.63.121.186]) by mx0a-001b2d01.pphosted.com with ESMTP id 371vnf86ke-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 02 Mar 2021 15:48:55 -0500 X-Received: from pps.filterd (ppma03wdc.us.ibm.com [127.0.0.1]) by ppma03wdc.us.ibm.com (8.16.0.42/8.16.0.42) with SMTP id 122KmYDT025969; Tue, 2 Mar 2021 20:48:54 GMT X-Received: from b03cxnp07028.gho.boulder.ibm.com (b03cxnp07028.gho.boulder.ibm.com [9.17.130.15]) by ppma03wdc.us.ibm.com with ESMTP id 37128ga1yj-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 02 Mar 2021 20:48:54 +0000 X-Received: from b03ledav006.gho.boulder.ibm.com (b03ledav006.gho.boulder.ibm.com [9.17.130.237]) by b03cxnp07028.gho.boulder.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 122KmqoB26870102 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 2 Mar 2021 20:48:52 GMT X-Received: from b03ledav006.gho.boulder.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 59F47C6057; Tue, 2 Mar 2021 20:48:52 +0000 (GMT) X-Received: from b03ledav006.gho.boulder.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id C5923C6055; Tue, 2 Mar 2021 20:48:51 +0000 (GMT) X-Received: from amdrome1.watson.ibm.com (unknown [9.2.130.16]) by b03ledav006.gho.boulder.ibm.com (Postfix) with ESMTP; Tue, 2 Mar 2021 20:48:51 +0000 (GMT) From: "Tobin Feldman-Fitzthum" To: devel@edk2.groups.io Cc: Dov Murik , Tobin Feldman-Fitzthum , Tobin Feldman-Fitzthum , James Bottomley , Hubertus Franke , Brijesh Singh , Ashish Kalra , Jon Grimm , Tom Lendacky Subject: [edk2-devel] [RFC PATCH 09/14] UefiCpuPkg/MpInitLib: Allocate MP buffer as runtime memory Date: Tue, 2 Mar 2021 15:48:34 -0500 Message-Id: <20210302204839.82042-10-tobin@linux.ibm.com> In-Reply-To: <20210302204839.82042-1-tobin@linux.ibm.com> References: <20210302204839.82042-1-tobin@linux.ibm.com> MIME-Version: 1.0 X-TM-AS-GCONF: 00 Precedence: Bulk List-Unsubscribe: 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,tobin@linux.ibm.com X-Gm-Message-State: qBA0sDASDKUogxKLU6ZxEcdvx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1614718146; bh=Bea9JlEPzmHJjdvFtF3ZmCMfIWRKExhYJ9WMZHaGWtg=; h=Cc:Date:From:Reply-To:Subject:To; b=gWjZ38P9PFsawlff6RagjpuciuqW37Ypzr+RVVEdwnyWEgj9Uva68N7cc21Dmw5/Nd/ QEXprrzEgdaXCUxFY8mtIpW3/d882dekNZp86YFIWGMx+BFfjJ+7ZuYQMtKugKCxEJ4X5 Xznac3KXdn//kdlow8QlsrpXkKuAmRKn7H0= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" Another temporary change to support the persistence of the MH. The Mp buffer needs to be allocated as runtime memory or it may be overwritten by the OS. Signed-off-by: Tobin Feldman-Fitzthum --- UefiCpuPkg/Library/MpInitLib/PeiMpInitLib.inf | 2 ++ UefiCpuPkg/Library/MpInitLib/MpLib.c | 7 ++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/UefiCpuPkg/Library/MpInitLib/PeiMpInitLib.inf b/UefiCpuPkg/Lib= rary/MpInitLib/PeiMpInitLib.inf index 34abf25d43..0b26cf6aaf 100644 --- a/UefiCpuPkg/Library/MpInitLib/PeiMpInitLib.inf +++ b/UefiCpuPkg/Library/MpInitLib/PeiMpInitLib.inf @@ -39,6 +39,7 @@ MdePkg/MdePkg.dec UefiCpuPkg/UefiCpuPkg.dec MdeModulePkg/MdeModulePkg.dec + OvmfPkg/OvmfPkg.dec =20 [LibraryClasses] BaseLib @@ -65,6 +66,7 @@ gUefiCpuPkgTokenSpaceGuid.PcdSevEsIsEnabled ## CONS= UMES gUefiCpuPkgTokenSpaceGuid.PcdSevEsWorkAreaBase ## SOME= TIMES_CONSUMES gEfiMdeModulePkgTokenSpaceGuid.PcdGhcbBase ## CONS= UMES + gUefiOvmfPkgTokenSpaceGuid.PcdStartConfidentialMigrationHandler =20 [Ppis] gEdkiiPeiShadowMicrocodePpiGuid ## SOMETIMES_CONSUMES diff --git a/UefiCpuPkg/Library/MpInitLib/MpLib.c b/UefiCpuPkg/Library/MpIn= itLib/MpLib.c index 2568986d8c..0ca2858ca3 100644 --- a/UefiCpuPkg/Library/MpInitLib/MpLib.c +++ b/UefiCpuPkg/Library/MpInitLib/MpLib.c @@ -1974,7 +1974,12 @@ MpInitLibInitialize ( BufferSize +=3D VolatileRegisters.Idtr.Limit + 1; BufferSize +=3D sizeof (CPU_MP_DATA); BufferSize +=3D (sizeof (CPU_AP_DATA) + sizeof (CPU_INFO_IN_HOB))* MaxLo= gicalProcessorNumber; - MpBuffer =3D AllocatePages (EFI_SIZE_TO_PAGES (BufferSize)); + if (PcdGetBool (PcdStartConfidentialMigrationHandler)) { + MpBuffer =3D AllocateRuntimePages (EFI_SIZE_TO_PAGES (BufferSize)); + } + else { + MpBuffer =3D AllocatePages (EFI_SIZE_TO_PAGES (BufferSize)); + } ASSERT (MpBuffer !=3D NULL); ZeroMem (MpBuffer, BufferSize); Buffer =3D (UINTN) MpBuffer; --=20 2.20.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 (#72359): https://edk2.groups.io/g/devel/message/72359 Mute This Topic: https://groups.io/mt/81036374/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- From nobody Tue May 7 20:49:47 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+72360+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+72360+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1614718147; cv=none; d=zohomail.com; s=zohoarc; b=CnE+jLpE07ppuDeHwxFc5u3dWEc5K3qygykNuQ+jrSsIn94oB5/CwYb3+u2YeSXQsRNRxJFF3fPTPeBZqhpyVcVS/fD2v1IE6fuPuzH9uHXG3FD6ORYRjaAvCtWI3nhW+SFEjpq90O6+CgB8JICHw280IkPP7RKEDf4aEMCrI1c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614718147; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=bWzhuAGSfZJWYNj4PBTejQrwFiNInxmMW7vb9EEpXHs=; b=Ctw5A5ALWs0biwKRtCwCf8pAe6fp7cPyfdqA5BpOH4/Gc+NkMypJZC46nuaF1P/pTtU0CZkW0ncisBc4TJw457BmjHJ/4M6TTwdbFu7swwouARzDuRZ/wx/J7v0QsdBhXUAGHAUj0rvhuXNZ9BN1UA2arRiaohtSezTQLZFMidE= ARC-Authentication-Results: i=1; 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+72360+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) header.from= Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 16147181475711023.5904107710552; Tue, 2 Mar 2021 12:49:07 -0800 (PST) Return-Path: X-Received: by 127.0.0.2 with SMTP id DuIzYY1788612xkWS3H7UlWv; Tue, 02 Mar 2021 12:49:07 -0800 X-Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) by mx.groups.io with SMTP id smtpd.web09.446.1614718138220924848 for ; Tue, 02 Mar 2021 12:48:58 -0800 X-Received: from pps.filterd (m0098417.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id 122KhJOF167153; Tue, 2 Mar 2021 15:48:56 -0500 X-Received: from ppma01wdc.us.ibm.com (fd.55.37a9.ip4.static.sl-reverse.com [169.55.85.253]) by mx0a-001b2d01.pphosted.com with ESMTP id 371vn488f3-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 02 Mar 2021 15:48:56 -0500 X-Received: from pps.filterd (ppma01wdc.us.ibm.com [127.0.0.1]) by ppma01wdc.us.ibm.com (8.16.0.42/8.16.0.42) with SMTP id 122KbCse026320; Tue, 2 Mar 2021 20:48:55 GMT X-Received: from b03cxnp07029.gho.boulder.ibm.com (b03cxnp07029.gho.boulder.ibm.com [9.17.130.16]) by ppma01wdc.us.ibm.com with ESMTP id 36ydq91sc9-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 02 Mar 2021 20:48:55 +0000 X-Received: from b03ledav006.gho.boulder.ibm.com (b03ledav006.gho.boulder.ibm.com [9.17.130.237]) by b03cxnp07029.gho.boulder.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 122KmrMt49938764 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 2 Mar 2021 20:48:53 GMT X-Received: from b03ledav006.gho.boulder.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 04F60C605B; Tue, 2 Mar 2021 20:48:53 +0000 (GMT) X-Received: from b03ledav006.gho.boulder.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 71294C6055; Tue, 2 Mar 2021 20:48:52 +0000 (GMT) X-Received: from amdrome1.watson.ibm.com (unknown [9.2.130.16]) by b03ledav006.gho.boulder.ibm.com (Postfix) with ESMTP; Tue, 2 Mar 2021 20:48:52 +0000 (GMT) From: "Tobin Feldman-Fitzthum" To: devel@edk2.groups.io Cc: Dov Murik , Tobin Feldman-Fitzthum , Tobin Feldman-Fitzthum , James Bottomley , Hubertus Franke , Brijesh Singh , Ashish Kalra , Jon Grimm , Tom Lendacky Subject: [edk2-devel] [RFC PATCH 10/14] UefiCpuPkg/CpuExceptionHandlerLib: Exception handling as runtime memory Date: Tue, 2 Mar 2021 15:48:35 -0500 Message-Id: <20210302204839.82042-11-tobin@linux.ibm.com> In-Reply-To: <20210302204839.82042-1-tobin@linux.ibm.com> References: <20210302204839.82042-1-tobin@linux.ibm.com> MIME-Version: 1.0 X-TM-AS-GCONF: 00 Precedence: Bulk List-Unsubscribe: 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,tobin@linux.ibm.com X-Gm-Message-State: MxFA2o1o959tHYuuRyQ43IzPx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1614718147; bh=LKfIjpx6Q2xIeWWJm5lT0VaEk1m3Lqiqm4tU8GCjkO0=; h=Cc:Date:From:Reply-To:Subject:To; b=WaTS7O33RLi1QIp8J7J9uULUimwxkuYi0f9jtzkh/FS94gcQqKrWnAYLvIKQmCxgwlP pqUNcNKp5mZiUMfrhTu3YeXA9MTgA/2yoF/kpCMH7ynJJ6MIgY6IHxb2vsR3QufwA+nwq gr7wG/bliueEqrZg5wsqAX3zP02MruCO2eQ= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" Reserve IDT and other exception-related memory as runtime so it won't be overwritten by the OS while the MH is running. Signed-off-by: Tobin Feldman-Fitzthum --- UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeException.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeException.c b/Uef= iCpuPkg/Library/CpuExceptionHandlerLib/DxeException.c index fd59f09ecd..35610f8cf5 100644 --- a/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeException.c +++ b/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeException.c @@ -102,7 +102,7 @@ InitializeCpuInterruptHandlers ( EFI_CPU_INTERRUPT_HANDLER *ExternalInterruptHandler; =20 Status =3D gBS->AllocatePool ( - EfiBootServicesCode, + EfiRuntimeServicesCode, sizeof (RESERVED_VECTORS_DATA) * CPU_INTERRUPT_NUM, (VOID **)&ReservedVectors ); @@ -116,7 +116,7 @@ InitializeCpuInterruptHandlers ( } } =20 - ExternalInterruptHandler =3D AllocateZeroPool (sizeof (EFI_CPU_INTERRUPT= _HANDLER) * CPU_INTERRUPT_NUM); + ExternalInterruptHandler =3D AllocateRuntimeZeroPool (sizeof (EFI_CPU_IN= TERRUPT_HANDLER) * CPU_INTERRUPT_NUM); ASSERT (ExternalInterruptHandler !=3D NULL); =20 // @@ -130,7 +130,7 @@ InitializeCpuInterruptHandlers ( // // Create Interrupt Descriptor Table and Copy the old IDT table in // - IdtTable =3D AllocateZeroPool (sizeof (IA32_IDT_GATE_DESCRIPTOR) * CPU_I= NTERRUPT_NUM); + IdtTable =3D AllocateRuntimeZeroPool (sizeof (IA32_IDT_GATE_DESCRIPTOR) = * CPU_INTERRUPT_NUM); ASSERT (IdtTable !=3D NULL); CopyMem (IdtTable, (VOID *)IdtDescriptor.Base, sizeof (IA32_IDT_GATE_DES= CRIPTOR) * IdtEntryCount); =20 @@ -138,7 +138,7 @@ InitializeCpuInterruptHandlers ( ASSERT (TemplateMap.ExceptionStubHeaderSize <=3D HOOKAFTER_STUB_SIZE); =20 Status =3D gBS->AllocatePool ( - EfiBootServicesCode, + EfiRuntimeServicesCode, TemplateMap.ExceptionStubHeaderSize * CPU_INTERRUPT_NUM, (VOID **)&InterruptEntryCode ); --=20 2.20.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 (#72360): https://edk2.groups.io/g/devel/message/72360 Mute This Topic: https://groups.io/mt/81036375/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- From nobody Tue May 7 20:49:47 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+72364+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+72364+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1614718157; cv=none; d=zohomail.com; s=zohoarc; b=C18K8XoujjXW9vtQwv1VSbE8fkokDO4jt3JhdK9Ui53uEYHy8zUkDw9iobGHKuJhkR6gt+k7j3qsWwpiN97ittq/gLSLqkDoG6lbMLjC6QtsSaVdsfhejwas3BSNRQtzieXkaO8iNWRf4wNwY6isWDIPZ8qMAL+BRCLmnym/4Dw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614718157; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=lZ3v0TJEopDkea6FBfxjoLMFO3v5x08xZglM6KSl3uI=; b=nuNeEZECGjaFNVDjfsjAbHDDjCl2Hi2gFOrP9SKmPuHKHv1Ptxh2ud+ax4mO++kaghnR+31eg0jMzHcjtdbVmqppL4g8TYi/qCVaFLkKZFfJEd/dMuOCpeZ6cCj3x3pyw7mAb6iFYStdsSH+r1BC9ci/KXv2vyp5lMLoTZBMFDY= ARC-Authentication-Results: i=1; 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+72364+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) header.from= Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1614718157959801.7967020035103; Tue, 2 Mar 2021 12:49:17 -0800 (PST) Return-Path: X-Received: by 127.0.0.2 with SMTP id kADFYY1788612x9cmGWowzvq; Tue, 02 Mar 2021 12:49:17 -0800 X-Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) by mx.groups.io with SMTP id smtpd.web09.452.1614718157162035214 for ; Tue, 02 Mar 2021 12:49:17 -0800 X-Received: from pps.filterd (m0098394.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id 122KiGWn064906; Tue, 2 Mar 2021 15:49:13 -0500 X-Received: from ppma01dal.us.ibm.com (83.d6.3fa9.ip4.static.sl-reverse.com [169.63.214.131]) by mx0a-001b2d01.pphosted.com with ESMTP id 371vnf86mq-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 02 Mar 2021 15:49:13 -0500 X-Received: from pps.filterd (ppma01dal.us.ibm.com [127.0.0.1]) by ppma01dal.us.ibm.com (8.16.0.42/8.16.0.42) with SMTP id 122KkqMV028086; Tue, 2 Mar 2021 20:48:56 GMT X-Received: from b03cxnp07029.gho.boulder.ibm.com (b03cxnp07029.gho.boulder.ibm.com [9.17.130.16]) by ppma01dal.us.ibm.com with ESMTP id 371qmuagxv-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 02 Mar 2021 20:48:55 +0000 X-Received: from b03ledav006.gho.boulder.ibm.com (b03ledav006.gho.boulder.ibm.com [9.17.130.237]) by b03cxnp07029.gho.boulder.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 122KmrXx45547812 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 2 Mar 2021 20:48:53 GMT X-Received: from b03ledav006.gho.boulder.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id AD6B3C605B; Tue, 2 Mar 2021 20:48:53 +0000 (GMT) X-Received: from b03ledav006.gho.boulder.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 1B9ABC6055; Tue, 2 Mar 2021 20:48:53 +0000 (GMT) X-Received: from amdrome1.watson.ibm.com (unknown [9.2.130.16]) by b03ledav006.gho.boulder.ibm.com (Postfix) with ESMTP; Tue, 2 Mar 2021 20:48:53 +0000 (GMT) From: "Tobin Feldman-Fitzthum" To: devel@edk2.groups.io Cc: Dov Murik , Tobin Feldman-Fitzthum , Tobin Feldman-Fitzthum , James Bottomley , Hubertus Franke , Brijesh Singh , Ashish Kalra , Jon Grimm , Tom Lendacky Subject: [edk2-devel] [RFC PATCH 11/14] OvmfPkg/AmdSev: Build page table for migration handler Date: Tue, 2 Mar 2021 15:48:36 -0500 Message-Id: <20210302204839.82042-12-tobin@linux.ibm.com> In-Reply-To: <20210302204839.82042-1-tobin@linux.ibm.com> References: <20210302204839.82042-1-tobin@linux.ibm.com> MIME-Version: 1.0 X-TM-AS-GCONF: 00 Precedence: Bulk List-Unsubscribe: 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,tobin@linux.ibm.com X-Gm-Message-State: 8PJyD61Z9KGp6A5cjlVc3SPkx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1614718157; bh=bI09xkzgnHMZbNdBJMm3AvyEeWiIqKwbkcvEWud0hBE=; h=Cc:Date:From:Reply-To:Subject:To; b=eKG80i2hC8+T+I3ZCrwJNzyBykysPppXyn1WYrtk9/SCRZyJfB6YznuIs81zBlOu9KB PAZzSS1XvbhtRDIKLAlLc/Mynn4mhsVArnLWx6q/P40peoY4z8L34TSrc1xTrJM4336mX W+HBgcO6LFu3O72uM5pUik7zvkooYs49niQ= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" From: Dov Murik The migration handler builds its own page tables and switches to them. The MH pagetables are reserved as runtime memory. When the hypervisor asks the MH to import/export a page, the HV writes the guest physical address of the page in question to the mailbox. The MH uses an identity mapping so that it can read/write whatever GPA is requested by the HV. The hypervisor only asks the MH to import/export encrypted pages. Thus, the C-Bit can be set for every page in the identity map. The MH also needs to read shared pages, such as the mailbox. These are mapped at an offset. The offset must be added to the physical address before it can be resolved. Signed-off-by: Tobin Feldman-Fitzthum Signed-off-by: Dov Murik --- .../ConfidentialMigrationDxe.inf | 1 + .../ConfidentialMigration/VirtualMemory.h | 177 ++++++++++++++++++ .../ConfidentialMigrationDxe.c | 88 ++++++++- 3 files changed, 265 insertions(+), 1 deletion(-) create mode 100644 OvmfPkg/AmdSev/ConfidentialMigration/VirtualMemory.h diff --git a/OvmfPkg/AmdSev/ConfidentialMigration/ConfidentialMigrationDxe.= inf b/OvmfPkg/AmdSev/ConfidentialMigration/ConfidentialMigrationDxe.inf index 49457d5d17..8dadfd1d13 100644 --- a/OvmfPkg/AmdSev/ConfidentialMigration/ConfidentialMigrationDxe.inf +++ b/OvmfPkg/AmdSev/ConfidentialMigration/ConfidentialMigrationDxe.inf @@ -15,6 +15,7 @@ =20 [Sources] ConfidentialMigrationDxe.c + VirtualMemory.h =20 [Packages] MdePkg/MdePkg.dec diff --git a/OvmfPkg/AmdSev/ConfidentialMigration/VirtualMemory.h b/OvmfPkg= /AmdSev/ConfidentialMigration/VirtualMemory.h new file mode 100644 index 0000000000..c50cb64c63 --- /dev/null +++ b/OvmfPkg/AmdSev/ConfidentialMigration/VirtualMemory.h @@ -0,0 +1,177 @@ +/** @file + Virtual Memory Management Services to set or clear the memory encryption= bit + Copyright (c) 2006 - 2016, Intel Corporation. All rights reserved.
+ Copyright (c) 2017, AMD Incorporated. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent + Code is derived from OvmfPkg/Library/BaseMemEncryptSevLib/X64/VirtualMem= ory.h + +**/ + +#ifndef __VIRTUAL_MEMORY__ +#define __VIRTUAL_MEMORY__ + +#include +#include +#include +#include +#include +#include + +#define SYS_CODE64_SEL 0x38 + +#pragma pack(1) + +// +// Page-Map Level-4 Offset (PML4) and +// Page-Directory-Pointer Offset (PDPE) entries 4K & 2MB +// + +typedef union { + struct { + UINT64 Present:1; // 0 =3D Not present in memory, + // 1 =3D Present in memory + UINT64 ReadWrite:1; // 0 =3D Read-Only, 1=3D Read/Write + UINT64 UserSupervisor:1; // 0 =3D Supervisor, 1=3DUser + UINT64 WriteThrough:1; // 0 =3D Write-Back caching, + // 1 =3D Write-Through caching + UINT64 CacheDisabled:1; // 0 =3D Cached, 1=3DNon-Cached + UINT64 Accessed:1; // 0 =3D Not accessed, + // 1 =3D Accessed (set by CPU) + UINT64 Reserved:1; // Reserved + UINT64 MustBeZero:2; // Must Be Zero + UINT64 Available:3; // Available for use by system softw= are + UINT64 PageTableBaseAddress:40; // Page Table Base Address + UINT64 AvabilableHigh:11; // Available for use by system softw= are + UINT64 Nx:1; // No Execute bit + } Bits; + UINT64 Uint64; +} PAGE_MAP_AND_DIRECTORY_POINTER; + +// +// Page Table Entry 4KB +// +typedef union { + struct { + UINT64 Present:1; // 0 =3D Not present in memory, + // 1 =3D Present in memory + UINT64 ReadWrite:1; // 0 =3D Read-Only, 1=3D Read/Write + UINT64 UserSupervisor:1; // 0 =3D Supervisor, 1=3DUser + UINT64 WriteThrough:1; // 0 =3D Write-Back caching, + // 1 =3D Write-Through caching + UINT64 CacheDisabled:1; // 0 =3D Cached, 1=3DNon-Cached + UINT64 Accessed:1; // 0 =3D Not accessed, + // 1 =3D Accessed (set by CPU) + UINT64 Dirty:1; // 0 =3D Not Dirty, 1 =3D written by + // processor on access to page + UINT64 PAT:1; // + UINT64 Global:1; // 0 =3D Not global page, 1 =3D glob= al page + // TLB not cleared on CR3 write + UINT64 Available:3; // Available for use by system softw= are + UINT64 PageTableBaseAddress:40; // Page Table Base Address + UINT64 AvabilableHigh:11; // Available for use by system softw= are + UINT64 Nx:1; // 0 =3D Execute Code, + // 1 =3D No Code Execution + } Bits; + UINT64 Uint64; +} PAGE_TABLE_4K_ENTRY; + +// +// Page Table Entry 2MB +// +typedef union { + struct { + UINT64 Present:1; // 0 =3D Not present in memory, + // 1 =3D Present in memory + UINT64 ReadWrite:1; // 0 =3D Read-Only, 1=3D Read/Write + UINT64 UserSupervisor:1; // 0 =3D Supervisor, 1=3DUser + UINT64 WriteThrough:1; // 0 =3D Write-Back caching, + // 1=3DWrite-Through caching + UINT64 CacheDisabled:1; // 0 =3D Cached, 1=3DNon-Cached + UINT64 Accessed:1; // 0 =3D Not accessed, + // 1 =3D Accessed (set by CPU) + UINT64 Dirty:1; // 0 =3D Not Dirty, 1 =3D written by + // processor on access to page + UINT64 MustBe1:1; // Must be 1 + UINT64 Global:1; // 0 =3D Not global page, 1 =3D glob= al page + // TLB not cleared on CR3 write + UINT64 Available:3; // Available for use by system softw= are + UINT64 PAT:1; // + UINT64 MustBeZero:8; // Must be zero; + UINT64 PageTableBaseAddress:31; // Page Table Base Address + UINT64 AvabilableHigh:11; // Available for use by system softw= are + UINT64 Nx:1; // 0 =3D Execute Code, + // 1 =3D No Code Execution + } Bits; + UINT64 Uint64; +} PAGE_TABLE_ENTRY; + +// +// Page Table Entry 1GB +// +typedef union { + struct { + UINT64 Present:1; // 0 =3D Not present in memory, + // 1 =3D Present in memory + UINT64 ReadWrite:1; // 0 =3D Read-Only, 1=3D Read/Write + UINT64 UserSupervisor:1; // 0 =3D Supervisor, 1=3DUser + UINT64 WriteThrough:1; // 0 =3D Write-Back caching, + // 1 =3D Write-Through caching + UINT64 CacheDisabled:1; // 0 =3D Cached, 1=3DNon-Cached + UINT64 Accessed:1; // 0 =3D Not accessed, + // 1 =3D Accessed (set by CPU) + UINT64 Dirty:1; // 0 =3D Not Dirty, 1 =3D written by + // processor on access to page + UINT64 MustBe1:1; // Must be 1 + UINT64 Global:1; // 0 =3D Not global page, 1 =3D glob= al page + // TLB not cleared on CR3 write + UINT64 Available:3; // Available for use by system softw= are + UINT64 PAT:1; // + UINT64 MustBeZero:17; // Must be zero; + UINT64 PageTableBaseAddress:22; // Page Table Base Address + UINT64 AvabilableHigh:11; // Available for use by system softw= are + UINT64 Nx:1; // 0 =3D Execute Code, + // 1 =3D No Code Execution + } Bits; + UINT64 Uint64; +} PAGE_TABLE_1G_ENTRY; + +#pragma pack() + +#define IA32_PG_P BIT0 +#define IA32_PG_RW BIT1 +#define IA32_PG_PS BIT7 + +#define PAGING_PAE_INDEX_MASK 0x1FF + +#define PAGING_4K_ADDRESS_MASK_64 0x000FFFFFFFFFF000ull +#define PAGING_2M_ADDRESS_MASK_64 0x000FFFFFFFE00000ull +#define PAGING_1G_ADDRESS_MASK_64 0x000FFFFFC0000000ull + +#define PAGING_L1_ADDRESS_SHIFT 12 +#define PAGING_L2_ADDRESS_SHIFT 21 +#define PAGING_L3_ADDRESS_SHIFT 30 +#define PAGING_L4_ADDRESS_SHIFT 39 + +#define PAGING_PML4E_NUMBER 4 + +#define PAGETABLE_ENTRY_MASK ((1UL << 9) - 1) +#define PML4_OFFSET(x) ( (x >> 39) & PAGETABLE_ENTRY_MASK) +#define PDP_OFFSET(x) ( (x >> 30) & PAGETABLE_ENTRY_MASK) +#define PDE_OFFSET(x) ( (x >> 21) & PAGETABLE_ENTRY_MASK) +#define PTE_OFFSET(x) ( (x >> 12) & PAGETABLE_ENTRY_MASK) +#define PAGING_1G_ADDRESS_MASK_64 0x000FFFFFC0000000ull + +#define PAGE_TABLE_POOL_ALIGNMENT BASE_2MB +#define PAGE_TABLE_POOL_UNIT_SIZE SIZE_2MB +#define PAGE_TABLE_POOL_UNIT_PAGES \ + EFI_SIZE_TO_PAGES (PAGE_TABLE_POOL_UNIT_SIZE) +#define PAGE_TABLE_POOL_ALIGN_MASK \ + (~(EFI_PHYSICAL_ADDRESS)(PAGE_TABLE_POOL_ALIGNMENT - 1)) + +typedef struct { + VOID *NextPool; + UINTN Offset; + UINTN FreePages; +} PAGE_TABLE_POOL; + +#endif diff --git a/OvmfPkg/AmdSev/ConfidentialMigration/ConfidentialMigrationDxe.= c b/OvmfPkg/AmdSev/ConfidentialMigration/ConfidentialMigrationDxe.c index 8402fcc4fa..3df3b09732 100644 --- a/OvmfPkg/AmdSev/ConfidentialMigration/ConfidentialMigrationDxe.c +++ b/OvmfPkg/AmdSev/ConfidentialMigration/ConfidentialMigrationDxe.c @@ -11,6 +11,7 @@ #include #include =20 +#include "VirtualMemory.h" // // Functions implemented by the migration handler // @@ -43,6 +44,83 @@ typedef volatile struct { UINT32 done; } MH_COMMAND_PARAMETERS; =20 +// +// Addresses for MH page table. +// +STATIC PAGE_TABLE_POOL *mPageTablePool =3D NULL; +STATIC PHYSICAL_ADDRESS mMigrationHelperPageTables =3D 0; + +// +// Offset for non-cbit mapping. +// +#define UNENC_VIRT_ADDR_BASE 0xffffff8000000000ULL + + +/** + Allocates and fills in custom page tables for Migration Handler. + The MH must be able to write to any encrypted page. Thus, it + uses an identity map where the C-bit is set for every page. The + HV should never ask the MH to import/export a shared page. The + MH must also be able to read some shared pages. The first 1GB + of memory is mapped at offset UNENC_VIRT_ADDR_BASE. + +**/ +VOID +PrepareMigrationHandlerPageTables ( + VOID + ) +{ + UINTN PoolPages; + VOID *Buffer; + VOID *Start; + PAGE_MAP_AND_DIRECTORY_POINTER *PageMapLevel4Entry; + PAGE_TABLE_1G_ENTRY *PageDirectory1GEntry; + PAGE_TABLE_1G_ENTRY *Unenc1GEntry; + UINT64 AddressEncMask; + + PoolPages =3D 1 + 10; + Buffer =3D AllocateAlignedRuntimePages (PoolPages, PAGE_TABLE_POOL_ALIGN= MENT); + mPageTablePool =3D Buffer; + mPageTablePool->NextPool =3D mPageTablePool; + mPageTablePool->FreePages =3D PoolPages - 1; + mPageTablePool->Offset =3D EFI_PAGES_TO_SIZE (1); + + Start =3D (UINT8 *)mPageTablePool + mPageTablePool->Offset; + ZeroMem(Start, mPageTablePool->FreePages * EFI_PAGE_SIZE); + + AddressEncMask =3D 1ULL << 47; + + PageMapLevel4Entry =3D Start; + PageDirectory1GEntry =3D (PAGE_TABLE_1G_ENTRY*)((UINT8*)Start + EFI_PAGE= _SIZE); + Unenc1GEntry =3D (PAGE_TABLE_1G_ENTRY*)((UINT8*)Start + 2 * EFI_PAGE_SIZ= E); + + PageMapLevel4Entry =3D Start; + PageMapLevel4Entry +=3D PML4_OFFSET(0x0ULL); + PageMapLevel4Entry->Uint64 =3D (UINT64)PageDirectory1GEntry | AddressEnc= Mask | 0x23; + + PageMapLevel4Entry =3D Start; + PageMapLevel4Entry +=3D PML4_OFFSET(UNENC_VIRT_ADDR_BASE); // should be = 511 + PageMapLevel4Entry->Uint64 =3D (UINT64)Unenc1GEntry | AddressEncMask | 0= x23; + + UINT64 PageAddr =3D 0; + for (int i =3D 0; i < 512; i++, PageAddr +=3D SIZE_1GB) { + PAGE_TABLE_1G_ENTRY *e =3D PageDirectory1GEntry + i; + e->Uint64 =3D PageAddr | AddressEncMask | 0xe3; // 1GB page + } + + UINT64 UnencPageAddr =3D 0; + Unenc1GEntry->Uint64 =3D UnencPageAddr | 0xe3; // 1GB page unencrypted + + mMigrationHelperPageTables =3D (UINT64)Start | AddressEncMask; +} + +VOID +SwitchToMigrationHelperPageTables(VOID) +{ + AsmWriteCr3(mMigrationHelperPageTables); +} + + =20 VOID EFIAPI @@ -56,7 +134,12 @@ MigrationHandlerMain ( =20 DebugPrint (DEBUG_INFO,"MIGRATION Handler Started\n"); =20 - params_base =3D PcdGet32 (PcdConfidentialMigrationMailboxBase); + SwitchToMigrationHelperPageTables(); + + // + // Shared pages must be offset by UNENC_VIRT_ADDR_BASE. + // + params_base =3D PcdGet32 (PcdConfidentialMigrationMailboxBase) + UNENC_V= IRT_ADDR_BASE; params =3D (VOID *)params_base; page_va =3D (VOID *)params_base + 0x1000; =20 @@ -134,6 +217,8 @@ LaunchMigrationHandler ( =20 MigrationHandlerCpuIndex =3D NumProc - 1; =20 + PrepareMigrationHandlerPageTables(); + EFI_EVENT Event; MpProto->GetProcessorInfo (MpProto, MigrationHandlerCpuIndex, &Tcb); if (Tcb.StatusFlag !=3D 7) { @@ -154,6 +239,7 @@ LaunchMigrationHandler ( if (PcdGetBool(PcdIsConfidentialMigrationTarget)) { DebugPrint (DEBUG_INFO,"Waiting for incoming confidential migration.\n= "); DisableInterrupts (); + SwitchToMigrationHelperPageTables(); CpuDeadLoop (); } =20 --=20 2.20.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 (#72364): https://edk2.groups.io/g/devel/message/72364 Mute This Topic: https://groups.io/mt/81036386/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- From nobody Tue May 7 20:49:47 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+72361+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+72361+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1614718148; cv=none; d=zohomail.com; s=zohoarc; b=YwO8CHI96d+Mo80omTL8tOqydlfxb4SSBSpGgxvy9Cn7UDcWX4U3CJGP5eE4XM3foaWKLOCg7KneR2sXnLHXFYtFQNpx2sUzCfhI8Fi0OlF2rt5njQ+VBEaOarovsrdt+B5r1SZi7qmbC2SNR+RszE8WfuLGUc9MnvEuDfPvoEs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614718148; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=qAM49d9C7UUtSePltssei6HXArIkpyvQSf8Bw8lJEU0=; b=A7aFrxj2IllrZlnaJoi3D1hbNcM+Acp28Ifz3xj1mc67YOfvNf0fmo9ZAvqYAnP7PRej/1fTLr196wkgmNG9a22LxirAsOxNFBdhPlcKQaIKd580h8irm9LGT/zK93liquQBizCHQEA5VAHNzZZtU7yuWo/vQeUFqUffKKWfa1w= ARC-Authentication-Results: i=1; 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+72361+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) header.from= Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1614718148911972.5822050904231; Tue, 2 Mar 2021 12:49:08 -0800 (PST) Return-Path: X-Received: by 127.0.0.2 with SMTP id KfZFYY1788612xek2ZUM6xIT; Tue, 02 Mar 2021 12:49:08 -0800 X-Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) by mx.groups.io with SMTP id smtpd.web12.451.1614718140265823377 for ; Tue, 02 Mar 2021 12:49:00 -0800 X-Received: from pps.filterd (m0098417.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id 122KhK6T167291; Tue, 2 Mar 2021 15:48:58 -0500 X-Received: from ppma01dal.us.ibm.com (83.d6.3fa9.ip4.static.sl-reverse.com [169.63.214.131]) by mx0a-001b2d01.pphosted.com with ESMTP id 371vn488g2-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 02 Mar 2021 15:48:57 -0500 X-Received: from pps.filterd (ppma01dal.us.ibm.com [127.0.0.1]) by ppma01dal.us.ibm.com (8.16.0.42/8.16.0.42) with SMTP id 122Kkpx4028077; Tue, 2 Mar 2021 20:48:56 GMT X-Received: from b03cxnp08025.gho.boulder.ibm.com (b03cxnp08025.gho.boulder.ibm.com [9.17.130.17]) by ppma01dal.us.ibm.com with ESMTP id 371qmuagy4-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 02 Mar 2021 20:48:56 +0000 X-Received: from b03ledav006.gho.boulder.ibm.com (b03ledav006.gho.boulder.ibm.com [9.17.130.237]) by b03cxnp08025.gho.boulder.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 122KmsBG29098478 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 2 Mar 2021 20:48:54 GMT X-Received: from b03ledav006.gho.boulder.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 57B5FC6057; Tue, 2 Mar 2021 20:48:54 +0000 (GMT) X-Received: from b03ledav006.gho.boulder.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id C3947C6055; Tue, 2 Mar 2021 20:48:53 +0000 (GMT) X-Received: from amdrome1.watson.ibm.com (unknown [9.2.130.16]) by b03ledav006.gho.boulder.ibm.com (Postfix) with ESMTP; Tue, 2 Mar 2021 20:48:53 +0000 (GMT) From: "Tobin Feldman-Fitzthum" To: devel@edk2.groups.io Cc: Dov Murik , Tobin Feldman-Fitzthum , Tobin Feldman-Fitzthum , James Bottomley , Hubertus Franke , Brijesh Singh , Ashish Kalra , Jon Grimm , Tom Lendacky Subject: [edk2-devel] [RFC PATCH 12/14] OvmfPkg/AmdSev: Don't overwrite mailbox or pagetables Date: Tue, 2 Mar 2021 15:48:37 -0500 Message-Id: <20210302204839.82042-13-tobin@linux.ibm.com> In-Reply-To: <20210302204839.82042-1-tobin@linux.ibm.com> References: <20210302204839.82042-1-tobin@linux.ibm.com> MIME-Version: 1.0 X-TM-AS-GCONF: 00 Precedence: Bulk List-Unsubscribe: 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,tobin@linux.ibm.com X-Gm-Message-State: bGIqBNx6v0DDzSB1eqAWcyB3x1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1614718148; bh=4wJKd36dinSrAyYSOYd0LoKDdlhpVSyzJnMvpz4QfZY=; h=Cc:Date:From:Reply-To:Subject:To; b=EwCcNxViNiU5h7A8B6hICaVDlzVCL6zYxMlz6r87iTvDrDfgyELbdB5V+gfUO5A/vUg 8rhtlRPhRaODg78ZyX02EyEkLQyzLzxLBy10EnKiapOxyKj3ZPY5OyzNCAzJneYgCwacg ufC4Gp+rKkv3z7eQvJSUoTKsn+xpyAB7dLQ= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" While restoring pages, the MH should avoid overwriting its pagetables or the mailbox it uses to communicate with the HV. Signed-off-by: Tobin Feldman-Fitzthum --- .../ConfidentialMigrationDxe.c | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/OvmfPkg/AmdSev/ConfidentialMigration/ConfidentialMigrationDxe.= c b/OvmfPkg/AmdSev/ConfidentialMigration/ConfidentialMigrationDxe.c index 3df3b09732..f609e16f8d 100644 --- a/OvmfPkg/AmdSev/ConfidentialMigration/ConfidentialMigrationDxe.c +++ b/OvmfPkg/AmdSev/ConfidentialMigration/ConfidentialMigrationDxe.c @@ -128,6 +128,10 @@ MigrationHandlerMain ( IN OUT VOID *Buffer ) { + UINT64 mailbox_start; + UINT64 mailbox_end; + UINT64 pagetable_start; + UINT64 pagetable_end; UINT64 params_base; MH_COMMAND_PARAMETERS *params; VOID *page_va; @@ -139,10 +143,16 @@ MigrationHandlerMain ( // // Shared pages must be offset by UNENC_VIRT_ADDR_BASE. // - params_base =3D PcdGet32 (PcdConfidentialMigrationMailboxBase) + UNENC_V= IRT_ADDR_BASE; + mailbox_start =3D PcdGet32 (PcdConfidentialMigrationMailboxBase); + params_base =3D mailbox_start + UNENC_VIRT_ADDR_BASE; params =3D (VOID *)params_base; page_va =3D (VOID *)params_base + 0x1000; =20 + mailbox_end =3D mailbox_start + 2 * EFI_PAGE_SIZE; + + pagetable_start =3D mMigrationHelperPageTables; + pagetable_end =3D pagetable_start + 11 * EFI_PAGE_SIZE; + DisableInterrupts(); params->go =3D 0; =20 @@ -163,7 +173,15 @@ MigrationHandlerMain ( break; =20 case MH_FUNC_RESTORE_PAGE: - CopyMem((VOID *)params->gpa, page_va, 4096); + // + // Don't import a page that covers the mailbox or pagetables. + // + if ((params->gpa >=3D mailbox_start && params->gpa < mailbox_end) || + (params->gpa >=3D pagetable_start && params->gpa < pagetable_end= )) { + } + else { + CopyMem((VOID *)params->gpa, page_va, 4096); + } params->ret =3D MH_SUCCESS; break; =20 --=20 2.20.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 (#72361): https://edk2.groups.io/g/devel/message/72361 Mute This Topic: https://groups.io/mt/81036378/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- From nobody Tue May 7 20:49:47 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+72363+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+72363+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1614718148; cv=none; d=zohomail.com; s=zohoarc; b=abVGljc/X5g8cZZN/BuYFLZRUazCaycCKvgedJbxHAWEwY7ichfUFD1dHk2faAJoBuN+bD1qYrwYm5QRvM1XJigzZir8u/705zUlTOJPmsC+7zAy5LppSSGwRlolzS24MbISwClN+/AmDKnlSTBUavtrmbqJ8hp2SdWCGWEmxQA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614718148; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=mZsV37SZGh4Y46NIk68N7FV91cbLRCPOQKFp8cA6xvk=; b=gbZcDt4dmptDb52mqm6Er/tNeyJ9C2plh4eqj0avvC1cjYP7SYMIggxbLWsmnttIpuaC7YVVdUGpa0FRowaAO6c2/GIXlrNGyND1IVBnqYCLmpCj53QXTE0oRh35pAIx4PS9GVIQ0uQRHkmUmQkrco14AFwcEHeJEkFkiz+N0og= ARC-Authentication-Results: i=1; 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+72363+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) header.from= Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1614718148822696.2274951203653; Tue, 2 Mar 2021 12:49:08 -0800 (PST) Return-Path: X-Received: by 127.0.0.2 with SMTP id lKFrYY1788612xO3rOisWVdD; Tue, 02 Mar 2021 12:49:08 -0800 X-Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.158.5]) by mx.groups.io with SMTP id smtpd.web12.453.1614718141998417433 for ; Tue, 02 Mar 2021 12:49:02 -0800 X-Received: from pps.filterd (m0098416.ppops.net [127.0.0.1]) by mx0b-001b2d01.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id 122KhKPS191382; Tue, 2 Mar 2021 15:49:00 -0500 X-Received: from ppma01dal.us.ibm.com (83.d6.3fa9.ip4.static.sl-reverse.com [169.63.214.131]) by mx0b-001b2d01.pphosted.com with ESMTP id 371vn7r8bh-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 02 Mar 2021 15:48:59 -0500 X-Received: from pps.filterd (ppma01dal.us.ibm.com [127.0.0.1]) by ppma01dal.us.ibm.com (8.16.0.42/8.16.0.42) with SMTP id 122KkqMW028086; Tue, 2 Mar 2021 20:48:57 GMT X-Received: from b03cxnp08026.gho.boulder.ibm.com (b03cxnp08026.gho.boulder.ibm.com [9.17.130.18]) by ppma01dal.us.ibm.com with ESMTP id 371qmuagy6-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 02 Mar 2021 20:48:57 +0000 X-Received: from b03ledav006.gho.boulder.ibm.com (b03ledav006.gho.boulder.ibm.com [9.17.130.237]) by b03cxnp08026.gho.boulder.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 122Kmtgm23658894 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 2 Mar 2021 20:48:55 GMT X-Received: from b03ledav006.gho.boulder.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 0213AC605B; Tue, 2 Mar 2021 20:48:55 +0000 (GMT) X-Received: from b03ledav006.gho.boulder.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 6DDC3C6059; Tue, 2 Mar 2021 20:48:54 +0000 (GMT) X-Received: from amdrome1.watson.ibm.com (unknown [9.2.130.16]) by b03ledav006.gho.boulder.ibm.com (Postfix) with ESMTP; Tue, 2 Mar 2021 20:48:54 +0000 (GMT) From: "Tobin Feldman-Fitzthum" To: devel@edk2.groups.io Cc: Dov Murik , Tobin Feldman-Fitzthum , Tobin Feldman-Fitzthum , James Bottomley , Hubertus Franke , Brijesh Singh , Ashish Kalra , Jon Grimm , Tom Lendacky Subject: [edk2-devel] [RFC PATCH 13/14] OvmfPkg/AmdSev: Don't overwrite MH stack Date: Tue, 2 Mar 2021 15:48:38 -0500 Message-Id: <20210302204839.82042-14-tobin@linux.ibm.com> In-Reply-To: <20210302204839.82042-1-tobin@linux.ibm.com> References: <20210302204839.82042-1-tobin@linux.ibm.com> MIME-Version: 1.0 X-TM-AS-GCONF: 00 Precedence: Bulk List-Unsubscribe: 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,tobin@linux.ibm.com X-Gm-Message-State: 8t9YvLlkeEHvQgL4sXr9AWiYx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1614718148; bh=HVBi6EPcF0WXzDCnp+Q7+Nzp0eO1l8zsE6A0Z3vdKZQ=; h=Cc:Date:From:Reply-To:Subject:To; b=ES4zQ49/9Jw9icmg57oSVwvzD3CBiNjeH60f+bSdRepfWwR37a3uprLVeQuRJ5LQ//B zyYS8X8giAOYgeFPIUur8fsmw3vzGYKzBGWWK6kotjhQVRKt7hG+M6CP/QQK3QWdD5tcZ L74FMx0hkxaIHnjcfUz/Xol/KeuBmxk+TNQ= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" When restoring pages, the Migration Handler shoudl avoid overwriting its own stack. Signed-off-by: Tobin Feldman-Fitzthum --- .../ConfidentialMigrationDxe.inf | 2 + OvmfPkg/AmdSev/ConfidentialMigration/MpLib.h | 235 ++++++++++++++++++ .../ConfidentialMigrationDxe.c | 30 ++- 3 files changed, 266 insertions(+), 1 deletion(-) create mode 100644 OvmfPkg/AmdSev/ConfidentialMigration/MpLib.h diff --git a/OvmfPkg/AmdSev/ConfidentialMigration/ConfidentialMigrationDxe.= inf b/OvmfPkg/AmdSev/ConfidentialMigration/ConfidentialMigrationDxe.inf index 8dadfd1d13..2816952863 100644 --- a/OvmfPkg/AmdSev/ConfidentialMigration/ConfidentialMigrationDxe.inf +++ b/OvmfPkg/AmdSev/ConfidentialMigration/ConfidentialMigrationDxe.inf @@ -16,6 +16,7 @@ [Sources] ConfidentialMigrationDxe.c VirtualMemory.h + MpLib.h =20 [Packages] MdePkg/MdePkg.dec @@ -36,6 +37,7 @@ gUefiOvmfPkgTokenSpaceGuid.PcdIsConfidentialMigrationTarget gUefiOvmfPkgTokenSpaceGuid.PcdStartConfidentialMigrationHandler gUefiOvmfPkgTokenSpaceGuid.PcdConfidentialMigrationMailboxBase + gUefiCpuPkgTokenSpaceGuid.PcdCpuApStackSize =20 [Depex] gEfiMpServiceProtocolGuid diff --git a/OvmfPkg/AmdSev/ConfidentialMigration/MpLib.h b/OvmfPkg/AmdSev/= ConfidentialMigration/MpLib.h new file mode 100644 index 0000000000..5007e25243 --- /dev/null +++ b/OvmfPkg/AmdSev/ConfidentialMigration/MpLib.h @@ -0,0 +1,235 @@ +/** @file + Common header file for MP Initialize Library. + -- adapted from UefiCpuPkg/Library/MpInitLib/MpLib.h + Copyright (c) 2016 - 2020, Intel Corporation. All rights reserved.
+ Copyright (c) 2020, AMD Inc. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent +**/ + +#ifndef _MP_LIB_H_ +#define _MP_LIB_H_ + +#include + +#include +#include +#include +#include +#include +#include + +#define CPU_INIT_MP_LIB_HOB_GUID \ + { \ + 0x58eb6a19, 0x3699, 0x4c68, { 0xa8, 0x36, 0xda, 0xcd, 0x8e, 0xdc, 0xad= , 0x4a } \ + } + + +// +// CPU exchange information for switch BSP +// +typedef struct { + UINT8 State; // offset 0 + UINTN StackPointer; // offset 4 / 8 + IA32_DESCRIPTOR Gdtr; // offset 8 / 16 + IA32_DESCRIPTOR Idtr; // offset 14 / 26 +} CPU_EXCHANGE_ROLE_INFO; + +// +// AP initialization state during APs wakeup +// +typedef enum { + ApInitConfig =3D 1, + ApInitReconfig =3D 2, + ApInitDone =3D 3 +} AP_INIT_STATE; + +// +// AP state +// +// The state transitions for an AP when it process a procedure are: +// Idle ----> Ready ----> Busy ----> Idle +// [BSP] [AP] [AP] +// +typedef enum { + CpuStateIdle, + CpuStateReady, + CpuStateBusy, + CpuStateFinished, + CpuStateDisabled +} CPU_STATE; + +// +// CPU volatile registers around INIT-SIPI-SIPI +// +typedef struct { + UINTN Cr0; + UINTN Cr3; + UINTN Cr4; + UINTN Dr0; + UINTN Dr1; + UINTN Dr2; + UINTN Dr3; + UINTN Dr6; + UINTN Dr7; + IA32_DESCRIPTOR Gdtr; + IA32_DESCRIPTOR Idtr; + UINT16 Tr; +} CPU_VOLATILE_REGISTERS; + +// +// AP related data +// +typedef struct { + SPIN_LOCK ApLock; + volatile UINT32 *StartupApSignal; + volatile UINTN ApFunction; + volatile UINTN ApFunctionArgument; + BOOLEAN CpuHealthy; + volatile CPU_STATE State; + CPU_VOLATILE_REGISTERS VolatileRegisters; + BOOLEAN Waiting; + BOOLEAN *Finished; + UINT64 ExpectedTime; + UINT64 CurrentTime; + UINT64 TotalTime; + EFI_EVENT WaitEvent; + UINT32 ProcessorSignature; + UINT8 PlatformId; + UINT64 MicrocodeEntryAddr; +} CPU_AP_DATA; + +// +// Basic CPU information saved in Guided HOB. +// Because the contents will be shard between PEI and DXE, +// we need to make sure the each fields offset same in different +// architecture. +// +#pragma pack (1) +typedef struct { + UINT32 InitialApicId; + UINT32 ApicId; + UINT32 Health; + UINT64 ApTopOfStack; +} CPU_INFO_IN_HOB; +#pragma pack () + +// +// AP reset code information including code address and size, +// this structure will be shared be C code and assembly code. +// It is natural aligned by design. +// +typedef struct { + UINT8 *RendezvousFunnelAddress; + UINTN ModeEntryOffset; + UINTN RendezvousFunnelSize; + UINT8 *RelocateApLoopFuncAddress; + UINTN RelocateApLoopFuncSize; + UINTN ModeTransitionOffset; +} MP_ASSEMBLY_ADDRESS_MAP; + +typedef struct _CPU_MP_DATA CPU_MP_DATA; + +#pragma pack(1) + +// +// MP CPU exchange information for AP reset code +// This structure is required to be packed because fixed field offsets +// into this structure are used in assembly code in this module +// +typedef struct { + UINTN Lock; + UINTN StackStart; + UINTN StackSize; + UINTN CFunction; + IA32_DESCRIPTOR GdtrProfile; + IA32_DESCRIPTOR IdtrProfile; + UINTN BufferStart; + UINTN ModeOffset; + UINTN ApIndex; + UINTN CodeSegment; + UINTN DataSegment; + UINTN EnableExecuteDisable; + UINTN Cr3; + UINTN InitFlag; + CPU_INFO_IN_HOB *CpuInfo; + UINTN NumApsExecuting; + CPU_MP_DATA *CpuMpData; + UINTN InitializeFloatingPointUnitsAddress; + UINT32 ModeTransitionMemory; + UINT16 ModeTransitionSegment; + UINT32 ModeHighMemory; + UINT16 ModeHighSegment; + // + // Enable5LevelPaging indicates whether 5-level paging is enabled in lon= g mode. + // + BOOLEAN Enable5LevelPaging; +} MP_CPU_EXCHANGE_INFO; + +#pragma pack() + +// +// CPU MP Data save in memory +// +struct _CPU_MP_DATA { + UINT64 CpuInfoInHob; + UINT32 CpuCount; + UINT32 BspNumber; + // + // The above fields data will be passed from PEI to DXE + // Please make sure the fields offset same in the different + // architecture. + // + SPIN_LOCK MpLock; + UINTN Buffer; + UINTN CpuApStackSize; + MP_ASSEMBLY_ADDRESS_MAP AddressMap; + UINTN WakeupBuffer; + UINTN WakeupBufferHigh; + UINTN BackupBuffer; + UINTN BackupBufferSize; + + volatile UINT32 FinishedCount; + UINT32 RunningCount; + BOOLEAN SingleThread; + EFI_AP_PROCEDURE Procedure; + VOID *ProcArguments; + BOOLEAN *Finished; + UINT64 ExpectedTime; + UINT64 CurrentTime; + UINT64 TotalTime; + EFI_EVENT WaitEvent; + UINTN **FailedCpuList; + + AP_INIT_STATE InitFlag; + BOOLEAN SwitchBspFlag; + UINTN NewBspNumber; + CPU_EXCHANGE_ROLE_INFO BSPInfo; + CPU_EXCHANGE_ROLE_INFO APInfo; + MTRR_SETTINGS MtrrTable; + UINT8 ApLoopMode; + UINT8 ApTargetCState; + UINT16 PmCodeSegment; + CPU_AP_DATA *CpuData; + volatile MP_CPU_EXCHANGE_INFO *MpCpuExchangeInfo; + + UINT32 CurrentTimerCount; + UINTN DivideValue; + UINT8 Vector; + BOOLEAN PeriodicMode; + BOOLEAN TimerInterruptState; + UINT64 MicrocodePatchAddress; + UINT64 MicrocodePatchRegionSize; + + // + // Whether need to use Init-Sipi-Sipi to wake up the APs. + // Two cases need to set this value to TRUE. One is in HLT + // loop mode, the other is resume from S3 which loop mode + // will be hardcode change to HLT mode by PiSmmCpuDxeSmm + // driver. + // + BOOLEAN WakeUpByInitSipiSipi; +}; + +extern EFI_GUID mCpuInitMpLibHobGuid; + +#endif diff --git a/OvmfPkg/AmdSev/ConfidentialMigration/ConfidentialMigrationDxe.= c b/OvmfPkg/AmdSev/ConfidentialMigration/ConfidentialMigrationDxe.c index f609e16f8d..42b99be552 100644 --- a/OvmfPkg/AmdSev/ConfidentialMigration/ConfidentialMigrationDxe.c +++ b/OvmfPkg/AmdSev/ConfidentialMigration/ConfidentialMigrationDxe.c @@ -12,6 +12,8 @@ #include =20 #include "VirtualMemory.h" +#include "MpLib.h" + // // Functions implemented by the migration handler // @@ -114,6 +116,7 @@ PrepareMigrationHandlerPageTables ( mMigrationHelperPageTables =3D (UINT64)Start | AddressEncMask; } =20 + VOID SwitchToMigrationHelperPageTables(VOID) { @@ -121,6 +124,25 @@ SwitchToMigrationHelperPageTables(VOID) } =20 =20 +UINT64 +GetMHTopOfStack() +{ + EFI_HOB_GUID_TYPE *GuidHob; + VOID *DataInHob; + CPU_MP_DATA *CpuMpData; + CPU_INFO_IN_HOB *CpuInfoInHob; + + GuidHob =3D GetFirstGuidHob (&mCpuInitMpLibHobGuid); + ASSERT(GuidHob !=3D NULL); + + DataInHob =3D GET_GUID_HOB_DATA (GuidHob); + CpuMpData =3D (CPU_MP_DATA *) (*(UINTN *) DataInHob); + CpuInfoInHob =3D (CPU_INFO_IN_HOB *) (UINTN) CpuMpData->CpuInfoInHob; + + return CpuInfoInHob[MigrationHandlerCpuIndex].ApTopOfStack; + +} + =20 VOID EFIAPI @@ -132,6 +154,8 @@ MigrationHandlerMain ( UINT64 mailbox_end; UINT64 pagetable_start; UINT64 pagetable_end; + UINT64 stack_start; + UINT64 stack_end; UINT64 params_base; MH_COMMAND_PARAMETERS *params; VOID *page_va; @@ -153,6 +177,9 @@ MigrationHandlerMain ( pagetable_start =3D mMigrationHelperPageTables; pagetable_end =3D pagetable_start + 11 * EFI_PAGE_SIZE; =20 + stack_end =3D GetMHTopOfStack(); + stack_start =3D stack_end - PcdGet32(PcdCpuApStackSize); + DisableInterrupts(); params->go =3D 0; =20 @@ -177,7 +204,8 @@ MigrationHandlerMain ( // Don't import a page that covers the mailbox or pagetables. // if ((params->gpa >=3D mailbox_start && params->gpa < mailbox_end) || - (params->gpa >=3D pagetable_start && params->gpa < pagetable_end= )) { + (params->gpa >=3D pagetable_start && params->gpa < pagetable_end= ) || + (params->gpa >=3D stack_start && params->gpa < stack_end)) { } else { CopyMem((VOID *)params->gpa, page_va, 4096); --=20 2.20.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 (#72363): https://edk2.groups.io/g/devel/message/72363 Mute This Topic: https://groups.io/mt/81036380/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- From nobody Tue May 7 20:49:47 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+72362+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+72362+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1614718148; cv=none; d=zohomail.com; s=zohoarc; b=SdAZxmGqimTv+3hOxbUdP692+GxdpJRjWYpSPtANcOYVLvz3tK38c/3q2ar3g4VnfnHDbBdjRs60Von0C52VPc+0rFt57JzFB3kL1bvTegSR7jQfLQXXSf/2f5vO4VxCmnKj3ucjRM+rBnBOl3AKrPmaBscC08a0GlUHMR92ooI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614718148; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=C0by6spt0DqDfYSPhsUhxz/lq8x7Odoc1qjlCipdIX8=; b=g6snbGUixAe14PfC2/rrKNGvnX44tsnkSwo5/hIsdZ7pfOVA0XSSzNgEjFk1atcAQyWMVoiOnWW01yqpTRsxtMI2aXX79K0qcJbtnCTZgJxgWR+j8w7sCVvrfSImZvaQiUuzz7RiQH+rGMrx4uue23CokwqG3W5Xv9vc6j+VhcA= ARC-Authentication-Results: i=1; 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+72362+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) header.from= Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1614718148369535.0913988662869; Tue, 2 Mar 2021 12:49:08 -0800 (PST) Return-Path: X-Received: by 127.0.0.2 with SMTP id uNs1YY1788612xJCoCKsZeL4; Tue, 02 Mar 2021 12:49:08 -0800 X-Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.158.5]) by mx.groups.io with SMTP id smtpd.web10.456.1614718141956026929 for ; Tue, 02 Mar 2021 12:49:02 -0800 X-Received: from pps.filterd (m0098416.ppops.net [127.0.0.1]) by mx0b-001b2d01.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id 122KhKu5191359; Tue, 2 Mar 2021 15:49:00 -0500 X-Received: from ppma03dal.us.ibm.com (b.bd.3ea9.ip4.static.sl-reverse.com [169.62.189.11]) by mx0b-001b2d01.pphosted.com with ESMTP id 371vn7r8bs-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 02 Mar 2021 15:48:59 -0500 X-Received: from pps.filterd (ppma03dal.us.ibm.com [127.0.0.1]) by ppma03dal.us.ibm.com (8.16.0.42/8.16.0.42) with SMTP id 122Km7j8013967; Tue, 2 Mar 2021 20:48:58 GMT X-Received: from b03cxnp08026.gho.boulder.ibm.com (b03cxnp08026.gho.boulder.ibm.com [9.17.130.18]) by ppma03dal.us.ibm.com with ESMTP id 37103w5skx-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 02 Mar 2021 20:48:58 +0000 X-Received: from b03ledav006.gho.boulder.ibm.com (b03ledav006.gho.boulder.ibm.com [9.17.130.237]) by b03cxnp08026.gho.boulder.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 122KmtWe26673640 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 2 Mar 2021 20:48:55 GMT X-Received: from b03ledav006.gho.boulder.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 97C5DC6057; Tue, 2 Mar 2021 20:48:55 +0000 (GMT) X-Received: from b03ledav006.gho.boulder.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 183C1C605F; Tue, 2 Mar 2021 20:48:55 +0000 (GMT) X-Received: from amdrome1.watson.ibm.com (unknown [9.2.130.16]) by b03ledav006.gho.boulder.ibm.com (Postfix) with ESMTP; Tue, 2 Mar 2021 20:48:55 +0000 (GMT) From: "Tobin Feldman-Fitzthum" To: devel@edk2.groups.io Cc: Dov Murik , Tobin Feldman-Fitzthum , Tobin Feldman-Fitzthum , James Bottomley , Hubertus Franke , Brijesh Singh , Ashish Kalra , Jon Grimm , Tom Lendacky Subject: [edk2-devel] [RFC PATCH 14/14] OvmfPkg/AmdSev: MH page encryption POC Date: Tue, 2 Mar 2021 15:48:39 -0500 Message-Id: <20210302204839.82042-15-tobin@linux.ibm.com> In-Reply-To: <20210302204839.82042-1-tobin@linux.ibm.com> References: <20210302204839.82042-1-tobin@linux.ibm.com> MIME-Version: 1.0 X-TM-AS-GCONF: 00 Precedence: Bulk List-Unsubscribe: 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,tobin@linux.ibm.com X-Gm-Message-State: 5vXc1gIWhT8GZInNTJlbt6r9x1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1614718148; bh=FNXWYZZrwvrsLdccd3O/vorA591PEOPFxanl9o9EBJA=; h=Cc:Date:From:Reply-To:Subject:To; b=dBF+PPqw3hUG6cFh2e6I4iZ2JImqzZcqlSX/tPR4TtS8hzpPSA2UCNRo8gvt4V8gMYs 6rtPYd9D+Qw723gaikoUmHg+i1Y+KTH06DpoRiLLe2+oV2lwSrZCeMVt85X3UtuJoNZNd 4E80jfBjv/RnW/3KY3hm56b8Cv0OYOZEbBM= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" This code is for demonstration purposes only. It is not secure or robust. The purpose is to show where encryption will be incorporated and to get a sense of the performance impact of adding encryption. We plan to use AES-GCM to encrypt the pages as a stream. This will also allow us to verify the GPA as part of the AAD, ensuring that a malicious hypervisor hasn't exchanged pages in-flight. Currently the CryptoPkg and the BaseCryptLib do not expose AES-GCM, despite it being included in OpensslLib. Thus, we use CBC here. Key sharing is out of scope for this part of the RFC. We assume that the source and destination MH share a key. This will probably be implemented via inject-launch-secret in the future. For now, we hardcode a key, but this is strictly temporary. We have had trouble using RandomBytes() in the MH when SEV is enabled. Thus the IV is hardcoded. Again, this is temporary. The HV and the MH will exchange information pertaining to encryption, like the IV, via an additional header on the shared mailbox page. This patch does not do any safety checks or handle encrypt/decrypt failures. Again, this is only here to show where encryption will go and generally how the MH on the source and target can share pages without exposing guest memory to the HV. Signed-off-by: Tobin Feldman-Fitzthum --- .../ConfidentialMigrationDxe.inf | 2 ++ .../ConfidentialMigrationDxe.c | 36 +++++++++++++++++-- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/OvmfPkg/AmdSev/ConfidentialMigration/ConfidentialMigrationDxe.= inf b/OvmfPkg/AmdSev/ConfidentialMigration/ConfidentialMigrationDxe.inf index 2816952863..ae074a8b07 100644 --- a/OvmfPkg/AmdSev/ConfidentialMigration/ConfidentialMigrationDxe.inf +++ b/OvmfPkg/AmdSev/ConfidentialMigration/ConfidentialMigrationDxe.inf @@ -22,6 +22,7 @@ MdePkg/MdePkg.dec OvmfPkg/OvmfPkg.dec UefiCpuPkg/UefiCpuPkg.dec + CryptoPkg/CryptoPkg.dec =20 [LibraryClasses] MemoryAllocationLib @@ -29,6 +30,7 @@ UefiBootServicesTableLib MpInitLib UefiDriverEntryPoint + BaseCryptLib =20 [Protocols] gEfiMpServiceProtocolGuid diff --git a/OvmfPkg/AmdSev/ConfidentialMigration/ConfidentialMigrationDxe.= c b/OvmfPkg/AmdSev/ConfidentialMigration/ConfidentialMigrationDxe.c index 42b99be552..a9cb490561 100644 --- a/OvmfPkg/AmdSev/ConfidentialMigration/ConfidentialMigrationDxe.c +++ b/OvmfPkg/AmdSev/ConfidentialMigration/ConfidentialMigrationDxe.c @@ -10,6 +10,7 @@ #include #include #include +#include =20 #include "VirtualMemory.h" #include "MpLib.h" @@ -46,6 +47,14 @@ typedef volatile struct { UINT32 done; } MH_COMMAND_PARAMETERS; =20 +// +// Additional header for encryption support. +// +struct page_hdr { + UINT8 IV[16]; + UINT8 tag[16]; +}; + // // Addresses for MH page table. // @@ -57,6 +66,20 @@ STATIC PHYSICAL_ADDRESS mMigrationHelperPageTables =3D = 0; // #define UNENC_VIRT_ADDR_BASE 0xffffff8000000000ULL =20 +// +// Key shared between source and target MH (temporary) +// +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 cipher_key[] =3D { + 0xc2, 0x86, 0x69, 0x6d, 0x88, 0x7c, 0x9a, 0xa0, 0x61, 0x1b, 0xbb, 0x3e, = 0x20, 0x25, 0xa4, 0x5a + }; + +// +// IV for CBC cipher (temporary). We are having trouble with +// calling RandomBytes from inside the Migration Handler +// +GLOBAL_REMOVE_IF_UNREFERENCED UINT8 Ivec[] =3D { + 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 +}; =20 /** Allocates and fills in custom page tables for Migration Handler. @@ -159,6 +182,8 @@ MigrationHandlerMain ( UINT64 params_base; MH_COMMAND_PARAMETERS *params; VOID *page_va; + VOID *cipher_ctx; + INTN ctx_size; =20 DebugPrint (DEBUG_INFO,"MIGRATION Handler Started\n"); =20 @@ -171,6 +196,7 @@ MigrationHandlerMain ( params_base =3D mailbox_start + UNENC_VIRT_ADDR_BASE; params =3D (VOID *)params_base; page_va =3D (VOID *)params_base + 0x1000; + //struct page_hdr *hdr_va =3D (void *) params_base + 0x800; =20 mailbox_end =3D mailbox_start + 2 * EFI_PAGE_SIZE; =20 @@ -180,6 +206,9 @@ MigrationHandlerMain ( stack_end =3D GetMHTopOfStack(); stack_start =3D stack_end - PcdGet32(PcdCpuApStackSize); =20 + ctx_size =3D AesGetContextSize (); + cipher_ctx =3D AllocateRuntimePool (ctx_size); + DisableInterrupts(); params->go =3D 0; =20 @@ -195,7 +224,9 @@ MigrationHandlerMain ( break; =20 case MH_FUNC_SAVE_PAGE: - CopyMem(page_va, (VOID *)params->gpa, 4096); + AesInit (cipher_ctx, cipher_key, 128); + AesCbcEncrypt(cipher_ctx, (VOID *)params->gpa, 4096, Ivec, page_va); + params->ret =3D MH_SUCCESS; break; =20 @@ -208,7 +239,8 @@ MigrationHandlerMain ( (params->gpa >=3D stack_start && params->gpa < stack_end)) { } else { - CopyMem((VOID *)params->gpa, page_va, 4096); + AesInit (cipher_ctx, cipher_key, 128); + AesCbcDecrypt (cipher_ctx, page_va, 4096, Ivec, (VOID *)params->gp= a); } params->ret =3D MH_SUCCESS; break; --=20 2.20.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 (#72362): https://edk2.groups.io/g/devel/message/72362 Mute This Topic: https://groups.io/mt/81036379/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-