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