+++ /dev/null
-From 265e24f101bcbe1b11579d24363f7bb3b8f6f81c Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Wed, 15 Feb 2023 20:59:54 -0800
-Subject: selftests/bpf: Add global subprog context passing tests
-
-From: Andrii Nakryiko <andrii@kernel.org>
-
-[ Upstream commit e2b5cfc978f871996d1f8667515c0e06b33e620e ]
-
-Add tests validating that it's possible to pass context arguments into
-global subprogs for various types of programs, including a particularly
-tricky KPROBE programs (which cover kprobes, uprobes, USDTs, a vast and
-important class of programs).
-
-Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
-Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
-Acked-by: Stanislav Fomichev <sdf@google.com>
-Link: https://lore.kernel.org/bpf/20230216045954.3002473-4-andrii@kernel.org
-Stable-dep-of: 879bbe7aa4af ("bpf: don't infer PTR_TO_CTX for programs with unnamed context type")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- .../bpf/prog_tests/test_global_funcs.c | 2 +
- .../bpf/progs/test_global_func_ctx_args.c | 104 ++++++++++++++++++
- 2 files changed, 106 insertions(+)
- create mode 100644 tools/testing/selftests/bpf/progs/test_global_func_ctx_args.c
-
-diff --git a/tools/testing/selftests/bpf/prog_tests/test_global_funcs.c b/tools/testing/selftests/bpf/prog_tests/test_global_funcs.c
-index 2ff4d5c7abfce..e0879df38639b 100644
---- a/tools/testing/selftests/bpf/prog_tests/test_global_funcs.c
-+++ b/tools/testing/selftests/bpf/prog_tests/test_global_funcs.c
-@@ -18,6 +18,7 @@
- #include "test_global_func15.skel.h"
- #include "test_global_func16.skel.h"
- #include "test_global_func17.skel.h"
-+#include "test_global_func_ctx_args.skel.h"
-
- void test_test_global_funcs(void)
- {
-@@ -38,4 +39,5 @@ void test_test_global_funcs(void)
- RUN_TESTS(test_global_func15);
- RUN_TESTS(test_global_func16);
- RUN_TESTS(test_global_func17);
-+ RUN_TESTS(test_global_func_ctx_args);
- }
-diff --git a/tools/testing/selftests/bpf/progs/test_global_func_ctx_args.c b/tools/testing/selftests/bpf/progs/test_global_func_ctx_args.c
-new file mode 100644
-index 0000000000000..7faa8eef0598b
---- /dev/null
-+++ b/tools/testing/selftests/bpf/progs/test_global_func_ctx_args.c
-@@ -0,0 +1,104 @@
-+// SPDX-License-Identifier: GPL-2.0
-+/* Copyright (c) 2023 Meta Platforms, Inc. and affiliates. */
-+#include "vmlinux.h"
-+#include <bpf/bpf_helpers.h>
-+#include <bpf/bpf_tracing.h>
-+#include <bpf/bpf_core_read.h>
-+#include "bpf_misc.h"
-+
-+char _license[] SEC("license") = "GPL";
-+
-+static long stack[256];
-+
-+/*
-+ * KPROBE contexts
-+ */
-+
-+__weak int kprobe_typedef_ctx_subprog(bpf_user_pt_regs_t *ctx)
-+{
-+ return bpf_get_stack(ctx, &stack, sizeof(stack), 0);
-+}
-+
-+SEC("?kprobe")
-+__success
-+int kprobe_typedef_ctx(void *ctx)
-+{
-+ return kprobe_typedef_ctx_subprog(ctx);
-+}
-+
-+#define pt_regs_struct_t typeof(*(__PT_REGS_CAST((struct pt_regs *)NULL)))
-+
-+__weak int kprobe_struct_ctx_subprog(pt_regs_struct_t *ctx)
-+{
-+ return bpf_get_stack((void *)ctx, &stack, sizeof(stack), 0);
-+}
-+
-+SEC("?kprobe")
-+__success
-+int kprobe_resolved_ctx(void *ctx)
-+{
-+ return kprobe_struct_ctx_subprog(ctx);
-+}
-+
-+/* this is current hack to make this work on old kernels */
-+struct bpf_user_pt_regs_t {};
-+
-+__weak int kprobe_workaround_ctx_subprog(struct bpf_user_pt_regs_t *ctx)
-+{
-+ return bpf_get_stack(ctx, &stack, sizeof(stack), 0);
-+}
-+
-+SEC("?kprobe")
-+__success
-+int kprobe_workaround_ctx(void *ctx)
-+{
-+ return kprobe_workaround_ctx_subprog(ctx);
-+}
-+
-+/*
-+ * RAW_TRACEPOINT contexts
-+ */
-+
-+__weak int raw_tp_ctx_subprog(struct bpf_raw_tracepoint_args *ctx)
-+{
-+ return bpf_get_stack(ctx, &stack, sizeof(stack), 0);
-+}
-+
-+SEC("?raw_tp")
-+__success
-+int raw_tp_ctx(void *ctx)
-+{
-+ return raw_tp_ctx_subprog(ctx);
-+}
-+
-+/*
-+ * RAW_TRACEPOINT_WRITABLE contexts
-+ */
-+
-+__weak int raw_tp_writable_ctx_subprog(struct bpf_raw_tracepoint_args *ctx)
-+{
-+ return bpf_get_stack(ctx, &stack, sizeof(stack), 0);
-+}
-+
-+SEC("?raw_tp")
-+__success
-+int raw_tp_writable_ctx(void *ctx)
-+{
-+ return raw_tp_writable_ctx_subprog(ctx);
-+}
-+
-+/*
-+ * PERF_EVENT contexts
-+ */
-+
-+__weak int perf_event_ctx_subprog(struct bpf_perf_event_data *ctx)
-+{
-+ return bpf_get_stack(ctx, &stack, sizeof(stack), 0);
-+}
-+
-+SEC("?perf_event")
-+__success
-+int perf_event_ctx(void *ctx)
-+{
-+ return perf_event_ctx_subprog(ctx);
-+}
---
-2.43.0
-