summaryrefslogtreecommitdiff
path: root/arch/x86/kernel/unwind_frame.c
diff options
context:
space:
mode:
authorThomas Gleixner <tglx@linutronix.de>2020-06-10 09:37:01 +0300
committerThomas Gleixner <tglx@linutronix.de>2020-06-11 16:15:29 +0300
commitf0178fc01fe46bab6a95415f5647d1a74efcad1b (patch)
treebf263d8cacf2ada33dea4cbc16ee5fd46b0109d4 /arch/x86/kernel/unwind_frame.c
parent2823e83a3dc0f54d23db67ca07d74b9c8bb1fdda (diff)
downloadlinux-f0178fc01fe46bab6a95415f5647d1a74efcad1b.tar.xz
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>
Diffstat (limited to 'arch/x86/kernel/unwind_frame.c')
-rw-r--r--arch/x86/kernel/unwind_frame.c8
1 files changed, 1 insertions, 7 deletions
diff --git a/arch/x86/kernel/unwind_frame.c b/arch/x86/kernel/unwind_frame.c
index 54226110bc7f..722a85f3b2dd 100644
--- a/arch/x86/kernel/unwind_frame.c
+++ b/arch/x86/kernel/unwind_frame.c
@@ -74,13 +74,7 @@ static bool in_entry_code(unsigned long ip)
{
char *addr = (char *)ip;
- if (addr >= __entry_text_start && addr < __entry_text_end)
- return true;
-
- if (addr >= __irqentry_text_start && addr < __irqentry_text_end)
- return true;
-
- return false;
+ return addr >= __entry_text_start && addr < __entry_text_end;
}
static inline unsigned long *last_frame(struct unwind_state *state)