18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 28c2ecf20Sopenharmony_ci/* Copyright (c) 2017 Facebook 38c2ecf20Sopenharmony_ci */ 48c2ecf20Sopenharmony_ci#include <uapi/linux/bpf.h> 58c2ecf20Sopenharmony_ci#include <bpf/bpf_helpers.h> 68c2ecf20Sopenharmony_ci 78c2ecf20Sopenharmony_cistruct syscalls_enter_open_args { 88c2ecf20Sopenharmony_ci unsigned long long unused; 98c2ecf20Sopenharmony_ci long syscall_nr; 108c2ecf20Sopenharmony_ci long filename_ptr; 118c2ecf20Sopenharmony_ci long flags; 128c2ecf20Sopenharmony_ci long mode; 138c2ecf20Sopenharmony_ci}; 148c2ecf20Sopenharmony_ci 158c2ecf20Sopenharmony_cistruct syscalls_exit_open_args { 168c2ecf20Sopenharmony_ci unsigned long long unused; 178c2ecf20Sopenharmony_ci long syscall_nr; 188c2ecf20Sopenharmony_ci long ret; 198c2ecf20Sopenharmony_ci}; 208c2ecf20Sopenharmony_ci 218c2ecf20Sopenharmony_cistruct { 228c2ecf20Sopenharmony_ci __uint(type, BPF_MAP_TYPE_ARRAY); 238c2ecf20Sopenharmony_ci __type(key, u32); 248c2ecf20Sopenharmony_ci __type(value, u32); 258c2ecf20Sopenharmony_ci __uint(max_entries, 1); 268c2ecf20Sopenharmony_ci} enter_open_map SEC(".maps"); 278c2ecf20Sopenharmony_ci 288c2ecf20Sopenharmony_cistruct { 298c2ecf20Sopenharmony_ci __uint(type, BPF_MAP_TYPE_ARRAY); 308c2ecf20Sopenharmony_ci __type(key, u32); 318c2ecf20Sopenharmony_ci __type(value, u32); 328c2ecf20Sopenharmony_ci __uint(max_entries, 1); 338c2ecf20Sopenharmony_ci} exit_open_map SEC(".maps"); 348c2ecf20Sopenharmony_ci 358c2ecf20Sopenharmony_cistatic __always_inline void count(void *map) 368c2ecf20Sopenharmony_ci{ 378c2ecf20Sopenharmony_ci u32 key = 0; 388c2ecf20Sopenharmony_ci u32 *value, init_val = 1; 398c2ecf20Sopenharmony_ci 408c2ecf20Sopenharmony_ci value = bpf_map_lookup_elem(map, &key); 418c2ecf20Sopenharmony_ci if (value) 428c2ecf20Sopenharmony_ci *value += 1; 438c2ecf20Sopenharmony_ci else 448c2ecf20Sopenharmony_ci bpf_map_update_elem(map, &key, &init_val, BPF_NOEXIST); 458c2ecf20Sopenharmony_ci} 468c2ecf20Sopenharmony_ci 478c2ecf20Sopenharmony_ciSEC("tracepoint/syscalls/sys_enter_open") 488c2ecf20Sopenharmony_ciint trace_enter_open(struct syscalls_enter_open_args *ctx) 498c2ecf20Sopenharmony_ci{ 508c2ecf20Sopenharmony_ci count(&enter_open_map); 518c2ecf20Sopenharmony_ci return 0; 528c2ecf20Sopenharmony_ci} 538c2ecf20Sopenharmony_ci 548c2ecf20Sopenharmony_ciSEC("tracepoint/syscalls/sys_enter_openat") 558c2ecf20Sopenharmony_ciint trace_enter_open_at(struct syscalls_enter_open_args *ctx) 568c2ecf20Sopenharmony_ci{ 578c2ecf20Sopenharmony_ci count(&enter_open_map); 588c2ecf20Sopenharmony_ci return 0; 598c2ecf20Sopenharmony_ci} 608c2ecf20Sopenharmony_ci 618c2ecf20Sopenharmony_ciSEC("tracepoint/syscalls/sys_exit_open") 628c2ecf20Sopenharmony_ciint trace_enter_exit(struct syscalls_exit_open_args *ctx) 638c2ecf20Sopenharmony_ci{ 648c2ecf20Sopenharmony_ci count(&exit_open_map); 658c2ecf20Sopenharmony_ci return 0; 668c2ecf20Sopenharmony_ci} 678c2ecf20Sopenharmony_ci 688c2ecf20Sopenharmony_ciSEC("tracepoint/syscalls/sys_exit_openat") 698c2ecf20Sopenharmony_ciint trace_enter_exit_at(struct syscalls_exit_open_args *ctx) 708c2ecf20Sopenharmony_ci{ 718c2ecf20Sopenharmony_ci count(&exit_open_map); 728c2ecf20Sopenharmony_ci return 0; 738c2ecf20Sopenharmony_ci} 74