svn commit: r360168 - in head/sys: cddl/dev/dtrace/mips mips/mips
John Baldwin
jhb at FreeBSD.org
Tue Apr 21 17:38:08 UTC 2020
Author: jhb
Date: Tue Apr 21 17:38:07 2020
New Revision: 360168
URL: https://svnweb.freebsd.org/changeset/base/360168
Log:
Handle non-dtrace-triggered kernel breakpoint traps in mips.
If DTRACE is enabled at compile time, all kernel breakpoint traps are
first given to dtrace to see if they are triggered by a FBT probe.
Previously if dtrace didn't recognize the trap, it was silently
ignored breaking the handling of other kernel breakpoint traps such as
the debug.kdb.enter sysctl. This only returns early from the trap
handler if dtrace recognizes the trap and handles it.
Submitted by: Nicolò Mazzucato <nicomazz97 at gmail.com>
Reviewed by: markj
Obtained from: CheriBSD
Differential Revision: https://reviews.freebsd.org/D24478
Modified:
head/sys/cddl/dev/dtrace/mips/dtrace_subr.c
head/sys/mips/mips/trap.c
Modified: head/sys/cddl/dev/dtrace/mips/dtrace_subr.c
==============================================================================
--- head/sys/cddl/dev/dtrace/mips/dtrace_subr.c Tue Apr 21 17:32:57 2020 (r360167)
+++ head/sys/cddl/dev/dtrace/mips/dtrace_subr.c Tue Apr 21 17:38:07 2020 (r360168)
@@ -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);
Modified: head/sys/mips/mips/trap.c
==============================================================================
--- head/sys/mips/mips/trap.c Tue Apr 21 17:32:57 2020 (r360167)
+++ head/sys/mips/mips/trap.c Tue Apr 21 17:38:07 2020 (r360168)
@@ -807,10 +807,9 @@ dofault:
#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);
More information about the svn-src-all
mailing list