From 13c37ad39abb4ca3529f8ce56d1b0b9fe25d6d22 Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Mon, 23 Nov 2009 21:56:50 +0000 Subject: 2009-11-23 Joel Sherrill * libmisc/shell/shell.c: Always duplicate the environment passed to us because we will delete it when the shell exits. If we do not duplicate it, we could end up freeing memory which was not allocated from the heap or double freeing it. --- cpukit/libmisc/shell/shell.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) (limited to 'cpukit/libmisc/shell/shell.c') diff --git a/cpukit/libmisc/shell/shell.c b/cpukit/libmisc/shell/shell.c index d270d9d92c..b87b79f01e 100644 --- a/cpukit/libmisc/shell/shell.c +++ b/cpukit/libmisc/shell/shell.c @@ -62,16 +62,20 @@ rtems_shell_env_t *rtems_current_shell_env = &rtems_global_shell_env; * Initialize the shell user/process environment information */ rtems_shell_env_t *rtems_shell_init_env( - rtems_shell_env_t *shell_env + rtems_shell_env_t *shell_env_p ) { - if ( !shell_env ) { - shell_env = malloc(sizeof(rtems_shell_env_t)); - if ( !shell_env ) - return NULL; + rtems_shell_env_t *shell_env; + + shell_env = malloc(sizeof(rtems_shell_env_t)); + if ( !shell_env ) + return NULL; + if ( !shell_env_p ) { *shell_env = rtems_global_shell_env; - shell_env->taskname = NULL; + } else { + *shell_env = *shell_env_p; } + shell_env->taskname = NULL; return shell_env; } -- cgit v1.2.3