summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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;
}