On 2/20/23 02:49, Dov Murik wrote:
In order to allow the VMM (such as QEMU) to add a page with hashes of
kernel/initrd/cmdline for measured direct boot on SNP, this page must
not be part of the SNP metadata list reported to the VMM.
Check if that page is defined; if it is, skip it in the metadata list.
In such case, VMM should fill the page with the hashes content, or
explicitly update it as a zero page (if kernel hashes are not used).
Would it be better to define a new section type (similar to what I did in
the SVSM PoC)? This way, it remains listed in the metadata and allows the
VMM to detect it and decide how to handle it.
Thanks,
Tom
Note that for SNP, the launch secret part of the page (lower 3KB) are
not relevant and will stay zero. The last 1KB is used for the hashes.
This should have no effect on OvmfPkgX64 targets (which don't define
PcdSevLaunchSecretBase).
Signed-off-by: Dov Murik <[email protected]>
---
OvmfPkg/ResetVector/ResetVector.nasmb | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/OvmfPkg/ResetVector/ResetVector.nasmb
b/OvmfPkg/ResetVector/ResetVector.nasmb
index 94fbb0a87b37..16f3daf49d82 100644
--- a/OvmfPkg/ResetVector/ResetVector.nasmb
+++ b/OvmfPkg/ResetVector/ResetVector.nasmb
@@ -75,7 +75,19 @@
;
%define SNP_SEC_MEM_BASE_DESC_2 (GHCB_BASE + 0x1000)
%define SNP_SEC_MEM_SIZE_DESC_2 (SEV_SNP_SECRETS_BASE -
SNP_SEC_MEM_BASE_DESC_2)
-%define SNP_SEC_MEM_BASE_DESC_3 (CPUID_BASE + CPUID_SIZE)
+%if (FixedPcdGet32 (PcdSevLaunchSecretBase) > 0)
+ ; There's a reserved page for SEV secrets and hashes; the VMM will fill and
+ ; validate the page, or mark it as a zero page.
+ %define EXPECTED_END_OF_LAUNCH_SECRET_PAGE (FixedPcdGet32
(PcdSevLaunchSecretBase) + \
+ FixedPcdGet32
(PcdSevLaunchSecretSize) + \
+ FixedPcdGet32
(PcdQemuHashTableSize))
+ %if (FixedPcdGet32 (PcdOvmfSecPeiTempRamBase) !=
EXPECTED_END_OF_LAUNCH_SECRET_PAGE)
+ %error "PcdOvmfSecPeiTempRamBase must start directly after the SEV Launch
Secret page"
+ %endif
+ %define SNP_SEC_MEM_BASE_DESC_3 (FixedPcdGet32
(PcdOvmfSecPeiTempRamBase))
+%else
+ %define SNP_SEC_MEM_BASE_DESC_3 (CPUID_BASE + CPUID_SIZE)
+%endif
%define SNP_SEC_MEM_SIZE_DESC_3 (FixedPcdGet32 (PcdOvmfPeiMemFvBase) -
SNP_SEC_MEM_BASE_DESC_3)
%ifdef ARCH_X64
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#100370): https://edk2.groups.io/g/devel/message/100370
Mute This Topic: https://groups.io/mt/97082683/21656
Group Owner: [email protected]
Unsubscribe: https://edk2.groups.io/g/devel/unsub [[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-