1fcda189aSAndrii Nakryiko // SPDX-License-Identifier: GPL-2.0
2fcda189aSAndrii Nakryiko // Copyright (c) 2020 Facebook
3fcda189aSAndrii Nakryiko #include <linux/bpf.h>
4fcda189aSAndrii Nakryiko #include <bpf/bpf_helpers.h>
5fcda189aSAndrii Nakryiko #include <bpf/bpf_core_read.h>
6fcda189aSAndrii Nakryiko
7fcda189aSAndrii Nakryiko struct task_struct {
8fcda189aSAndrii Nakryiko int tgid;
9fcda189aSAndrii Nakryiko } __attribute__((preserve_access_index));
10fcda189aSAndrii Nakryiko
11fcda189aSAndrii Nakryiko struct {
12fcda189aSAndrii Nakryiko __uint(type, BPF_MAP_TYPE_ARRAY);
13fcda189aSAndrii Nakryiko __uint(max_entries, 1);
14fcda189aSAndrii Nakryiko __type(key, int);
15fcda189aSAndrii Nakryiko __type(value, int);
16b5cc46cdSAndrii Nakryiko } exp_tgid_map SEC(".maps");
17b5cc46cdSAndrii Nakryiko
18b5cc46cdSAndrii Nakryiko struct {
19b5cc46cdSAndrii Nakryiko __uint(type, BPF_MAP_TYPE_ARRAY);
20b5cc46cdSAndrii Nakryiko __uint(max_entries, 1);
21b5cc46cdSAndrii Nakryiko __type(key, int);
22b5cc46cdSAndrii Nakryiko __type(value, int);
23fcda189aSAndrii Nakryiko } results SEC(".maps");
24fcda189aSAndrii Nakryiko
25fcda189aSAndrii Nakryiko SEC("tp/raw_syscalls/sys_enter")
handle_sys_enter(void * ctx)26fcda189aSAndrii Nakryiko int handle_sys_enter(void *ctx)
27fcda189aSAndrii Nakryiko {
28fcda189aSAndrii Nakryiko struct task_struct *task = (void *)bpf_get_current_task();
29fcda189aSAndrii Nakryiko int tgid = BPF_CORE_READ(task, tgid);
30fcda189aSAndrii Nakryiko int zero = 0;
31b5cc46cdSAndrii Nakryiko int real_tgid = bpf_get_current_pid_tgid() >> 32;
32b5cc46cdSAndrii Nakryiko int *exp_tgid = bpf_map_lookup_elem(&exp_tgid_map, &zero);
33b5cc46cdSAndrii Nakryiko
34b5cc46cdSAndrii Nakryiko /* only pass through sys_enters from test process */
35b5cc46cdSAndrii Nakryiko if (!exp_tgid || *exp_tgid != real_tgid)
36b5cc46cdSAndrii Nakryiko return 0;
37fcda189aSAndrii Nakryiko
38fcda189aSAndrii Nakryiko bpf_map_update_elem(&results, &zero, &tgid, 0);
39fcda189aSAndrii Nakryiko
40fcda189aSAndrii Nakryiko return 0;
41fcda189aSAndrii Nakryiko }
42fcda189aSAndrii Nakryiko
43fcda189aSAndrii Nakryiko char _license[] SEC("license") = "GPL";
44