Messages in this thread | | | From | Vitaly Kuznetsov <> | Subject | Re: [PATCH 3/9] x86/hyperv: Mark Hyper-V vp assist page unencrypted in SEV-SNP enlightened guest | Date | Mon, 05 Jun 2023 14:13:29 +0200 |
| |
Tianyu Lan <ltykernel@gmail.com> writes:
> From: Tianyu Lan <tiala@microsoft.com> > > 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@microsoft.com> > --- > 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
| |