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