Prevent init from potentially using already freed memory when
deleting an initAction, fixing a bug pointed out by Andreas Neuhaus
 -Erik
diff --git a/init.c b/init.c
index 53e9744..eb1b2c5 100644
--- a/init.c
+++ b/init.c
@@ -598,8 +598,8 @@
 /* Run all commands to be run right before halt/reboot */
 static void run_lastAction(void)
 {
-	initAction *a;
-	for (a = initActionList; a; a = a->nextPtr) {
+	initAction *a, *tmp;
+	for (a = tmp = initActionList; a; a = tmp = tmp->nextPtr) {
 		if (a->action == CTRLALTDEL) {
 			waitfor(a->process, a->console, FALSE);
 			delete_initAction(a);
@@ -843,7 +843,7 @@
 
 extern int init_main(int argc, char **argv)
 {
-	initAction *a;
+	initAction *a, *tmp;
 	pid_t wpid;
 	int status;
 
@@ -938,7 +938,7 @@
 	/* Now run everything that needs to be run */
 
 	/* First run the sysinit command */
-	for (a = initActionList; a; a = a->nextPtr) {
+	for (a = tmp = initActionList; a; a = tmp = tmp->nextPtr) {
 		if (a->action == SYSINIT) {
 			waitfor(a->process, a->console, FALSE);
 			/* Now remove the "sysinit" entry from the list */
@@ -946,7 +946,7 @@
 		}
 	}
 	/* Next run anything that wants to block */
-	for (a = initActionList; a; a = a->nextPtr) {
+	for (a = tmp = initActionList; a; a = tmp = tmp->nextPtr) {
 		if (a->action == WAIT) {
 			waitfor(a->process, a->console, FALSE);
 			/* Now remove the "wait" entry from the list */
@@ -954,7 +954,7 @@
 		}
 	}
 	/* Next run anything to be run only once */
-	for (a = initActionList; a; a = a->nextPtr) {
+	for (a = tmp = initActionList; a; a = tmp = tmp->nextPtr) {
 		if (a->action == ONCE) {
 			run(a->process, a->console, FALSE);
 			/* Now remove the "once" entry from the list */