@@ -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
@@ -7035,26 +7035,31 @@ int sched_process_exec_signal(struct bpf_raw_tracepoint_args *ctx)
7035
7035
if (unlikely (signal == NULL ))
7036
7036
return 0 ;
7037
7037
7038
- // Hashes
7039
-
7040
7038
struct task_struct * task = (struct task_struct * ) ctx -> args [0 ];
7041
7039
if (task == NULL )
7042
7040
return -1 ;
7043
7041
struct task_struct * leader = get_leader_task (task );
7044
7042
struct task_struct * parent = get_leader_task (get_parent_task (leader ));
7045
7043
7046
- // The hash is always calculated with "task_struct->pid + start_time".
7047
- u32 task_hash = hash_task_id (get_task_host_pid (task ), get_task_start_time (task ));
7048
- u32 parent_hash = hash_task_id (get_task_host_pid (parent ), get_task_start_time (parent ));
7049
- u32 leader_hash = hash_task_id (get_task_host_pid (leader ), get_task_start_time (leader ));
7050
-
7051
7044
// The event timestamp, so process tree info can be changelog'ed.
7052
7045
u64 timestamp = get_current_time_in_ns ();
7053
7046
save_to_submit_buf (& signal -> args_buf , & timestamp , sizeof (u64 ), 0 );
7054
7047
7055
- save_to_submit_buf (& signal -> args_buf , (void * ) & task_hash , sizeof (u32 ), 1 );
7056
- save_to_submit_buf (& signal -> args_buf , (void * ) & parent_hash , sizeof (u32 ), 2 );
7057
- save_to_submit_buf (& signal -> args_buf , (void * ) & leader_hash , sizeof (u32 ), 3 );
7048
+ // Fields required for hash computation (start times and pids)
7049
+
7050
+ u64 task_start_time = get_task_start_time (task );
7051
+ u64 parent_start_time = get_task_start_time (parent );
7052
+ u64 leader_start_time = get_task_start_time (leader );
7053
+ save_to_submit_buf (& signal -> args_buf , & task_start_time , sizeof (task_start_time ), 1 );
7054
+ save_to_submit_buf (& signal -> args_buf , & parent_start_time , sizeof (parent_start_time ), 2 );
7055
+ save_to_submit_buf (& signal -> args_buf , & leader_start_time , sizeof (leader_start_time ), 3 );
7056
+
7057
+ u32 task_pid = get_task_host_pid (task );
7058
+ u32 parent_pid = get_task_host_pid (parent );
7059
+ u32 leader_pid = get_task_host_pid (leader );
7060
+ save_to_submit_buf (& signal -> args_buf , & task_pid , sizeof (task_pid ), 4 );
7061
+ save_to_submit_buf (& signal -> args_buf , & parent_pid , sizeof (parent_pid ), 5 );
7062
+ save_to_submit_buf (& signal -> args_buf , & leader_pid , sizeof (leader_pid ), 6 );
7058
7063
7059
7064
// Exec logic
7060
7065
@@ -7081,18 +7086,18 @@ int sched_process_exec_signal(struct bpf_raw_tracepoint_args *ctx)
7081
7086
u64 ctime = get_ctime_nanosec_from_file (file );
7082
7087
umode_t inode_mode = get_inode_mode_from_file (file );
7083
7088
7084
- save_str_to_buf (& signal -> args_buf , (void * ) filename , 4 ); // executable name
7085
- save_str_to_buf (& signal -> args_buf , file_path , 5 ); // executable path
7086
- save_to_submit_buf (& signal -> args_buf , & s_dev , sizeof (dev_t ), 6 ); // device number
7087
- save_to_submit_buf (& signal -> args_buf , & inode_nr , sizeof (unsigned long ), 7 ); // inode number
7088
- save_to_submit_buf (& signal -> args_buf , & ctime , sizeof (u64 ), 8 ); // creation time
7089
- save_to_submit_buf (& signal -> args_buf , & inode_mode , sizeof (umode_t ), 9 ); // inode mode
7089
+ save_str_to_buf (& signal -> args_buf , (void * ) filename , 7 ); // executable name
7090
+ save_str_to_buf (& signal -> args_buf , file_path , 8 ); // executable path
7091
+ save_to_submit_buf (& signal -> args_buf , & s_dev , sizeof (dev_t ), 9 ); // device number
7092
+ save_to_submit_buf (& signal -> args_buf , & inode_nr , sizeof (unsigned long ), 10 ); // inode number
7093
+ save_to_submit_buf (& signal -> args_buf , & ctime , sizeof (u64 ), 11 ); // creation time
7094
+ save_to_submit_buf (& signal -> args_buf , & inode_mode , sizeof (umode_t ), 12 ); // inode mode
7090
7095
7091
- // The proc_info interpreter field is set by "load_elf_phdrs" kprobe program.
7092
- save_str_to_buf (& signal -> args_buf , & proc_info -> interpreter .pathname , 10 ); // interpreter path
7093
- save_to_submit_buf (& signal -> args_buf , & proc_info -> interpreter .id .device , sizeof (dev_t ), 11 ); // interpreter device number
7094
- save_to_submit_buf (& signal -> args_buf , & proc_info -> interpreter .id .inode , sizeof (u64 ), 12 ); // interpreter inode number
7095
- save_to_submit_buf (& signal -> args_buf , & proc_info -> interpreter .id .ctime , sizeof (u64 ), 13 ); // interpreter creation time
7096
+ // The proc_info interpreter field is set by "load_elf_phdrs" kprobe program
7097
+ save_str_to_buf (& signal -> args_buf , & proc_info -> interpreter .pathname , 13 ); // interpreter path
7098
+ save_to_submit_buf (& signal -> args_buf , & proc_info -> interpreter .id .device , sizeof (dev_t ), 14 ); // interpreter device number
7099
+ save_to_submit_buf (& signal -> args_buf , & proc_info -> interpreter .id .inode , sizeof (u64 ), 15 ); // interpreter inode number
7100
+ save_to_submit_buf (& signal -> args_buf , & proc_info -> interpreter .id .ctime , sizeof (u64 ), 16 ); // interpreter creation time
7096
7101
7097
7102
struct mm_struct * mm = get_mm_from_task (task ); // bprm->mm is null here, but task->mm is not
7098
7103
@@ -7108,12 +7113,12 @@ int sched_process_exec_signal(struct bpf_raw_tracepoint_args *ctx)
7108
7113
7109
7114
bool invoked_from_kernel = !!(get_task_parent_flags (task ) & PF_KTHREAD );
7110
7115
7111
- save_args_str_arr_to_buf (& signal -> args_buf , (void * ) arg_start , (void * ) arg_end , argc , 14 ); // argv
7112
- save_str_to_buf (& signal -> args_buf , (void * ) interp , 15 ); // interp
7113
- save_to_submit_buf (& signal -> args_buf , & stdin_type , sizeof (unsigned short ), 16 ); // stdin type
7114
- save_str_to_buf (& signal -> args_buf , stdin_path , 17 ); // stdin path
7115
- save_to_submit_buf (& signal -> args_buf , & invoked_from_kernel , sizeof (bool ), 18 ); // invoked from kernel ?
7116
-
7116
+ save_args_str_arr_to_buf (& signal -> args_buf , (void * ) arg_start , (void * ) arg_end , argc , 17 ); // argv
7117
+ save_str_to_buf (& signal -> args_buf , (void * ) interp , 18 ); // interp
7118
+ save_to_submit_buf (& signal -> args_buf , & stdin_type , sizeof (unsigned short ), 19 ); // stdin type
7119
+ save_str_to_buf (& signal -> args_buf , stdin_path , 20 ); // stdin path
7120
+ save_to_submit_buf (& signal -> args_buf , & invoked_from_kernel , sizeof (bool ), 21 ); // invoked from kernel ?
7121
+
7117
7122
signal_perf_submit (ctx , signal );
7118
7123
7119
7124
return 0 ;
@@ -7128,28 +7133,23 @@ int sched_process_exit_signal(struct bpf_raw_tracepoint_args *ctx)
7128
7133
if (unlikely (signal == NULL ))
7129
7134
return 0 ;
7130
7135
7131
- // Hashes
7132
-
7133
7136
struct task_struct * task = (struct task_struct * ) bpf_get_current_task ();
7134
7137
if (task == NULL )
7135
7138
return -1 ;
7136
- struct task_struct * leader = get_leader_task (task );
7137
- struct task_struct * parent = get_leader_task (get_parent_task (leader ));
7138
-
7139
- // The hash is always calculated with "task_struct->pid + start_time".
7140
- u32 task_hash = hash_task_id (get_task_host_pid (task ), get_task_start_time (task ));
7141
- u32 parent_hash = hash_task_id (get_task_host_pid (parent ), get_task_start_time (parent ));
7142
- u32 leader_hash = hash_task_id (get_task_host_pid (leader ), get_task_start_time (leader ));
7143
7139
7144
7140
// The event timestamp, so process tree info can be changelog'ed.
7145
7141
u64 timestamp = get_current_time_in_ns ();
7146
7142
save_to_submit_buf (& signal -> args_buf , & timestamp , sizeof (u64 ), 0 );
7147
7143
7148
- save_to_submit_buf (& signal -> args_buf , (void * ) & task_hash , sizeof (u32 ), 1 );
7149
- save_to_submit_buf (& signal -> args_buf , (void * ) & parent_hash , sizeof (u32 ), 2 );
7150
- save_to_submit_buf (& signal -> args_buf , (void * ) & leader_hash , sizeof (u32 ), 3 );
7144
+ // Fields required for hash computation (start times and pids)
7145
+
7146
+ u64 task_start_time = get_task_start_time (task );
7147
+ save_to_submit_buf (& signal -> args_buf , & task_start_time , sizeof (task_start_time ), 1 );
7148
+
7149
+ pid_t task_pid = (pid_t ) get_task_host_pid (task );
7150
+ save_to_submit_buf (& signal -> args_buf , & task_pid , sizeof (task_pid ), 2 );
7151
7151
7152
- // Exit logic.
7152
+ // Exit logic
7153
7153
7154
7154
bool group_dead = false;
7155
7155
struct signal_struct * s = BPF_CORE_READ (task , signal );
@@ -7163,12 +7163,12 @@ int sched_process_exit_signal(struct bpf_raw_tracepoint_args *ctx)
7163
7163
int exit_code = get_task_exit_code (task );
7164
7164
int exit_code_real = exit_code >> 8 ;
7165
7165
7166
- save_to_submit_buf (& signal -> args_buf , (void * ) & exit_code_real , sizeof (int ), 4 );
7166
+ save_to_submit_buf (& signal -> args_buf , (void * ) & exit_code_real , sizeof (int ), 3 );
7167
7167
if (task_flags & PF_SIGNALED ) {
7168
7168
int signal_code = exit_code & 0xFF ;
7169
- save_to_submit_buf (& signal -> args_buf , (void * ) & signal_code , sizeof (int ), 5 );
7169
+ save_to_submit_buf (& signal -> args_buf , (void * ) & signal_code , sizeof (int ), 4 );
7170
7170
}
7171
- save_to_submit_buf (& signal -> args_buf , (void * ) & group_dead , sizeof (bool ), 6 );
7171
+ save_to_submit_buf (& signal -> args_buf , (void * ) & group_dead , sizeof (bool ), 5 );
7172
7172
7173
7173
signal_perf_submit (ctx , signal );
7174
7174
0 commit comments