diff options
| author | Alex Wilson <alex.wilson@joyent.com> | 2016-04-18 17:03:43 -0700 |
|---|---|---|
| committer | Robert Mustacchi <rm@joyent.com> | 2016-06-02 15:51:51 -0700 |
| commit | a2f72b65ebc430aaf277ad797e554bb4deba9b95 (patch) | |
| tree | 8902e01d6119b47f7de2bd86b424db6936b429b6 /usr/src/uts/common/dtrace/dtrace.c | |
| parent | 0b8049bfb0e291160e960697b554596289d7f0bc (diff) | |
| download | illumos-joyent-a2f72b65ebc430aaf277ad797e554bb4deba9b95.tar.gz | |
7033 ustack helper should fault on bad return values
Reviewed by: Patrick Mooney <patrick.mooney@joyent.com>
Reviewed by: Bryan Cantrill <bryan@joyent.com>
Approved by: Matthew Ahrens <mahrens@delphix.com>
Diffstat (limited to 'usr/src/uts/common/dtrace/dtrace.c')
| -rw-r--r-- | usr/src/uts/common/dtrace/dtrace.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/usr/src/uts/common/dtrace/dtrace.c b/usr/src/uts/common/dtrace/dtrace.c index c64c60dd96..c775224d86 100644 --- a/usr/src/uts/common/dtrace/dtrace.c +++ b/usr/src/uts/common/dtrace/dtrace.c @@ -6664,6 +6664,7 @@ dtrace_action_ustack(dtrace_mstate_t *mstate, dtrace_state_t *state, uint64_t *pcs = &buf[1], *fps; char *str = (char *)&pcs[nframes]; int size, offs = 0, i, j; + size_t rem; uintptr_t old = mstate->dtms_scratch_ptr, saved; uint16_t *flags = &cpu_core[CPU->cpu_id].cpuc_dtrace_flags; char *sym; @@ -6735,12 +6736,18 @@ dtrace_action_ustack(dtrace_mstate_t *mstate, dtrace_state_t *state, continue; } + if (!dtrace_strcanload((uintptr_t)sym, strsize, &rem, mstate, + &(state->dts_vstate))) { + str[offs++] = '\0'; + continue; + } + DTRACE_CPUFLAG_SET(CPU_DTRACE_NOFAULT); /* * Now copy in the string that the helper returned to us. */ - for (j = 0; offs + j < strsize; j++) { + for (j = 0; offs + j < strsize && j < rem; j++) { if ((str[offs + j] = sym[j]) == '\0') break; } |
