From 70a5a1abdedabca165deee2dcbe497c5307db1d0 Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Wed, 27 Apr 2005 11:44:11 +0000 Subject: [PATCH] Do not attempt to free() the application's environment, which is was not dynamically allocated. Instead, use a private variable to store the environment array, which is used when we exec applications. --- networking/ifupdown.c | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/networking/ifupdown.c b/networking/ifupdown.c index 916948175..e07167aef 100644 --- a/networking/ifupdown.c +++ b/networking/ifupdown.c @@ -150,9 +150,7 @@ struct interfaces_file_t static char no_act = 0; static char verbose = 0; -#ifndef __USE_GNU -static char **environ = NULL; -#endif +static char **__myenviron = NULL; #ifdef CONFIG_FEATURE_IFUPDOWN_IP @@ -963,16 +961,16 @@ static void set_environ(struct interface_defn_t *iface, char *mode) const int n_env_entries = iface->n_options + 5; char **ppch; - if (environ != NULL) { - for (ppch = environ; *ppch; ppch++) { + if (__myenviron != NULL) { + for (ppch = __myenviron; *ppch; ppch++) { free(*ppch); *ppch = NULL; } - free(environ); - environ = NULL; + free(__myenviron); + __myenviron = NULL; } - environ = xmalloc(sizeof(char *) * (n_env_entries + 1 /* for final NULL */ )); - environend = environ; + __myenviron = xmalloc(sizeof(char *) * (n_env_entries + 1 /* for final NULL */ )); + environend = __myenviron; *environend = NULL; for (i = 0; i < iface->n_options; i++) { @@ -1012,7 +1010,7 @@ static int doit(char *str) case -1: /* failure */ return 0; case 0: /* child */ - execle(DEFAULT_SHELL, DEFAULT_SHELL, "-c", str, NULL, environ); + execle(DEFAULT_SHELL, DEFAULT_SHELL, "-c", str, NULL, __myenviron); exit(127); } waitpid(child, &status, 0);