diff options
Diffstat (limited to 'arch/arc/kernel/stacktrace.c')
| -rw-r--r-- | arch/arc/kernel/stacktrace.c | 7 | 
1 files changed, 6 insertions, 1 deletions
| diff --git a/arch/arc/kernel/stacktrace.c b/arch/arc/kernel/stacktrace.c index feba91c9d969..b23986f98450 100644 --- a/arch/arc/kernel/stacktrace.c +++ b/arch/arc/kernel/stacktrace.c @@ -112,7 +112,7 @@ arc_unwind_core(struct task_struct *tsk, struct pt_regs *regs,  		int (*consumer_fn) (unsigned int, void *), void *arg)  {  #ifdef CONFIG_ARC_DW2_UNWIND -	int ret = 0; +	int ret = 0, cnt = 0;  	unsigned int address;  	struct unwind_frame_info frame_info; @@ -132,6 +132,11 @@ arc_unwind_core(struct task_struct *tsk, struct pt_regs *regs,  			break;  		frame_info.regs.r63 = frame_info.regs.r31; + +		if (cnt++ > 128) { +			printk("unwinder looping too long, aborting !\n"); +			return 0; +		}  	}  	return address;		/* return the last address it saw */ |