79 lines · c
1// SPDX-License-Identifier: GPL-2.02#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#include "bpf_misc.h"8 9char _license[] SEC("license") = "GPL";10 11extern const void bpf_fentry_test1 __ksym;12extern const void bpf_fentry_test2 __ksym;13extern const void bpf_fentry_test3 __ksym;14extern const void bpf_fentry_test4 __ksym;15extern const void bpf_fentry_test5 __ksym;16extern const void bpf_fentry_test6 __ksym;17extern const void bpf_fentry_test7 __ksym;18extern const void bpf_fentry_test8 __ksym;19 20int pid = 0;21 22__u64 kprobe_session_result[8];23 24static int session_check(void *ctx)25{26 unsigned int i;27 __u64 addr;28 const void *kfuncs[] = {29 &bpf_fentry_test1,30 &bpf_fentry_test2,31 &bpf_fentry_test3,32 &bpf_fentry_test4,33 &bpf_fentry_test5,34 &bpf_fentry_test6,35 &bpf_fentry_test7,36 &bpf_fentry_test8,37 };38 39 if (bpf_get_current_pid_tgid() >> 32 != pid)40 return 1;41 42 addr = bpf_get_func_ip(ctx);43 44 for (i = 0; i < ARRAY_SIZE(kfuncs); i++) {45 if (kfuncs[i] == (void *) addr) {46 kprobe_session_result[i]++;47 break;48 }49 }50 51 /*52 * Force probes for function bpf_fentry_test[5-8] not to53 * install and execute the return probe54 */55 if (((const void *) addr == &bpf_fentry_test5) ||56 ((const void *) addr == &bpf_fentry_test6) ||57 ((const void *) addr == &bpf_fentry_test7) ||58 ((const void *) addr == &bpf_fentry_test8))59 return 1;60 61 return 0;62}63 64/*65 * No tests in here, just to trigger 'bpf_fentry_test*'66 * through tracing test_run67 */68SEC("fentry/bpf_modify_return_test")69int BPF_PROG(trigger)70{71 return 0;72}73 74SEC("kprobe.session/bpf_fentry_test*")75int test_kprobe(struct pt_regs *ctx)76{77 return session_check(ctx);78}79