x86/irq: Make run_on_irqstack_cond() typesafe
authorThomas Gleixner <tglx@linutronix.de>
Tue, 22 Sep 2020 07:58:52 +0000 (09:58 +0200)
committerBorislav Petkov <bp@suse.de>
Tue, 22 Sep 2020 20:13:34 +0000 (22:13 +0200)
commita7b3474cbb2864d5500d5e4f48dd57c903975cab
tree51faaf4fae8f85c76632c12da92b4fe247c457f7
parent98477740630f270aecf648f1d6a9dbc6027d4ff1
x86/irq: Make run_on_irqstack_cond() typesafe

Sami reported that run_on_irqstack_cond() requires the caller to cast
functions to mismatching types, which trips indirect call Control-Flow
Integrity (CFI) in Clang.

Instead of disabling CFI on that function, provide proper helpers for
the three call variants. The actual ASM code stays the same as that is
out of reach.

 [ bp: Fix __run_on_irqstack() prototype to match. ]

Fixes: 931b94145981 ("x86/entry: Provide helpers for executing on the irqstack")
Reported-by: Nathan Chancellor <natechancellor@gmail.com>
Reported-by: Sami Tolvanen <samitolvanen@google.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Borislav Petkov <bp@suse.de>
Tested-by: Sami Tolvanen <samitolvanen@google.com>
Cc: <stable@vger.kernel.org>
Link: https://github.com/ClangBuiltLinux/linux/issues/1052
Link: https://lkml.kernel.org/r/87pn6eb5tv.fsf@nanos.tec.linutronix.de
arch/x86/entry/common.c
arch/x86/entry/entry_64.S
arch/x86/include/asm/idtentry.h
arch/x86/include/asm/irq_stack.h
arch/x86/kernel/irq.c
arch/x86/kernel/irq_64.c