[Midnightbsd-cvs] src [8949] trunk/sys/cddl/contrib/opensolaris/uts: fix userland dtrace use causing panic
laffer1 at midnightbsd.org
laffer1 at midnightbsd.org
Tue Sep 27 11:35:22 EDT 2016
Revision: 8949
http://svnweb.midnightbsd.org/src/?rev=8949
Author: laffer1
Date: 2016-09-27 11:35:22 -0400 (Tue, 27 Sep 2016)
Log Message:
-----------
fix userland dtrace use causing panic
Modified Paths:
--------------
trunk/sys/cddl/contrib/opensolaris/uts/common/dtrace/fasttrap.c
trunk/sys/cddl/contrib/opensolaris/uts/intel/dtrace/fasttrap_isa.c
Modified: trunk/sys/cddl/contrib/opensolaris/uts/common/dtrace/fasttrap.c
===================================================================
--- trunk/sys/cddl/contrib/opensolaris/uts/common/dtrace/fasttrap.c 2016-09-26 23:25:43 UTC (rev 8948)
+++ trunk/sys/cddl/contrib/opensolaris/uts/common/dtrace/fasttrap.c 2016-09-27 15:35:22 UTC (rev 8949)
@@ -1124,14 +1124,12 @@
* provider lock as a point of mutual exclusion to prevent other
* DTrace consumers from disabling this probe.
*/
- if ((p = pfind(probe->ftp_pid)) == NULL) {
- mutex_exit(&provider->ftp_mtx);
- return;
- }
+ if ((p = pfind(probe->ftp_pid)) != NULL) {
#ifdef __FreeBSD__
- _PHOLD(p);
- PROC_UNLOCK(p);
+ _PHOLD(p);
+ PROC_UNLOCK(p);
#endif
+ }
/*
* Disable all the associated tracepoints (for fully enabled probes).
@@ -1168,7 +1166,8 @@
fasttrap_pid_cleanup();
#ifdef __FreeBSD__
- PRELE(p);
+ if (p != NULL)
+ PRELE(p);
#endif
if (!probe->ftp_enabled)
return;
Modified: trunk/sys/cddl/contrib/opensolaris/uts/intel/dtrace/fasttrap_isa.c
===================================================================
--- trunk/sys/cddl/contrib/opensolaris/uts/intel/dtrace/fasttrap_isa.c 2016-09-26 23:25:43 UTC (rev 8948)
+++ trunk/sys/cddl/contrib/opensolaris/uts/intel/dtrace/fasttrap_isa.c 2016-09-27 15:35:22 UTC (rev 8949)
@@ -1034,6 +1034,7 @@
#endif
PROC_LOCK(p);
+ _PHOLD(p);
pid = p->p_pid;
#if defined(sun)
pid_mtx = &cpu_core[CPU->cpu_id].cpuc_pid_lock;
@@ -1059,6 +1060,7 @@
#if defined(sun)
mutex_exit(pid_mtx);
#endif
+ _PRELE(p);
PROC_UNLOCK(p);
return (-1);
}
@@ -1732,7 +1734,6 @@
ASSERT(i <= sizeof (scratch));
-
#if defined(sun)
if (fasttrap_copyout(scratch, (char *)addr, i)) {
#else
@@ -1794,8 +1795,12 @@
}
rp->r_rip = new_pc;
- set_regs(curthread, rp);
+ PROC_LOCK(p);
+ proc_write_regs(curthread, rp);
+ _PRELE(p);
+ PROC_UNLOCK(p);
+
return (0);
}
More information about the Midnightbsd-cvs
mailing list