static int time_to_dump;
 
 #define CRASH_HANDLER_MAX 3
-/* NULL terminated list of shutdown handles */
-static crash_shutdown_t crash_shutdown_handles[CRASH_HANDLER_MAX+1];
+/* List of shutdown handles */
+static crash_shutdown_t crash_shutdown_handles[CRASH_HANDLER_MAX];
 static DEFINE_SPINLOCK(crash_handlers_lock);
 
 static unsigned long crash_shutdown_buf[JMP_BUF_LEN];
                rc = 1;
        } else {
                /* Shift handles down */
-               for (; crash_shutdown_handles[i]; i++)
+               for (; i < (CRASH_HANDLER_MAX - 1); i++)
                        crash_shutdown_handles[i] =
                                crash_shutdown_handles[i+1];
+               /*
+                * Reset last entry to NULL now that it has been shifted down,
+                * this will allow new handles to be added here.
+                */
+               crash_shutdown_handles[i] = NULL;
                rc = 0;
        }
 
        old_handler = __debugger_fault_handler;
        __debugger_fault_handler = handle_fault;
        crash_shutdown_cpu = smp_processor_id();
-       for (i = 0; crash_shutdown_handles[i]; i++) {
+       for (i = 0; crash_shutdown_handles[i] && i < CRASH_HANDLER_MAX; i++) {
                if (setjmp(crash_shutdown_buf) == 0) {
                        /*
                         * Insert syncs and delay to ensure