A better fix. Read nextPtr before mem gets freed.
authorEric Andersen <andersen@codepoet.org>
Thu, 15 Mar 2001 21:04:18 +0000 (21:04 -0000)
committerEric Andersen <andersen@codepoet.org>
Thu, 15 Mar 2001 21:04:18 +0000 (21:04 -0000)
 -Erik

init.c
init/init.c

diff --git a/init.c b/init.c
index eb1b2c5059c5fe5c8d17d653ef29608265f99711..64c7768d6ac25e3ae7686302a6b92a8b23521e5e 100644 (file)
--- a/init.c
+++ b/init.c
@@ -599,7 +599,8 @@ static void check_memory()
 static void run_lastAction(void)
 {
        initAction *a, *tmp;
-       for (a = tmp = initActionList; a; a = tmp = tmp->nextPtr) {
+       for (a = initActionList; a; a = tmp) {
+               tmp = a->nextPtr;
                if (a->action == CTRLALTDEL) {
                        waitfor(a->process, a->console, FALSE);
                        delete_initAction(a);
@@ -938,7 +939,8 @@ extern int init_main(int argc, char **argv)
        /* Now run everything that needs to be run */
 
        /* First run the sysinit command */
-       for (a = tmp = initActionList; a; a = tmp = tmp->nextPtr) {
+       for (a = initActionList; a; a = tmp) {
+               tmp = a->nextPtr;
                if (a->action == SYSINIT) {
                        waitfor(a->process, a->console, FALSE);
                        /* Now remove the "sysinit" entry from the list */
@@ -946,7 +948,8 @@ extern int init_main(int argc, char **argv)
                }
        }
        /* Next run anything that wants to block */
-       for (a = tmp = initActionList; a; a = tmp = tmp->nextPtr) {
+       for (a = initActionList; a; a = tmp) {
+               tmp = a->nextPtr;
                if (a->action == WAIT) {
                        waitfor(a->process, a->console, FALSE);
                        /* Now remove the "wait" entry from the list */
@@ -954,7 +957,8 @@ extern int init_main(int argc, char **argv)
                }
        }
        /* Next run anything to be run only once */
-       for (a = tmp = initActionList; a; a = tmp = tmp->nextPtr) {
+       for (a = initActionList; a; a = tmp) {
+               tmp = a->nextPtr;
                if (a->action == ONCE) {
                        run(a->process, a->console, FALSE);
                        /* Now remove the "once" entry from the list */
index eb1b2c5059c5fe5c8d17d653ef29608265f99711..64c7768d6ac25e3ae7686302a6b92a8b23521e5e 100644 (file)
@@ -599,7 +599,8 @@ static void check_memory()
 static void run_lastAction(void)
 {
        initAction *a, *tmp;
-       for (a = tmp = initActionList; a; a = tmp = tmp->nextPtr) {
+       for (a = initActionList; a; a = tmp) {
+               tmp = a->nextPtr;
                if (a->action == CTRLALTDEL) {
                        waitfor(a->process, a->console, FALSE);
                        delete_initAction(a);
@@ -938,7 +939,8 @@ extern int init_main(int argc, char **argv)
        /* Now run everything that needs to be run */
 
        /* First run the sysinit command */
-       for (a = tmp = initActionList; a; a = tmp = tmp->nextPtr) {
+       for (a = initActionList; a; a = tmp) {
+               tmp = a->nextPtr;
                if (a->action == SYSINIT) {
                        waitfor(a->process, a->console, FALSE);
                        /* Now remove the "sysinit" entry from the list */
@@ -946,7 +948,8 @@ extern int init_main(int argc, char **argv)
                }
        }
        /* Next run anything that wants to block */
-       for (a = tmp = initActionList; a; a = tmp = tmp->nextPtr) {
+       for (a = initActionList; a; a = tmp) {
+               tmp = a->nextPtr;
                if (a->action == WAIT) {
                        waitfor(a->process, a->console, FALSE);
                        /* Now remove the "wait" entry from the list */
@@ -954,7 +957,8 @@ extern int init_main(int argc, char **argv)
                }
        }
        /* Next run anything to be run only once */
-       for (a = tmp = initActionList; a; a = tmp = tmp->nextPtr) {
+       for (a = initActionList; a; a = tmp) {
+               tmp = a->nextPtr;
                if (a->action == ONCE) {
                        run(a->process, a->console, FALSE);
                        /* Now remove the "once" entry from the list */