1*4882a593Smuzhiyun // SPDX-License-Identifier: GPL-2.0 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Hook into 'openat' syscall entry tracepoint 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Test it with: 6*4882a593Smuzhiyun * 7*4882a593Smuzhiyun * perf trace -e tools/perf/examples/bpf/sys_enter_openat.c cat /etc/passwd > /dev/null 8*4882a593Smuzhiyun * 9*4882a593Smuzhiyun * It'll catch some openat syscalls related to the dynamic linked and 10*4882a593Smuzhiyun * the last one should be the one for '/etc/passwd'. 11*4882a593Smuzhiyun * 12*4882a593Smuzhiyun * The syscall_enter_openat_args can be used to get the syscall fields 13*4882a593Smuzhiyun * and use them for filtering calls, i.e. use in expressions for 14*4882a593Smuzhiyun * the return value. 15*4882a593Smuzhiyun */ 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun #include <bpf/bpf.h> 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun struct syscall_enter_openat_args { 20*4882a593Smuzhiyun unsigned long long unused; 21*4882a593Smuzhiyun long syscall_nr; 22*4882a593Smuzhiyun long dfd; 23*4882a593Smuzhiyun char *filename_ptr; 24*4882a593Smuzhiyun long flags; 25*4882a593Smuzhiyun long mode; 26*4882a593Smuzhiyun }; 27*4882a593Smuzhiyun syscall_enter(openat)28*4882a593Smuzhiyunint syscall_enter(openat)(struct syscall_enter_openat_args *args) 29*4882a593Smuzhiyun { 30*4882a593Smuzhiyun return 1; 31*4882a593Smuzhiyun } 32*4882a593Smuzhiyun 33*4882a593Smuzhiyun license(GPL); 34