@@ -706,7 +706,7 @@ int tracepoint__sched__sched_process_fork(struct bpf_raw_tracepoint_args *ctx)
706706 save_to_submit_buf (& p .event -> args_buf , (void * ) & parent_ns_pid , sizeof (int ), 3 );
707707 save_to_submit_buf (& p .event -> args_buf , (void * ) & parent_start_time , sizeof (u64 ), 4 );
708708
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).
710710 save_to_submit_buf (& p .event -> args_buf , (void * ) & child_tid , sizeof (int ), 5 );
711711 save_to_submit_buf (& p .event -> args_buf , (void * ) & child_ns_tid , sizeof (int ), 6 );
712712 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)
719719 // as a parent of the child in the hierarchy), are needed by the userland process tree.
720720 // The userland process tree default source of events is the signal events, but there is
721721 // 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.
723723 struct task_struct * leader = get_leader_task (child );
724724 struct task_struct * parent_process = get_leader_task (get_parent_task (leader ));
725725
@@ -7035,26 +7035,31 @@ int sched_process_exec_signal(struct bpf_raw_tracepoint_args *ctx)
70357035 if (unlikely (signal == NULL ))
70367036 return 0 ;
70377037
7038- // Hashes
7039-
70407038 struct task_struct * task = (struct task_struct * ) ctx -> args [0 ];
70417039 if (task == NULL )
70427040 return -1 ;
70437041 struct task_struct * leader = get_leader_task (task );
70447042 struct task_struct * parent = get_leader_task (get_parent_task (leader ));
70457043
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-
70517044 // The event timestamp, so process tree info can be changelog'ed.
70527045 u64 timestamp = get_current_time_in_ns ();
70537046 save_to_submit_buf (& signal -> args_buf , & timestamp , sizeof (u64 ), 0 );
70547047
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 );
70587063
70597064 // Exec logic
70607065
@@ -7081,18 +7086,18 @@ int sched_process_exec_signal(struct bpf_raw_tracepoint_args *ctx)
70817086 u64 ctime = get_ctime_nanosec_from_file (file );
70827087 umode_t inode_mode = get_inode_mode_from_file (file );
70837088
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
70907095
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
70967101
70977102 struct mm_struct * mm = get_mm_from_task (task ); // bprm->mm is null here, but task->mm is not
70987103
@@ -7108,12 +7113,12 @@ int sched_process_exec_signal(struct bpf_raw_tracepoint_args *ctx)
71087113
71097114 bool invoked_from_kernel = !!(get_task_parent_flags (task ) & PF_KTHREAD );
71107115
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+
71177122 signal_perf_submit (ctx , signal );
71187123
71197124 return 0 ;
@@ -7128,28 +7133,23 @@ int sched_process_exit_signal(struct bpf_raw_tracepoint_args *ctx)
71287133 if (unlikely (signal == NULL ))
71297134 return 0 ;
71307135
7131- // Hashes
7132-
71337136 struct task_struct * task = (struct task_struct * ) bpf_get_current_task ();
71347137 if (task == NULL )
71357138 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 ));
71437139
71447140 // The event timestamp, so process tree info can be changelog'ed.
71457141 u64 timestamp = get_current_time_in_ns ();
71467142 save_to_submit_buf (& signal -> args_buf , & timestamp , sizeof (u64 ), 0 );
71477143
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 );
71517151
7152- // Exit logic.
7152+ // Exit logic
71537153
71547154 bool group_dead = false;
71557155 struct signal_struct * s = BPF_CORE_READ (task , signal );
@@ -7163,12 +7163,12 @@ int sched_process_exit_signal(struct bpf_raw_tracepoint_args *ctx)
71637163 int exit_code = get_task_exit_code (task );
71647164 int exit_code_real = exit_code >> 8 ;
71657165
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 );
71677167 if (task_flags & PF_SIGNALED ) {
71687168 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 );
71707170 }
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 );
71727172
71737173 signal_perf_submit (ctx , signal );
71747174
0 commit comments