Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1425435
| From | Andy Lutomirski <luto@kernel.org> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | [PATCH v2 10/13] x86/dumpstack: Try harder to get a call trace on stack overflow |
| Date | 2016-06-17 22:10 +0200 |
| Message-ID | <rL8fw-2Ds-45@gated-at.bofh.it> (permalink) |
| References | <rL8fv-2Ds-3@gated-at.bofh.it> |
| Organization | linux.* mail to news gateway |
If we overflow the stack, print_context_stack will abort. Detect
this case and rewind back into the valid part of the stack so that
we can trace it.
Signed-off-by: Andy Lutomirski <luto@kernel.org>
---
arch/x86/kernel/dumpstack.c | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/arch/x86/kernel/dumpstack.c b/arch/x86/kernel/dumpstack.c
index d4d085e27d04..9cdf05d768cf 100644
--- a/arch/x86/kernel/dumpstack.c
+++ b/arch/x86/kernel/dumpstack.c
@@ -89,7 +89,7 @@ static inline int valid_stack_ptr(struct thread_info *tinfo,
else
return 0;
}
- return p > t && p < t + THREAD_SIZE - size;
+ return p >= t && p < t + THREAD_SIZE - size;
}
unsigned long
@@ -100,6 +100,13 @@ print_context_stack(struct thread_info *tinfo,
{
struct stack_frame *frame = (struct stack_frame *)bp;
+ /*
+ * If we overflowed the stack into a guard page, jump back to the
+ * bottom of the usable stack.
+ */
+ if ((unsigned long)tinfo - (unsigned long)stack < PAGE_SIZE)
+ stack = (unsigned long *)tinfo;
+
while (valid_stack_ptr(tinfo, stack, sizeof(*stack), end)) {
unsigned long addr;
--
2.5.5
Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
[PATCH v2 00/13] Virtually mapped stacks with guard pages (x86, core) Andy Lutomirski <luto@kernel.org> - 2016-06-17 22:10 +0200
[PATCH v2 13/13] x86/mm: Improve stack-overflow #PF handling Andy Lutomirski <luto@kernel.org> - 2016-06-17 22:10 +0200
[PATCH v2 11/13] x86/dumpstack/64: Handle faults when printing the "Stack:" part of an OOPS Andy Lutomirski <luto@kernel.org> - 2016-06-17 22:10 +0200
[PATCH v2 07/13] x86/die: Don't try to recover from an OOPS on a non-default stack Andy Lutomirski <luto@kernel.org> - 2016-06-17 22:10 +0200
[PATCH v2 01/13] x86/mm/hotplug: Don't remove PGD entries in remove_pagetable() Andy Lutomirski <luto@kernel.org> - 2016-06-17 22:10 +0200
[PATCH v2 08/13] x86/dumpstack: When OOPSing, rewind the stack before do_exit Andy Lutomirski <luto@kernel.org> - 2016-06-17 22:10 +0200
[PATCH v2 10/13] x86/dumpstack: Try harder to get a call trace on stack overflow Andy Lutomirski <luto@kernel.org> - 2016-06-17 22:10 +0200
[PATCH v2 05/13] mm: Move memcg stack accounting to account_kernel_stack Andy Lutomirski <luto@kernel.org> - 2016-06-17 22:10 +0200
Re: [PATCH v2 05/13] mm: Move memcg stack accounting to account_kernel_stack Josh Poimboeuf <jpoimboe@redhat.com> - 2016-06-17 23:00 +0200
Re: [PATCH v2 05/13] mm: Move memcg stack accounting to account_kernel_stack Andy Lutomirski <luto@amacapital.net> - 2016-06-18 00:20 +0200
Re: [PATCH v2 05/13] mm: Move memcg stack accounting to account_kernel_stack Michal Hocko <mhocko@kernel.org> - 2016-06-20 15:10 +0200
Re: [PATCH v2 05/13] mm: Move memcg stack accounting to account_kernel_stack Andy Lutomirski <luto@amacapital.net> - 2016-06-20 18:10 +0200
csiph-web