brintos

brintos / linux-shallow public Read only

0
0
Text · 1.7 KiB · bd8b7fb Raw
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