Prevent init from potentially using already freed memory when

deleting an initAction, fixing a bug pointed out by Andreas Neuhaus
 -Erik
This commit is contained in:
Eric Andersen 2001-03-15 19:18:21 +00:00
parent 0b57e28373
commit 0d4e51d390
2 changed files with 12 additions and 12 deletions

12
init.c
View File

@ -598,8 +598,8 @@ static void check_memory()
/* Run all commands to be run right before halt/reboot */ /* Run all commands to be run right before halt/reboot */
static void run_lastAction(void) static void run_lastAction(void)
{ {
initAction *a; initAction *a, *tmp;
for (a = initActionList; a; a = a->nextPtr) { for (a = tmp = initActionList; a; a = tmp = tmp->nextPtr) {
if (a->action == CTRLALTDEL) { if (a->action == CTRLALTDEL) {
waitfor(a->process, a->console, FALSE); waitfor(a->process, a->console, FALSE);
delete_initAction(a); delete_initAction(a);
@ -843,7 +843,7 @@ static void parse_inittab(void)
extern int init_main(int argc, char **argv) extern int init_main(int argc, char **argv)
{ {
initAction *a; initAction *a, *tmp;
pid_t wpid; pid_t wpid;
int status; int status;
@ -938,7 +938,7 @@ extern int init_main(int argc, char **argv)
/* Now run everything that needs to be run */ /* Now run everything that needs to be run */
/* First run the sysinit command */ /* 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) { if (a->action == SYSINIT) {
waitfor(a->process, a->console, FALSE); waitfor(a->process, a->console, FALSE);
/* Now remove the "sysinit" entry from the list */ /* Now remove the "sysinit" entry from the list */
@ -946,7 +946,7 @@ extern int init_main(int argc, char **argv)
} }
} }
/* Next run anything that wants to block */ /* 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) { if (a->action == WAIT) {
waitfor(a->process, a->console, FALSE); waitfor(a->process, a->console, FALSE);
/* Now remove the "wait" entry from the list */ /* Now remove the "wait" entry from the list */
@ -954,7 +954,7 @@ extern int init_main(int argc, char **argv)
} }
} }
/* Next run anything to be run only once */ /* 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) { if (a->action == ONCE) {
run(a->process, a->console, FALSE); run(a->process, a->console, FALSE);
/* Now remove the "once" entry from the list */ /* Now remove the "once" entry from the list */

View File

@ -598,8 +598,8 @@ static void check_memory()
/* Run all commands to be run right before halt/reboot */ /* Run all commands to be run right before halt/reboot */
static void run_lastAction(void) static void run_lastAction(void)
{ {
initAction *a; initAction *a, *tmp;
for (a = initActionList; a; a = a->nextPtr) { for (a = tmp = initActionList; a; a = tmp = tmp->nextPtr) {
if (a->action == CTRLALTDEL) { if (a->action == CTRLALTDEL) {
waitfor(a->process, a->console, FALSE); waitfor(a->process, a->console, FALSE);
delete_initAction(a); delete_initAction(a);
@ -843,7 +843,7 @@ static void parse_inittab(void)
extern int init_main(int argc, char **argv) extern int init_main(int argc, char **argv)
{ {
initAction *a; initAction *a, *tmp;
pid_t wpid; pid_t wpid;
int status; int status;
@ -938,7 +938,7 @@ extern int init_main(int argc, char **argv)
/* Now run everything that needs to be run */ /* Now run everything that needs to be run */
/* First run the sysinit command */ /* 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) { if (a->action == SYSINIT) {
waitfor(a->process, a->console, FALSE); waitfor(a->process, a->console, FALSE);
/* Now remove the "sysinit" entry from the list */ /* Now remove the "sysinit" entry from the list */
@ -946,7 +946,7 @@ extern int init_main(int argc, char **argv)
} }
} }
/* Next run anything that wants to block */ /* 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) { if (a->action == WAIT) {
waitfor(a->process, a->console, FALSE); waitfor(a->process, a->console, FALSE);
/* Now remove the "wait" entry from the list */ /* Now remove the "wait" entry from the list */
@ -954,7 +954,7 @@ extern int init_main(int argc, char **argv)
} }
} }
/* Next run anything to be run only once */ /* 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) { if (a->action == ONCE) {
run(a->process, a->console, FALSE); run(a->process, a->console, FALSE);
/* Now remove the "once" entry from the list */ /* Now remove the "once" entry from the list */