diff options
-rw-r--r-- | arch/x86/kernel/irq_64.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/arch/x86/kernel/irq_64.c b/arch/x86/kernel/irq_64.c index 54e2b2b2e250..d04d3ecded62 100644 --- a/arch/x86/kernel/irq_64.c +++ b/arch/x86/kernel/irq_64.c | |||
@@ -38,6 +38,7 @@ int sysctl_panic_on_stackoverflow; | |||
38 | static inline void stack_overflow_check(struct pt_regs *regs) | 38 | static inline void stack_overflow_check(struct pt_regs *regs) |
39 | { | 39 | { |
40 | #ifdef CONFIG_DEBUG_STACKOVERFLOW | 40 | #ifdef CONFIG_DEBUG_STACKOVERFLOW |
41 | #define STACK_TOP_MARGIN 128 | ||
41 | struct orig_ist *oist; | 42 | struct orig_ist *oist; |
42 | u64 irq_stack_top, irq_stack_bottom; | 43 | u64 irq_stack_top, irq_stack_bottom; |
43 | u64 estack_top, estack_bottom; | 44 | u64 estack_top, estack_bottom; |
@@ -47,17 +48,18 @@ static inline void stack_overflow_check(struct pt_regs *regs) | |||
47 | return; | 48 | return; |
48 | 49 | ||
49 | if (regs->sp >= curbase + sizeof(struct thread_info) + | 50 | if (regs->sp >= curbase + sizeof(struct thread_info) + |
50 | sizeof(struct pt_regs) + 128 && | 51 | sizeof(struct pt_regs) + STACK_TOP_MARGIN && |
51 | regs->sp <= curbase + THREAD_SIZE) | 52 | regs->sp <= curbase + THREAD_SIZE) |
52 | return; | 53 | return; |
53 | 54 | ||
54 | irq_stack_top = (u64)__get_cpu_var(irq_stack_union.irq_stack); | 55 | irq_stack_top = (u64)__get_cpu_var(irq_stack_union.irq_stack) + |
56 | STACK_TOP_MARGIN; | ||
55 | irq_stack_bottom = (u64)__get_cpu_var(irq_stack_ptr); | 57 | irq_stack_bottom = (u64)__get_cpu_var(irq_stack_ptr); |
56 | if (regs->sp >= irq_stack_top && regs->sp <= irq_stack_bottom) | 58 | if (regs->sp >= irq_stack_top && regs->sp <= irq_stack_bottom) |
57 | return; | 59 | return; |
58 | 60 | ||
59 | oist = &__get_cpu_var(orig_ist); | 61 | oist = &__get_cpu_var(orig_ist); |
60 | estack_top = (u64)oist->ist[0] - EXCEPTION_STKSZ; | 62 | estack_top = (u64)oist->ist[0] - EXCEPTION_STKSZ + STACK_TOP_MARGIN; |
61 | estack_bottom = (u64)oist->ist[N_EXCEPTION_STACKS - 1]; | 63 | estack_bottom = (u64)oist->ist[N_EXCEPTION_STACKS - 1]; |
62 | if (regs->sp >= estack_top && regs->sp <= estack_bottom) | 64 | if (regs->sp >= estack_top && regs->sp <= estack_bottom) |
63 | return; | 65 | return; |