From a4edd0e946f47dfca4fe0d5ed410743bdcda131c Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Thu, 15 Mar 2001 21:04:18 +0000 Subject: A better fix. Read nextPtr before mem gets freed. -Erik --- init.c | 12 ++++++++---- init/init.c | 12 ++++++++---- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/init.c b/init.c index eb1b2c505..64c7768d6 100644 --- 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 */ diff --git a/init/init.c b/init/init.c index eb1b2c505..64c7768d6 100644 --- a/init/init.c +++ b/init/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 */ -- cgit v1.2.3