aboutsummaryrefslogtreecommitdiffstats
path: root/tools/testing/selftests/bpf/progs/struct_ops_autocreate2.c
diff options
context:
space:
mode:
authorEduard Zingerman <[email protected]>2024-03-06 10:45:23 +0000
committerAndrii Nakryiko <[email protected]>2024-03-06 23:18:15 +0000
commit651d49f15b2a84b3bcfe950fa99c3672b9619dbd (patch)
treeeea5bdf4b6fe6d7b31445339fba8e799bf8ad623 /tools/testing/selftests/bpf/progs/struct_ops_autocreate2.c
parentlibbpf: Sync progs autoload with maps autocreate for struct_ops maps (diff)
downloadkernel-651d49f15b2a84b3bcfe950fa99c3672b9619dbd.tar.gz
kernel-651d49f15b2a84b3bcfe950fa99c3672b9619dbd.zip
selftests/bpf: Verify struct_ops autoload/autocreate sync
Check that autocreate flags of struct_ops map cause autoload of struct_ops corresponding programs: - when struct_ops program is referenced only from a map for which autocreate is set to false, that program should not be loaded; - when struct_ops program with autoload == false is set to be used from a map with autocreate == true using shadow var, that program should be loaded; - when struct_ops program is not referenced from any map object load should fail. Signed-off-by: Eduard Zingerman <[email protected]> Signed-off-by: Andrii Nakryiko <[email protected]> Link: https://lore.kernel.org/bpf/[email protected]
Diffstat (limited to 'tools/testing/selftests/bpf/progs/struct_ops_autocreate2.c')
-rw-r--r--tools/testing/selftests/bpf/progs/struct_ops_autocreate2.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/tools/testing/selftests/bpf/progs/struct_ops_autocreate2.c b/tools/testing/selftests/bpf/progs/struct_ops_autocreate2.c
new file mode 100644
index 000000000000..6049d9c902d3
--- /dev/null
+++ b/tools/testing/selftests/bpf/progs/struct_ops_autocreate2.c
@@ -0,0 +1,32 @@
+// SPDX-License-Identifier: GPL-2.0
+
+#include <linux/bpf.h>
+#include <bpf/bpf_helpers.h>
+#include <bpf/bpf_tracing.h>
+
+char _license[] SEC("license") = "GPL";
+
+int test_1_result = 0;
+
+SEC("?struct_ops/test_1")
+int BPF_PROG(foo)
+{
+ test_1_result = 42;
+ return 0;
+}
+
+SEC("?struct_ops/test_1")
+int BPF_PROG(bar)
+{
+ test_1_result = 24;
+ return 0;
+}
+
+struct bpf_testmod_ops {
+ int (*test_1)(void);
+};
+
+SEC(".struct_ops.link")
+struct bpf_testmod_ops testmod_1 = {
+ .test_1 = (void *)bar
+};