Blackfin: make sure stack is accessible before dumping it
When displaying a crash dump, make sure accessing the stack is safe so we don't crash at the same time. Signed-off-by: Robin Getz <robin.getz@analog.com> Signed-off-by: Mike Frysinger <vapier@gentoo.org>
This commit is contained in:
committed by
Mike Frysinger
parent
b9a3899d59
commit
a0cab65642
@@ -196,6 +196,11 @@ done:
|
|||||||
|
|
||||||
asmlinkage void double_fault_c(struct pt_regs *fp)
|
asmlinkage void double_fault_c(struct pt_regs *fp)
|
||||||
{
|
{
|
||||||
|
#ifdef CONFIG_DEBUG_BFIN_HWTRACE_ON
|
||||||
|
int j;
|
||||||
|
trace_buffer_save(j);
|
||||||
|
#endif
|
||||||
|
|
||||||
console_verbose();
|
console_verbose();
|
||||||
oops_in_progress = 1;
|
oops_in_progress = 1;
|
||||||
#ifdef CONFIG_DEBUG_VERBOSE
|
#ifdef CONFIG_DEBUG_VERBOSE
|
||||||
@@ -220,6 +225,7 @@ asmlinkage void double_fault_c(struct pt_regs *fp)
|
|||||||
dump_bfin_process(fp);
|
dump_bfin_process(fp);
|
||||||
dump_bfin_mem(fp);
|
dump_bfin_mem(fp);
|
||||||
show_regs(fp);
|
show_regs(fp);
|
||||||
|
dump_bfin_trace_buffer();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
panic("Double Fault - unrecoverable event");
|
panic("Double Fault - unrecoverable event");
|
||||||
@@ -832,6 +838,11 @@ void show_stack(struct task_struct *task, unsigned long *stack)
|
|||||||
decode_address(buf, (unsigned int)stack);
|
decode_address(buf, (unsigned int)stack);
|
||||||
printk(KERN_NOTICE " SP: [0x%p] %s\n", stack, buf);
|
printk(KERN_NOTICE " SP: [0x%p] %s\n", stack, buf);
|
||||||
|
|
||||||
|
if (!access_ok(VERIFY_READ, stack, (unsigned int)endstack - (unsigned int)stack)) {
|
||||||
|
printk(KERN_NOTICE "Invalid stack pointer\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/* First thing is to look for a frame pointer */
|
/* First thing is to look for a frame pointer */
|
||||||
for (addr = (unsigned int *)((unsigned int)stack & ~0xF); addr < endstack; addr++) {
|
for (addr = (unsigned int *)((unsigned int)stack & ~0xF); addr < endstack; addr++) {
|
||||||
if (*addr & 0x1)
|
if (*addr & 0x1)
|
||||||
|
Reference in New Issue
Block a user