All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sean Christopherson <seanjc@google.com>
To: Yan Zhao <yan.y.zhao@intel.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>,
	Kiryl Shutsemau <kas@kernel.org>,
	 Rick Edgecombe <rick.p.edgecombe@intel.com>,
	Dave Hansen <dave.hansen@linux.intel.com>,
	 kvm@vger.kernel.org, x86@kernel.org, linux-coco@lists.linux.dev,
	 linux-kernel@vger.kernel.org,
	James Houghton <jthoughton@google.com>,
	 Xiaoyao Li <xiaoyao.li@intel.com>,
	Binbin Wu <binbin.wu@linux.intel.com>,
	 Ackerley Tng <ackerleytng@google.com>,
	Vishal Annapurve <vannapurve@google.com>,
	 Sashiko Bot <sashiko-bot@kernel.org>
Subject: Re: [PATCH v2 2/3] KVM: TDX: Synthesize SHUTDOWN instead of returning -EIO on unhandled EPT violation
Date: Thu, 15 Oct 2026 06:58:52 -0700	[thread overview]
Message-ID: <atDcHCtdPNAJGHeI@google.com> (raw)
In-Reply-To: <asmwyCYDyaLwfmCV@yzhao56-desk.sh.intel.com>

On Sat, Oct 10, 2026, Yan Zhao wrote:
> On Tue, Sep 29, 2026 at 05:11:26PM -0700, Sean Christopherson wrote:
> > Exit to userspace with KVM_EXIT_SHUTDOWN instead of returning -EIO from
> > KVM_RUN if KVM encounters an EPT Violation due to a guest access to a
> > pending page.  Returning -EIO implies KVM is buggy, and most VMMs will
> > respond by completely terminating the VM, versus rebooting the VM in
> > response to KVM_EXIT_SHUTDOWN.  I.e. give the VMM the option of trying to
> > keep the VM (from the end user's perspective) alive.
> > 
> > Ideally, KVM would probably exit with KVM_EXIT_MEMORY_FAULT, but KVM would
> > need to extend run->memory_fault so that userspace knows the fault can't be
> > handled.  This scenario specifically occurs when the guest has deliberately
> > disabled #VEs on unaccepted memory for security purposes, i.e. the guest
> > literally disabled the mechanism that tells it it screwed up.  But, because
> > this is fatal, and the whole point is to NOT try to fixup the fault,
> > jumping through hoops to return MEMORY_FAULT instead of SHUTDOWN doesn't
> > make a whole lot of sense.
> > 
> > Don't bother bouncing through KVM_REQ_TRIPLE_FAULT as
> > tdx_handle_ept_violation() is a top-level exit handler, i.e. there is no
> > need to worry about failing to actually exit to userspace.
> > 
> > Fixes: e6a85781f783 ("KVM: TDX: Detect unexpected SEPT violations due to pending SPTEs")
> > Cc: stable@vger.kernel.org
> > Cc: James Houghton <jthoughton@google.com>
> > Cc: Xiaoyao Li <xiaoyao.li@intel.com>
> > Cc: Rick Edgecombe <rick.p.edgecombe@intel.com>
> > Cc: Yan Zhao <yan.y.zhao@intel.com>
> > Cc: Binbin Wu <binbin.wu@linux.intel.com>
> > Cc: Ackerley Tng <ackerleytng@google.com>
> > Cc: Vishal Annapurve <vannapurve@google.com>
> > Signed-off-by: Sean Christopherson <seanjc@google.com>
> > ---
> >  arch/x86/kvm/vmx/tdx.c | 4 ++--
> >  1 file changed, 2 insertions(+), 2 deletions(-)
> > 
> > diff --git a/arch/x86/kvm/vmx/tdx.c b/arch/x86/kvm/vmx/tdx.c
> > index 29d4751f37fb..e3723f1222fc 100644
> > --- a/arch/x86/kvm/vmx/tdx.c
> > +++ b/arch/x86/kvm/vmx/tdx.c
> > @@ -1939,8 +1939,8 @@ static int tdx_handle_ept_violation(struct kvm_vcpu *vcpu)
> >  		if (tdx_is_sept_violation_unexpected_pending(vcpu)) {
> >  			pr_warn("Guest access before accepting 0x%llx on vCPU %d\n",
> >  				gpa, vcpu->vcpu_id);
> > -			kvm_vm_dead(vcpu->kvm);
> > -			return -EIO;
> > +			kvm_prepare_shutdown_exit(vcpu);
> Would it be better to exit with the reason KVM_EXIT_SYSTEM_EVENT and type
> KVM_SYSTEM_EVENT_SHUTDOWN or KVM_SYSTEM_EVENT_TDX_FATAL?

No.  KVM_SYSTEM_EVENT_SHUTDOWN is an explicit call from the guest to do a clean
shutdown (used by arm64 and RISC-V).  KVM_SYSTEM_EVENT_TDX_FATAL similarly exists
to relay explicit calls from the guest.  Ditto for KVM_SYSTEM_EVENT_CRASH and
KVM_SYSTEM_EVENT_SEV_TERM (which obviously is a poor fit for TDX, just pointing
out that it's another guest-initiated event).

KVM_EXIT_SHUTDOWN isn't a perfect fit, but IMO it's the closest approximation,
e.g. it's a rough equivalent of what happens if a #VE couldn't be handled because
the stack is invalid.  And more importantly, because we're retroactively fixing
code, KVM_EXIT_SHUTDOWN has the best chance of being handled appropriately by all
VMMs.

> By defining a specific flag (e.g., KVM_SYSTEM_EVENT_FLAG_TDX_UNEXPECTED_PENDING),
> we can stuff necessary info like gpa, vcpu->vcpu_id into data, so both pr_warn()
> and pr_warn_ratelimited() can be dropped.

Well, IMO, the printk can be dropped no matter what. :-)  But I don't care _that_
much so I'm ok keeping the ratelimited version.

vcpu_id is redundant, the exit is tied to a specific vCPU.  And as I said elsewhere,
practically speaking the GPA is all but guaranteed to be useless outside of
interactive debug sessions.

  reply	other threads:[~2026-10-15 13:58 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-30  0:11 [PATCH v2 0/3] KVM: TDX: Syntehsize SHUTDOWN on unhandled EPT Violation Sean Christopherson
2026-09-30  0:11 ` [PATCH v2 1/3] KVM: x86: Add a helper to prepare vcpu->run for a SHUTDOWN exit to userspace Sean Christopherson
2026-09-30  3:04   ` Binbin Wu
2026-09-30  0:11 ` [PATCH v2 2/3] KVM: TDX: Synthesize SHUTDOWN instead of returning -EIO on unhandled EPT violation Sean Christopherson
2026-09-30  4:58   ` Binbin Wu
2026-10-10  3:28   ` Yan Zhao
2026-10-15 13:58     ` Sean Christopherson [this message]
2026-09-30  0:11 ` [PATCH v2 3/3] KVM: TDX: Ratelimit the "EPT Violation on pending acceptance page" warning Sean Christopherson
2026-09-30  5:01   ` Binbin Wu
2026-10-08  3:08   ` Yan Zhao
2026-10-08  8:04     ` Binbin Wu
2026-10-10  2:37       ` Yan Zhao
2026-09-30  0:32 ` [PATCH v2 0/3] KVM: TDX: Syntehsize SHUTDOWN on unhandled EPT Violation Edgecombe, Rick P
2026-09-30  0:55   ` Sean Christopherson
2026-10-08  8:03     ` Yan Zhao
2026-10-09 20:58       ` Sean Christopherson
2026-10-10  2:29         ` Yan Zhao
2026-10-12 13:15           ` Sean Christopherson
2026-10-14  1:32             ` Yan Zhao

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=atDcHCtdPNAJGHeI@google.com \
    --to=seanjc@google.com \
    --cc=ackerleytng@google.com \
    --cc=binbin.wu@linux.intel.com \
    --cc=dave.hansen@linux.intel.com \
    --cc=jthoughton@google.com \
    --cc=kas@kernel.org \
    --cc=kvm@vger.kernel.org \
    --cc=linux-coco@lists.linux.dev \
    --cc=linux-kernel@vger.kernel.org \
    --cc=pbonzini@redhat.com \
    --cc=rick.p.edgecombe@intel.com \
    --cc=sashiko-bot@kernel.org \
    --cc=vannapurve@google.com \
    --cc=x86@kernel.org \
    --cc=xiaoyao.li@intel.com \
    --cc=yan.y.zhao@intel.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.