• Thomas Gleixner's avatar
    x86/irq: Provide macro for inlining irq stack switching · a0cfc74d
    Thomas Gleixner authored
    The effort to make the ASM entry code slim and unified moved the irq stack
    switching out of the low level ASM code so that the whole return from
    interrupt work and state handling can be done in C and the ASM code just
    handles the low level details of entry and exit.
    
    This ended up being a suboptimal implementation for various reasons
    (including tooling). The main pain points are:
    
     - The indirect call which is expensive thanks to retpoline
    
     - The inability to stay on the irq stack for softirq processing on return
       from interrupt
    
     - The fact that the stack switching code ends up being an easy to target
       exploit gadget.
    
    Prepare for inlining the stack switching logic into the C entry points by
    providing a ASM macro which contains the guts of the switching mechanism:
    
      1) Store RSP at the top of the irq stack
      2) Switch RSP to the irq stack
      3) Invoke code
      4) Pop the original RSP back
    
    Document the unholy asm() logic while at it to reduce the amount of head
    scratching required a half year from now.
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Reviewed-by: default avatarKees Cook <keescook@chromium.org>
    Link: https://lore.kernel.org/r/20210210002512.578371068@linutronix.de
    a0cfc74d
irq_stack.h 5.96 KB