11e38abefSAndrii Nakryiko // SPDX-License-Identifier: GPL-2.0
21e38abefSAndrii Nakryiko /* Copyright (c) 2020 Facebook */
31e38abefSAndrii Nakryiko 
41e38abefSAndrii Nakryiko #include "vmlinux.h"
51e38abefSAndrii Nakryiko #include <bpf/bpf_helpers.h>
61e38abefSAndrii Nakryiko #include <bpf/bpf_tracing.h>
71e38abefSAndrii Nakryiko #include <bpf/bpf_core_read.h>
81e38abefSAndrii Nakryiko #include "../bpf_testmod/bpf_testmod.h"
91e38abefSAndrii Nakryiko 
101e38abefSAndrii Nakryiko __u32 raw_tp_read_sz = 0;
111e38abefSAndrii Nakryiko 
121e38abefSAndrii Nakryiko SEC("raw_tp/bpf_testmod_test_read")
BPF_PROG(handle_raw_tp,struct task_struct * task,struct bpf_testmod_test_read_ctx * read_ctx)131e38abefSAndrii Nakryiko int BPF_PROG(handle_raw_tp,
141e38abefSAndrii Nakryiko 	     struct task_struct *task, struct bpf_testmod_test_read_ctx *read_ctx)
151e38abefSAndrii Nakryiko {
161e38abefSAndrii Nakryiko 	raw_tp_read_sz = BPF_CORE_READ(read_ctx, len);
171e38abefSAndrii Nakryiko 	return 0;
181e38abefSAndrii Nakryiko }
191e38abefSAndrii Nakryiko 
20407be922SQais Yousef __u32 raw_tp_bare_write_sz = 0;
21407be922SQais Yousef 
22407be922SQais Yousef SEC("raw_tp/bpf_testmod_test_write_bare")
BPF_PROG(handle_raw_tp_bare,struct task_struct * task,struct bpf_testmod_test_write_ctx * write_ctx)23407be922SQais Yousef int BPF_PROG(handle_raw_tp_bare,
24407be922SQais Yousef 	     struct task_struct *task, struct bpf_testmod_test_write_ctx *write_ctx)
25407be922SQais Yousef {
26407be922SQais Yousef 	raw_tp_bare_write_sz = BPF_CORE_READ(write_ctx, len);
27407be922SQais Yousef 	return 0;
28407be922SQais Yousef }
29407be922SQais Yousef 
30fa7f17d0SHou Tao int raw_tp_writable_bare_in_val = 0;
31fa7f17d0SHou Tao int raw_tp_writable_bare_early_ret = 0;
32fa7f17d0SHou Tao int raw_tp_writable_bare_out_val = 0;
33fa7f17d0SHou Tao 
34fa7f17d0SHou Tao SEC("raw_tp.w/bpf_testmod_test_writable_bare")
BPF_PROG(handle_raw_tp_writable_bare,struct bpf_testmod_test_writable_ctx * writable)35fa7f17d0SHou Tao int BPF_PROG(handle_raw_tp_writable_bare,
36fa7f17d0SHou Tao 	     struct bpf_testmod_test_writable_ctx *writable)
37fa7f17d0SHou Tao {
38fa7f17d0SHou Tao 	raw_tp_writable_bare_in_val = writable->val;
39fa7f17d0SHou Tao 	writable->early_ret = raw_tp_writable_bare_early_ret;
40fa7f17d0SHou Tao 	writable->val = raw_tp_writable_bare_out_val;
41fa7f17d0SHou Tao 	return 0;
42fa7f17d0SHou Tao }
43fa7f17d0SHou Tao 
441e38abefSAndrii Nakryiko __u32 tp_btf_read_sz = 0;
451e38abefSAndrii Nakryiko 
461e38abefSAndrii Nakryiko SEC("tp_btf/bpf_testmod_test_read")
BPF_PROG(handle_tp_btf,struct task_struct * task,struct bpf_testmod_test_read_ctx * read_ctx)471e38abefSAndrii Nakryiko int BPF_PROG(handle_tp_btf,
481e38abefSAndrii Nakryiko 	     struct task_struct *task, struct bpf_testmod_test_read_ctx *read_ctx)
491e38abefSAndrii Nakryiko {
501e38abefSAndrii Nakryiko 	tp_btf_read_sz = read_ctx->len;
511e38abefSAndrii Nakryiko 	return 0;
521e38abefSAndrii Nakryiko }
531e38abefSAndrii Nakryiko 
541e38abefSAndrii Nakryiko __u32 fentry_read_sz = 0;
551e38abefSAndrii Nakryiko 
561e38abefSAndrii Nakryiko SEC("fentry/bpf_testmod_test_read")
BPF_PROG(handle_fentry,struct file * file,struct kobject * kobj,struct bin_attribute * bin_attr,char * buf,loff_t off,size_t len)571e38abefSAndrii Nakryiko int BPF_PROG(handle_fentry,
581e38abefSAndrii Nakryiko 	     struct file *file, struct kobject *kobj,
591e38abefSAndrii Nakryiko 	     struct bin_attribute *bin_attr, char *buf, loff_t off, size_t len)
601e38abefSAndrii Nakryiko {
611e38abefSAndrii Nakryiko 	fentry_read_sz = len;
621e38abefSAndrii Nakryiko 	return 0;
631e38abefSAndrii Nakryiko }
641e38abefSAndrii Nakryiko 
652e33f831SAndrii Nakryiko __u32 fentry_manual_read_sz = 0;
662e33f831SAndrii Nakryiko 
6732c03c49SAndrii Nakryiko SEC("fentry")
BPF_PROG(handle_fentry_manual,struct file * file,struct kobject * kobj,struct bin_attribute * bin_attr,char * buf,loff_t off,size_t len)682e33f831SAndrii Nakryiko int BPF_PROG(handle_fentry_manual,
692e33f831SAndrii Nakryiko 	     struct file *file, struct kobject *kobj,
702e33f831SAndrii Nakryiko 	     struct bin_attribute *bin_attr, char *buf, loff_t off, size_t len)
712e33f831SAndrii Nakryiko {
722e33f831SAndrii Nakryiko 	fentry_manual_read_sz = len;
732e33f831SAndrii Nakryiko 	return 0;
742e33f831SAndrii Nakryiko }
752e33f831SAndrii Nakryiko 
761e38abefSAndrii Nakryiko __u32 fexit_read_sz = 0;
771e38abefSAndrii Nakryiko int fexit_ret = 0;
781e38abefSAndrii Nakryiko 
791e38abefSAndrii Nakryiko SEC("fexit/bpf_testmod_test_read")
BPF_PROG(handle_fexit,struct file * file,struct kobject * kobj,struct bin_attribute * bin_attr,char * buf,loff_t off,size_t len,int ret)801e38abefSAndrii Nakryiko int BPF_PROG(handle_fexit,
811e38abefSAndrii Nakryiko 	     struct file *file, struct kobject *kobj,
821e38abefSAndrii Nakryiko 	     struct bin_attribute *bin_attr, char *buf, loff_t off, size_t len,
831e38abefSAndrii Nakryiko 	     int ret)
841e38abefSAndrii Nakryiko {
851e38abefSAndrii Nakryiko 	fexit_read_sz = len;
861e38abefSAndrii Nakryiko 	fexit_ret = ret;
871e38abefSAndrii Nakryiko 	return 0;
881e38abefSAndrii Nakryiko }
891e38abefSAndrii Nakryiko 
907edc3fcbSAlexei Starovoitov SEC("fexit/bpf_testmod_return_ptr")
BPF_PROG(handle_fexit_ret,int arg,struct file * ret)917edc3fcbSAlexei Starovoitov int BPF_PROG(handle_fexit_ret, int arg, struct file *ret)
927edc3fcbSAlexei Starovoitov {
937edc3fcbSAlexei Starovoitov 	long buf = 0;
947edc3fcbSAlexei Starovoitov 
957edc3fcbSAlexei Starovoitov 	bpf_probe_read_kernel(&buf, 8, ret);
967edc3fcbSAlexei Starovoitov 	bpf_probe_read_kernel(&buf, 8, (char *)ret + 256);
977edc3fcbSAlexei Starovoitov 	*(volatile long long *)ret;
987edc3fcbSAlexei Starovoitov 	*(volatile int *)&ret->f_mode;
997edc3fcbSAlexei Starovoitov 	return 0;
1007edc3fcbSAlexei Starovoitov }
1017edc3fcbSAlexei Starovoitov 
1021e38abefSAndrii Nakryiko __u32 fmod_ret_read_sz = 0;
1031e38abefSAndrii Nakryiko 
1041e38abefSAndrii Nakryiko SEC("fmod_ret/bpf_testmod_test_read")
BPF_PROG(handle_fmod_ret,struct file * file,struct kobject * kobj,struct bin_attribute * bin_attr,char * buf,loff_t off,size_t len)1051e38abefSAndrii Nakryiko int BPF_PROG(handle_fmod_ret,
1061e38abefSAndrii Nakryiko 	     struct file *file, struct kobject *kobj,
1071e38abefSAndrii Nakryiko 	     struct bin_attribute *bin_attr, char *buf, loff_t off, size_t len)
1081e38abefSAndrii Nakryiko {
1091e38abefSAndrii Nakryiko 	fmod_ret_read_sz = len;
1101e38abefSAndrii Nakryiko 	return 0; /* don't override the exit code */
1111e38abefSAndrii Nakryiko }
1121e38abefSAndrii Nakryiko 
113*e697d8dcSJiri Olsa SEC("kprobe.multi/bpf_testmod_test_read")
BPF_PROG(kprobe_multi)114*e697d8dcSJiri Olsa int BPF_PROG(kprobe_multi)
115*e697d8dcSJiri Olsa {
116*e697d8dcSJiri Olsa 	return 0;
117*e697d8dcSJiri Olsa }
118*e697d8dcSJiri Olsa 
1191e38abefSAndrii Nakryiko char _license[] SEC("license") = "GPL";
120