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