From: Tianyu Lan Date: Fri, 18 Aug 2023 10:29:13 +0000 (-0400) Subject: x86/hyperv: Mark Hyper-V vp assist page unencrypted in SEV-SNP enlightened guest X-Git-Tag: v6.6.17~4005^2~20 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=b13103559dddbc64330c2e63ebf7342e70fbab4e;p=platform%2Fkernel%2Flinux-rpi.git x86/hyperv: Mark Hyper-V vp assist page unencrypted in SEV-SNP enlightened guest hv vp assist page needs to be shared between SEV-SNP guest and Hyper-V. So mark the page unencrypted in the SEV-SNP guest. Reviewed-by: Dexuan Cui Reviewed-by: Michael Kelley Signed-off-by: Tianyu Lan Signed-off-by: Wei Liu Link: https://lore.kernel.org/r/20230818102919.1318039-4-ltykernel@gmail.com --- diff --git a/arch/x86/hyperv/hv_init.c b/arch/x86/hyperv/hv_init.c index 318010e..bcfbcda 100644 --- a/arch/x86/hyperv/hv_init.c +++ b/arch/x86/hyperv/hv_init.c @@ -18,6 +18,7 @@ #include #include #include +#include #include #include #include @@ -106,8 +107,21 @@ static int hv_cpu_init(unsigned int cpu) * in hv_cpu_die(), otherwise a CPU may not be stopped in the * case of CPU offlining and the VM will hang. */ - if (!*hvp) + if (!*hvp) { *hvp = __vmalloc(PAGE_SIZE, GFP_KERNEL | __GFP_ZERO); + + /* + * Hyper-V should never specify a VM that is a Confidential + * VM and also running in the root partition. Root partition + * is blocked to run in Confidential VM. So only decrypt assist + * page in non-root partition here. + */ + if (*hvp && hv_isolation_type_en_snp()) { + WARN_ON_ONCE(set_memory_decrypted((unsigned long)(*hvp), 1)); + memset(*hvp, 0, PAGE_SIZE); + } + } + if (*hvp) msr.pfn = vmalloc_to_pfn(*hvp);