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 <to...@linux.ibm.com> --- .../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 = PcdGet32 (PcdConfidentialMigrationMailboxBase) + UNENC_VIRT_ADDR_BASE; + mailbox_start = PcdGet32 (PcdConfidentialMigrationMailboxBase); + params_base = mailbox_start + UNENC_VIRT_ADDR_BASE; params = (VOID *)params_base; page_va = (VOID *)params_base + 0x1000; + mailbox_end = mailbox_start + 2 * EFI_PAGE_SIZE; + + pagetable_start = mMigrationHelperPageTables; + pagetable_end = pagetable_start + 11 * EFI_PAGE_SIZE; + DisableInterrupts(); params->go = 0; @@ -163,7 +173,15 @@ MigrationHandlerMain ( break; 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 >= mailbox_start && params->gpa < mailbox_end) || + (params->gpa >= pagetable_start && params->gpa < pagetable_end)) { + } + else { + CopyMem((VOID *)params->gpa, page_va, 4096); + } params->ret = MH_SUCCESS; break; -- 2.20.1 -=-=-=-=-=-=-=-=-=-=-=- 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/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-