• Peter Zijlstra's avatar
    x86/cpu/kvm: Provide UNTRAIN_RET_VM · 864bcaa3
    Peter Zijlstra authored
    Similar to how it doesn't make sense to have UNTRAIN_RET have two
    untrain calls, it also doesn't make sense for VMEXIT to have an extra
    IBPB call.
    
    This cures VMEXIT doing potentially unret+IBPB or double IBPB.
    Also, the (SEV) VMEXIT case seems to have been overlooked.
    
    Redefine the meaning of the synthetic IBPB flags to:
    
     - ENTRY_IBPB     -- issue IBPB on entry  (was: entry + VMEXIT)
     - IBPB_ON_VMEXIT -- issue IBPB on VMEXIT
    
    And have 'retbleed=ibpb' set *BOTH* feature flags to ensure it retains
    the previous behaviour and issues IBPB on entry+VMEXIT.
    
    The new 'srso=ibpb_vmexit' option only sets IBPB_ON_VMEXIT.
    
    Create UNTRAIN_RET_VM specifically for the VMEXIT case, and have that
    check IBPB_ON_VMEXIT.
    
    All this avoids having the VMEXIT case having to check both ENTRY_IBPB
    and IBPB_ON_VMEXIT and simplifies the alternatives.
    
    Fixes: fb3bd914 ("x86/srso: Add a Speculative RAS Overflow mitigation")
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Signed-off-by: default avatarBorislav Petkov (AMD) <bp@alien8.de>
    Link: https://lore.kernel.org/r/20230814121149.109557833@infradead.org
    864bcaa3
nospec-branch.h 16.2 KB