1579c3196SAlan Maguire // SPDX-License-Identifier: GPL-2.0
2579c3196SAlan Maguire /* Copyright (c) 2022, Oracle and/or its affiliates. */
3579c3196SAlan Maguire 
41717e248SAlan Maguire #include "vmlinux.h"
51717e248SAlan Maguire 
61717e248SAlan Maguire #include <bpf/bpf_core_read.h>
7579c3196SAlan Maguire #include <bpf/bpf_helpers.h>
8579c3196SAlan Maguire #include <bpf/bpf_tracing.h>
9bc72742bSAndrii Nakryiko #include "bpf_misc.h"
10579c3196SAlan Maguire 
111717e248SAlan Maguire int uprobe_byname_parm1 = 0;
121717e248SAlan Maguire int uprobe_byname_ran = 0;
131717e248SAlan Maguire int uretprobe_byname_rc = 0;
14bc72742bSAndrii Nakryiko int uretprobe_byname_ret = 0;
151717e248SAlan Maguire int uretprobe_byname_ran = 0;
16*907300c7SIlya Leoshkevich u64 uprobe_byname2_parm1 = 0;
171717e248SAlan Maguire int uprobe_byname2_ran = 0;
18*907300c7SIlya Leoshkevich u64 uretprobe_byname2_rc = 0;
191717e248SAlan Maguire int uretprobe_byname2_ran = 0;
201717e248SAlan Maguire 
211717e248SAlan Maguire int test_pid;
22579c3196SAlan Maguire 
23bc72742bSAndrii Nakryiko int a[8];
24bc72742bSAndrii Nakryiko 
25579c3196SAlan Maguire /* This program cannot auto-attach, but that should not stop other
26579c3196SAlan Maguire  * programs from attaching.
27579c3196SAlan Maguire  */
28579c3196SAlan Maguire SEC("uprobe")
handle_uprobe_noautoattach(struct pt_regs * ctx)29579c3196SAlan Maguire int handle_uprobe_noautoattach(struct pt_regs *ctx)
30579c3196SAlan Maguire {
31579c3196SAlan Maguire 	return 0;
32579c3196SAlan Maguire }
33579c3196SAlan Maguire 
34579c3196SAlan Maguire SEC("uprobe//proc/self/exe:autoattach_trigger_func")
BPF_UPROBE(handle_uprobe_byname,int arg1,int arg2,int arg3,int arg4,int arg5,int arg6,int arg7,int arg8)35bc72742bSAndrii Nakryiko int BPF_UPROBE(handle_uprobe_byname
36bc72742bSAndrii Nakryiko 	       , int arg1
37bc72742bSAndrii Nakryiko 	       , int arg2
38bc72742bSAndrii Nakryiko 	       , int arg3
39bc72742bSAndrii Nakryiko #if FUNC_REG_ARG_CNT > 3
40bc72742bSAndrii Nakryiko 	       , int arg4
41bc72742bSAndrii Nakryiko #endif
42bc72742bSAndrii Nakryiko #if FUNC_REG_ARG_CNT > 4
43bc72742bSAndrii Nakryiko 	       , int arg5
44bc72742bSAndrii Nakryiko #endif
45bc72742bSAndrii Nakryiko #if FUNC_REG_ARG_CNT > 5
46bc72742bSAndrii Nakryiko 	       , int arg6
47bc72742bSAndrii Nakryiko #endif
48bc72742bSAndrii Nakryiko #if FUNC_REG_ARG_CNT > 6
49bc72742bSAndrii Nakryiko 	       , int arg7
50bc72742bSAndrii Nakryiko #endif
51bc72742bSAndrii Nakryiko #if FUNC_REG_ARG_CNT > 7
52bc72742bSAndrii Nakryiko 	       , int arg8
53bc72742bSAndrii Nakryiko #endif
54bc72742bSAndrii Nakryiko )
55579c3196SAlan Maguire {
561717e248SAlan Maguire 	uprobe_byname_parm1 = PT_REGS_PARM1_CORE(ctx);
571717e248SAlan Maguire 	uprobe_byname_ran = 1;
58bc72742bSAndrii Nakryiko 
59bc72742bSAndrii Nakryiko 	a[0] = arg1;
60bc72742bSAndrii Nakryiko 	a[1] = arg2;
61bc72742bSAndrii Nakryiko 	a[2] = arg3;
62bc72742bSAndrii Nakryiko #if FUNC_REG_ARG_CNT > 3
63bc72742bSAndrii Nakryiko 	a[3] = arg4;
64bc72742bSAndrii Nakryiko #endif
65bc72742bSAndrii Nakryiko #if FUNC_REG_ARG_CNT > 4
66bc72742bSAndrii Nakryiko 	a[4] = arg5;
67bc72742bSAndrii Nakryiko #endif
68bc72742bSAndrii Nakryiko #if FUNC_REG_ARG_CNT > 5
69bc72742bSAndrii Nakryiko 	a[5] = arg6;
70bc72742bSAndrii Nakryiko #endif
71bc72742bSAndrii Nakryiko #if FUNC_REG_ARG_CNT > 6
72bc72742bSAndrii Nakryiko 	a[6] = arg7;
73bc72742bSAndrii Nakryiko #endif
74bc72742bSAndrii Nakryiko #if FUNC_REG_ARG_CNT > 7
75bc72742bSAndrii Nakryiko 	a[7] = arg8;
76bc72742bSAndrii Nakryiko #endif
77579c3196SAlan Maguire 	return 0;
78579c3196SAlan Maguire }
79579c3196SAlan Maguire 
80579c3196SAlan Maguire SEC("uretprobe//proc/self/exe:autoattach_trigger_func")
BPF_URETPROBE(handle_uretprobe_byname,int ret)81bc72742bSAndrii Nakryiko int BPF_URETPROBE(handle_uretprobe_byname, int ret)
82579c3196SAlan Maguire {
831717e248SAlan Maguire 	uretprobe_byname_rc = PT_REGS_RC_CORE(ctx);
84bc72742bSAndrii Nakryiko 	uretprobe_byname_ret = ret;
851717e248SAlan Maguire 	uretprobe_byname_ran = 2;
86bc72742bSAndrii Nakryiko 
87579c3196SAlan Maguire 	return 0;
88579c3196SAlan Maguire }
89579c3196SAlan Maguire 
90579c3196SAlan Maguire 
91*907300c7SIlya Leoshkevich SEC("uprobe/libc.so.6:fopen")
BPF_UPROBE(handle_uprobe_byname2,const char * pathname,const char * mode)92*907300c7SIlya Leoshkevich int BPF_UPROBE(handle_uprobe_byname2, const char *pathname, const char *mode)
93579c3196SAlan Maguire {
941717e248SAlan Maguire 	int pid = bpf_get_current_pid_tgid() >> 32;
951717e248SAlan Maguire 
961717e248SAlan Maguire 	/* ignore irrelevant invocations */
971717e248SAlan Maguire 	if (test_pid != pid)
981717e248SAlan Maguire 		return 0;
99*907300c7SIlya Leoshkevich 	uprobe_byname2_parm1 = (u64)(long)pathname;
1001717e248SAlan Maguire 	uprobe_byname2_ran = 3;
101579c3196SAlan Maguire 	return 0;
102579c3196SAlan Maguire }
103579c3196SAlan Maguire 
104*907300c7SIlya Leoshkevich SEC("uretprobe/libc.so.6:fopen")
BPF_URETPROBE(handle_uretprobe_byname2,void * ret)105*907300c7SIlya Leoshkevich int BPF_URETPROBE(handle_uretprobe_byname2, void *ret)
106579c3196SAlan Maguire {
1071717e248SAlan Maguire 	int pid = bpf_get_current_pid_tgid() >> 32;
1081717e248SAlan Maguire 
1091717e248SAlan Maguire 	/* ignore irrelevant invocations */
1101717e248SAlan Maguire 	if (test_pid != pid)
1111717e248SAlan Maguire 		return 0;
112*907300c7SIlya Leoshkevich 	uretprobe_byname2_rc = (u64)(long)ret;
1131717e248SAlan Maguire 	uretprobe_byname2_ran = 4;
114579c3196SAlan Maguire 	return 0;
115579c3196SAlan Maguire }
116579c3196SAlan Maguire 
117579c3196SAlan Maguire char _license[] SEC("license") = "GPL";
118