summaryrefslogtreecommitdiff
path: root/usr/src/cmd/ptools/pargs/pargs.c
diff options
context:
space:
mode:
authorJerry Jelinek <jerry.jelinek@joyent.com>2016-04-29 11:35:48 +0000
committerJerry Jelinek <jerry.jelinek@joyent.com>2016-04-29 11:35:48 +0000
commitd006a4cbd4e9a251a94eec493f1618a9e452992a (patch)
tree65a5d74b65e9786362a556a4a09f82fd2bbcfbe6 /usr/src/cmd/ptools/pargs/pargs.c
parent3e4225906c66015597649ddcdb4fe37a2204fec2 (diff)
parentaf868f46a5b794687741d5424de9e3a2d684a84a (diff)
downloadillumos-joyent-d006a4cbd4e9a251a94eec493f1618a9e452992a.tar.gz
[illumos-gate merge]
commit af868f46a5b794687741d5424de9e3a2d684a84a 6914 kernel virtual memory fragmentation leads to hang commit 23a268cfbc75530b746495f3e157b9bc71069420 6565 pargs crashes on growing env commit 1872b0b513cebbb59f48d3164530f8598d11df23 6929 couple of updates to i386 disassembler tables
Diffstat (limited to 'usr/src/cmd/ptools/pargs/pargs.c')
-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 54792b216a..d8072b56a1 100644
--- a/usr/src/cmd/ptools/pargs/pargs.c
+++ b/usr/src/cmd/ptools/pargs/pargs.c
@@ -91,6 +91,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;
@@ -641,6 +642,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;
@@ -660,6 +665,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);