From: Naveen N Rao <naveen@kernel.org>
To: Sean Christopherson <seanjc@google.com>
Cc: Borislav Petkov <bp@alien8.de>,
kvm@vger.kernel.org, linux-kernel@vger.kernel.org,
Paolo Bonzini <pbonzini@redhat.com>,
Nikunj A Dadhania <nikunj@amd.com>,
Tom Lendacky <thomas.lendacky@amd.com>,
Tianyu Lan <tiala@microsoft.com>,
Dave Hansen <dave.hansen@linux.intel.com>,
Thomas Gleixner <tglx@kernel.org>,
David Kaplan <david.kaplan@amd.com>,
Neeraj Upadhyay <neeraj.upadhyay@kernel.org>,
Michael Roth <michael.roth@amd.com>
Subject: Re: [RFC PATCH v3 16/27] KVM: SVM: Add handler for VMGEXIT Secure AVIC NAE event
Date: Thu, 1 Oct 2026 01:24:59 +0530 [thread overview]
Message-ID: <ar0yoCb7Zl9HCzjl@blrnaveerao1> (raw)
In-Reply-To: <ar0ul9g3bvHI3VOV@google.com>
On Wed, Sep 30, 2026 at 08:45:27AM -0700, Sean Christopherson wrote:
> On Wed, Sep 30, 2026, Naveen N Rao wrote:
> > On Tue, Sep 22, 2026 at 08:31:45PM +0530, Naveen N Rao wrote:
> > With the below hunk, I think we should be able to catch invalidations
> > due to PUNCH_HOLE, HWPOISON, memslot DELETE and to-SHARED conversions,
> > and should help make the source of the invalidation clear:
> >
> > diff --git a/arch/x86/kvm/svm/sev.c b/arch/x86/kvm/svm/sev.c
> > index 96992d10cb2b..3c8daa876045 100644
> > --- a/arch/x86/kvm/svm/sev.c
> > +++ b/arch/x86/kvm/svm/sev.c
> > @@ -5571,11 +5571,36 @@ void sev_gmem_invalidate_range(struct kvm *kvm, struct kvm_gfn_range *range)
> > * vCPU to re-establish its VMSA.
> > */
> > gpa_t gpa = READ_ONCE(to_svm(vcpu)->sev_es.snp_guest_vmsa_gpa);
> > + gpa_t savic_gpa = READ_ONCE(to_svm(vcpu)->sev_es.snp_guest_savic_gpa);
> >
> > if (VALID_PAGE(gpa) &&
> > gpa_to_gfn(gpa) >= range->start &&
> > gpa_to_gfn(gpa) < range->end)
> > kvm_make_request_and_kick(KVM_REQ_VMSA_PAGE_RELOAD, vcpu);
> > +
> > + /*
> > + * All PRIVATE invalidations that hit the Secure AVIC backing page in
> > + * this path will result in a subsequent access by the Secure AVIC HW
> > + * to cause a not-restartable #NPF killing the VM. Catch such
> > + * invalidations here so that the source of those invalidations is
> > + * clear, rather than a subsequent guest access resulting in a
> > + * unrecoverable #NPF.
> > + *
> > + * This is expected on guest teardown, so check if there is a valid
> > + * gmem.file before killing the VM.
> > + */
> > + if (VALID_PAGE(savic_gpa) &&
> > + READ_ONCE(range->slot->gmem.file) &&
> > + (range->attr_filter & KVM_FILTER_PRIVATE) &&
> > + gpa_to_gfn(savic_gpa) >= range->start &&
> > + gpa_to_gfn(savic_gpa) < range->end) {
> > + if (!kvm->vm_dead) {
> > + vcpu_err(vcpu, "Secure AVIC backing page invalidated, GPA 0x%llx!\n", savic_gpa);
> > + dump_stack();
> > + kvm_vm_dead(vcpu->kvm);
> > + return;
> > + }
> > + }
>
> This is beyond gross.
Ack, and to be perfectly clear: this change is not required.
I added this only to address concerns raised during PUCK that
invalidation sources may not be evident if we take a not-restartable
#NPF.
In reality, if we address memslot DELETE, all the other invalidation
sources that reach here are already destructive to the VM (PUNCH_HOLE,
MCE/HWPOISON and to-SHARED conversions) and point at a buggy guest/VMM
(or HW in the case of MCE).
Hmm.. that made me think I may have got this backwards. This hook was
added for VMSA reload to address PUNCH_HOLE, so I ended up using it for
that purpose. But, it probably makes better sense to handle the
invalidation from a memslot DELETE here, rather than BUG the VM. This
hook is called on that path before the pages are zapped, so a KVM_REQ
here might just be what we need to handle that.
Untested, but something like this instead (will look at this more
tomorrow)?
diff --git a/arch/x86/kvm/svm/sev.c b/arch/x86/kvm/svm/sev.c
index 96992d10cb2b..22b3f9fcac74 100644
--- a/arch/x86/kvm/svm/sev.c
+++ b/arch/x86/kvm/svm/sev.c
@@ -5571,11 +5571,25 @@ void sev_gmem_invalidate_range(struct kvm *kvm, struct kvm_gfn_range *range)
* vCPU to re-establish its VMSA.
*/
gpa_t gpa = READ_ONCE(to_svm(vcpu)->sev_es.snp_guest_vmsa_gpa);
+ gpa_t savic_gpa = READ_ONCE(to_svm(vcpu)->sev_es.snp_guest_savic_gpa);
if (VALID_PAGE(gpa) &&
gpa_to_gfn(gpa) >= range->start &&
gpa_to_gfn(gpa) < range->end)
kvm_make_request_and_kick(KVM_REQ_VMSA_PAGE_RELOAD, vcpu);
+
+ /*
+ * For invalidations that hit the Secure AVIC backing page, kick the
+ * vCPU out and queue a KVM_REQ to have the backing page prefaulted.
+ * For memslot DELETE+CREATE, the vCPU won't re-enter the guest until
+ * the memslot is re-created. For other destructive operations
+ * (PUNCH_HOLE, HWPOISON, SHARED conversion), the VM is dead
+ * regardless.
+ */
+ if (VALID_PAGE(savic_gpa) &&
+ gpa_to_gfn(savic_gpa) >= range->start &&
+ gpa_to_gfn(savic_gpa) < range->end)
+ kvm_make_request_and_kick(KVM_REQ_PROTECTED_APIC_PAGE_RELOAD, vcpu);
}
}
- Naveen
next prev parent reply other threads:[~2026-09-30 19:57 UTC|newest]
Thread overview: 51+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-08 6:31 [RFC PATCH v3 00/27] KVM: SVM: Add support for SEV-SNP Secure AVIC Naveen N Rao (AMD)
2026-07-08 6:31 ` [RFC PATCH v3 01/27] x86/apic: Propagate APIC_SPIV writes to hv for " Naveen N Rao (AMD)
2026-07-10 2:03 ` Borislav Petkov
2026-07-10 15:02 ` Naveen N Rao
2026-07-11 4:37 ` Borislav Petkov
2026-07-13 17:38 ` Tom Lendacky
2026-07-14 8:57 ` Naveen N Rao
2026-07-08 6:32 ` [RFC PATCH v3 02/27] x86/apic: Drop savic_eoi() in favor of native_apic_msr_eoi() " Naveen N Rao (AMD)
2026-07-13 17:43 ` Tom Lendacky
2026-07-14 9:02 ` Naveen N Rao
2026-10-06 6:16 ` Sean Christopherson
2026-10-08 7:35 ` Naveen N Rao
2026-10-06 3:20 ` Borislav Petkov
2026-10-08 7:57 ` Naveen N Rao
2026-07-08 6:32 ` [RFC PATCH v3 03/27] x86/kvm: Disable PV_SEND_IPI if Secure AVIC is enabled Naveen N Rao (AMD)
2026-07-13 17:52 ` Tom Lendacky
2026-07-14 9:42 ` Naveen N Rao
2026-07-08 6:32 ` [RFC PATCH v3 04/27] x86/apic: Use AVIC_INCOMPLETE_IPI VMGEXIT for Secure AVIC IPI handling Naveen N Rao (AMD)
2026-07-13 17:59 ` Tom Lendacky
2026-07-14 10:03 ` Naveen N Rao
2026-07-08 6:32 ` [RFC PATCH v3 05/27] x86/cpufeatures: Add Secure AVIC CPU feature Naveen N Rao (AMD)
2026-07-13 18:32 ` Tom Lendacky
2026-07-08 6:32 ` [RFC PATCH v3 06/27] KVM: SVM: Add helper to check if Secure AVIC is enabled for a guest Naveen N Rao (AMD)
2026-07-13 18:35 ` Tom Lendacky
2026-07-08 6:32 ` [RFC PATCH v3 07/27] KVM: SVM: Set guest_apic_protected if Secure AVIC is enabled Naveen N Rao (AMD)
2026-07-08 6:32 ` [RFC PATCH v3 08/27] kvm: irqfd: Have kvm_arch_has_irq_bypass() take struct kvm pointer Naveen N Rao (AMD)
2026-07-08 6:32 ` [RFC PATCH v3 09/27] KVM: SVM: Disable IRQ bypass for Secure AVIC Naveen N Rao (AMD)
2026-07-08 6:32 ` [RFC PATCH v3 10/27] KVM: SVM: Add avic_ipiv_is_soft_disabled() as a wrapper around enable_ipiv Naveen N Rao (AMD)
2026-07-08 6:32 ` [RFC PATCH v3 11/27] KVM: SVM: Disable IPIv for Secure AVIC Naveen N Rao (AMD)
2026-07-08 6:32 ` [RFC PATCH v3 12/27] KVM: SVM: Short-circuit a few AVIC flows " Naveen N Rao (AMD)
2026-07-08 6:32 ` [RFC PATCH v3 13/27] KVM: SVM: Warn if we ever receive AVIC_UNACCELERATED_ACCESS #VMEXIT Naveen N Rao (AMD)
2026-07-08 6:32 ` [RFC PATCH v3 14/27] KVM: SVM: Do not inhibit AVIC for SEV-SNP guests if Secure AVIC is enabled Naveen N Rao (AMD)
2026-07-08 6:32 ` [RFC PATCH v3 15/27] KVM: SVM: Set VGIF in VMSA area for Secure AVIC guests Naveen N Rao (AMD)
2026-07-08 6:32 ` [RFC PATCH v3 16/27] KVM: SVM: Add handler for VMGEXIT Secure AVIC NAE event Naveen N Rao (AMD)
2026-08-26 16:09 ` Sean Christopherson
2026-09-22 15:01 ` Naveen N Rao
2026-09-30 14:43 ` Naveen N Rao
2026-09-30 15:45 ` Sean Christopherson
2026-09-30 19:54 ` Naveen N Rao [this message]
2026-07-08 6:32 ` [RFC PATCH v3 17/27] KVM: SVM: Do not intercept SECURE_AVIC_CONTROL MSR for Secure AVIC guests Naveen N Rao (AMD)
2026-07-08 6:32 ` [RFC PATCH v3 18/27] KVM: x86: Add a new kvm_x86_op protected_apic_has_injectable_intr() Naveen N Rao (AMD)
2026-07-08 6:32 ` [RFC PATCH v3 19/27] KVM: SVM: Implement kvm_x86_ops->protected_apic_has_injectable_intr() for Secure AVIC Naveen N Rao (AMD)
2026-07-08 6:32 ` [RFC PATCH v3 20/27] KVM: SVM: Implement kvm_x86_ops->protected_apic_has_interrupt() " Naveen N Rao (AMD)
2026-07-08 6:32 ` [RFC PATCH v3 21/27] KVM: SVM: Add interrupt delivery support for Secure AVIC guests Naveen N Rao (AMD)
2026-07-08 6:32 ` [RFC PATCH v3 22/27] KVM: SVM: Add support for incomplete IPI handling for Secure AVIC Naveen N Rao (AMD)
2026-07-08 6:32 ` [RFC PATCH v3 23/27] KVM: SVM: Add support for injecting NMIs for Secure AVIC guests Naveen N Rao (AMD)
2026-07-08 6:32 ` [RFC PATCH v3 24/27] KVM: SVM: Mandate use of split irqchip for Secure AVIC Naveen N Rao (AMD)
2026-07-08 6:32 ` [RFC PATCH v3 25/27] KVM: SVM: Do not inject exceptions " Naveen N Rao (AMD)
2026-07-08 6:32 ` [RFC PATCH v3 26/27] KVM: SVM: Do not intercept exceptions for Secure AVIC guests Naveen N Rao (AMD)
2026-07-08 6:32 ` [RFC PATCH v3 27/27] KVM: SVM: Advertise Secure AVIC support for SEV-SNP guests Naveen N Rao (AMD)
2026-07-08 9:20 ` [RFC PATCH v3 00/27] KVM: SVM: Add support for SEV-SNP Secure AVIC Naveen N Rao
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=ar0yoCb7Zl9HCzjl@blrnaveerao1 \
--to=naveen@kernel.org \
--cc=bp@alien8.de \
--cc=dave.hansen@linux.intel.com \
--cc=david.kaplan@amd.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=michael.roth@amd.com \
--cc=neeraj.upadhyay@kernel.org \
--cc=nikunj@amd.com \
--cc=pbonzini@redhat.com \
--cc=seanjc@google.com \
--cc=tglx@kernel.org \
--cc=thomas.lendacky@amd.com \
--cc=tiala@microsoft.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.