Print this page
2917 DTrace in a zone should have limited provider access
        
*** 1298,1320 ****
  
          if (pops->dtps_mode != NULL) {
                  mode = pops->dtps_mode(prov->dtpv_arg,
                      probe->dtpr_id, probe->dtpr_arg);
  
!                 ASSERT((mode & DTRACE_MODE_USER) ||
!                     (mode & DTRACE_MODE_KERNEL));
!                 ASSERT((mode & DTRACE_MODE_NOPRIV_RESTRICT) ||
!                     (mode & DTRACE_MODE_NOPRIV_DROP));
          }
  
          /*
           * If the dte_cond bits indicate that this consumer is only allowed to
!          * see user-mode firings of this probe, call the provider's dtps_mode()
!          * entry point to check that the probe was fired while in a user
!          * context.  If that's not the case, use the policy specified by the
!          * provider to determine if we drop the probe or merely restrict
!          * operation.
           */
          if (ecb->dte_cond & DTRACE_COND_USERMODE) {
                  ASSERT(mode != DTRACE_MODE_NOPRIV_DROP);
  
                  if (!(mode & DTRACE_MODE_USER)) {
--- 1298,1318 ----
  
          if (pops->dtps_mode != NULL) {
                  mode = pops->dtps_mode(prov->dtpv_arg,
                      probe->dtpr_id, probe->dtpr_arg);
  
!                 ASSERT(mode & (DTRACE_MODE_USER | DTRACE_MODE_KERNEL));
!                 ASSERT(mode & (DTRACE_MODE_NOPRIV_RESTRICT |
!                     DTRACE_MODE_NOPRIV_DROP));
          }
  
          /*
           * If the dte_cond bits indicate that this consumer is only allowed to
!          * see user-mode firings of this probe, check that the probe was fired
!          * while in a user context.  If that's not the case, use the policy
!          * specified by the provider to determine if we drop the probe or
!          * merely restrict operation.
           */
          if (ecb->dte_cond & DTRACE_COND_USERMODE) {
                  ASSERT(mode != DTRACE_MODE_NOPRIV_DROP);
  
                  if (!(mode & DTRACE_MODE_USER)) {
*** 1377,1386 ****
--- 1375,1393 ----
                          mstate->dtms_access &=
                              ~(DTRACE_ACCESS_PROC | DTRACE_ACCESS_ARGS);
                  }
          }
  
+         /*
+          * By merits of being in this code path at all, we have limited
+          * privileges.  If the provider has indicated that limited privileges
+          * are to denote restricted operation, strip off the ability to access
+          * arguments.
+          */
+         if (mode & DTRACE_MODE_LIMITEDPRIV_RESTRICT)
+                 mstate->dtms_access &= ~DTRACE_ACCESS_ARGS;
+ 
          return (1);
  }
  
  /*
   * Note:  not called from probe context.  This function is called