@@ -706,7 +706,7 @@ int tracepoint__sched__sched_process_fork(struct bpf_raw_tracepoint_args *ctx)
706
706
save_to_submit_buf (& p .event -> args_buf , (void * ) & parent_ns_pid , sizeof (int ), 3 );
707
707
save_to_submit_buf (& p .event -> args_buf , (void * ) & parent_start_time , sizeof (u64 ), 4 );
708
708
709
- // Child (might be a lwp or a process, sched_process_fork trace is calle by clone() also).
709
+ // Child (might be a lwp or a process, sched_process_fork trace is called by clone() also).
710
710
save_to_submit_buf (& p .event -> args_buf , (void * ) & child_tid , sizeof (int ), 5 );
711
711
save_to_submit_buf (& p .event -> args_buf , (void * ) & child_ns_tid , sizeof (int ), 6 );
712
712
save_to_submit_buf (& p .event -> args_buf , (void * ) & child_pid , sizeof (int ), 7 );
@@ -719,7 +719,7 @@ int tracepoint__sched__sched_process_fork(struct bpf_raw_tracepoint_args *ctx)
719
719
// as a parent of the child in the hierarchy), are needed by the userland process tree.
720
720
// The userland process tree default source of events is the signal events, but there is
721
721
// an option to use regular event for maintaining it as well (and it is needed for some
722
- // situatins ). These arguments will always be removed by userland event processors.
722
+ // situations ). These arguments will always be removed by userland event processors.
723
723
struct task_struct * leader = get_leader_task (child );
724
724
struct task_struct * parent_process = get_leader_task (get_parent_task (leader ));
725
725
@@ -7039,26 +7039,31 @@ int sched_process_exec_signal(struct bpf_raw_tracepoint_args *ctx)
7039
7039
if (unlikely (signal == NULL ))
7040
7040
return 0 ;
7041
7041
7042
- // Hashes
7043
-
7044
7042
struct task_struct * task = (struct task_struct * ) ctx -> args [0 ];
7045
7043
if (task == NULL )
7046
7044
return -1 ;
7047
7045
struct task_struct * leader = get_leader_task (task );
7048
7046
struct task_struct * parent = get_leader_task (get_parent_task (leader ));
7049
7047
7050
- // The hash is always calculated with "task_struct->pid + start_time".
7051
- u32 task_hash = hash_task_id (get_task_host_pid (task ), get_task_start_time (task ));
7052
- u32 parent_hash = hash_task_id (get_task_host_pid (parent ), get_task_start_time (parent ));
7053
- u32 leader_hash = hash_task_id (get_task_host_pid (leader ), get_task_start_time (leader ));
7054
-
7055
7048
// The event timestamp, so process tree info can be changelog'ed.
7056
7049
u64 timestamp = get_current_time_in_ns ();
7057
7050
save_to_submit_buf (& signal -> args_buf , & timestamp , sizeof (u64 ), 0 );
7058
7051
7059
- save_to_submit_buf (& signal -> args_buf , (void * ) & task_hash , sizeof (u32 ), 1 );
7060
- save_to_submit_buf (& signal -> args_buf , (void * ) & parent_hash , sizeof (u32 ), 2 );
7061
- save_to_submit_buf (& signal -> args_buf , (void * ) & leader_hash , sizeof (u32 ), 3 );
7052
+ // Fields required for hash computation (start times and pids)
7053
+
7054
+ u64 task_start_time = get_task_start_time (task );
7055
+ u64 parent_start_time = get_task_start_time (parent );
7056
+ u64 leader_start_time = get_task_start_time (leader );
7057
+ save_to_submit_buf (& signal -> args_buf , & task_start_time , sizeof (task_start_time ), 1 );
7058
+ save_to_submit_buf (& signal -> args_buf , & parent_start_time , sizeof (parent_start_time ), 2 );
7059
+ save_to_submit_buf (& signal -> args_buf , & leader_start_time , sizeof (leader_start_time ), 3 );
7060
+
7061
+ u32 task_pid = get_task_host_pid (task );
7062
+ u32 parent_pid = get_task_host_pid (parent );
7063
+ u32 leader_pid = get_task_host_pid (leader );
7064
+ save_to_submit_buf (& signal -> args_buf , & task_pid , sizeof (task_pid ), 4 );
7065
+ save_to_submit_buf (& signal -> args_buf , & parent_pid , sizeof (parent_pid ), 5 );
7066
+ save_to_submit_buf (& signal -> args_buf , & leader_pid , sizeof (leader_pid ), 6 );
7062
7067
7063
7068
// Exec logic
7064
7069
@@ -7085,18 +7090,18 @@ int sched_process_exec_signal(struct bpf_raw_tracepoint_args *ctx)
7085
7090
u64 ctime = get_ctime_nanosec_from_file (file );
7086
7091
umode_t inode_mode = get_inode_mode_from_file (file );
7087
7092
7088
- save_str_to_buf (& signal -> args_buf , (void * ) filename , 4 ); // executable name
7089
- save_str_to_buf (& signal -> args_buf , file_path , 5 ); // executable path
7090
- save_to_submit_buf (& signal -> args_buf , & s_dev , sizeof (dev_t ), 6 ); // device number
7091
- save_to_submit_buf (& signal -> args_buf , & inode_nr , sizeof (unsigned long ), 7 ); // inode number
7092
- save_to_submit_buf (& signal -> args_buf , & ctime , sizeof (u64 ), 8 ); // creation time
7093
- save_to_submit_buf (& signal -> args_buf , & inode_mode , sizeof (umode_t ), 9 ); // inode mode
7093
+ save_str_to_buf (& signal -> args_buf , (void * ) filename , 7 ); // executable name
7094
+ save_str_to_buf (& signal -> args_buf , file_path , 8 ); // executable path
7095
+ save_to_submit_buf (& signal -> args_buf , & s_dev , sizeof (dev_t ), 9 ); // device number
7096
+ save_to_submit_buf (& signal -> args_buf , & inode_nr , sizeof (unsigned long ), 10 ); // inode number
7097
+ save_to_submit_buf (& signal -> args_buf , & ctime , sizeof (u64 ), 11 ); // creation time
7098
+ save_to_submit_buf (& signal -> args_buf , & inode_mode , sizeof (umode_t ), 12 ); // inode mode
7094
7099
7095
- // The proc_info interpreter field is set by "load_elf_phdrs" kprobe program.
7096
- save_str_to_buf (& signal -> args_buf , & proc_info -> interpreter .pathname , 10 ); // interpreter path
7097
- save_to_submit_buf (& signal -> args_buf , & proc_info -> interpreter .id .device , sizeof (dev_t ), 11 ); // interpreter device number
7098
- save_to_submit_buf (& signal -> args_buf , & proc_info -> interpreter .id .inode , sizeof (u64 ), 12 ); // interpreter inode number
7099
- save_to_submit_buf (& signal -> args_buf , & proc_info -> interpreter .id .ctime , sizeof (u64 ), 13 ); // interpreter creation time
7100
+ // The proc_info interpreter field is set by "load_elf_phdrs" kprobe program
7101
+ save_str_to_buf (& signal -> args_buf , & proc_info -> interpreter .pathname , 13 ); // interpreter path
7102
+ save_to_submit_buf (& signal -> args_buf , & proc_info -> interpreter .id .device , sizeof (dev_t ), 14 ); // interpreter device number
7103
+ save_to_submit_buf (& signal -> args_buf , & proc_info -> interpreter .id .inode , sizeof (u64 ), 15 ); // interpreter inode number
7104
+ save_to_submit_buf (& signal -> args_buf , & proc_info -> interpreter .id .ctime , sizeof (u64 ), 16 ); // interpreter creation time
7100
7105
7101
7106
struct mm_struct * mm = get_mm_from_task (task ); // bprm->mm is null here, but task->mm is not
7102
7107
@@ -7112,12 +7117,12 @@ int sched_process_exec_signal(struct bpf_raw_tracepoint_args *ctx)
7112
7117
7113
7118
bool invoked_from_kernel = !!(get_task_parent_flags (task ) & PF_KTHREAD );
7114
7119
7115
- save_args_str_arr_to_buf (& signal -> args_buf , (void * ) arg_start , (void * ) arg_end , argc , 14 ); // argv
7116
- save_str_to_buf (& signal -> args_buf , (void * ) interp , 15 ); // interp
7117
- save_to_submit_buf (& signal -> args_buf , & stdin_type , sizeof (unsigned short ), 16 ); // stdin type
7118
- save_str_to_buf (& signal -> args_buf , stdin_path , 17 ); // stdin path
7119
- save_to_submit_buf (& signal -> args_buf , & invoked_from_kernel , sizeof (bool ), 18 ); // invoked from kernel ?
7120
-
7120
+ save_args_str_arr_to_buf (& signal -> args_buf , (void * ) arg_start , (void * ) arg_end , argc , 17 ); // argv
7121
+ save_str_to_buf (& signal -> args_buf , (void * ) interp , 18 ); // interp
7122
+ save_to_submit_buf (& signal -> args_buf , & stdin_type , sizeof (unsigned short ), 19 ); // stdin type
7123
+ save_str_to_buf (& signal -> args_buf , stdin_path , 20 ); // stdin path
7124
+ save_to_submit_buf (& signal -> args_buf , & invoked_from_kernel , sizeof (bool ), 21 ); // invoked from kernel ?
7125
+
7121
7126
signal_perf_submit (ctx , signal );
7122
7127
7123
7128
return 0 ;
@@ -7132,28 +7137,23 @@ int sched_process_exit_signal(struct bpf_raw_tracepoint_args *ctx)
7132
7137
if (unlikely (signal == NULL ))
7133
7138
return 0 ;
7134
7139
7135
- // Hashes
7136
-
7137
7140
struct task_struct * task = (struct task_struct * ) bpf_get_current_task ();
7138
7141
if (task == NULL )
7139
7142
return -1 ;
7140
- struct task_struct * leader = get_leader_task (task );
7141
- struct task_struct * parent = get_leader_task (get_parent_task (leader ));
7142
-
7143
- // The hash is always calculated with "task_struct->pid + start_time".
7144
- u32 task_hash = hash_task_id (get_task_host_pid (task ), get_task_start_time (task ));
7145
- u32 parent_hash = hash_task_id (get_task_host_pid (parent ), get_task_start_time (parent ));
7146
- u32 leader_hash = hash_task_id (get_task_host_pid (leader ), get_task_start_time (leader ));
7147
7143
7148
7144
// The event timestamp, so process tree info can be changelog'ed.
7149
7145
u64 timestamp = get_current_time_in_ns ();
7150
7146
save_to_submit_buf (& signal -> args_buf , & timestamp , sizeof (u64 ), 0 );
7151
7147
7152
- save_to_submit_buf (& signal -> args_buf , (void * ) & task_hash , sizeof (u32 ), 1 );
7153
- save_to_submit_buf (& signal -> args_buf , (void * ) & parent_hash , sizeof (u32 ), 2 );
7154
- save_to_submit_buf (& signal -> args_buf , (void * ) & leader_hash , sizeof (u32 ), 3 );
7148
+ // Fields required for hash computation (start times and pids)
7149
+
7150
+ u64 task_start_time = get_task_start_time (task );
7151
+ save_to_submit_buf (& signal -> args_buf , & task_start_time , sizeof (task_start_time ), 1 );
7152
+
7153
+ pid_t task_pid = (pid_t ) get_task_host_pid (task );
7154
+ save_to_submit_buf (& signal -> args_buf , & task_pid , sizeof (task_pid ), 2 );
7155
7155
7156
- // Exit logic.
7156
+ // Exit logic
7157
7157
7158
7158
bool group_dead = false;
7159
7159
struct signal_struct * s = BPF_CORE_READ (task , signal );
@@ -7167,12 +7167,12 @@ int sched_process_exit_signal(struct bpf_raw_tracepoint_args *ctx)
7167
7167
int exit_code = get_task_exit_code (task );
7168
7168
int exit_code_real = exit_code >> 8 ;
7169
7169
7170
- save_to_submit_buf (& signal -> args_buf , (void * ) & exit_code_real , sizeof (int ), 4 );
7170
+ save_to_submit_buf (& signal -> args_buf , (void * ) & exit_code_real , sizeof (int ), 3 );
7171
7171
if (task_flags & PF_SIGNALED ) {
7172
7172
int signal_code = exit_code & 0xFF ;
7173
- save_to_submit_buf (& signal -> args_buf , (void * ) & signal_code , sizeof (int ), 5 );
7173
+ save_to_submit_buf (& signal -> args_buf , (void * ) & signal_code , sizeof (int ), 4 );
7174
7174
}
7175
- save_to_submit_buf (& signal -> args_buf , (void * ) & group_dead , sizeof (bool ), 6 );
7175
+ save_to_submit_buf (& signal -> args_buf , (void * ) & group_dead , sizeof (bool ), 5 );
7176
7176
7177
7177
signal_perf_submit (ctx , signal );
7178
7178
0 commit comments