@@ -32,24 +32,33 @@ const volatile pid_t filter_pid = 0;
3232SEC ("kprobe/" SYS_PREFIX "sys_prctl" )
3333int BPF_KPROBE (handle_sys_prctl )
3434{
35- struct pt_regs * real_regs ;
36- pid_t pid = bpf_get_current_pid_tgid () >> 32 ;
37- unsigned long tmp = 0 ;
38-
35+ struct pt_regs * real_regs = PT_REGS_SYSCALL_REGS (ctx );
36+ /* Declare tmp vars of pt_regs elem type w/o const qualifier. Blech.*/
37+ typeof (__builtin_choose_expr (
38+ __builtin_types_compatible_p (
39+ typeof (PT_REGS_PARM1 (real_regs )),
40+ __u32 ),
41+ (__u32 )0 ,
42+ (__u64 )0 )) tmp1 , tmp2 , tmp3 , tmp4 , tmp4_cx , tmp5 ;
43+ pid_t pid ;
44+
45+ pid = bpf_get_current_pid_tgid () >> 32 ;
3946 if (pid != filter_pid )
4047 return 0 ;
4148
42- real_regs = PT_REGS_SYSCALL_REGS (ctx );
43-
4449 /* test for PT_REGS_PARM */
45-
46- bpf_probe_read_kernel (& tmp , sizeof (tmp ), & PT_REGS_PARM1_SYSCALL (real_regs ));
47- arg1 = tmp ;
48- bpf_probe_read_kernel (& arg2 , sizeof (arg2 ), & PT_REGS_PARM2_SYSCALL (real_regs ));
49- bpf_probe_read_kernel (& arg3 , sizeof (arg3 ), & PT_REGS_PARM3_SYSCALL (real_regs ));
50- bpf_probe_read_kernel (& arg4_cx , sizeof (arg4_cx ), & PT_REGS_PARM4 (real_regs ));
51- bpf_probe_read_kernel (& arg4 , sizeof (arg4 ), & PT_REGS_PARM4_SYSCALL (real_regs ));
52- bpf_probe_read_kernel (& arg5 , sizeof (arg5 ), & PT_REGS_PARM5_SYSCALL (real_regs ));
50+ bpf_probe_read_kernel (& tmp1 , sizeof (tmp1 ),& PT_REGS_PARM1_SYSCALL (real_regs ));
51+ bpf_probe_read_kernel (& tmp2 , sizeof (tmp2 ), & PT_REGS_PARM2_SYSCALL (real_regs ));
52+ bpf_probe_read_kernel (& tmp3 , sizeof (tmp3 ), & PT_REGS_PARM3_SYSCALL (real_regs ));
53+ bpf_probe_read_kernel (& tmp4_cx , sizeof (tmp4_cx ), & PT_REGS_PARM4 (real_regs ));
54+ bpf_probe_read_kernel (& tmp4 , sizeof (tmp4 ), & PT_REGS_PARM4_SYSCALL (real_regs ));
55+ bpf_probe_read_kernel (& tmp5 , sizeof (tmp5 ), & PT_REGS_PARM5_SYSCALL (real_regs ));
56+ arg1 = tmp1 ;
57+ arg2 = tmp2 ;
58+ arg3 = tmp3 ;
59+ arg4 = tmp4 ;
60+ arg4_cx = tmp4_cx ;
61+ arg5 = tmp5 ;
5362
5463 /* test for the CORE variant of PT_REGS_PARM */
5564 arg1_core = PT_REGS_PARM1_CORE_SYSCALL (real_regs );
0 commit comments