Mercurial > illumos > illumos-gate
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); }