diff -rup crash-5.0.5.orig/x86_64.c crash-5.0.5/x86_64.c
--- crash-5.0.5.orig/x86_64.c	2010-06-15 07:54:19.000000000 -0700
+++ crash-5.0.5/x86_64.c	2010-06-25 11:50:42.000000000 -0700
@@ -2660,6 +2660,7 @@ x86_64_low_budget_back_trace_cmd(struct 
 	ulong last_process_stack_eframe;
 	ulong user_mode_eframe;
 	char *rip_symbol;
+	int prev_estack_index;
 
         /*
          *  User may have made a run-time switch.
@@ -2902,9 +2903,20 @@ in_exception_stack:
         } else
 		irq_eframe = 0;
 
-        if (!done && (estack = x86_64_in_exception_stack(bt, &estack_index))) 
+	/*
+	 * Detect a corrupted exception stack by determining whether the
+	 * last stack pointer from that stack we just processed points
+	 * back to the same exception stack.
+	 */
+	prev_estack_index = estack_index;
+	estack = x86_64_in_exception_stack(bt, &estack_index);
+	if (estack && prev_estack_index == estack_index) {
+		error(WARNING, "Loop detected in the %s Exception Stack!\n",
+		      x86_64_exception_stacks[estack_index]);
+	} else if (!done && estack) {
 		goto in_exception_stack;
-
+	}
+		
 	if (!done && (bt->flags & (BT_EXCEPTION_STACK|BT_IRQSTACK))) {
 		/*
 		 *  Verify that the rsp pointer taken from either the
