Liran Alon <liran.alon@xxxxxxxxxx> writes: > As comment in code specifies, SMM temporarily disables VMX so we cannot > be in guest mode, nor can VMLAUNCH/VMRESUME be pending. > > However, code currently assumes that these are the only flags that can be > set on kvm_state->flags. This is not true as KVM_STATE_NESTED_EVMCS > can also be set on this field to signal that eVMCS should be enabled. > > Therefore, fix code to check for guest-mode and pending VMLAUNCH/VMRESUME > explicitly. > > Reviewed-by: Joao Martins <joao.m.martins@xxxxxxxxxx> > Signed-off-by: Liran Alon <liran.alon@xxxxxxxxxx> > --- > arch/x86/kvm/vmx/nested.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/arch/x86/kvm/vmx/nested.c b/arch/x86/kvm/vmx/nested.c > index 5c470db311f7..27ff04874f67 100644 > --- a/arch/x86/kvm/vmx/nested.c > +++ b/arch/x86/kvm/vmx/nested.c > @@ -5373,7 +5373,10 @@ static int vmx_set_nested_state(struct kvm_vcpu *vcpu, > * nor can VMLAUNCH/VMRESUME be pending. Outside SMM, SMM flags > * must be zero. > */ > - if (is_smm(vcpu) ? kvm_state->flags : kvm_state->hdr.vmx.smm.flags) > + if (is_smm(vcpu) ? > + (kvm_state->flags & > + (KVM_STATE_NESTED_GUEST_MODE | KVM_STATE_NESTED_RUN_PENDING)) > + : kvm_state->hdr.vmx.smm.flags) > return -EINVAL; > > if ((kvm_state->hdr.vmx.smm.flags & KVM_STATE_NESTED_SMM_GUEST_MODE) && Reviewed-by: Vitaly Kuznetsov <vkuznets@xxxxxxxxxx> -- Vitaly