From 39ff7c071681f2a60a257736a00ebee5cb94fd57 Mon Sep 17 00:00:00 2001 From: Alexey Gladkov Date: Thu, 16 Dec 2021 18:37:59 +0300 Subject: OWL: Fixes --- src/init.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/init.c b/src/init.c index e319815..629302d 100644 --- a/src/init.c +++ b/src/init.c @@ -1019,6 +1019,9 @@ void init_freeenv(char **e) { int n; + if (!e) + return; + for (n = 0; e[n]; n++) free(e[n]); free(e); @@ -2248,7 +2251,7 @@ void my_re_exec(void) CHILD *ch; sigset_t mask, oldset; pid_t pid; - char **env; + char **env = 0; int fd; if (strchr("S0123456",runlevel) == NULL) @@ -2297,11 +2300,13 @@ void my_re_exec(void) exit(0); } - /* - * The existing init process execs a new init binary. - */ - env = init_buildenv(0); - execle(myname, myname, "--init", NULL, env); + if (pid > 0) { + /* + * The existing init process execs a new init binary. + */ + env = init_buildenv(0); + execle(myname, myname, "--init", NULL, env); + } /* * We shouldn't be here, something failed. @@ -2964,14 +2969,14 @@ void init_main(void) */ __attribute__((noreturn)) static -void usage(char *s) +void usage(const char *s) { fprintf(stderr, "Usage: %s {-e VAR[=VAL] | [-t SECONDS] {0|1|2|3|4|5|6|S|s|Q|q|A|a|B|b|C|c|U|u}}\n", s); exit(1); } static -int telinit(char *progname, int argc, char **argv) +int telinit(const char *progname, int argc, char **argv) { #ifdef TELINIT_USES_INITLVL FILE *fp; -- 2.25.4