[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