x86/entry: Unbreak __irqentry_text_start/end magic
authorThomas Gleixner <tglx@linutronix.de>
Wed, 10 Jun 2020 06:37:01 +0000 (08:37 +0200)
committerThomas Gleixner <tglx@linutronix.de>
Thu, 11 Jun 2020 13:15:29 +0000 (15:15 +0200)
commitf0178fc01fe46bab6a95415f5647d1a74efcad1b
treebf263d8cacf2ada33dea4cbc16ee5fd46b0109d4
parent2823e83a3dc0f54d23db67ca07d74b9c8bb1fdda
x86/entry: Unbreak __irqentry_text_start/end magic

The entry rework moved interrupt entry code from the irqentry to the
noinstr section which made the irqentry section empty.

This breaks boundary checks which rely on the __irqentry_text_start/end
markers to find out whether a function in a stack trace is
interrupt/exception entry code. This affects the function graph tracer and
filter_irq_stacks().

As the IDT entry points are all sequentialy emitted this is rather simple
to unbreak by injecting __irqentry_text_start/end as global labels.

To make this work correctly:

  - Remove the IRQENTRY_TEXT section from the x86 linker script
  - Define __irqentry so it breaks the build if it's used
  - Adjust the entry mirroring in PTI
  - Remove the redundant kprobes and unwinder bound checks

Reported-by: Qian Cai <cai@lca.pw>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
arch/x86/entry/entry_32.S
arch/x86/entry/entry_64.S
arch/x86/include/asm/irq.h
arch/x86/kernel/kprobes/core.c
arch/x86/kernel/kprobes/opt.c
arch/x86/kernel/unwind_frame.c
arch/x86/kernel/vmlinux.lds.S
arch/x86/mm/pti.c
include/linux/interrupt.h