1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | // SPDX-License-Identifier: GPL-2.0 #include <vmlinux.h> #include <bpf/bpf_tracing.h> #include "bpf_misc.h" #include "../test_kmods/bpf_testmod.h" #include "../test_kmods/bpf_testmod_kfunc.h" char _license[] SEC("license") = "GPL"; int test_pid; /* Programs associated with st_ops_map_a */ #define MAP_A_MAGIC 1234 int test_err_a; SEC("struct_ops") int BPF_PROG(test_1_a, struct st_ops_args *args) { return MAP_A_MAGIC; } SEC("tp_btf/sys_enter") int BPF_PROG(sys_enter_prog_a, struct pt_regs *regs, long id) { struct st_ops_args args = {}; struct task_struct *task; int ret; task = bpf_get_current_task_btf(); if (!test_pid || task->pid != test_pid) return 0; ret = bpf_kfunc_multi_st_ops_test_1_assoc(&args); if (ret != MAP_A_MAGIC) test_err_a++; return 0; } SEC("syscall") int syscall_prog_a(void *ctx) { struct st_ops_args args = {}; int ret; ret = bpf_kfunc_multi_st_ops_test_1_assoc(&args); if (ret != MAP_A_MAGIC) test_err_a++; return 0; } SEC(".struct_ops.link") struct bpf_testmod_multi_st_ops st_ops_map_a = { .test_1 = (void *)test_1_a, }; /* Programs associated with st_ops_map_b */ #define MAP_B_MAGIC 5678 int test_err_b; SEC("struct_ops") int BPF_PROG(test_1_b, struct st_ops_args *args) { return MAP_B_MAGIC; } SEC("tp_btf/sys_enter") int BPF_PROG(sys_enter_prog_b, struct pt_regs *regs, long id) { struct st_ops_args args = {}; struct task_struct *task; int ret; task = bpf_get_current_task_btf(); if (!test_pid || task->pid != test_pid) return 0; ret = bpf_kfunc_multi_st_ops_test_1_assoc(&args); if (ret != MAP_B_MAGIC) test_err_b++; return 0; } SEC("syscall") int syscall_prog_b(void *ctx) { struct st_ops_args args = {}; int ret; ret = bpf_kfunc_multi_st_ops_test_1_assoc(&args); if (ret != MAP_B_MAGIC) test_err_b++; return 0; } SEC(".struct_ops.link") struct bpf_testmod_multi_st_ops st_ops_map_b = { .test_1 = (void *)test_1_b, }; |