On Wed, Jan 17, 2024 at 09:58:40AM +0800, Yang, Weijiang wrote: > On 1/17/2024 9:41 AM, Yang, Weijiang wrote: > > On 1/15/2024 5:58 PM, Yuan Yao wrote: > > > On Thu, Dec 21, 2023 at 09:02:35AM -0500, Yang Weijiang wrote: > [...] > > > Looks this leading to MSR_IA32_INT_SSP_TAB not intercepted > > > after below steps: > > > > > > Step 1. User space set cpuid w/ X86_FEATURE_LM, w/ SHSTK. > > > Step 2. User space set cpuid w/o X86_FEATURE_LM, w/o SHSTK. > > > > > > Then MSR_IA32_INT_SSP_TAB won't be intercepted even w/o SHSTK > > > on guest cpuid, will this lead to inconsistency when do > > > rdmsr(MSR_IA32_INT_SSP_TAB) from guest in this scenario ? > > Yes, theoretically it's possible, how about changing it as below? > > > > vmx_set_intercept_for_msr(vcpu, MSR_IA32_INT_SSP_TAB, > > MSR_TYPE_RW, > > incpt | !guest_cpuid_has(vcpu, X86_FEATURE_LM)); > > > Oops, should be : incpt || !guest_cpuid_has(vcpu, X86_FEATURE_LM) It means guest cpuid: "has X86_FEATURE_SHSTK" + "doesn't have X86_FEATURE_LM" not sure this is valid combination or not. If yes it's ok, else just relies on incpt is enough ?