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