Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.15.
 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#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 to
53	 * install and execute the return probe
54	 */
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_run
67 */
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}