1 #
   2 # CDDL HEADER START
   3 #
   4 # The contents of this file are subject to the terms of the
   5 # Common Development and Distribution License (the "License").
   6 # You may not use this file except in compliance with the License.
   7 #
   8 # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
   9 # or http://www.opensolaris.org/os/licensing.
  10 # See the License for the specific language governing permissions
  11 # and limitations under the License.
  12 #
  13 # When distributing Covered Code, include this CDDL HEADER in each
  14 # file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15 # If applicable, add the following below this CDDL HEADER, with the
  16 # fields enclosed by brackets "[]" replaced with your own identifying
  17 # information: Portions Copyright [yyyy] [name of copyright owner]
  18 #
  19 # CDDL HEADER END
  20 #
  21 
  22 #
  23 # Copyright (c) 2012, Joyent, Inc. All rights reserved.
  24 #
  25 
  26 ppriv -s A=basic,dtrace_proc,dtrace_user $$
  27 
  28 /usr/sbin/dtrace -q -Cs /dev/stdin <<EOF
  29 
  30 #define CANREAD(field) \
  31         BEGIN { this->fp = getf(0); errmsg = "can't read field"; \
  32             printf("field: "); trace(this->fp->field); printf("\n"); }
  33 
  34 #define CANTREAD(field) \
  35         BEGIN { errmsg = ""; this->fp = getf(0); trace(this->fp->field); \
  36             printf("\nable to successfully read field!"); exit(1); }
  37 
  38 CANREAD(f_flag)
  39 CANREAD(f_flag2)
  40 CANREAD(f_vnode)
  41 CANREAD(f_offset)
  42 CANREAD(f_cred)
  43 CANREAD(f_audit_data)
  44 CANREAD(f_count)
  45 
  46 /*
  47  * We can potentially read parts of our cred, but we can't dereference
  48  * through cr_zone.
  49  */
  50 CANTREAD(f_cred->cr_zone->zone_id)
  51 
  52 CANREAD(f_vnode->v_path)
  53 CANREAD(f_vnode->v_op)
  54 CANREAD(f_vnode->v_op->vnop_name)
  55 
  56 CANTREAD(f_vnode->v_flag)
  57 CANTREAD(f_vnode->v_count)
  58 CANTREAD(f_vnode->v_pages)
  59 CANTREAD(f_vnode->v_type)
  60 CANTREAD(f_vnode->v_vfsmountedhere)
  61 CANTREAD(f_vnode->v_op->vop_open)
  62 
  63 BEGIN
  64 {
  65         errmsg = "";
  66         this->fp = getf(0);
  67         this->fp2 = getf(1);
  68 
  69         trace(this->fp->f_vnode);
  70         printf("\nable to successfully read this->fp!");
  71         exit(1);
  72 }
  73 
  74 BEGIN
  75 {
  76         errmsg = "";
  77         this->fp = getf(0);
  78 }
  79 
  80 BEGIN
  81 {
  82         trace(this->fp->f_vnode);
  83         printf("\nable to successfully read this->fp from prior clause!");
  84 }
  85 
  86 BEGIN
  87 {
  88         exit(0);
  89 }
  90 
  91 ERROR
  92 /errmsg != ""/
  93 {
  94         printf("fatal error: %s", errmsg);
  95         exit(1);
  96 }
  97         
  98 EOF