On Fri, Aug 04, 2023, Chao Gao wrote:OK, will use kvm_cpu_cap_has() to check KVM support before add CET MSRs to the lists.
On Fri, Aug 04, 2023 at 11:13:36AM +0800, Yang, Weijiang wrote:+1. And specifically, this isn't about SHSTK being exposed to the guest, it's about
Why should userspace be allowed to access SHSTK MSRs in this case? L1 may notYes, but userspace should be able to access SHSTK MSRs even only IBT is exposed to guest so@@ -7214,6 +7217,13 @@ static void kvm_probe_msr_to_save(u32 msr_index)shall we consider the case where IBT is supported while SS isn't
if (!kvm_caps.supported_xss)
return;
break;
+ case MSR_IA32_U_CET:
+ case MSR_IA32_S_CET:
+ case MSR_KVM_GUEST_SSP:
+ case MSR_IA32_PL0_SSP ... MSR_IA32_INT_SSP_TAB:
+ if (!kvm_is_cet_supported())
(e.g., in L1 guest)?
far as KVM can support SHSTK MSRs.
even enumerate SHSTK (qemu removes -shstk explicitly but keeps IBT), how KVM in
L1 can allow its userspace to do that?
SHSTK being _supported by KVM_. This is all about KVM telling userspace what MSRs
are valid and/or need to be saved+restored. If KVM doesn't support a feature,
then the MSRs are invalid and there is no reason for userspace to save+restore
the MSRs on live migration.
I see, thanks!+1, one of the big reasons kvm_cpu_cap_has() came about was being KVM had a giantWhen KVM claims a feature is supported, it should ensure all its dependencies areI think using exiting check implies two things:+static inline bool kvm_is_cet_supported(void)why not just check if SHSTK or IBT is supported explicitly, i.e.,
+{
+ return (kvm_caps.supported_xss & CET_XSTATE_MASK) == CET_XSTATE_MASK;
return kvm_cpu_cap_has(X86_FEATURE_SHSTK) ||
kvm_cpu_cap_has(X86_FEATURE_IBT);
this is straightforward. And strictly speaking, the support of a feature and
the support of managing a feature's state via XSAVE(S) are two different things.x
1. Platform/KVM can support CET features.
2. CET user mode MSRs are backed by host thus are guaranteed to be valid.
i.e., the purpose is to check guest CET dependencies instead of features' availability.
met. that's, KVM's support of a feature also imples all dependencies are met.
Function-wise, the two approaches have no difference. I just think checking
KVM's support of SHSTK/IBT is more clear because the function name is
kvm_is_cet_supported() rather than e.g., kvm_is_cet_state_managed_by_xsave().
mess of one-off helpers.