summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/dtrace/dtrace.c
diff options
context:
space:
mode:
authorAlex Wilson <alex.wilson@joyent.com>2016-04-18 17:03:43 -0700
committerRobert Mustacchi <rm@joyent.com>2016-06-02 15:51:51 -0700
commita2f72b65ebc430aaf277ad797e554bb4deba9b95 (patch)
tree8902e01d6119b47f7de2bd86b424db6936b429b6 /usr/src/uts/common/dtrace/dtrace.c
parent0b8049bfb0e291160e960697b554596289d7f0bc (diff)
downloadillumos-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.c9
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;
}