2019-05-28 10:10:09 -07:00
// SPDX-License-Identifier: GPL-2.0-only
2017-08-04 16:00:10 -07:00
/* Copyright (c) 2017 Facebook
*/
# include <uapi/linux/bpf.h>
2020-01-20 14:06:49 +01:00
# include <bpf/bpf_helpers.h>
2017-08-04 16:00:10 -07:00
struct syscalls_enter_open_args {
unsigned long long unused ;
long syscall_nr ;
long filename_ptr ;
long flags ;
long mode ;
} ;
struct syscalls_exit_open_args {
unsigned long long unused ;
long syscall_nr ;
long ret ;
} ;
2020-08-23 17:53:34 +09:00
struct {
__uint ( type , BPF_MAP_TYPE_ARRAY ) ;
__type ( key , u32 ) ;
__type ( value , u32 ) ;
__uint ( max_entries , 1 ) ;
} enter_open_map SEC ( " .maps " ) ;
2017-08-04 16:00:10 -07:00
2020-08-23 17:53:34 +09:00
struct {
__uint ( type , BPF_MAP_TYPE_ARRAY ) ;
__type ( key , u32 ) ;
__type ( value , u32 ) ;
__uint ( max_entries , 1 ) ;
} exit_open_map SEC ( " .maps " ) ;
2017-08-04 16:00:10 -07:00
static __always_inline void count ( void * map )
{
u32 key = 0 ;
u32 * value , init_val = 1 ;
value = bpf_map_lookup_elem ( map , & key ) ;
if ( value )
* value + = 1 ;
else
bpf_map_update_elem ( map , & key , & init_val , BPF_NOEXIST ) ;
}
SEC ( " tracepoint/syscalls/sys_enter_open " )
int trace_enter_open ( struct syscalls_enter_open_args * ctx )
{
2019-12-05 17:01:14 +09:00
count ( & enter_open_map ) ;
return 0 ;
}
SEC ( " tracepoint/syscalls/sys_enter_openat " )
int trace_enter_open_at ( struct syscalls_enter_open_args * ctx )
{
count ( & enter_open_map ) ;
2017-08-04 16:00:10 -07:00
return 0 ;
}
SEC ( " tracepoint/syscalls/sys_exit_open " )
int trace_enter_exit ( struct syscalls_exit_open_args * ctx )
{
2019-12-05 17:01:14 +09:00
count ( & exit_open_map ) ;
return 0 ;
}
SEC ( " tracepoint/syscalls/sys_exit_openat " )
int trace_enter_exit_at ( struct syscalls_exit_open_args * ctx )
{
count ( & exit_open_map ) ;
2017-08-04 16:00:10 -07:00
return 0 ;
}