diff --git a/sys/cddl/dev/dtrace/mips/dtrace_subr.c b/sys/cddl/dev/dtrace/mips/dtrace_subr.c index 56ae129370f..c5ebe778b82 100644 --- a/sys/cddl/dev/dtrace/mips/dtrace_subr.c +++ b/sys/cddl/dev/dtrace/mips/dtrace_subr.c @@ -251,6 +251,9 @@ dtrace_invop_start(struct trapframe *frame) int invop; invop = dtrace_invop(frame->pc, frame, frame->pc); + if (invop == 0) + return (-1); + offs = (invop & LDSD_DATA_MASK); sp = (register_t *)((uint8_t *)frame->sp + offs); diff --git a/sys/mips/mips/trap.c b/sys/mips/mips/trap.c index ebbc46211cc..c565beade2f 100644 --- a/sys/mips/mips/trap.c +++ b/sys/mips/mips/trap.c @@ -807,10 +807,9 @@ trap(struct trapframe *trapframe) #if defined(KDTRACE_HOOKS) || defined(DDB) case T_BREAK: #ifdef KDTRACE_HOOKS - if (!usermode && dtrace_invop_jump_addr != 0) { - dtrace_invop_jump_addr(trapframe); + if (!usermode && dtrace_invop_jump_addr != NULL && + dtrace_invop_jump_addr(trapframe) == 0) return (trapframe->pc); - } #endif #ifdef DDB kdb_trap(type, 0, trapframe);