All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sean Christopherson <seanjc@google.com>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: Dave Hansen <dave.hansen@linux.intel.com>,
	Andy Lutomirski <luto@kernel.org>,
	Peter Zijlstra <peterz@infradead.org>,
	Wei Huang <wei.huang2@amd.com>,
	Vitaly Kuznetsov <vkuznets@redhat.com>,
	Wanpeng Li <wanpengli@tencent.com>,
	Jim Mattson <jmattson@google.com>, Joerg Roedel <joro@8bytes.org>,
	kvm@vger.kernel.org, linux-kernel@vger.kernel.org,
	Borislav Petkov <bp@suse.de>,
	Tom Lendacky <thomas.lendacky@amd.com>,
	Brijesh Singh <brijesh.singh@amd.com>
Subject: Re: [PATCH v5 03/15] KVM: SVM: Disable SEV/SEV-ES if NPT is disabled
Date: Thu, 22 Apr 2021 16:15:07 +0000	[thread overview]
Message-ID: <YIGhC/1vlIAZfwzm@google.com> (raw)
In-Reply-To: <5e8a2d7d-67de-eef4-ab19-33294920f50c@redhat.com>

On Thu, Apr 22, 2021, Paolo Bonzini wrote:
> On 22/04/21 04:11, Sean Christopherson wrote:
> > Disable SEV and SEV-ES if NPT is disabled.  While the APM doesn't clearly
> > state that NPT is mandatory, it's alluded to by:
> > 
> >    The guest page tables, managed by the guest, may mark data memory pages
> >    as either private or shared, thus allowing selected pages to be shared
> >    outside the guest.
> > 
> > And practically speaking, shadow paging can't work since KVM can't read
> > the guest's page tables.
> > 
> > Fixes: e9df09428996 ("KVM: SVM: Add sev module_param")
> > Cc: Brijesh Singh <brijesh.singh@amd.com
> > Cc: Tom Lendacky <thomas.lendacky@amd.com>
> > Signed-off-by: Sean Christopherson <seanjc@google.com>
> > ---
> >   arch/x86/kvm/svm/svm.c | 30 +++++++++++++++---------------
> >   1 file changed, 15 insertions(+), 15 deletions(-)
> > 
> > diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c
> > index fed153314aef..0e8489908216 100644
> > --- a/arch/x86/kvm/svm/svm.c
> > +++ b/arch/x86/kvm/svm/svm.c
> > @@ -970,7 +970,21 @@ static __init int svm_hardware_setup(void)
> >   		kvm_enable_efer_bits(EFER_SVME | EFER_LMSLE);
> >   	}
> > -	if (IS_ENABLED(CONFIG_KVM_AMD_SEV) && sev) {
> > +	/*
> > +	 * KVM's MMU doesn't support using 2-level paging for itself, and thus
> > +	 * NPT isn't supported if the host is using 2-level paging since host
> > +	 * CR4 is unchanged on VMRUN.
> > +	 */
> > +	if (!IS_ENABLED(CONFIG_X86_64) && !IS_ENABLED(CONFIG_X86_PAE))
> > +		npt_enabled = false;
> 
> Unrelated, but since you're moving this code: should we be pre-scient and
> tackle host 5-level paging as well?
> 
> Support for 5-level page tables on NPT is not hard to fix and could be
> tested by patching QEMU.  However, the !NPT case would also have to be fixed
> by extending the PDP and PML4 stacking trick to a PML5.

Isn't that backwards?  It's the nested NPT case that requires the stacking trick.
When !NPT is disabled in L0 KVM, 32-bit guests are run with PAE paging.  Maybe
I'm misunderstanding what you're suggesting.
 
> However, without real hardware to test on I'd be a bit wary to do it.
> Looking at 5-level EPT there might be other issues (e.g. what's the guest
> MAXPHYADDR) and I would prefer to see what AMD comes up with exactly in the
> APM.  So I would just block loading KVM on hypothetical AMD hosts with
> CR4.LA57=1.

Agreed, I think blocking KVM makes the most sense.

  reply	other threads:[~2021-04-22 16:15 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-04-22  2:11 [PATCH v5 00/15] KVM: SVM: Misc SEV cleanups Sean Christopherson
2021-04-22  2:11 ` [PATCH v5 01/15] KVM: SVM: Zero out the VMCB array used to track SEV ASID association Sean Christopherson
2021-04-22  2:11 ` [PATCH v5 02/15] KVM: SVM: Free sev_asid_bitmap during init if SEV setup fails Sean Christopherson
2021-04-22 19:34   ` Tom Lendacky
2021-04-22  2:11 ` [PATCH v5 03/15] KVM: SVM: Disable SEV/SEV-ES if NPT is disabled Sean Christopherson
2021-04-22  7:14   ` Paolo Bonzini
2021-04-22 16:15     ` Sean Christopherson [this message]
2021-04-22 17:08       ` Paolo Bonzini
2021-04-22 18:11         ` Sean Christopherson
2021-04-23  7:08           ` Paolo Bonzini
2021-04-22  2:11 ` [PATCH v5 04/15] KVM: SVM: Move SEV module params/variables to sev.c Sean Christopherson
2021-04-22  2:11 ` [PATCH v5 05/15] KVM: SEV: Mask CPUID[0x8000001F].eax according to supported features Sean Christopherson
2021-04-22  2:11 ` [PATCH v5 06/15] x86/sev: Drop redundant and potentially misleading 'sev_enabled' Sean Christopherson
2021-04-22 12:05   ` Paolo Bonzini
2021-04-22 12:18     ` Borislav Petkov
2021-04-22 12:16   ` Borislav Petkov
2021-04-22  2:11 ` [PATCH v5 07/15] KVM: SVM: Append "_enabled" to module-scoped SEV/SEV-ES control variables Sean Christopherson
2021-04-22  2:11 ` [PATCH v5 08/15] KVM: SVM: Condition sev_enabled and sev_es_enabled on CONFIG_KVM_AMD_SEV=y Sean Christopherson
2021-04-22  2:11 ` [PATCH v5 09/15] KVM: SVM: Enable SEV/SEV-ES functionality by default (when supported) Sean Christopherson
2021-04-22  2:11 ` [PATCH v5 10/15] KVM: SVM: Unconditionally invoke sev_hardware_teardown() Sean Christopherson
2021-04-22  2:11 ` [PATCH v5 11/15] KVM: SVM: Explicitly check max SEV ASID during sev_hardware_setup() Sean Christopherson
2021-04-22  2:11 ` [PATCH v5 12/15] KVM: SVM: Move SEV VMCB tracking allocation to sev.c Sean Christopherson
2021-04-22  2:11 ` [PATCH v5 13/15] KVM: SVM: Drop redundant svm_sev_enabled() helper Sean Christopherson
2021-04-22  2:11 ` [PATCH v5 14/15] KVM: SVM: Remove an unnecessary prototype declaration of sev_flush_asids() Sean Christopherson
2021-04-22  2:11 ` [PATCH v5 15/15] KVM: SVM: Skip SEV cache flush if no ASIDs have been used Sean Christopherson
2021-04-22  7:30   ` Paolo Bonzini
2021-04-22  7:30 ` [PATCH v5 00/15] KVM: SVM: Misc SEV cleanups Paolo Bonzini
2021-04-22 16:02   ` Sean Christopherson
2021-04-22 17:08     ` Paolo Bonzini

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=YIGhC/1vlIAZfwzm@google.com \
    --to=seanjc@google.com \
    --cc=bp@suse.de \
    --cc=brijesh.singh@amd.com \
    --cc=dave.hansen@linux.intel.com \
    --cc=jmattson@google.com \
    --cc=joro@8bytes.org \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=luto@kernel.org \
    --cc=pbonzini@redhat.com \
    --cc=peterz@infradead.org \
    --cc=thomas.lendacky@amd.com \
    --cc=vkuznets@redhat.com \
    --cc=wanpengli@tencent.com \
    --cc=wei.huang2@amd.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.