1 // SPDX-License-Identifier: GPL-2.0
2 /* Copyright (c) 2020 Facebook */
3 
4 #include "vmlinux.h"
5 #include <bpf/bpf_helpers.h>
6 #include <bpf/bpf_tracing.h>
7 #include <bpf/bpf_core_read.h>
8 #include "../bpf_testmod/bpf_testmod.h"
9 
10 __u32 raw_tp_read_sz = 0;
11 
12 SEC("raw_tp/bpf_testmod_test_read")
13 int BPF_PROG(handle_raw_tp,
14 	     struct task_struct *task, struct bpf_testmod_test_read_ctx *read_ctx)
15 {
16 	raw_tp_read_sz = BPF_CORE_READ(read_ctx, len);
17 	return 0;
18 }
19 
20 __u32 tp_btf_read_sz = 0;
21 
22 SEC("tp_btf/bpf_testmod_test_read")
23 int BPF_PROG(handle_tp_btf,
24 	     struct task_struct *task, struct bpf_testmod_test_read_ctx *read_ctx)
25 {
26 	tp_btf_read_sz = read_ctx->len;
27 	return 0;
28 }
29 
30 __u32 fentry_read_sz = 0;
31 
32 SEC("fentry/bpf_testmod_test_read")
33 int BPF_PROG(handle_fentry,
34 	     struct file *file, struct kobject *kobj,
35 	     struct bin_attribute *bin_attr, char *buf, loff_t off, size_t len)
36 {
37 	fentry_read_sz = len;
38 	return 0;
39 }
40 
41 __u32 fentry_manual_read_sz = 0;
42 
43 SEC("fentry/placeholder")
44 int BPF_PROG(handle_fentry_manual,
45 	     struct file *file, struct kobject *kobj,
46 	     struct bin_attribute *bin_attr, char *buf, loff_t off, size_t len)
47 {
48 	fentry_manual_read_sz = len;
49 	return 0;
50 }
51 
52 __u32 fexit_read_sz = 0;
53 int fexit_ret = 0;
54 
55 SEC("fexit/bpf_testmod_test_read")
56 int BPF_PROG(handle_fexit,
57 	     struct file *file, struct kobject *kobj,
58 	     struct bin_attribute *bin_attr, char *buf, loff_t off, size_t len,
59 	     int ret)
60 {
61 	fexit_read_sz = len;
62 	fexit_ret = ret;
63 	return 0;
64 }
65 
66 __u32 fmod_ret_read_sz = 0;
67 
68 SEC("fmod_ret/bpf_testmod_test_read")
69 int BPF_PROG(handle_fmod_ret,
70 	     struct file *file, struct kobject *kobj,
71 	     struct bin_attribute *bin_attr, char *buf, loff_t off, size_t len)
72 {
73 	fmod_ret_read_sz = len;
74 	return 0; /* don't override the exit code */
75 }
76 
77 char _license[] SEC("license") = "GPL";
78