162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ci/* Copyright (c) 2020 Facebook */
362306a36Sopenharmony_ci#pragma once
462306a36Sopenharmony_ci
562306a36Sopenharmony_ci#define TASK_COMM_LEN 16
662306a36Sopenharmony_ci#define MAX_ANCESTORS 4
762306a36Sopenharmony_ci#define MAX_PATH 256
862306a36Sopenharmony_ci#define KILL_TARGET_LEN 64
962306a36Sopenharmony_ci#define CTL_MAXNAME 10
1062306a36Sopenharmony_ci#define MAX_ARGS_LEN 4096
1162306a36Sopenharmony_ci#define MAX_FILENAME_LEN 512
1262306a36Sopenharmony_ci#define MAX_ENVIRON_LEN 8192
1362306a36Sopenharmony_ci#define MAX_PATH_DEPTH 32
1462306a36Sopenharmony_ci#define MAX_FILEPATH_LENGTH (MAX_PATH_DEPTH * MAX_PATH)
1562306a36Sopenharmony_ci#define MAX_CGROUPS_PATH_DEPTH 8
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ci#define MAX_METADATA_PAYLOAD_LEN TASK_COMM_LEN
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_ci#define MAX_CGROUP_PAYLOAD_LEN \
2062306a36Sopenharmony_ci	(MAX_PATH * 2 + (MAX_PATH * MAX_CGROUPS_PATH_DEPTH))
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_ci#define MAX_CAP_PAYLOAD_LEN (MAX_METADATA_PAYLOAD_LEN + MAX_CGROUP_PAYLOAD_LEN)
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_ci#define MAX_SYSCTL_PAYLOAD_LEN \
2562306a36Sopenharmony_ci	(MAX_METADATA_PAYLOAD_LEN + MAX_CGROUP_PAYLOAD_LEN + CTL_MAXNAME + MAX_PATH)
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_ci#define MAX_KILL_PAYLOAD_LEN \
2862306a36Sopenharmony_ci	(MAX_METADATA_PAYLOAD_LEN + MAX_CGROUP_PAYLOAD_LEN + TASK_COMM_LEN + \
2962306a36Sopenharmony_ci	 KILL_TARGET_LEN)
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_ci#define MAX_EXEC_PAYLOAD_LEN \
3262306a36Sopenharmony_ci	(MAX_METADATA_PAYLOAD_LEN + MAX_CGROUP_PAYLOAD_LEN + MAX_FILENAME_LEN + \
3362306a36Sopenharmony_ci	 MAX_ARGS_LEN + MAX_ENVIRON_LEN)
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_ci#define MAX_FILEMOD_PAYLOAD_LEN \
3662306a36Sopenharmony_ci	(MAX_METADATA_PAYLOAD_LEN + MAX_CGROUP_PAYLOAD_LEN + MAX_FILEPATH_LENGTH + \
3762306a36Sopenharmony_ci	 MAX_FILEPATH_LENGTH)
3862306a36Sopenharmony_ci
3962306a36Sopenharmony_cienum data_type {
4062306a36Sopenharmony_ci	INVALID_EVENT,
4162306a36Sopenharmony_ci	EXEC_EVENT,
4262306a36Sopenharmony_ci	FORK_EVENT,
4362306a36Sopenharmony_ci	KILL_EVENT,
4462306a36Sopenharmony_ci	SYSCTL_EVENT,
4562306a36Sopenharmony_ci	FILEMOD_EVENT,
4662306a36Sopenharmony_ci	MAX_DATA_TYPE_EVENT
4762306a36Sopenharmony_ci};
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_cienum filemod_type {
5062306a36Sopenharmony_ci	FMOD_OPEN,
5162306a36Sopenharmony_ci	FMOD_LINK,
5262306a36Sopenharmony_ci	FMOD_SYMLINK,
5362306a36Sopenharmony_ci};
5462306a36Sopenharmony_ci
5562306a36Sopenharmony_cistruct ancestors_data_t {
5662306a36Sopenharmony_ci	pid_t ancestor_pids[MAX_ANCESTORS];
5762306a36Sopenharmony_ci	uint32_t ancestor_exec_ids[MAX_ANCESTORS];
5862306a36Sopenharmony_ci	uint64_t ancestor_start_times[MAX_ANCESTORS];
5962306a36Sopenharmony_ci	uint32_t num_ancestors;
6062306a36Sopenharmony_ci};
6162306a36Sopenharmony_ci
6262306a36Sopenharmony_cistruct var_metadata_t {
6362306a36Sopenharmony_ci	enum data_type type;
6462306a36Sopenharmony_ci	pid_t pid;
6562306a36Sopenharmony_ci	uint32_t exec_id;
6662306a36Sopenharmony_ci	uid_t uid;
6762306a36Sopenharmony_ci	gid_t gid;
6862306a36Sopenharmony_ci	uint64_t start_time;
6962306a36Sopenharmony_ci	uint32_t cpu_id;
7062306a36Sopenharmony_ci	uint64_t bpf_stats_num_perf_events;
7162306a36Sopenharmony_ci	uint64_t bpf_stats_start_ktime_ns;
7262306a36Sopenharmony_ci	uint8_t comm_length;
7362306a36Sopenharmony_ci};
7462306a36Sopenharmony_ci
7562306a36Sopenharmony_cistruct cgroup_data_t {
7662306a36Sopenharmony_ci	ino_t cgroup_root_inode;
7762306a36Sopenharmony_ci	ino_t cgroup_proc_inode;
7862306a36Sopenharmony_ci	uint64_t cgroup_root_mtime;
7962306a36Sopenharmony_ci	uint64_t cgroup_proc_mtime;
8062306a36Sopenharmony_ci	uint16_t cgroup_root_length;
8162306a36Sopenharmony_ci	uint16_t cgroup_proc_length;
8262306a36Sopenharmony_ci	uint16_t cgroup_full_length;
8362306a36Sopenharmony_ci	int cgroup_full_path_root_pos;
8462306a36Sopenharmony_ci};
8562306a36Sopenharmony_ci
8662306a36Sopenharmony_cistruct var_sysctl_data_t {
8762306a36Sopenharmony_ci	struct var_metadata_t meta;
8862306a36Sopenharmony_ci	struct cgroup_data_t cgroup_data;
8962306a36Sopenharmony_ci	struct ancestors_data_t ancestors_info;
9062306a36Sopenharmony_ci	uint8_t sysctl_val_length;
9162306a36Sopenharmony_ci	uint16_t sysctl_path_length;
9262306a36Sopenharmony_ci	char payload[MAX_SYSCTL_PAYLOAD_LEN];
9362306a36Sopenharmony_ci};
9462306a36Sopenharmony_ci
9562306a36Sopenharmony_cistruct var_kill_data_t {
9662306a36Sopenharmony_ci	struct var_metadata_t meta;
9762306a36Sopenharmony_ci	struct cgroup_data_t cgroup_data;
9862306a36Sopenharmony_ci	struct ancestors_data_t ancestors_info;
9962306a36Sopenharmony_ci	pid_t kill_target_pid;
10062306a36Sopenharmony_ci	int kill_sig;
10162306a36Sopenharmony_ci	uint32_t kill_count;
10262306a36Sopenharmony_ci	uint64_t last_kill_time;
10362306a36Sopenharmony_ci	uint8_t kill_target_name_length;
10462306a36Sopenharmony_ci	uint8_t kill_target_cgroup_proc_length;
10562306a36Sopenharmony_ci	char payload[MAX_KILL_PAYLOAD_LEN];
10662306a36Sopenharmony_ci	size_t payload_length;
10762306a36Sopenharmony_ci};
10862306a36Sopenharmony_ci
10962306a36Sopenharmony_cistruct var_exec_data_t {
11062306a36Sopenharmony_ci	struct var_metadata_t meta;
11162306a36Sopenharmony_ci	struct cgroup_data_t cgroup_data;
11262306a36Sopenharmony_ci	pid_t parent_pid;
11362306a36Sopenharmony_ci	uint32_t parent_exec_id;
11462306a36Sopenharmony_ci	uid_t parent_uid;
11562306a36Sopenharmony_ci	uint64_t parent_start_time;
11662306a36Sopenharmony_ci	uint16_t bin_path_length;
11762306a36Sopenharmony_ci	uint16_t cmdline_length;
11862306a36Sopenharmony_ci	uint16_t environment_length;
11962306a36Sopenharmony_ci	char payload[MAX_EXEC_PAYLOAD_LEN];
12062306a36Sopenharmony_ci};
12162306a36Sopenharmony_ci
12262306a36Sopenharmony_cistruct var_fork_data_t {
12362306a36Sopenharmony_ci	struct var_metadata_t meta;
12462306a36Sopenharmony_ci	pid_t parent_pid;
12562306a36Sopenharmony_ci	uint32_t parent_exec_id;
12662306a36Sopenharmony_ci	uint64_t parent_start_time;
12762306a36Sopenharmony_ci	char payload[MAX_METADATA_PAYLOAD_LEN];
12862306a36Sopenharmony_ci};
12962306a36Sopenharmony_ci
13062306a36Sopenharmony_cistruct var_filemod_data_t {
13162306a36Sopenharmony_ci	struct var_metadata_t meta;
13262306a36Sopenharmony_ci	struct cgroup_data_t cgroup_data;
13362306a36Sopenharmony_ci	enum filemod_type fmod_type;
13462306a36Sopenharmony_ci	unsigned int dst_flags;
13562306a36Sopenharmony_ci	uint32_t src_device_id;
13662306a36Sopenharmony_ci	uint32_t dst_device_id;
13762306a36Sopenharmony_ci	ino_t src_inode;
13862306a36Sopenharmony_ci	ino_t dst_inode;
13962306a36Sopenharmony_ci	uint16_t src_filepath_length;
14062306a36Sopenharmony_ci	uint16_t dst_filepath_length;
14162306a36Sopenharmony_ci	char payload[MAX_FILEMOD_PAYLOAD_LEN];
14262306a36Sopenharmony_ci};
14362306a36Sopenharmony_ci
14462306a36Sopenharmony_cistruct profiler_config_struct {
14562306a36Sopenharmony_ci	bool fetch_cgroups_from_bpf;
14662306a36Sopenharmony_ci	ino_t cgroup_fs_inode;
14762306a36Sopenharmony_ci	ino_t cgroup_login_session_inode;
14862306a36Sopenharmony_ci	uint64_t kill_signals_mask;
14962306a36Sopenharmony_ci	ino_t inode_filter;
15062306a36Sopenharmony_ci	uint32_t stale_info_secs;
15162306a36Sopenharmony_ci	bool use_variable_buffers;
15262306a36Sopenharmony_ci	bool read_environ_from_exec;
15362306a36Sopenharmony_ci	bool enable_cgroup_v1_resolver;
15462306a36Sopenharmony_ci};
15562306a36Sopenharmony_ci
15662306a36Sopenharmony_cistruct bpf_func_stats_data {
15762306a36Sopenharmony_ci	uint64_t time_elapsed_ns;
15862306a36Sopenharmony_ci	uint64_t num_executions;
15962306a36Sopenharmony_ci	uint64_t num_perf_events;
16062306a36Sopenharmony_ci};
16162306a36Sopenharmony_ci
16262306a36Sopenharmony_cistruct bpf_func_stats_ctx {
16362306a36Sopenharmony_ci	uint64_t start_time_ns;
16462306a36Sopenharmony_ci	struct bpf_func_stats_data* bpf_func_stats_data_val;
16562306a36Sopenharmony_ci};
16662306a36Sopenharmony_ci
16762306a36Sopenharmony_cienum bpf_function_id {
16862306a36Sopenharmony_ci	profiler_bpf_proc_sys_write,
16962306a36Sopenharmony_ci	profiler_bpf_sched_process_exec,
17062306a36Sopenharmony_ci	profiler_bpf_sched_process_exit,
17162306a36Sopenharmony_ci	profiler_bpf_sys_enter_kill,
17262306a36Sopenharmony_ci	profiler_bpf_do_filp_open_ret,
17362306a36Sopenharmony_ci	profiler_bpf_sched_process_fork,
17462306a36Sopenharmony_ci	profiler_bpf_vfs_link,
17562306a36Sopenharmony_ci	profiler_bpf_vfs_symlink,
17662306a36Sopenharmony_ci	profiler_bpf_max_function_id
17762306a36Sopenharmony_ci};
178