From: Yosry Ahmed <yosry@kernel.org>
To: Jim Mattson <jmattson@google.com>
Cc: Sean Christopherson <seanjc@google.com>,
Paolo Bonzini <pbonzini@redhat.com>,
John Allen <john.allen@amd.com>, Chao Gao <chao.gao@intel.com>,
kvm@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] KVM: nSVM: Add missing CET VMRUN consistency checks
Date: Tue, 10 Nov 2026 17:56:20 +0000 [thread overview]
Message-ID: <avNYjOevOv5s2o5k@google.com> (raw)
In-Reply-To: <20261110004037.125692-1-jmattson@google.com>
On Mon, Nov 09, 2026 at 04:40:37PM -0800, Jim Mattson wrote:
> Per the APM, "Canonicalization and Consistency Checks,"
>
> [t]he following conditions are considered illegal state combinations:
>
> - CR4.CET=1 when CR0.WP=0
> - Any reserved bit set in S_CET
> - CR4.CET=1 and U_CET.SS=1 when EFLAGS.VM=1
>
> Check these conditions in software before trying to VMRUN vmcb02, so that
> the illegal states result in a #VMEXIT to L1 rather than an exit to
> userspace with KVM_EXIT_FAIL_ENTRY.
>
> Fixes: c5ba49458513 ("KVM: nSVM: Save/load CET Shadow Stack state to/from vmcb12/vmcb02")
> Signed-off-by: Jim Mattson <jmattson@google.com>
> ---
> arch/x86/kvm/svm/nested.c | 15 +++++++++++++++
> 1 file changed, 15 insertions(+)
>
> diff --git a/arch/x86/kvm/svm/nested.c b/arch/x86/kvm/svm/nested.c
> index af0ef678433d..20ede403b62d 100644
> --- a/arch/x86/kvm/svm/nested.c
> +++ b/arch/x86/kvm/svm/nested.c
> @@ -469,6 +469,21 @@ static bool nested_vmcb_check_save(struct kvm_vcpu *vcpu,
> if (CC(!__kvm_is_valid_cr4(vcpu, save->cr4)))
> return false;
>
> + if (CC((save->cr4 & X86_CR4_CET) && !(save->cr0 & X86_CR0_WP)))
> + return false;
Why aren't we checking X86_FEATURE_SHSTK here as well? Do we know if
older CPUs that didn't support CET had the consistency check?
> +
> + if (guest_cpu_cap_has(vcpu, X86_FEATURE_SHSTK) &&
> + CC(!kvm_is_valid_u_s_cet(vcpu, save->s_cet)))
> + return false;
> +
> + if ((save->cr4 & X86_CR4_CET) && (save->rflags & X86_EFLAGS_VM)) {
> + u64 u_cet = 0;
> +
> + if (!__kvm_emulate_msr_read(vcpu, MSR_IA32_U_CET, &u_cet) &&
If X86_FEATURE_SHSTK is not enumerated by the vCPU, then whether or not
the consistency check is done depends on ignore_msr. If ignore_msr=0,
the MSR read will fail and we won't do the consistency check, but if
ignore_msr=1 the MSR read will silently return 0, so the consistency
check will be done but will always succeed.
Instead of this implicit dependency, should we check for
X86_FEATURE_SHSTK explicitly?
Also, if X86_FEATURE_SHSTK is enumberated by the vCPU, and the MSR read
fails, the consistency check will silently be skipped. But I don't think
this can/should happen. Maybe we should WARN in this case.
One last question, in the restore path, the MSR may have not been
restored yet, right? Can the consistency check mistakenly fail in this
case?
> + CC(u_cet & CET_SHSTK_EN))
> + return false;
> + }
> +
> if (CC(!kvm_valid_efer(vcpu, save->efer)))
> return false;
>
> --
> 2.56.0.506.g506a7eabc5-goog
>
next prev parent reply other threads:[~2026-11-10 17:56 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-10 0:40 Jim Mattson
2026-11-10 17:56 ` Yosry Ahmed [this message]
2026-11-10 19:18 ` Jim Mattson
2026-11-10 19:29 ` Yosry Ahmed
2026-11-10 19:43 ` Jim Mattson
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=avNYjOevOv5s2o5k@google.com \
--to=yosry@kernel.org \
--cc=chao.gao@intel.com \
--cc=jmattson@google.com \
--cc=john.allen@amd.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=pbonzini@redhat.com \
--cc=seanjc@google.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®