[pseudo] [PATCH 7/7] pseudo_util: Correctly free memory allocated by pseudo_setupenvp
Richard Purdie <[email protected]> Wed, 1 Jul 2026 14:13:36 +0100
| Newsgroups | org.yoctoproject.lists.yocto-patches |
|---|---|
| Message-ID | <[email protected]> |
Add a function to properly clean up the environment array memory after use. Signed-off-by: Richard Purdie <[email protected]> --- ports/common/guts/execv.c | 2 +- ports/common/guts/execve.c | 2 +- ports/common/guts/execvp.c | 2 +- ports/common/guts/posix_spawn.c | 2 +- ports/common/guts/posix_spawnp.c | 2 +- ports/unix/guts/popen.c | 2 +- ports/unix/guts/system.c | 2 +- pseudo.h | 1 + pseudo_util.c | 11 +++++++++++ 9 files changed, 19 insertions(+), 7 deletions(-) diff --git a/ports/common/guts/execv.c b/ports/common/guts/execv.c index eb328ed..d4031b3 100644 --- a/ports/common/guts/execv.c +++ b/ports/common/guts/execv.c @@ -37,7 +37,7 @@ rc = real_execv(file, argv); environ = orig_environ; - free(new_environ); + pseudo_free_envp(new_environ); /* return rc; * } diff --git a/ports/common/guts/execve.c b/ports/common/guts/execve.c index c2be66e..de2f1d4 100644 --- a/ports/common/guts/execve.c +++ b/ports/common/guts/execve.c @@ -30,7 +30,7 @@ sigprocmask(SIG_SETMASK, &pseudo_saved_sigmask, NULL); rc = real_execve(file, argv, new_environ); - free(new_environ); + pseudo_free_envp(new_environ); /* return rc; * } diff --git a/ports/common/guts/execvp.c b/ports/common/guts/execvp.c index 177e4ee..ffc94be 100644 --- a/ports/common/guts/execvp.c +++ b/ports/common/guts/execvp.c @@ -37,7 +37,7 @@ rc = real_execvp(file, argv); environ = orig_environ; - free(new_environ); + pseudo_free_envp(new_environ); /* return rc; * } diff --git a/ports/common/guts/posix_spawn.c b/ports/common/guts/posix_spawn.c index 5896893..46ebb0e 100644 --- a/ports/common/guts/posix_spawn.c +++ b/ports/common/guts/posix_spawn.c @@ -29,7 +29,7 @@ sigprocmask(SIG_SETMASK, &pseudo_saved_sigmask, NULL); rc = real_posix_spawn(pid, path, file_actions, attrp, argv, new_environ); - free(new_environ); + pseudo_free_envp(new_environ); /* return rc; * } diff --git a/ports/common/guts/posix_spawnp.c b/ports/common/guts/posix_spawnp.c index f3dc16b..194bcb3 100644 --- a/ports/common/guts/posix_spawnp.c +++ b/ports/common/guts/posix_spawnp.c @@ -29,7 +29,7 @@ sigprocmask(SIG_SETMASK, &pseudo_saved_sigmask, NULL); rc = real_posix_spawnp(pid, file, file_actions, attrp, argv, new_environ); - free(new_environ); + pseudo_free_envp(new_environ); /* return rc; * } diff --git a/ports/unix/guts/popen.c b/ports/unix/guts/popen.c index 1d48d04..1ce083d 100644 --- a/ports/unix/guts/popen.c +++ b/ports/unix/guts/popen.c @@ -24,7 +24,7 @@ rc = real_popen(command, mode); environ = orig_environ; - free(new_environ); + pseudo_free_envp(new_environ); /* return rc; * } diff --git a/ports/unix/guts/system.c b/ports/unix/guts/system.c index 4b374ec..12a3aff 100644 --- a/ports/unix/guts/system.c +++ b/ports/unix/guts/system.c @@ -24,7 +24,7 @@ rc = real_system(command); environ = orig_environ; - free(new_environ); + pseudo_free_envp(new_environ); /* return rc; * } diff --git a/pseudo.h b/pseudo.h index a2d402c..93a1cea 100644 --- a/pseudo.h +++ b/pseudo.h @@ -69,6 +69,7 @@ extern void pseudo_dropenv(void); extern char **pseudo_dropenvp(char **); extern void pseudo_setupenv(void); extern char **pseudo_setupenvp(char * const *); +extern void pseudo_free_envp(char **envp); extern char *pseudo_prefix_path(char *); extern char *pseudo_bindir_path(char *); extern char *pseudo_libdir_path(char *); diff --git a/pseudo_util.c b/pseudo_util.c index 83f92b3..729b65d 100644 --- a/pseudo_util.c +++ b/pseudo_util.c @@ -1250,6 +1250,17 @@ pseudo_setupenvp(char * const *envp) { return new_envp; } +/* Free data allocated by pseudo_setupenvp() */ +void +pseudo_free_envp(char **envp) { + int i; + + for (i = 0; envp && envp[i]; ++i) { + free(envp[i]); + } + free(envp); +} + /* Append the file value to the prefix value. */ char * pseudo_append_path(const char * prefix, size_t prefix_len, char *file) {