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