• Thomas Gleixner's avatar
    x86/callthunks: Add call patching for call depth tracking · e81dc127
    Thomas Gleixner authored
    Mitigating the Intel SKL RSB underflow issue in software requires to
    track the call depth. That is every CALL and every RET need to be
    intercepted and additional code injected.
    
    The existing retbleed mitigations already include means of redirecting
    RET to __x86_return_thunk; this can be re-purposed and RET can be
    redirected to another function doing RET accounting.
    
    CALL accounting will use the function padding introduced in prior
    patches. For each CALL instruction, the destination symbol's padding
    is rewritten to do the accounting and the CALL instruction is adjusted
    to call into the padding.
    
    This ensures only affected CPUs pay the overhead of this accounting.
    Unaffected CPUs will leave the padding unused and have their 'JMP
    __x86_return_thunk' replaced with an actual 'RET' instruction.
    
    Objtool has been modified to supply a .call_sites section that lists
    all the 'CALL' instructions. Additionally the paravirt instruction
    sites are iterated since they will have been patched from an indirect
    call to direct calls (or direct instructions in which case it'll be
    ignored).
    
    Module handling and the actual thunk code for SKL will be added in
    subsequent steps.
    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.470877038@infradead.org
    e81dc127
relocate_kernel_64.S 6.42 KB