changeset 13352:f1cdd406b7eb

908 dtrace in the global zone may miss USDT probes in local zones Reviewed by: Robert Mustacchi <robert.mustacchi@joyent.com> Reviewed by: David Pacheco <dap@joyent.com> Approved by: Garrett D'Amore <garrett@nexenta.com>
author Bryan Cantrill <bryan@joyent.com>
date Thu, 20 Jan 2011 15:03:16 -0800
parents b27fbdda9454
children 936a1e45726c
files usr/src/uts/common/dtrace/dtrace.c
diffstat 1 files changed, 7 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/usr/src/uts/common/dtrace/dtrace.c	Thu Apr 21 21:15:38 2011 +0100
+++ b/usr/src/uts/common/dtrace/dtrace.c	Thu Jan 20 15:03:16 2011 -0800
@@ -21,6 +21,7 @@
 
 /*
  * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, Joyent, Inc. All rights reserved.
  */
 
 /*
@@ -10851,10 +10852,12 @@
 	 * block pending our completion.
 	 */
 	for (enab = dtrace_retained; enab != NULL; enab = enab->dten_next) {
-		cred_t *cr = enab->dten_vstate->dtvs_state->dts_cred.dcr_cred;
-
-		if (INGLOBALZONE(curproc) ||
-		    cr != NULL && getzoneid() == crgetzoneid(cr))
+		dtrace_cred_t *dcr = &enab->dten_vstate->dtvs_state->dts_cred;
+		cred_t *cr = dcr->dcr_cred;
+		zoneid_t zone = cr != NULL ? crgetzoneid(cr) : 0;
+
+		if ((dcr->dcr_visible & DTRACE_CRV_ALLZONE) || (cr != NULL &&
+		    (zone == GLOBAL_ZONEID || getzoneid() == zone)))
 			(void) dtrace_enabling_match(enab, NULL);
 	}