xref: /titanic_53/usr/src/cmd/vscan/vscand/vscan.d (revision 53c110294d8b1410cabc201a52f94b03ae2ef448)
1911106dfSjm199354 #!/usr/sbin/dtrace -s
2911106dfSjm199354 /*
3911106dfSjm199354  * CDDL HEADER START
4911106dfSjm199354  *
5911106dfSjm199354  * The contents of this file are subject to the terms of the
6911106dfSjm199354  * Common Development and Distribution License (the "License").
7911106dfSjm199354  * You may not use this file except in compliance with the License.
8911106dfSjm199354  *
9911106dfSjm199354  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10911106dfSjm199354  * or http://www.opensolaris.org/os/licensing.
11911106dfSjm199354  * See the License for the specific language governing permissions
12911106dfSjm199354  * and limitations under the License.
13911106dfSjm199354  *
14911106dfSjm199354  * When distributing Covered Code, include this CDDL HEADER in each
15911106dfSjm199354  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16911106dfSjm199354  * If applicable, add the following below this CDDL HEADER, with the
17911106dfSjm199354  * fields enclosed by brackets "[]" replaced with your own identifying
18911106dfSjm199354  * information: Portions Copyright [yyyy] [name of copyright owner]
19911106dfSjm199354  *
20911106dfSjm199354  * CDDL HEADER END
21911106dfSjm199354  */
22911106dfSjm199354 /*
23*53c11029Sjm199354  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
24911106dfSjm199354  * Use is subject to license terms.
25911106dfSjm199354  */
26911106dfSjm199354 
27911106dfSjm199354 #pragma ident	"%Z%%M%	%I%	%E% SMI"
28911106dfSjm199354 
29911106dfSjm199354 #pragma D option flowindent
30911106dfSjm199354 
31911106dfSjm199354 /*
32911106dfSjm199354  *** vscan kernel pseudo driver ***
33911106dfSjm199354  */
34911106dfSjm199354 
35911106dfSjm199354 /* vscan_svc.c */
36911106dfSjm199354 sdt:vscan::vscan-scan-file
37911106dfSjm199354 {
38911106dfSjm199354 	printf("%s (%s)", stringof(arg0), arg1 ? "async" : "sync");
39911106dfSjm199354 }
40911106dfSjm199354 
41911106dfSjm199354 sdt:vscan::vscan-exempt-filesize
42911106dfSjm199354 {
43911106dfSjm199354 	printf("%s EXEMPT (%s)", stringof(arg0), arg1 ? "DENY" : "ALLOW");
44911106dfSjm199354 }
45911106dfSjm199354 
46911106dfSjm199354 sdt:vscan::vscan-type-match
47911106dfSjm199354 {
48911106dfSjm199354 	printf("ext: %s matched: %s", stringof(arg0), stringof(arg1));
49911106dfSjm199354 }
50911106dfSjm199354 
51911106dfSjm199354 sdt:vscan::vscan-exempt-filetype
52911106dfSjm199354 {
53911106dfSjm199354 	printf("%s EXEMPT", stringof(arg0));
54911106dfSjm199354 }
55911106dfSjm199354 
56911106dfSjm199354 sdt:vscan::vscan-wait-scan
57911106dfSjm199354 {
58911106dfSjm199354 	printf("%s (%d) waiters: %d",
59911106dfSjm199354 		stringof(((vscan_file_t *)arg0)->vsf_req.vsr_vp->v_path),
60911106dfSjm199354 		arg1, ((vscan_file_t *)arg0)->vsf_wait_count);
61911106dfSjm199354 }
62911106dfSjm199354 
63911106dfSjm199354 sdt:vscan::vscan-wait-slot
64911106dfSjm199354 {
65*53c11029Sjm199354 	printf("%s", stringof(arg0));
66911106dfSjm199354 }
67911106dfSjm199354 
68911106dfSjm199354 sdt:vscan::vscan-insert
69911106dfSjm199354 {
70911106dfSjm199354 	printf("idx: %d - %s", arg1, stringof(arg0));
71911106dfSjm199354 }
72911106dfSjm199354 
73911106dfSjm199354 sdt:vscan::vscan-release
74911106dfSjm199354 {
75911106dfSjm199354 	printf("idx: %d - %s", arg1, stringof(arg0));
76911106dfSjm199354 }
77911106dfSjm199354 
78*53c11029Sjm199354 sdt:vscan::vscan-getattr
79911106dfSjm199354 {
80911106dfSjm199354 	printf("%s, m: %d, q: %d, scanstamp: %s",
81911106dfSjm199354 		stringof(((vscan_file_t *)arg0)->vsf_req.vsr_vp->v_path),
82911106dfSjm199354 		((vscan_file_t *)arg0)->vsf_modified,
83911106dfSjm199354 		((vscan_file_t *)arg0)->vsf_quarantined,
84911106dfSjm199354 		stringof(((vscan_file_t *)arg0)->vsf_scanstamp));
85911106dfSjm199354 }
86911106dfSjm199354 
87*53c11029Sjm199354 sdt:vscan::vscan-setattr
88*53c11029Sjm199354 {
89*53c11029Sjm199354 	/* XAT_AV_QUARANTINED */
90*53c11029Sjm199354 	printf("%s", (arg1 & 0x400) == 0 ? "" :
91*53c11029Sjm199354 	    ((vscan_file_t *)arg0)->vsf_quarantined ? "q: 1, " : "q: 0, ");
92911106dfSjm199354 
93*53c11029Sjm199354 	/* XAT_AV_MODIFIED */
94*53c11029Sjm199354 	printf("%s", (arg1 & 0x800) == 0 ? "" :
95*53c11029Sjm199354 	    ((vscan_file_t *)arg0)->vsf_modified ? "m: 1, " : "m: 0, ");
96*53c11029Sjm199354 
97*53c11029Sjm199354 	/* XAT_AV_SCANSTAMP */
98*53c11029Sjm199354 	printf("%s", (arg1 & 0x1000) == 0 ? "" : "scanstamp: ");
99*53c11029Sjm199354 	printf("%s", (arg1 & 0x1000) == 0 ? "" :
100*53c11029Sjm199354 	    stringof(((vscan_file_t *)arg0)->vsf_scanstamp));
101*53c11029Sjm199354 }
102*53c11029Sjm199354 
103*53c11029Sjm199354 
104*53c11029Sjm199354 sdt:vscan::vscan-mtime-changed
105*53c11029Sjm199354 {
106*53c11029Sjm199354 	printf("%s",
107*53c11029Sjm199354 		stringof(((vscan_file_t *)arg0)->vsf_req.vsr_vp->v_path));
108*53c11029Sjm199354 }
109*53c11029Sjm199354 
110*53c11029Sjm199354 
111*53c11029Sjm199354 sdt:vscan::vscan-result
112*53c11029Sjm199354 {
113*53c11029Sjm199354 	printf("VS_STATUS_%s - VS_ACCESS_%s",
114*53c11029Sjm199354 	    arg0 == 0 ? "UNDEFINED" :
115*53c11029Sjm199354 	    arg0 == 1 ? "NO_SCAN" :
116*53c11029Sjm199354 	    arg0 == 2 ? "ERROR" :
117*53c11029Sjm199354 	    arg0 == 3 ? "CLEAN" :
118*53c11029Sjm199354 	    arg0 == 4 ? "INFECTED" : "XXX unknown",
119*53c11029Sjm199354 	    arg1 == 0 ? "UNDEFINED" :
120*53c11029Sjm199354 	    arg1 == 1 ? "ALLOW" : "DENY");
121*53c11029Sjm199354 }
122*53c11029Sjm199354 
123*53c11029Sjm199354 
124*53c11029Sjm199354 fbt:vscan:vscan_svc_enable:entry,
125*53c11029Sjm199354 fbt:vscan:vscan_svc_enable:return,
126*53c11029Sjm199354 fbt:vscan:vscan_svc_disable:entry,
127*53c11029Sjm199354 fbt:vscan:vscan_svc_disable:return,
128911106dfSjm199354 fbt:vscan:vscan_svc_configure:entry,
129911106dfSjm199354 fbt:vscan:vscan_svc_configure:return,
130911106dfSjm199354 fbt:vscan:vscan_svc_exempt_filetype:entry,
131911106dfSjm199354 fbt:vscan:vscan_svc_scan_file:return,
132911106dfSjm199354 fbt:vscan:vscan_svc_taskq_callback:entry,
133911106dfSjm199354 fbt:vscan:vscan_svc_taskq_callback:return,
134911106dfSjm199354 fbt:vscan:vscan_svc_do_scan:return
135911106dfSjm199354 {
136911106dfSjm199354 }
137911106dfSjm199354 
138911106dfSjm199354 /*
139911106dfSjm199354 fbt:vscan:vscan_svc_match_ext:entry
140911106dfSjm199354 {
141911106dfSjm199354 	printf("ext: %s, check: %s", stringof(args[1]), stringof(args[0]));
142911106dfSjm199354 }
143911106dfSjm199354 
144911106dfSjm199354 fbt:vscan:vscan_svc_match_ext:return
145911106dfSjm199354 {
146911106dfSjm199354 }
147911106dfSjm199354 */
148911106dfSjm199354 
149911106dfSjm199354 /* vscan_door.c */
150911106dfSjm199354 fbt:vscan:vscan_door_scan_file:entry
151911106dfSjm199354 {
152911106dfSjm199354 	printf("%s (%d)", args[0]->vsr_path, args[0]->vsr_id);
153911106dfSjm199354 }
154911106dfSjm199354 fbt:vscan:vscan_door_scan_file:return
155911106dfSjm199354 {
156*53c11029Sjm199354 	printf("%s", args[1] == 0 ? "success" : "error");
157911106dfSjm199354 }
158911106dfSjm199354 
159911106dfSjm199354 /* vscan_drv.c */
160911106dfSjm199354 
161*53c11029Sjm199354 sdt:vscan::vscan-minor-node
162*53c11029Sjm199354 {
163*53c11029Sjm199354 	printf("vscan%d %s", arg0, arg1 != 0 ? "created" : "error");
164*53c11029Sjm199354 }
165*53c11029Sjm199354 
166911106dfSjm199354 /*
167911106dfSjm199354  * unprivileged vscan driver access attempt
168911106dfSjm199354  */
169911106dfSjm199354 sdt:vscan::vscan-priv
170911106dfSjm199354 /arg0 != 0/
171911106dfSjm199354 {
172911106dfSjm199354 	printf("vscan driver access attempt by unprivileged process");
173911106dfSjm199354 }
174911106dfSjm199354 
175911106dfSjm199354 /*
176911106dfSjm199354  * daemon-driver synchronization
177911106dfSjm199354  */
178911106dfSjm199354 fbt:vscan:vscan_drv_open:entry
179911106dfSjm199354 / *(int *)args[0] == 0/
180911106dfSjm199354 {
181911106dfSjm199354 	printf("vscan daemon attach");
182911106dfSjm199354 }
183911106dfSjm199354 
184911106dfSjm199354 fbt:vscan:vscan_drv_close:entry
185911106dfSjm199354 / (int)args[0] == 0/
186911106dfSjm199354 {
187911106dfSjm199354 	printf("vscan daemon detach");
188911106dfSjm199354 }
189911106dfSjm199354 
190911106dfSjm199354 fbt:vscan:vscan_drv_ioctl:entry
191911106dfSjm199354 / (int)args[0] == 0/
192911106dfSjm199354 {
193*53c11029Sjm199354 	printf("vscan daemon ioctl %d %s", args[1],
194*53c11029Sjm199354 		args[1] == 1 ? "ENABLE" :
195*53c11029Sjm199354 		args[1] == 2 ? "DISABLE" :
196*53c11029Sjm199354 		args[1] == 4 ? "CONFIG" : "unknown");
197911106dfSjm199354 }
198911106dfSjm199354 
199*53c11029Sjm199354 fbt:vscan:vscan_drv_delayed_disable:entry,
200*53c11029Sjm199354 fbt:vscan:vscan_drv_delayed_disable:return
201*53c11029Sjm199354 {
202*53c11029Sjm199354 }
203*53c11029Sjm199354 
204*53c11029Sjm199354 sdt:vscan::vscan-reconnect
205*53c11029Sjm199354 {
206*53c11029Sjm199354 }
207*53c11029Sjm199354 
208*53c11029Sjm199354 /*
209*53c11029Sjm199354 fbt:vscan:vscan_drv_attach:entry,
210*53c11029Sjm199354 fbt:vscan:vscan_drv_attach:return,
211*53c11029Sjm199354 fbt:vscan:vscan_drv_detach:entry,
212*53c11029Sjm199354 fbt:vscan:vscan_drv_detach:return
213*53c11029Sjm199354 {
214*53c11029Sjm199354 }
215*53c11029Sjm199354 
216*53c11029Sjm199354 fbt:vscan:vscan_drv_in_use:return,
217*53c11029Sjm199354 fbt:vscan:vscan_svc_in_use:return
218*53c11029Sjm199354 {
219*53c11029Sjm199354 	printf("%s", args[1] ? "in use" : "not in use");
220*53c11029Sjm199354 }
221*53c11029Sjm199354 */
222*53c11029Sjm199354 
223911106dfSjm199354 
224911106dfSjm199354 /*
225911106dfSjm199354  * file access
226911106dfSjm199354  */
227911106dfSjm199354 
228911106dfSjm199354 /*
229911106dfSjm199354 fbt:vscan:vscan_drv_open:entry
230911106dfSjm199354 / *(int *)args[0] != 0/
231911106dfSjm199354 {
232911106dfSjm199354 	printf("%d", *(int *)args[0]);
233911106dfSjm199354 }
234911106dfSjm199354 
235911106dfSjm199354 fbt:vscan:vscan_drv_close:entry,
236911106dfSjm199354 fbt:vscan:vscan_drv_read:entry
237911106dfSjm199354 / (int)args[0] != 0/
238911106dfSjm199354 {
239911106dfSjm199354 	printf("%d", (int)args[0]);
240911106dfSjm199354 }
241911106dfSjm199354 */
242911106dfSjm199354 
243911106dfSjm199354 
244911106dfSjm199354 /*
245911106dfSjm199354  *** vscan daemon - vscand ***
246911106dfSjm199354  */
247911106dfSjm199354 
248911106dfSjm199354 pid$target::vs_door_scan_req:entry,
249911106dfSjm199354 pid$target::vs_svc_scan_file:entry,
250911106dfSjm199354 pid$target::vs_eng_scanstamp_current:entry,
251911106dfSjm199354 pid$target::vs_icap_scan_file:entry
252911106dfSjm199354 {
253911106dfSjm199354 }
254911106dfSjm199354 
255911106dfSjm199354 pid$target::vs_svc_scan_file:return
256911106dfSjm199354 {
257*53c11029Sjm199354 	printf("VS_STATUS_%s",
258*53c11029Sjm199354 	    arg1 == 0 ? "UNDEFINED" :
259*53c11029Sjm199354 	    arg1 == 1 ? "NO_SCAN" :
260*53c11029Sjm199354 	    arg1 == 2 ? "ERROR" :
261*53c11029Sjm199354 	    arg1 == 3 ? "CLEAN" :
262*53c11029Sjm199354 	    arg1 == 4 ? "INFECTED" : "XXX unknown");
263911106dfSjm199354 }
264911106dfSjm199354 
265911106dfSjm199354 pid$target::vs_eng_scanstamp_current:return
266911106dfSjm199354 {
267911106dfSjm199354 	printf("%sCURRENT", arg1 == 0 ? "NOT " : "");
268911106dfSjm199354 }
269911106dfSjm199354 
270911106dfSjm199354 pid$target::vs_icap_scan_file:return
271911106dfSjm199354 {
272*53c11029Sjm199354 	printf("%ld VS_RESULT_%s", arg1,
273*53c11029Sjm199354 	    arg1 == 0 ? "UNDEFINED" :
274*53c11029Sjm199354 	    arg1 == 1 ? "CLEAN" :
275*53c11029Sjm199354 	    arg1 == 2 ? "CLEANED" :
276*53c11029Sjm199354 	    arg1 == 3 ? "FORBIDDEN" : "(SE)_ERROR");
277911106dfSjm199354 }
278911106dfSjm199354 
279911106dfSjm199354 pid$target::vs_stats_set:entry
280911106dfSjm199354 {
281911106dfSjm199354 	printf("%s", (arg0 == 1) ? "CLEAN" :
282911106dfSjm199354 		(arg0 == 2) ? "CLEANED" :
283*53c11029Sjm199354 		(arg0 == 3) ? "QUARANTINE" : "ERROR");
284911106dfSjm199354 }
285911106dfSjm199354 
286911106dfSjm199354 pid$target::vs_stats_set:return
287911106dfSjm199354 {
288911106dfSjm199354 }
289911106dfSjm199354 
290911106dfSjm199354 /* get engine connection */
291911106dfSjm199354 pid$target::vs_eng_get:entry,
292911106dfSjm199354 pid$target::vs_eng_connect:entry
293911106dfSjm199354 {
294911106dfSjm199354 }
295911106dfSjm199354 pid$target::vs_eng_get:return,
296911106dfSjm199354 pid$target::vs_eng_connect:return
297911106dfSjm199354 {
298911106dfSjm199354 	printf("%s", arg1 == 0 ? "success" : "error");
299911106dfSjm199354 }
300911106dfSjm199354 
301911106dfSjm199354 /* engine errors */
302911106dfSjm199354 pid$target::vs_eng_set_error:entry
303911106dfSjm199354 / arg1 == 1 /
304911106dfSjm199354 {
305911106dfSjm199354 	printf("scan engine %d error", arg0 + 1);
306911106dfSjm199354 }
307911106dfSjm199354 
308911106dfSjm199354 /* shutdown */
309911106dfSjm199354 pid$target::vscand_sig_handler:entry
310911106dfSjm199354 {
311911106dfSjm199354 	printf("received signal %d", arg0);
312911106dfSjm199354 }
313911106dfSjm199354 pid$target::vscand_sig_handler:return,
314911106dfSjm199354 pid$target::vscand_fini:entry,
315911106dfSjm199354 pid$target::vscand_fini:return,
316911106dfSjm199354 pid$target::vscand_kernel_disable:entry,
317911106dfSjm199354 pid$target::vscand_kernel_disable:return,
318911106dfSjm199354 pid$target::vscand_kernel_unbind:entry,
319911106dfSjm199354 pid$target::vscand_kernel_unbind:return,
320911106dfSjm199354 pid$target::vs_eng_fini:entry,
321911106dfSjm199354 pid$target::vs_eng_fini:return,
322911106dfSjm199354 pid$target::vs_eng_close_connections:entry,
323911106dfSjm199354 pid$target::vs_eng_close_connections:return
324911106dfSjm199354 {
325911106dfSjm199354 }
326911106dfSjm199354 
327911106dfSjm199354 /* vs_icap.c */
328911106dfSjm199354 
329911106dfSjm199354 /* trace entry and exit (inc status) */
330911106dfSjm199354 pid$target::vs_icap_option_request:entry,
331911106dfSjm199354 pid$target::vs_icap_send_option_req:entry,
332911106dfSjm199354 pid$target::vs_icap_read_option_resp:entry,
333911106dfSjm199354 pid$target::vs_icap_respmod_request:entry,
334911106dfSjm199354 pid$target::vs_icap_may_preview:entry,
335911106dfSjm199354 pid$target::vs_icap_send_preview:entry,
336911106dfSjm199354 pid$target::vs_icap_send_respmod_hdr:entry,
337911106dfSjm199354 pid$target::vs_icap_read_respmod_resp:entry
338911106dfSjm199354 {
339911106dfSjm199354 }
340911106dfSjm199354 
341911106dfSjm199354 pid$target::vs_icap_option_request:return,
342911106dfSjm199354 pid$target::vs_icap_send_option_req:return,
343911106dfSjm199354 pid$target::vs_icap_read_option_resp:return,
344911106dfSjm199354 pid$target::vs_icap_respmod_request:return,
345911106dfSjm199354 pid$target::vs_icap_send_preview:return,
346911106dfSjm199354 pid$target::vs_icap_send_respmod_hdr:return,
347911106dfSjm199354 pid$target::vs_icap_read_respmod_resp:return
348911106dfSjm199354 {
349911106dfSjm199354 	printf("%s", arg1 < 0 ? "error" : "success");
350911106dfSjm199354 }
351911106dfSjm199354 
352911106dfSjm199354 pid$target::vs_icap_may_preview:return
353911106dfSjm199354 {
354911106dfSjm199354 	printf("TRANSFER %s", arg1 == 1 ? "PREVIEW" : "COMPLETE");
355911106dfSjm199354 }
356911106dfSjm199354 
357911106dfSjm199354 /* trace failures only  - these functions return -1 on failure */
358911106dfSjm199354 pid$target::vs_icap_read_resp_code:return,
359911106dfSjm199354 pid$target::vs_icap_read_hdr:return,
360911106dfSjm199354 pid$target::vs_icap_send_termination:return,
361911106dfSjm199354 pid$target::vs_icap_write:return,
362911106dfSjm199354 pid$target::vs_icap_set_scan_result:return,
363911106dfSjm199354 pid$target::vs_icap_read_encap_hdr:return,
364911106dfSjm199354 pid$target::vs_icap_read_encap_data:return,
365911106dfSjm199354 pid$target::vs_icap_read_resp_body:return,
366911106dfSjm199354 pid$target::vs_icap_read_body_chunk:return,
367911106dfSjm199354 pid$target::vs_icap_read:return,
368911106dfSjm199354 pid$target::vs_icap_readline:return,
369911106dfSjm199354 pid$target::vs_icap_send_chunk:return,
370911106dfSjm199354 pid$target::gethostname:return
371911106dfSjm199354 /arg1 < 0/
372911106dfSjm199354 {
373911106dfSjm199354 	printf("error");
374911106dfSjm199354 }
375911106dfSjm199354 
376911106dfSjm199354 /* trace failures only  - these functions return 1 on success */
377911106dfSjm199354 pid$target::vs_icap_opt_value:return,
378911106dfSjm199354 pid$target::vs_icap_opt_ext:return,
379911106dfSjm199354 pid$target::vs_icap_resp_infection:return,
380911106dfSjm199354 pid$target::vs_icap_resp_virus_id:return,
381911106dfSjm199354 pid$target::vs_icap_resp_violations:return,
382911106dfSjm199354 pid$target::vs_icap_resp_violation_rec:return,
383911106dfSjm199354 pid$target::vs_icap_resp_istag:return,
384911106dfSjm199354 pid$target::vs_icap_resp_encap:return
385911106dfSjm199354 /arg1 != 1/
386911106dfSjm199354 {
387911106dfSjm199354 	printf("error");
388911106dfSjm199354 }
389911106dfSjm199354 
390911106dfSjm199354 pid$target::write:return,
391911106dfSjm199354 pid$target::read:return,
392911106dfSjm199354 pid$target::recv:return,
393911106dfSjm199354 pid$target::open:return,
394911106dfSjm199354 pid$target::calloc:return
395911106dfSjm199354 /arg1 <= 0/
396911106dfSjm199354 {
397911106dfSjm199354 	printf("error");
398911106dfSjm199354 }
399