Tianyu Lan <ltykernel@xxxxxxxxx> writes: > From: Tianyu Lan <tiala@xxxxxxxxxxxxx> > > 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. > > Signed-off-by: Tianyu Lan <tiala@xxxxxxxxxxxxx> > --- > arch/x86/hyperv/hv_init.c | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/arch/x86/hyperv/hv_init.c b/arch/x86/hyperv/hv_init.c > index b4a2327c823b..331b855314b7 100644 > --- a/arch/x86/hyperv/hv_init.c > +++ b/arch/x86/hyperv/hv_init.c > @@ -18,6 +18,7 @@ > #include <asm/hyperv-tlfs.h> > #include <asm/mshyperv.h> > #include <asm/idtentry.h> > +#include <asm/set_memory.h> > #include <linux/kexec.h> > #include <linux/version.h> > #include <linux/vmalloc.h> > @@ -113,6 +114,11 @@ static int hv_cpu_init(unsigned int cpu) > > } > if (!WARN_ON(!(*hvp))) { > + if (hv_isolation_type_en_snp()) { > + WARN_ON_ONCE(set_memory_decrypted((unsigned long)(*hvp), 1)); > + memset(*hvp, 0, PAGE_SIZE); > + } Why do we need to set the page as decrypted here and not when we allocate the page (a few lines above)? And why do we need to clear it _after_ we made it decrypted? In case we care about not leaking the stale content to the hypervisor, we should've cleared it _before_, but the bigger problem I see is that memset() is problemmatic e.g. for KVM which uses enlightened VMCS. You put a CPU offline and then back online and this path will be taken. Clearing VP assist page will likely brake things. (AFAIU SEV-SNP Hyper-V guests don't expose SVM yet so the problem is likely theoretical only, but still). > + > msr.enable = 1; > wrmsrl(HV_X64_MSR_VP_ASSIST_PAGE, msr.as_uint64); > } -- Vitaly