• Peter Zijlstra's avatar
    x86/retpoline: Add SKL retthunk retpolines · 3b6c1747
    Peter Zijlstra authored
    Ensure that retpolines do the proper call accounting so that the return
    accounting works correctly.
    
    Specifically; retpolines are used to replace both 'jmp *%reg' and
    'call *%reg', however these two cases do not have the same accounting
    requirements. Therefore split things up and provide two different
    retpoline arrays for SKL.
    
    The 'jmp *%reg' case needs no accounting, the
    __x86_indirect_jump_thunk_array[] covers this. The retpoline is
    changed to not use the return thunk; it's a simple call;ret construct.
    
    [ strictly speaking it should do:
    	andq $(~0x1f), PER_CPU_VAR(__x86_call_depth)
      but we can argue this can be covered by the fuzz we already have
      in the accounting depth (12) vs the RSB depth (16) ]
    
    The 'call *%reg' case does need accounting, the
    __x86_indirect_call_thunk_array[] covers this. Again, this retpoline
    avoids the use of the return-thunk, in this case to avoid double
    accounting.
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Link: https://lore.kernel.org/r/20220915111147.996634749@infradead.org
    3b6c1747
nospec-branch.h 14.4 KB