summaryrefslogtreecommitdiff
path: root/usr/src
diff options
context:
space:
mode:
authorSimon Klinkert <simon.klinkert@gmail.com>2016-01-14 12:19:43 +0100
committerDan McDonald <danmcd@omniti.com>2016-04-28 14:16:52 -0400
commit23a268cfbc75530b746495f3e157b9bc71069420 (patch)
treee1019e34d8bc579f878a7b584d89c906f8c9f5da /usr/src
parent1872b0b513cebbb59f48d3164530f8598d11df23 (diff)
downloadillumos-joyent-23a268cfbc75530b746495f3e157b9bc71069420.tar.gz
6565 pargs crashes on growing env
Reviewed by: Robert Mustacchi <rm@joyent.com> Reviewed by: Toomas Soome <tsoome@me.com> Approved by: Dan McDonald <danmcd@omniti.com>
Diffstat (limited to 'usr/src')
-rw-r--r--usr/src/cmd/ptools/pargs/pargs.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/usr/src/cmd/ptools/pargs/pargs.c b/usr/src/cmd/ptools/pargs/pargs.c
index a0a4febcd4..c363b34a7c 100644
--- a/usr/src/cmd/ptools/pargs/pargs.c
+++ b/usr/src/cmd/ptools/pargs/pargs.c
@@ -84,6 +84,7 @@ typedef struct pargs_data {
uintptr_t *pd_argv;
char **pd_argv_strs;
size_t pd_envc;
+ size_t pd_envc_curr;
uintptr_t *pd_envp;
char **pd_envp_strs;
size_t pd_auxc;
@@ -634,6 +635,10 @@ build_env(void *data, struct ps_prochandle *pr, uintptr_t addr, const char *str)
pargs_data_t *datap = data;
if (datap->pd_envp != NULL) {
+ /* env has more items than last time, skip the newer ones */
+ if (datap->pd_envc > datap->pd_envc_curr)
+ return (0);
+
datap->pd_envp[datap->pd_envc] = addr;
if (str == NULL)
datap->pd_envp_strs[datap->pd_envc] = NULL;
@@ -653,6 +658,7 @@ get_env(pargs_data_t *datap)
datap->pd_envc = 0;
(void) Penv_iter(pr, build_env, datap);
+ datap->pd_envc_curr = datap->pd_envc;
datap->pd_envp = safe_zalloc(sizeof (uintptr_t) * datap->pd_envc);
datap->pd_envp_strs = safe_zalloc(sizeof (char *) * datap->pd_envc);