1// SPDX-License-Identifier: GPL-2.0 2#include <linux/bpf.h> 3#include <bpf/bpf_helpers.h> 4#include <bpf/bpf_tracing.h> 5#include <stdbool.h> 6#include "bpf_kfuncs.h" 7 8char _license[] SEC("license") = "GPL"; 9 10int pid = 0; 11 12__u64 test_kprobe_1_result = 0; 13__u64 test_kprobe_2_result = 0; 14__u64 test_kprobe_3_result = 0; 15 16/* 17 * No tests in here, just to trigger 'bpf_fentry_test*' 18 * through tracing test_run 19 */ 20SEC("fentry/bpf_modify_return_test") 21int BPF_PROG(trigger) 22{ 23 return 0; 24} 25 26static int check_cookie(__u64 val, __u64 *result) 27{ 28 long *cookie; 29 30 if (bpf_get_current_pid_tgid() >> 32 != pid) 31 return 1; 32 33 cookie = bpf_session_cookie(); 34 35 if (bpf_session_is_return()) 36 *result = *cookie == val ? val : 0; 37 else 38 *cookie = val; 39 return 0; 40} 41 42SEC("kprobe.session/bpf_fentry_test1") 43int test_kprobe_1(struct pt_regs *ctx) 44{ 45 return check_cookie(1, &test_kprobe_1_result); 46} 47 48SEC("kprobe.session/bpf_fentry_test1") 49int test_kprobe_2(struct pt_regs *ctx) 50{ 51 return check_cookie(2, &test_kprobe_2_result); 52} 53 54SEC("kprobe.session/bpf_fentry_test1") 55int test_kprobe_3(struct pt_regs *ctx) 56{ 57 return check_cookie(3, &test_kprobe_3_result); 58} 59