Skip to contentSkip to conversation

KVM: nVMX: set rflags to specify success in handle_invvpid() default case

PATCH linmiaohe 1 participant 1 message Jan 23, 2020 KVM

lore
Share & tools
lore

linmiaohe

author
#0 lore raw
Quoted 31 lines · Paolo Bonzini
Quoted 8 lines · Vitaly Kuznetsov

Your patch seems to do the right thing, however, I started wondering if
WARN_ON_ONCE() is the right thing to do. SDM says that "If an unsupported INVVPID type is specified, the instruction fails." and this is similar to INVEPT and I decided to check what handle_invept() does. Well, it does BUG_ON().

Are we doing the right thing in any of these cases?

Yes, both INVEPT and INVVPID catch this earlier.

For INVEPT:

        types = (vmx->nested.msrs.ept_caps >> VMX_EPT_EXTENT_SHIFT) & 6;

        if (type >= 32 || !(types & (1 << type)))
                return nested_vmx_failValid(vcpu,
                                VMXERR_INVALID_OPERAND_TO_INVEPT_INVVPID);

For INVVPID:

        types = (vmx->nested.msrs.vpid_caps &
                        VMX_VPID_EXTENT_SUPPORTED_MASK) >> 8;

        if (type >= 32 || !(types & (1 << type)))
                return nested_vmx_failValid(vcpu,
                        VMXERR_INVALID_OPERAND_TO_INVEPT_INVVPID);
Quoted 8 lines

So I'm leaning towards not applying Miaohe's patch. Happy Mouse Year to everyone, here is an ASCII art (except for one Unicode character) mouse:

       __()()
      /     o)

~~~~\_,__,_>°

Thanks,

Yes, it seems my patch is meaningless. And thanks for both of your review and reply. Happy Mouse Year and I catch a mickey mouse:

###########
############### __-----__ ##

##################    ###          \       ####
################## #### #            \     # ##
 ####################            \~~\  \   ,##",
  #################       /~~\    \## \  \"     :
    ###############       \    \   \##" /       :
              #######       \### \    /         :
              #############  \###/             :
               ########                       :
                ######   __                  :
                 ####   /\                  /
      ############ ###    \\______________/|
    ##################     \ __         / /
  ####################\__    \  \---\,/ /
  ###################    \     \_____/ /
   #################       \_________/
    ###############
      ###########

Thanks both again.