AI Trajectory


Trajectory: (Expand/Collapse All)
Seq Timestamp Type Name Duration
0/0 2026/08/31 09:27 flow patch-triage
0m Args:
null

Results:
{
  "EnableConfigs": null,
  "FocusSymbols": [],
  "KMSANReasoning": "",
  "NeedsKMSAN": false,
  "Reasoning": "The patch only adds and modifies test cases and test kernel module definitions within tools/testing/selftests/bpf/, with no functional modifications to the core Linux kernel.",
  "WorthFuzzing": false
}

1/1 2026/08/31 09:27 action read-patch-diff
0m Args:
null

Results:
{
  "PatchDiff": "commit e1f6ea7715d8435fdf70660b9a66667c6856375d\nAuthor: syz-cluster \u003ctriage@syzkaller.com\u003e\nDate:   Mon Aug 31 09:27:47 2026 +0000\n\n    syz-cluster: applied patch under review\n\ndiff --git a/tools/testing/selftests/bpf/prog_tests/test_struct_ops_multi_args.c b/tools/testing/selftests/bpf/prog_tests/test_struct_ops_multi_args.c\nindex 0f321e8898620..7f6f9d61c9e07 100644\n--- a/tools/testing/selftests/bpf/prog_tests/test_struct_ops_multi_args.c\n+++ b/tools/testing/selftests/bpf/prog_tests/test_struct_ops_multi_args.c\n@@ -3,7 +3,54 @@\n #include \u003ctest_progs.h\u003e\n #include \"struct_ops_multi_args.skel.h\"\n \n+static void test_refcounted_multi(void)\n+{\n+\tstruct struct_ops_multi_args *skel;\n+\tint err;\n+\n+\tskel = struct_ops_multi_args__open();\n+\tif (!ASSERT_OK_PTR(skel, \"struct_ops_multi_args__open\"))\n+\t\treturn;\n+\n+\terr = struct_ops_multi_args__load(skel);\n+\tASSERT_EQ(err, -EINVAL, \"struct_ops_multi_args__load\");\n+\n+\tstruct_ops_multi_args__destroy(skel);\n+}\n+\n+static void test_trampoline_stack_args(void)\n+{\n+\tstruct struct_ops_multi_args *skel;\n+\tstruct bpf_link *link = NULL;\n+\tint err;\n+\n+\tskel = struct_ops_multi_args__open();\n+\tif (!ASSERT_OK_PTR(skel, \"struct_ops_multi_args__open\"))\n+\t\treturn;\n+\n+\tbpf_program__set_autoload(skel-\u003eprogs.test_refcounted_multi, false);\n+\tskel-\u003estruct_ops.testmod_ref_acquire-\u003etest_refcounted_multi = NULL;\n+\n+\terr = struct_ops_multi_args__load(skel);\n+\tif (!ASSERT_OK(err, \"struct_ops_multi_args__load\"))\n+\t\tgoto out;\n+\n+\tlink = bpf_map__attach_struct_ops(skel-\u003emaps.testmod_ref_acquire);\n+\tif (!ASSERT_OK_PTR(link, \"bpf_map__attach_struct_ops\"))\n+\t\tgoto out;\n+\n+\tASSERT_EQ(skel-\u003ebss-\u003egot_arg9, 9999, \"check_stack_passed_arg9\");\n+\n+out:\n+\tbpf_link__destroy(link);\n+\tstruct_ops_multi_args__destroy(skel);\n+}\n+\n void test_struct_ops_multi_args(void)\n {\n-\tRUN_TESTS(struct_ops_multi_args);\n+\tif (test__start_subtest(\"test_refcounted_multi\"))\n+\t\ttest_refcounted_multi();\n+\n+\tif (test__start_subtest(\"test_trampoline_stack_args\"))\n+\t\ttest_trampoline_stack_args();\n }\ndiff --git a/tools/testing/selftests/bpf/progs/struct_ops_multi_args.c b/tools/testing/selftests/bpf/progs/struct_ops_multi_args.c\nindex c62be15757f04..f0f47676b099a 100644\n--- a/tools/testing/selftests/bpf/progs/struct_ops_multi_args.c\n+++ b/tools/testing/selftests/bpf/progs/struct_ops_multi_args.c\n@@ -29,7 +29,20 @@ int test_refcounted_multi(unsigned long long *ctx)\n \treturn 0;\n }\n \n+__u64 got_arg9 = 0;\n+\n+SEC(\"struct_ops/test_trampoline_stack_args\")\n+int BPF_PROG(test_trampoline_stack_args, int arg1, int arg2, int arg3,\n+\t\t\t\t\t int arg4, int arg5, int arg6,\n+\t\t\t\t\t int arg7, int arg8, int arg9)\n+{\n+\tgot_arg9 = arg9;\n+\n+\treturn 0;\n+}\n+\n SEC(\".struct_ops.link\")\n struct bpf_testmod_ops testmod_ref_acquire = {\n \t.test_refcounted_multi = (void *)test_refcounted_multi,\n+\t.test_trampoline_stack_args = (void *)test_trampoline_stack_args,\n };\ndiff --git a/tools/testing/selftests/bpf/test_kmods/bpf_testmod.c b/tools/testing/selftests/bpf/test_kmods/bpf_testmod.c\nindex 2380b6cbdeadc..8f0744e6075b3 100644\n--- a/tools/testing/selftests/bpf/test_kmods/bpf_testmod.c\n+++ b/tools/testing/selftests/bpf/test_kmods/bpf_testmod.c\n@@ -1678,6 +1678,9 @@ static bool bpf_testmod_ops_is_valid_access(int off, int size,\n \treturn bpf_tracing_btf_ctx_access(off, size, type, prog, info);\n }\n \n+static DEFINE_MUTEX(st_ops_trampoline_mutex);\n+static struct bpf_testmod_ops *st_ops_trampoline;\n+\n static int bpf_testmod_ops_init_member(const struct btf_type *t,\n \t\t\t\t       const struct btf_member *member,\n \t\t\t\t       void *kdata, const void *udata)\n@@ -1691,6 +1694,18 @@ static int bpf_testmod_ops_init_member(const struct btf_type *t,\n \t\t((struct bpf_testmod_ops *)kdata)-\u003edata = ((struct bpf_testmod_ops *)udata)-\u003edata;\n \t\treturn 1;\n \t}\n+\n+\tif (member-\u003eoffset == offsetof(struct bpf_testmod_ops, test_trampoline_stack_args) * 8) {\n+\t\tmutex_lock(\u0026st_ops_trampoline_mutex);\n+\t\tif (st_ops_trampoline) {\n+\t\t\tpr_err(\"st_ops_trampoline has already been registered\\n\");\n+\t\t\tmutex_unlock(\u0026st_ops_trampoline_mutex);\n+\t\t\treturn -EEXIST;\n+\t\t}\n+\t\tst_ops_trampoline = (struct bpf_testmod_ops *)kdata;\n+\t\tmutex_unlock(\u0026st_ops_trampoline_mutex);\n+\t}\n+\n \treturn 0;\n }\n \n@@ -1720,11 +1735,20 @@ static int bpf_dummy_reg(void *kdata, struct bpf_link *link)\n \tif (ops-\u003etest_2)\n \t\tops-\u003etest_2(4, ops-\u003edata);\n \n+\tmutex_lock(\u0026st_ops_trampoline_mutex);\n+\tif (st_ops_trampoline \u0026\u0026 st_ops_trampoline-\u003etest_trampoline_stack_args)\n+\t\tst_ops_trampoline-\u003etest_trampoline_stack_args(1, 2, 3, 4, 5, 6, 7, 8, 9999);\n+\tmutex_unlock(\u0026st_ops_trampoline_mutex);\n+\n \treturn 0;\n }\n \n static void bpf_dummy_unreg(void *kdata, struct bpf_link *link)\n {\n+\tmutex_lock(\u0026st_ops_trampoline_mutex);\n+\tif (st_ops_trampoline == (struct bpf_testmod_ops *)kdata)\n+\t\tst_ops_trampoline = NULL;\n+\tmutex_unlock(\u0026st_ops_trampoline_mutex);\n }\n \n static int bpf_testmod_test_1(void)\n@@ -1766,6 +1790,13 @@ bpf_testmod_ops__test_return_ref_kptr(int dummy, struct task_struct *task__ref,\n \treturn NULL;\n }\n \n+static int bpf_testmod_ops__test_trampoline_stack_args(int arg1, int arg2, int arg3,\n+\t\t\t\t\t\t       int arg4, int arg5, int arg6,\n+\t\t\t\t\t\t       int arg7, int arg8, int arg9)\n+{\n+\treturn arg9;\n+}\n+\n static struct bpf_testmod_ops __bpf_testmod_ops = {\n \t.test_1 = bpf_testmod_test_1,\n \t.test_2 = bpf_testmod_test_2,\n@@ -1773,6 +1804,7 @@ static struct bpf_testmod_ops __bpf_testmod_ops = {\n \t.test_refcounted = bpf_testmod_ops__test_refcounted,\n \t.test_refcounted_multi = bpf_testmod_ops__test_refcounted_multi,\n \t.test_return_ref_kptr = bpf_testmod_ops__test_return_ref_kptr,\n+\t.test_trampoline_stack_args = bpf_testmod_ops__test_trampoline_stack_args,\n };\n \n struct bpf_struct_ops bpf_bpf_testmod_ops = {\ndiff --git a/tools/testing/selftests/bpf/test_kmods/bpf_testmod.h b/tools/testing/selftests/bpf/test_kmods/bpf_testmod.h\nindex 210b919290cc2..42257ae89fd5b 100644\n--- a/tools/testing/selftests/bpf/test_kmods/bpf_testmod.h\n+++ b/tools/testing/selftests/bpf/test_kmods/bpf_testmod.h\n@@ -46,6 +46,11 @@ struct bpf_testmod_ops {\n \tstruct task_struct *(*test_return_ref_kptr)(int dummy, struct task_struct *task,\n \t\t\t\t\t\t    struct cgroup *cgrp);\n \n+\t/* Used to test indirect struct_ops trampolines stack-passed arguments (\u003e8 args). */\n+\tint (*test_trampoline_stack_args)(int arg1, int arg2, int arg3,\n+\t\t\t\t\t  int arg4, int arg5, int arg6,\n+\t\t\t\t\t  int arg7, int arg8, int arg9);\n+\n \t/* The following fields are used to test shadow copies. */\n \tchar onebyte;\n \tstruct {\n"
}

2/1 2026/08/31 09:27 agent patch-evaluator
0m Model:
core

Args:
null

Results:
{
  "EnableConfigs": null,
  "FocusSymbols": [],
  "Reasoning": "The patch only adds and modifies test cases and test kernel module definitions within tools/testing/selftests/bpf/, with no functional modifications to the core Linux kernel.",
  "WorthFuzzing": false
}

Instruction:
You are an expert Linux kernel maintainer.
Your job is to review a provided patch series and determine
if it makes functional changes to the kernel that should be fuzzed.

IMPORTANT: The changes have ALREADY been applied and committed as the HEAD commit in
your workspace. Do NOT rely on your internal knowledge of the kernel. You must actively
use your code access tools to examine the actual source code and confirm any assumptions.

Return WorthFuzzing=false if the patch only contains:
- Modifications to Documentation/, Kconfig files, or code comments.
- Purely decorative changes, such as logging (e.g., pr_err, printk) or tracepoints.
- Changes to numeric constants or macros that do not functionally alter execution flow.
- Code paths that are impossible to reach in virtualized environments like GCE or QEMU,
  even when utilizing software-emulated hardware (e.g., usb gadget, mac80211_hwsim).
- Code in vendor-specific PCIe switch, SmartNIC, or GPU drivers (e.g., mlxsw, pds_core, qed,
  ionic, amdgpu) that require physical PCIe hardware cards not emulated in standard QEMU.
- Driver .remove, .shutdown, or pci_unregister_driver teardown callbacks (e.g., igb_remove)
  that are executed only during PCI hot-unplug or sysfs driver unbind operations.

If it modifies reachable core kernel logic, drivers, or architectures, use your code search
tools to verify the code can be executed, then return WorthFuzzing=true.

When returning WorthFuzzing=true, you MUST ALSO:
1. Extract any specific kernel functions that should be heavily fuzzed into FocusSymbols.
   Avoid listing generic hot-path functions to prevent skewed test distributions.
   Prefer non-static, non-inlined API entrypoint functions over internal static helper functions
   (which are inlined by the compiler and do not have distinct symbol addresses).
2. Identify any specific CONFIG_ options required to properly test this new/modified feature.
   Go and look into the Kconfig files and check for ifdefs around the code, do not make assumptions.
   Also check "depends on" lines in Kconfig to include any non-standard parent subsystem configs
   needed for Kbuild to compile the code statically into vmlinux. List them in the EnableConfigs
   output array, and DO NOT add a 'CONFIG_' prefix (e.g., return "NET_IPV4" instead of "CONFIG_NET_IPV4").
Prefer calling several tools at the same time to save round-trips.


Use set-results tool to provide results of the analysis.
It must be called exactly once before the final reply.
Ignore results of this tool.

Prompt:
For your convenience, here is the diff of the changes:
commit e1f6ea7715d8435fdf70660b9a66667c6856375d
Author: syz-cluster <triage@syzkaller.com>
Date:   Mon Aug 31 09:27:47 2026 +0000

    syz-cluster: applied patch under review

diff --git a/tools/testing/selftests/bpf/prog_tests/test_struct_ops_multi_args.c b/tools/testing/selftests/bpf/prog_tests/test_struct_ops_multi_args.c
index 0f321e8898620..7f6f9d61c9e07 100644
--- a/tools/testing/selftests/bpf/prog_tests/test_struct_ops_multi_args.c
+++ b/tools/testing/selftests/bpf/prog_tests/test_struct_ops_multi_args.c
@@ -3,7 +3,54 @@
 #include <test_progs.h>
 #include "struct_ops_multi_args.skel.h"
 
+static void test_refcounted_multi(void)
+{
+	struct struct_ops_multi_args *skel;
+	int err;
+
+	skel = struct_ops_multi_args__open();
+	if (!ASSERT_OK_PTR(skel, "struct_ops_multi_args__open"))
+		return;
+
+	err = struct_ops_multi_args__load(skel);
+	ASSERT_EQ(err, -EINVAL, "struct_ops_multi_args__load");
+
+	struct_ops_multi_args__destroy(skel);
+}
+
+static void test_trampoline_stack_args(void)
+{
+	struct struct_ops_multi_args *skel;
+	struct bpf_link *link = NULL;
+	int err;
+
+	skel = struct_ops_multi_args__open();
+	if (!ASSERT_OK_PTR(skel, "struct_ops_multi_args__open"))
+		return;
+
+	bpf_program__set_autoload(skel->progs.test_refcounted_multi, false);
+	skel->struct_ops.testmod_ref_acquire->test_refcounted_multi = NULL;
+
+	err = struct_ops_multi_args__load(skel);
+	if (!ASSERT_OK(err, "struct_ops_multi_args__load"))
+		goto out;
+
+	link = bpf_map__attach_struct_ops(skel->maps.testmod_ref_acquire);
+	if (!ASSERT_OK_PTR(link, "bpf_map__attach_struct_ops"))
+		goto out;
+
+	ASSERT_EQ(skel->bss->got_arg9, 9999, "check_stack_passed_arg9");
+
+out:
+	bpf_link__destroy(link);
+	struct_ops_multi_args__destroy(skel);
+}
+
 void test_struct_ops_multi_args(void)
 {
-	RUN_TESTS(struct_ops_multi_args);
+	if (test__start_subtest("test_refcounted_multi"))
+		test_refcounted_multi();
+
+	if (test__start_subtest("test_trampoline_stack_args"))
+		test_trampoline_stack_args();
 }
diff --git a/tools/testing/selftests/bpf/progs/struct_ops_multi_args.c b/tools/testing/selftests/bpf/progs/struct_ops_multi_args.c
index c62be15757f04..f0f47676b099a 100644
--- a/tools/testing/selftests/bpf/progs/struct_ops_multi_args.c
+++ b/tools/testing/selftests/bpf/progs/struct_ops_multi_args.c
@@ -29,7 +29,20 @@ int test_refcounted_multi(unsigned long long *ctx)
 	return 0;
 }
 
+__u64 got_arg9 = 0;
+
+SEC("struct_ops/test_trampoline_stack_args")
+int BPF_PROG(test_trampoline_stack_args, int arg1, int arg2, int arg3,
+					 int arg4, int arg5, int arg6,
+					 int arg7, int arg8, int arg9)
+{
+	got_arg9 = arg9;
+
+	return 0;
+}
+
 SEC(".struct_ops.link")
 struct bpf_testmod_ops testmod_ref_acquire = {
 	.test_refcounted_multi = (void *)test_refcounted_multi,
+	.test_trampoline_stack_args = (void *)test_trampoline_stack_args,
 };
diff --git a/tools/testing/selftests/bpf/test_kmods/bpf_testmod.c b/tools/testing/selftests/bpf/test_kmods/bpf_testmod.c
index 2380b6cbdeadc..8f0744e6075b3 100644
--- a/tools/testing/selftests/bpf/test_kmods/bpf_testmod.c
+++ b/tools/testing/selftests/bpf/test_kmods/bpf_testmod.c
@@ -1678,6 +1678,9 @@ static bool bpf_testmod_ops_is_valid_access(int off, int size,
 	return bpf_tracing_btf_ctx_access(off, size, type, prog, info);
 }
 
+static DEFINE_MUTEX(st_ops_trampoline_mutex);
+static struct bpf_testmod_ops *st_ops_trampoline;
+
 static int bpf_testmod_ops_init_member(const struct btf_type *t,
 				       const struct btf_member *member,
 				       void *kdata, const void *udata)
@@ -1691,6 +1694,18 @@ static int bpf_testmod_ops_init_member(const struct btf_type *t,
 		((struct bpf_testmod_ops *)kdata)->data = ((struct bpf_testmod_ops *)udata)->data;
 		return 1;
 	}
+
+	if (member->offset == offsetof(struct bpf_testmod_ops, test_trampoline_stack_args) * 8) {
+		mutex_lock(&st_ops_trampoline_mutex);
+		if (st_ops_trampoline) {
+			pr_err("st_ops_trampoline has already been registered\n");
+			mutex_unlock(&st_ops_trampoline_mutex);
+			return -EEXIST;
+		}
+		st_ops_trampoline = (struct bpf_testmod_ops *)kdata;
+		mutex_unlock(&st_ops_trampoline_mutex);
+	}
+
 	return 0;
 }
 
@@ -1720,11 +1735,20 @@ static int bpf_dummy_reg(void *kdata, struct bpf_link *link)
 	if (ops->test_2)
 		ops->test_2(4, ops->data);
 
+	mutex_lock(&st_ops_trampoline_mutex);
+	if (st_ops_trampoline && st_ops_trampoline->test_trampoline_stack_args)
+		st_ops_trampoline->test_trampoline_stack_args(1, 2, 3, 4, 5, 6, 7, 8, 9999);
+	mutex_unlock(&st_ops_trampoline_mutex);
+
 	return 0;
 }
 
 static void bpf_dummy_unreg(void *kdata, struct bpf_link *link)
 {
+	mutex_lock(&st_ops_trampoline_mutex);
+	if (st_ops_trampoline == (struct bpf_testmod_ops *)kdata)
+		st_ops_trampoline = NULL;
+	mutex_unlock(&st_ops_trampoline_mutex);
 }
 
 static int bpf_testmod_test_1(void)
@@ -1766,6 +1790,13 @@ bpf_testmod_ops__test_return_ref_kptr(int dummy, struct task_struct *task__ref,
 	return NULL;
 }
 
+static int bpf_testmod_ops__test_trampoline_stack_args(int arg1, int arg2, int arg3,
+						       int arg4, int arg5, int arg6,
+						       int arg7, int arg8, int arg9)
+{
+	return arg9;
+}
+
 static struct bpf_testmod_ops __bpf_testmod_ops = {
 	.test_1 = bpf_testmod_test_1,
 	.test_2 = bpf_testmod_test_2,
@@ -1773,6 +1804,7 @@ static struct bpf_testmod_ops __bpf_testmod_ops = {
 	.test_refcounted = bpf_testmod_ops__test_refcounted,
 	.test_refcounted_multi = bpf_testmod_ops__test_refcounted_multi,
 	.test_return_ref_kptr = bpf_testmod_ops__test_return_ref_kptr,
+	.test_trampoline_stack_args = bpf_testmod_ops__test_trampoline_stack_args,
 };
 
 struct bpf_struct_ops bpf_bpf_testmod_ops = {
diff --git a/tools/testing/selftests/bpf/test_kmods/bpf_testmod.h b/tools/testing/selftests/bpf/test_kmods/bpf_testmod.h
index 210b919290cc2..42257ae89fd5b 100644
--- a/tools/testing/selftests/bpf/test_kmods/bpf_testmod.h
+++ b/tools/testing/selftests/bpf/test_kmods/bpf_testmod.h
@@ -46,6 +46,11 @@ struct bpf_testmod_ops {
 	struct task_struct *(*test_return_ref_kptr)(int dummy, struct task_struct *task,
 						    struct cgroup *cgrp);
 
+	/* Used to test indirect struct_ops trampolines stack-passed arguments (>8 args). */
+	int (*test_trampoline_stack_args)(int arg1, int arg2, int arg3,
+					  int arg4, int arg5, int arg6,
+					  int arg7, int arg8, int arg9);
+
 	/* The following fields are used to test shadow copies. */
 	char onebyte;
 	struct {

3/2 2026/08/31 09:27 llm patch-evaluator
0m Model:
gemini-3.7-flash

Args:
null

Results:
null

Tokens:
							input: 4563
							output: 32
							thoughts: 449
						

Thoughts:
**Analyzing the Patch: Worth Fuzzing?**

Okay, let's break this down. First, I see the patch modifies several files, specifically within `tools/testing/selftests/bpf/`. This includes changes to `test_struct_ops_multi_args.c`, `struct_ops_multi_args.c`, and importantly, `bpf_testmod.c` and `.h`.

My immediate thought is to determine the scope of these changes. Are we *just* dealing with self-tests, or is this touching something more fundamental? I need to quickly ascertain if these modifications bleed into the core kernel or drivers in a way that would make this patch fuzzable. A quick `git status`, or a quick grep through the diff, would be my go-to, but from what I'm seeing, it appears confined to `tools/testing/selftests`.

The inclusion of `bpf_testmod` does raise a flag, though. Is this a *genuine* test module, contained solely within the selftests directory? Or is this something that could somehow introduce a vulnerability. I know from experience that changes *strictly* within `tools/testing/selftests/...` typically don't impact the crucial aspects.

So, let me refresh the guidelines. The instructions clearly state that if it's documentation, Kconfig, or comments, we ignore it. The critical part is core kernel logic, drivers, or architectures. I need to establish if this touches anything reachable outside the selftests directory.

The fact that it's in `tools/testing/selftests` strongly suggests it's a test setup, not directly impacting core functionality. I'm going to quickly confirm where `bpf_testmod` lives with `grepper`, but my initial assessment is that this is *not* worth fuzzing.



4/2 2026/08/31 09:27 tool grepper
0m Args:
{
  "Expression": "bpf_testmod",
  "PathPrefix": "tools/testing/selftests"
}

Results:
{
  "Output": "\nFull output is too long, showing 500 out of 2530 lines.\nUse more precise expression if possible.\n\ntools/testing/selftests/bpf/Makefile=133=TEST_PROGS_EXTENDED := \\\n--\ntools/testing/selftests/bpf/Makefile-135-\ntools/testing/selftests/bpf/Makefile:136:TEST_KMODS := bpf_testmod.ko bpf_test_no_cfi.ko bpf_test_modorder_x.ko \\\ntools/testing/selftests/bpf/Makefile-137-\tbpf_test_modorder_y.ko bpf_test_rqspinlock.ko\n--\ntools/testing/selftests/bpf/prog_tests/aggregate_ret.c=9=static bool testmod_has_arena_tagged_member(void)\n--\ntools/testing/selftests/bpf/prog_tests/aggregate_ret.c-19-\ntools/testing/selftests/bpf/prog_tests/aggregate_ret.c:20:\tmodule_btf = btf__load_module_btf(\"bpf_testmod\", vmlinux_btf);\ntools/testing/selftests/bpf/prog_tests/aggregate_ret.c-21-\tif (!module_btf)\n--\ntools/testing/selftests/bpf/prog_tests/attach_probe.c=171=static void test_attach_kprobe_legacy_by_addr_reject(void)\n--\ntools/testing/selftests/bpf/prog_tests/attach_probe.c-201- * bpf_fentry_shadow_test exists in both vmlinux (net/bpf/test_run.c) and\ntools/testing/selftests/bpf/prog_tests/attach_probe.c:202: * bpf_testmod (bpf_testmod.c). When bpf_testmod is loaded the symbol is\ntools/testing/selftests/bpf/prog_tests/attach_probe.c-203- * duplicated. Test that kprobe attachment handles this correctly:\ntools/testing/selftests/bpf/prog_tests/attach_probe.c-204- * - Unqualified name (\"bpf_fentry_shadow_test\") attaches to vmlinux.\ntools/testing/selftests/bpf/prog_tests/attach_probe.c:205: * - MOD:SYM name (\"bpf_testmod:bpf_fentry_shadow_test\") attaches to module.\ntools/testing/selftests/bpf/prog_tests/attach_probe.c-206- *\n--\ntools/testing/selftests/bpf/prog_tests/attach_probe.c=210=static void test_attach_probe_dup_sym(enum probe_attach_mode attach_mode)\n--\ntools/testing/selftests/bpf/prog_tests/attach_probe.c-241-\tkprobe_link = bpf_program__attach_kprobe_opts(skel-\u003eprogs.handle_kprobe,\ntools/testing/selftests/bpf/prog_tests/attach_probe.c:242:\t\t\t\t\t\t      \"bpf_testmod:bpf_fentry_shadow_test\",\ntools/testing/selftests/bpf/prog_tests/attach_probe.c-243-\t\t\t\t\t\t      \u0026kprobe_opts);\n--\ntools/testing/selftests/bpf/prog_tests/attach_probe.c-249-\tkretprobe_link = bpf_program__attach_kprobe_opts(skel-\u003eprogs.handle_kretprobe,\ntools/testing/selftests/bpf/prog_tests/attach_probe.c:250:\t\t\t\t\t\t\t \"bpf_testmod:bpf_fentry_shadow_test\",\ntools/testing/selftests/bpf/prog_tests/attach_probe.c-251-\t\t\t\t\t\t\t \u0026kprobe_opts);\n--\ntools/testing/selftests/bpf/prog_tests/attach_probe.c=307=static void test_attach_kprobe_long_event_name(void)\n--\ntools/testing/selftests/bpf/prog_tests/attach_probe.c-320-\tkprobe_link = bpf_program__attach_kprobe_opts(skel-\u003eprogs.handle_kprobe,\ntools/testing/selftests/bpf/prog_tests/attach_probe.c:321:\t\t\t\t\t\t      \"bpf_testmod_looooooooooooooooooooooooooooooong_name\",\ntools/testing/selftests/bpf/prog_tests/attach_probe.c-322-\t\t\t\t\t\t      \u0026kprobe_opts);\n--\ntools/testing/selftests/bpf/prog_tests/attach_probe.c-328-\tkretprobe_link = bpf_program__attach_kprobe_opts(skel-\u003eprogs.handle_kretprobe,\ntools/testing/selftests/bpf/prog_tests/attach_probe.c:329:\t\t\t\t\t\t\t \"bpf_testmod_looooooooooooooooooooooooooooooong_name\",\ntools/testing/selftests/bpf/prog_tests/attach_probe.c-330-\t\t\t\t\t\t\t \u0026kprobe_opts);\n--\ntools/testing/selftests/bpf/prog_tests/bpf_mod_race.c=48=static void *load_module_thread(void *p)\n--\ntools/testing/selftests/bpf/prog_tests/bpf_mod_race.c-50-\ntools/testing/selftests/bpf/prog_tests/bpf_mod_race.c:51:\tif (!ASSERT_NEQ(load_bpf_testmod(false), 0, \"load_module_thread must fail\"))\ntools/testing/selftests/bpf/prog_tests/bpf_mod_race.c-52-\t\tatomic_store(\u0026state, TS_MODULE_LOAD);\n--\ntools/testing/selftests/bpf/prog_tests/bpf_mod_race.c=90=static void test_bpf_mod_race_config(const struct test_config *config)\n--\ntools/testing/selftests/bpf/prog_tests/bpf_mod_race.c-102-\ntools/testing/selftests/bpf/prog_tests/bpf_mod_race.c:103:\tif (!ASSERT_OK(unload_bpf_testmod(false), \"unload bpf_testmod\"))\ntools/testing/selftests/bpf/prog_tests/bpf_mod_race.c-104-\t\tgoto end_mmap;\n--\ntools/testing/selftests/bpf/prog_tests/bpf_mod_race.c-180-end_module:\ntools/testing/selftests/bpf/prog_tests/bpf_mod_race.c:181:\tunload_bpf_testmod(false);\ntools/testing/selftests/bpf/prog_tests/bpf_mod_race.c:182:\tASSERT_OK(load_bpf_testmod(false), \"restore bpf_testmod\");\ntools/testing/selftests/bpf/prog_tests/bpf_mod_race.c-183-end_mmap:\n--\ntools/testing/selftests/bpf/prog_tests/btf_dedup_split.c=372=static void test_split_dup_struct_in_cu()\n--\ntools/testing/selftests/bpf/prog_tests/btf_dedup_split.c-462- *\ntools/testing/selftests/bpf/prog_tests/btf_dedup_split.c:463: * bpf_testmod_test_write() has multiple core kernel type parameters;\ntools/testing/selftests/bpf/prog_tests/btf_dedup_split.c-464- *\ntools/testing/selftests/bpf/prog_tests/btf_dedup_split.c-465- * ssize_t\ntools/testing/selftests/bpf/prog_tests/btf_dedup_split.c:466: * bpf_testmod_test_write(struct file *file, struct kobject *kobj,\ntools/testing/selftests/bpf/prog_tests/btf_dedup_split.c-467- *                        struct bin_attribute *bin_attr,\n--\ntools/testing/selftests/bpf/prog_tests/btf_dedup_split.c=481=const char *mod_funcs[] = {\ntools/testing/selftests/bpf/prog_tests/btf_dedup_split.c:482:\t\"bpf_testmod_test_write\",\ntools/testing/selftests/bpf/prog_tests/btf_dedup_split.c-483-\t\"bpf_kfunc_call_test3\",\n--\ntools/testing/selftests/bpf/prog_tests/btf_dedup_split.c=487=static void test_split_module(void)\n--\ntools/testing/selftests/bpf/prog_tests/btf_dedup_split.c-498-\ntools/testing/selftests/bpf/prog_tests/btf_dedup_split.c:499:\tbtf1 = btf__parse_split(\"/sys/kernel/btf/bpf_testmod\", vmlinux_btf);\ntools/testing/selftests/bpf/prog_tests/btf_dedup_split.c-500-\tif (!ASSERT_OK_PTR(btf1, \"split_btf\"))\n--\ntools/testing/selftests/bpf/prog_tests/btf_dedup_split.c-522-\t\tfor (j = 0, p = btf_params(t); j \u003c vlen; j++, p++) {\ntools/testing/selftests/bpf/prog_tests/btf_dedup_split.c:523:\t\t\t/* bpf_testmod uses resilient split BTF, so any\ntools/testing/selftests/bpf/prog_tests/btf_dedup_split.c-524-\t\t\t * reference types will be added to split BTF and their\n--\ntools/testing/selftests/bpf/prog_tests/btf_module.c-6-\ntools/testing/selftests/bpf/prog_tests/btf_module.c:7:static const char *module_name = \"bpf_testmod\";\ntools/testing/selftests/bpf/prog_tests/btf_module.c:8:static const char *symbol_name = \"bpf_testmod_test_read\";\ntools/testing/selftests/bpf/prog_tests/btf_module.c-9-\n--\ntools/testing/selftests/bpf/prog_tests/btf_tag.c=54=static int load_btfs(struct btf **vmlinux_btf, struct btf **module_btf,\n--\ntools/testing/selftests/bpf/prog_tests/btf_tag.c-56-{\ntools/testing/selftests/bpf/prog_tests/btf_tag.c:57:\tconst char *module_name = \"bpf_testmod\";\ntools/testing/selftests/bpf/prog_tests/btf_tag.c-58-\t__s32 type_id;\n--\ntools/testing/selftests/bpf/prog_tests/core_reloc.c-4-#include \"progs/core_reloc_types.h\"\ntools/testing/selftests/bpf/prog_tests/core_reloc.c:5:#include \"test_kmods/bpf_testmod.h\"\ntools/testing/selftests/bpf/prog_tests/core_reloc.c-6-#include \u003clinux/limits.h\u003e\n--\ntools/testing/selftests/bpf/prog_tests/core_reloc.c=12=static int duration = 0;\n--\ntools/testing/selftests/bpf/prog_tests/core_reloc.c-22-\t.output = STRUCT_TO_CHAR_PTR(core_reloc_module_output) {\t\\\ntools/testing/selftests/bpf/prog_tests/core_reloc.c:23:\t\t.read_ctx_sz = sizeof(struct bpf_testmod_test_read_ctx),\\\ntools/testing/selftests/bpf/prog_tests/core_reloc.c-24-\t\t.read_ctx_exists = true,\t\t\t\t\\\n--\ntools/testing/selftests/bpf/prog_tests/core_reloc.c=549=static const struct core_reloc_test_case test_cases[] = {\n--\ntools/testing/selftests/bpf/prog_tests/core_reloc.c-568-\t/* validate we can find kernel module BTF types for relocs/attach */\ntools/testing/selftests/bpf/prog_tests/core_reloc.c:569:\tMODULES_CASE(\"module_probed\", \"test_core_module_probed\", \"bpf_testmod_test_read\"),\ntools/testing/selftests/bpf/prog_tests/core_reloc.c-570-\tMODULES_CASE(\"module_direct\", \"test_core_module_direct\", NULL),\n--\ntools/testing/selftests/bpf/prog_tests/get_branch_snapshot.c=76=void serial_test_get_branch_snapshot(void)\n--\ntools/testing/selftests/bpf/prog_tests/get_branch_snapshot.c-95-\ntools/testing/selftests/bpf/prog_tests/get_branch_snapshot.c:96:\terr = kallsyms_find(\"bpf_testmod_loop_test\", \u0026skel-\u003ebss-\u003eaddress_low);\ntools/testing/selftests/bpf/prog_tests/get_branch_snapshot.c-97-\tif (!ASSERT_OK(err, \"kallsyms_find\"))\n--\ntools/testing/selftests/bpf/prog_tests/kprobe_multi_test.c=663=static void test_attach_write_ctx(void)\n--\ntools/testing/selftests/bpf/prog_tests/kprobe_multi_test.c-670- * Test kprobe_multi handles shadow symbols (vmlinux + module duplicate).\ntools/testing/selftests/bpf/prog_tests/kprobe_multi_test.c:671: * bpf_fentry_shadow_test exists in both vmlinux and bpf_testmod.\ntools/testing/selftests/bpf/prog_tests/kprobe_multi_test.c-672- * kprobe_multi resolves via ftrace_lookup_symbols() which finds the\n--\ntools/testing/selftests/bpf/prog_tests/kprobe_multi_testmod_test.c=50=static void test_testmod_attach_api_addrs(void)\n--\ntools/testing/selftests/bpf/prog_tests/kprobe_multi_testmod_test.c-54-\ntools/testing/selftests/bpf/prog_tests/kprobe_multi_testmod_test.c:55:\taddrs[0] = ksym_get_addr_local(ksyms, \"bpf_testmod_fentry_test1\");\ntools/testing/selftests/bpf/prog_tests/kprobe_multi_testmod_test.c-56-\tASSERT_NEQ(addrs[0], 0, \"ksym_get_addr_local\");\ntools/testing/selftests/bpf/prog_tests/kprobe_multi_testmod_test.c:57:\taddrs[1] = ksym_get_addr_local(ksyms, \"bpf_testmod_fentry_test2\");\ntools/testing/selftests/bpf/prog_tests/kprobe_multi_testmod_test.c-58-\tASSERT_NEQ(addrs[1], 0, \"ksym_get_addr_local\");\ntools/testing/selftests/bpf/prog_tests/kprobe_multi_testmod_test.c:59:\taddrs[2] = ksym_get_addr_local(ksyms, \"bpf_testmod_fentry_test3\");\ntools/testing/selftests/bpf/prog_tests/kprobe_multi_testmod_test.c-60-\tASSERT_NEQ(addrs[2], 0, \"ksym_get_addr_local\");\n--\ntools/testing/selftests/bpf/prog_tests/kprobe_multi_testmod_test.c=68=static void test_testmod_attach_api_syms(void)\n--\ntools/testing/selftests/bpf/prog_tests/kprobe_multi_testmod_test.c-71-\tconst char *syms[3] = {\ntools/testing/selftests/bpf/prog_tests/kprobe_multi_testmod_test.c:72:\t\t\"bpf_testmod_fentry_test1\",\ntools/testing/selftests/bpf/prog_tests/kprobe_multi_testmod_test.c:73:\t\t\"bpf_testmod_fentry_test2\",\ntools/testing/selftests/bpf/prog_tests/kprobe_multi_testmod_test.c:74:\t\t\"bpf_testmod_fentry_test3\",\ntools/testing/selftests/bpf/prog_tests/kprobe_multi_testmod_test.c-75-\t};\n--\ntools/testing/selftests/bpf/prog_tests/ksyms_module.c=9=static void test_ksyms_module_lskel(void)\n--\ntools/testing/selftests/bpf/prog_tests/ksyms_module.c-30-\tASSERT_EQ(topts.retval, 0, \"retval\");\ntools/testing/selftests/bpf/prog_tests/ksyms_module.c:31:\tASSERT_EQ(skel-\u003ebss-\u003eout_bpf_testmod_ksym, 42, \"bpf_testmod_ksym\");\ntools/testing/selftests/bpf/prog_tests/ksyms_module.c-32-cleanup:\n--\ntools/testing/selftests/bpf/prog_tests/ksyms_module.c=36=static void test_ksyms_module_libbpf(void)\n--\ntools/testing/selftests/bpf/prog_tests/ksyms_module.c-57-\tASSERT_EQ(topts.retval, 0, \"retval\");\ntools/testing/selftests/bpf/prog_tests/ksyms_module.c:58:\tASSERT_EQ(skel-\u003ebss-\u003eout_bpf_testmod_ksym, 42, \"bpf_testmod_ksym\");\ntools/testing/selftests/bpf/prog_tests/ksyms_module.c-59-cleanup:\n--\ntools/testing/selftests/bpf/prog_tests/module_attach.c=129=static void test_module_attach_detach(const char *prog_name)\n--\ntools/testing/selftests/bpf/prog_tests/module_attach.c-153-\ntools/testing/selftests/bpf/prog_tests/module_attach.c:154:\tASSERT_ERR(try_unload_module(\"bpf_testmod\", 1, false), \"try_unload_module\");\ntools/testing/selftests/bpf/prog_tests/module_attach.c-155-\tbpf_link__destroy(link);\n--\ntools/testing/selftests/bpf/prog_tests/module_attach.c=160=void test_module_attach(void)\n--\ntools/testing/selftests/bpf/prog_tests/module_attach.c-174-\t\ttest_module_attach_prog(\"handle_fentry_manual\", READ_SZ,\ntools/testing/selftests/bpf/prog_tests/module_attach.c:175:\t\t\t\t\t\"bpf_testmod_test_read\", 0);\ntools/testing/selftests/bpf/prog_tests/module_attach.c-176-\t}\n--\ntools/testing/selftests/bpf/prog_tests/module_attach.c-179-\t\t\t\t\tREAD_SZ,\ntools/testing/selftests/bpf/prog_tests/module_attach.c:180:\t\t\t\t\t\"bpf_testmod:bpf_testmod_test_read\", 0);\ntools/testing/selftests/bpf/prog_tests/module_attach.c-181-\t}\n--\ntools/testing/selftests/bpf/prog_tests/module_fentry_shadow.c-8-\ntools/testing/selftests/bpf/prog_tests/module_fentry_shadow.c:9:static const char *module_name = \"bpf_testmod\";\ntools/testing/selftests/bpf/prog_tests/module_fentry_shadow.c-10-static const char *symbol_name = \"bpf_fentry_shadow_test\";\ntools/testing/selftests/bpf/prog_tests/module_fentry_shadow.c-11-\ntools/testing/selftests/bpf/prog_tests/module_fentry_shadow.c:12:static int get_bpf_testmod_btf_fd(void)\ntools/testing/selftests/bpf/prog_tests/module_fentry_shadow.c-13-{\n--\ntools/testing/selftests/bpf/prog_tests/module_fentry_shadow.c=56=void test_module_fentry_shadow(void)\n--\ntools/testing/selftests/bpf/prog_tests/module_fentry_shadow.c-82-\ntools/testing/selftests/bpf/prog_tests/module_fentry_shadow.c:83:\tbtf_fd[1] = get_bpf_testmod_btf_fd();\ntools/testing/selftests/bpf/prog_tests/module_fentry_shadow.c:84:\tif (!ASSERT_GE(btf_fd[1], 0, \"get_bpf_testmod_btf_fd\"))\ntools/testing/selftests/bpf/prog_tests/module_fentry_shadow.c-85-\t\tgoto out;\n--\ntools/testing/selftests/bpf/prog_tests/module_fentry_shadow.c-110-\t\t * shadowed functions and uses the same address for both the\ntools/testing/selftests/bpf/prog_tests/module_fentry_shadow.c:111:\t\t * vmlinux and the bpf_testmod functions, this will fail on\ntools/testing/selftests/bpf/prog_tests/module_fentry_shadow.c-112-\t\t * attempting to create two trampolines for the same address,\n--\ntools/testing/selftests/bpf/prog_tests/raw_tp_writable_reject_bad_access.c-3-#include \u003ctest_progs.h\u003e\ntools/testing/selftests/bpf/prog_tests/raw_tp_writable_reject_bad_access.c:4:#include \"test_kmods/bpf_testmod.h\"\ntools/testing/selftests/bpf/prog_tests/raw_tp_writable_reject_bad_access.c-5-#include \"bpf_util.h\"\n--\ntools/testing/selftests/bpf/prog_tests/raw_tp_writable_reject_bad_access.c=7=static void check_attach_reject(const struct bpf_insn *program, size_t prog_len)\n--\ntools/testing/selftests/bpf/prog_tests/raw_tp_writable_reject_bad_access.c-21-\ntools/testing/selftests/bpf/prog_tests/raw_tp_writable_reject_bad_access.c:22:\ttp_fd = bpf_raw_tracepoint_open(\"bpf_testmod_test_writable_bare_tp\", bpf_fd);\ntools/testing/selftests/bpf/prog_tests/raw_tp_writable_reject_bad_access.c-23-\tASSERT_EQ(tp_fd, -EINVAL, \"bpf_raw_tracepoint_open\");\n--\ntools/testing/selftests/bpf/prog_tests/raw_tp_writable_reject_bad_access.c=30=void test_raw_tp_writable_reject_bad_access(void)\n--\ntools/testing/selftests/bpf/prog_tests/raw_tp_writable_reject_bad_access.c-36-\t\tBPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_6,\ntools/testing/selftests/bpf/prog_tests/raw_tp_writable_reject_bad_access.c:37:\t\t\t    sizeof(struct bpf_testmod_test_writable_ctx)),\ntools/testing/selftests/bpf/prog_tests/raw_tp_writable_reject_bad_access.c-38-\t\tBPF_EXIT_INSN(),\n--\ntools/testing/selftests/bpf/prog_tests/raw_tp_writable_reject_bad_access.c-46-\t\tBPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_6,\ntools/testing/selftests/bpf/prog_tests/raw_tp_writable_reject_bad_access.c:47:\t\t\t    sizeof(struct bpf_testmod_test_writable_ctx) + 8),\ntools/testing/selftests/bpf/prog_tests/raw_tp_writable_reject_bad_access.c-48-\t\tBPF_EXIT_INSN(),\n--\ntools/testing/selftests/bpf/prog_tests/stacktrace_ips.c=50=static void test_stacktrace_ips_kprobe_multi(bool retprobe)\n--\ntools/testing/selftests/bpf/prog_tests/stacktrace_ips.c-68-\t\t\t\t\t\t\tskel-\u003eprogs.kprobe_multi_test,\ntools/testing/selftests/bpf/prog_tests/stacktrace_ips.c:69:\t\t\t\t\t\t\t\"bpf_testmod_stacktrace_test\", \u0026opts);\ntools/testing/selftests/bpf/prog_tests/stacktrace_ips.c-70-\tif (!ASSERT_OK_PTR(skel-\u003elinks.kprobe_multi_test, \"bpf_program__attach_kprobe_multi_opts\"))\n--\ntools/testing/selftests/bpf/prog_tests/stacktrace_ips.c-78-\t\tcheck_stacktrace_ips(bpf_map__fd(skel-\u003emaps.stackmap), skel-\u003ebss-\u003estack_key, 4,\ntools/testing/selftests/bpf/prog_tests/stacktrace_ips.c:79:\t\t\t\t     ksym_get_addr(\"bpf_testmod_stacktrace_test_3\"),\ntools/testing/selftests/bpf/prog_tests/stacktrace_ips.c:80:\t\t\t\t     ksym_get_addr(\"bpf_testmod_stacktrace_test_2\"),\ntools/testing/selftests/bpf/prog_tests/stacktrace_ips.c:81:\t\t\t\t     ksym_get_addr(\"bpf_testmod_stacktrace_test_1\"),\ntools/testing/selftests/bpf/prog_tests/stacktrace_ips.c:82:\t\t\t\t     ksym_get_addr(\"bpf_testmod_test_read\"));\ntools/testing/selftests/bpf/prog_tests/stacktrace_ips.c-83-\t} else {\ntools/testing/selftests/bpf/prog_tests/stacktrace_ips.c-84-\t\tcheck_stacktrace_ips(bpf_map__fd(skel-\u003emaps.stackmap), skel-\u003ebss-\u003estack_key, 5,\ntools/testing/selftests/bpf/prog_tests/stacktrace_ips.c:85:\t\t\t\t     ksym_get_addr(\"bpf_testmod_stacktrace_test\"),\ntools/testing/selftests/bpf/prog_tests/stacktrace_ips.c:86:\t\t\t\t     ksym_get_addr(\"bpf_testmod_stacktrace_test_3\"),\ntools/testing/selftests/bpf/prog_tests/stacktrace_ips.c:87:\t\t\t\t     ksym_get_addr(\"bpf_testmod_stacktrace_test_2\"),\ntools/testing/selftests/bpf/prog_tests/stacktrace_ips.c:88:\t\t\t\t     ksym_get_addr(\"bpf_testmod_stacktrace_test_1\"),\ntools/testing/selftests/bpf/prog_tests/stacktrace_ips.c:89:\t\t\t\t     ksym_get_addr(\"bpf_testmod_test_read\"));\ntools/testing/selftests/bpf/prog_tests/stacktrace_ips.c-90-\t}\n--\ntools/testing/selftests/bpf/prog_tests/stacktrace_ips.c=96=static void test_stacktrace_ips_raw_tp(void)\n--\ntools/testing/selftests/bpf/prog_tests/stacktrace_ips.c-115-\t\t\t\t\t\t\tskel-\u003eprogs.rawtp_test,\ntools/testing/selftests/bpf/prog_tests/stacktrace_ips.c:116:\t\t\t\t\t\t\t\"bpf_testmod_test_read\");\ntools/testing/selftests/bpf/prog_tests/stacktrace_ips.c-117-\tif (!ASSERT_OK_PTR(skel-\u003elinks.rawtp_test, \"bpf_program__attach_raw_tracepoint\"))\n--\ntools/testing/selftests/bpf/prog_tests/stacktrace_ips.c=140=static void test_stacktrace_ips_kprobe(bool retprobe)\n--\ntools/testing/selftests/bpf/prog_tests/stacktrace_ips.c-158-\t\t\t\t\t\tskel-\u003eprogs.kprobe_test,\ntools/testing/selftests/bpf/prog_tests/stacktrace_ips.c:159:\t\t\t\t\t\t\"bpf_testmod_stacktrace_test\", \u0026opts);\ntools/testing/selftests/bpf/prog_tests/stacktrace_ips.c-160-\tif (!ASSERT_OK_PTR(skel-\u003elinks.kprobe_test, \"bpf_program__attach_kprobe_opts\"))\n--\ntools/testing/selftests/bpf/prog_tests/stacktrace_ips.c-168-\t\tcheck_stacktrace_ips(bpf_map__fd(skel-\u003emaps.stackmap), skel-\u003ebss-\u003estack_key, 4,\ntools/testing/selftests/bpf/prog_tests/stacktrace_ips.c:169:\t\t\t\t     ksym_get_addr(\"bpf_testmod_stacktrace_test_3\"),\ntools/testing/selftests/bpf/prog_tests/stacktrace_ips.c:170:\t\t\t\t     ksym_get_addr(\"bpf_testmod_stacktrace_test_2\"),\ntools/testing/selftests/bpf/prog_tests/stacktrace_ips.c:171:\t\t\t\t     ksym_get_addr(\"bpf_testmod_stacktrace_test_1\"),\ntools/testing/selftests/bpf/prog_tests/stacktrace_ips.c:172:\t\t\t\t     ksym_get_addr(\"bpf_testmod_test_read\"));\ntools/testing/selftests/bpf/prog_tests/stacktrace_ips.c-173-\t} else {\ntools/testing/selftests/bpf/prog_tests/stacktrace_ips.c-174-\t\tcheck_stacktrace_ips(bpf_map__fd(skel-\u003emaps.stackmap), skel-\u003ebss-\u003estack_key, 5,\ntools/testing/selftests/bpf/prog_tests/stacktrace_ips.c:175:\t\t\t\t     ksym_get_addr(\"bpf_testmod_stacktrace_test\"),\ntools/testing/selftests/bpf/prog_tests/stacktrace_ips.c:176:\t\t\t\t     ksym_get_addr(\"bpf_testmod_stacktrace_test_3\"),\ntools/testing/selftests/bpf/prog_tests/stacktrace_ips.c:177:\t\t\t\t     ksym_get_addr(\"bpf_testmod_stacktrace_test_2\"),\ntools/testing/selftests/bpf/prog_tests/stacktrace_ips.c:178:\t\t\t\t     ksym_get_addr(\"bpf_testmod_stacktrace_test_1\"),\ntools/testing/selftests/bpf/prog_tests/stacktrace_ips.c:179:\t\t\t\t     ksym_get_addr(\"bpf_testmod_test_read\"));\ntools/testing/selftests/bpf/prog_tests/stacktrace_ips.c-180-\t}\n--\ntools/testing/selftests/bpf/prog_tests/stacktrace_ips.c=186=static void test_stacktrace_ips_trampoline(bool retprobe)\n--\ntools/testing/selftests/bpf/prog_tests/stacktrace_ips.c-215-\t\tcheck_stacktrace_ips(bpf_map__fd(skel-\u003emaps.stackmap), skel-\u003ebss-\u003estack_key, 4,\ntools/testing/selftests/bpf/prog_tests/stacktrace_ips.c:216:\t\t\t\t     ksym_get_addr(\"bpf_testmod_stacktrace_test_3\"),\ntools/testing/selftests/bpf/prog_tests/stacktrace_ips.c:217:\t\t\t\t     ksym_get_addr(\"bpf_testmod_stacktrace_test_2\"),\ntools/testing/selftests/bpf/prog_tests/stacktrace_ips.c:218:\t\t\t\t     ksym_get_addr(\"bpf_testmod_stacktrace_test_1\"),\ntools/testing/selftests/bpf/prog_tests/stacktrace_ips.c:219:\t\t\t\t     ksym_get_addr(\"bpf_testmod_test_read\"));\ntools/testing/selftests/bpf/prog_tests/stacktrace_ips.c-220-\t} else {\ntools/testing/selftests/bpf/prog_tests/stacktrace_ips.c-221-\t\tcheck_stacktrace_ips(bpf_map__fd(skel-\u003emaps.stackmap), skel-\u003ebss-\u003estack_key, 5,\ntools/testing/selftests/bpf/prog_tests/stacktrace_ips.c:222:\t\t\t\t     ksym_get_addr(\"bpf_testmod_stacktrace_test\"),\ntools/testing/selftests/bpf/prog_tests/stacktrace_ips.c:223:\t\t\t\t     ksym_get_addr(\"bpf_testmod_stacktrace_test_3\"),\ntools/testing/selftests/bpf/prog_tests/stacktrace_ips.c:224:\t\t\t\t     ksym_get_addr(\"bpf_testmod_stacktrace_test_2\"),\ntools/testing/selftests/bpf/prog_tests/stacktrace_ips.c:225:\t\t\t\t     ksym_get_addr(\"bpf_testmod_stacktrace_test_1\"),\ntools/testing/selftests/bpf/prog_tests/stacktrace_ips.c:226:\t\t\t\t     ksym_get_addr(\"bpf_testmod_test_read\"));\ntools/testing/selftests/bpf/prog_tests/stacktrace_ips.c-227-\t}\n--\ntools/testing/selftests/bpf/prog_tests/struct_ops_autocreate.c=7=static void cant_load_full_object(void)\n--\ntools/testing/selftests/bpf/prog_tests/struct_ops_autocreate.c-18-\t\tgoto cleanup;\ntools/testing/selftests/bpf/prog_tests/struct_ops_autocreate.c:19:\t/* The testmod_2 map BTF type (struct bpf_testmod_ops___v2) doesn't\ntools/testing/selftests/bpf/prog_tests/struct_ops_autocreate.c:20:\t * match the BTF of the actual struct bpf_testmod_ops defined in the\ntools/testing/selftests/bpf/prog_tests/struct_ops_autocreate.c-21-\t * kernel, so we should fail to load it if we don't disable autocreate\n--\ntools/testing/selftests/bpf/prog_tests/struct_ops_autocreate.c=37=static int check_test_1_link(struct struct_ops_autocreate *skel, struct bpf_map *map)\n--\ntools/testing/selftests/bpf/prog_tests/struct_ops_autocreate.c-45-\ntools/testing/selftests/bpf/prog_tests/struct_ops_autocreate.c:46:\t/* test_1() would be called from bpf_dummy_reg2() in bpf_testmod.c */\ntools/testing/selftests/bpf/prog_tests/struct_ops_autocreate.c-47-\terr = ASSERT_EQ(skel-\u003ebss-\u003etest_1_result, 42, \"test_1_result\");\n--\ntools/testing/selftests/bpf/prog_tests/struct_ops_autocreate.c=114=static void autoload_and_shadow_vars(void)\n--\ntools/testing/selftests/bpf/prog_tests/struct_ops_autocreate.c-140-\ntools/testing/selftests/bpf/prog_tests/struct_ops_autocreate.c:141:\t/* test_1() would be called from bpf_dummy_reg2() in bpf_testmod.c */\ntools/testing/selftests/bpf/prog_tests/struct_ops_autocreate.c-142-\terr = ASSERT_EQ(skel-\u003ebss-\u003etest_1_result, 42, \"test_1_result\");\n--\ntools/testing/selftests/bpf/prog_tests/test_struct_ops_arena.c-11- * Attach callbacks with __arena and __arena__nullable arguments and drive\ntools/testing/selftests/bpf/prog_tests/test_struct_ops_arena.c:12: * them through the bpf_testmod_ops3_call_test_arena*() kfuncs.\ntools/testing/selftests/bpf/prog_tests/test_struct_ops_arena.c-13- */\n--\ntools/testing/selftests/bpf/prog_tests/test_struct_ops_arena.c=88=static void arena_arg_attach(void)\n--\ntools/testing/selftests/bpf/prog_tests/test_struct_ops_arena.c-106-/*\ntools/testing/selftests/bpf/prog_tests/test_struct_ops_arena.c:107: * Serialized because it attaches the singleton bpf_testmod_ops3, which\ntools/testing/selftests/bpf/prog_tests/test_struct_ops_arena.c-108- * test_struct_ops_private_stack also attaches; registering it twice fails\n--\ntools/testing/selftests/bpf/prog_tests/test_struct_ops_module.c=14=static void check_map_info(struct bpf_map_info *info)\n--\ntools/testing/selftests/bpf/prog_tests/test_struct_ops_module.c-31-\ntools/testing/selftests/bpf/prog_tests/test_struct_ops_module.c:32:\tif (!ASSERT_EQ(strcmp(btf_name, \"bpf_testmod\"), 0, \"get_value_type_btf_obj_name\"))\ntools/testing/selftests/bpf/prog_tests/test_struct_ops_module.c-33-\t\tgoto cleanup;\n--\ntools/testing/selftests/bpf/prog_tests/test_struct_ops_module.c=39=static int attach_ops_and_check(struct struct_ops_module *skel,\n--\ntools/testing/selftests/bpf/prog_tests/test_struct_ops_module.c-49-\ntools/testing/selftests/bpf/prog_tests/test_struct_ops_module.c:50:\t/* test_{1,2}() would be called from bpf_dummy_reg() in bpf_testmod.c */\ntools/testing/selftests/bpf/prog_tests/test_struct_ops_module.c-51-\tASSERT_EQ(skel-\u003ebss-\u003etest_1_result, 0xdeadbeef, \"test_1_result\");\n--\ntools/testing/selftests/bpf/prog_tests/test_struct_ops_module.c=58=static void test_struct_ops_load(void)\n--\ntools/testing/selftests/bpf/prog_tests/test_struct_ops_module.c-87-\tcheck_map_info(\u0026info);\ntools/testing/selftests/bpf/prog_tests/test_struct_ops_module.c:88:\t/* test_3() will be called from bpf_dummy_reg() in bpf_testmod.c\ntools/testing/selftests/bpf/prog_tests/test_struct_ops_module.c-89-\t *\ntools/testing/selftests/bpf/prog_tests/test_struct_ops_module.c:90:\t * In bpf_testmod.c it will pass 4 and 13 (the value of data) to\ntools/testing/selftests/bpf/prog_tests/test_struct_ops_module.c-91-\t * .test_2.  So, the value of test_2_result should be 20 (4 + 13 +\n--\ntools/testing/selftests/bpf/prog_tests/test_struct_ops_module.c=103=static void test_struct_ops_not_zeroed(void)\n--\ntools/testing/selftests/bpf/prog_tests/test_struct_ops_module.c-127-\t/* libbpf should reject the testmod_zeroed since struct\ntools/testing/selftests/bpf/prog_tests/test_struct_ops_module.c:128:\t * bpf_testmod_ops in the kernel has no \"zeroed\" field and the\ntools/testing/selftests/bpf/prog_tests/test_struct_ops_module.c-129-\t * value of \"zeroed\" is non-zero.\n--\ntools/testing/selftests/bpf/prog_tests/tp_btf_ids.c-6-#define DEBUGFS_TRACING\t\"/sys/kernel/debug/tracing\"\ntools/testing/selftests/bpf/prog_tests/tp_btf_ids.c:7:#define EVENT_SUBPATH\t\"events/bpf_testmod/bpf_testmod_test_read/btf_ids\"\ntools/testing/selftests/bpf/prog_tests/tp_btf_ids.c-8-\n--\ntools/testing/selftests/bpf/prog_tests/tp_btf_ids.c=56=void test_tp_btf_ids(void)\n--\ntools/testing/selftests/bpf/prog_tests/tp_btf_ids.c-92-\t *   void *__data, struct task_struct *task,\ntools/testing/selftests/bpf/prog_tests/tp_btf_ids.c:93:\t *   struct bpf_testmod_test_read_ctx *ctx\ntools/testing/selftests/bpf/prog_tests/tp_btf_ids.c-94-\t */\n--\ntools/testing/selftests/bpf/prog_tests/tp_btf_ids.c-117-\tname = btf__name_by_offset(btf, rec_t-\u003ename_off);\ntools/testing/selftests/bpf/prog_tests/tp_btf_ids.c:118:\tASSERT_STREQ(name, \"trace_event_raw_bpf_testmod_test_read\",\ntools/testing/selftests/bpf/prog_tests/tp_btf_ids.c-119-\t\t     \"tp struct name\");\n--\ntools/testing/selftests/bpf/prog_tests/tracing_failure.c=79=static void test_fexit_int128_ret(void)\n--\ntools/testing/selftests/bpf/prog_tests/tracing_failure.c-82-\t * __int128 is returned in a register pair on x86_64 and arm64, so\ntools/testing/selftests/bpf/prog_tests/tracing_failure.c:83:\t * bpf_testmod_test_int128_ret() is BTF-encoded and attachable and the\ntools/testing/selftests/bpf/prog_tests/tracing_failure.c-84-\t * verifier can reject its \u003e8 byte return value. Other architectures\n--\ntools/testing/selftests/bpf/prog_tests/tracing_multi.c=30=static const char * const bpf_fentry_test[] = {\n--\ntools/testing/selftests/bpf/prog_tests/tracing_multi.c-42-\ntools/testing/selftests/bpf/prog_tests/tracing_multi.c:43:static const char * const bpf_testmod_fentry_test[] = {\ntools/testing/selftests/bpf/prog_tests/tracing_multi.c:44:\t\"bpf_testmod_fentry_test1\",\ntools/testing/selftests/bpf/prog_tests/tracing_multi.c:45:\t\"bpf_testmod_fentry_test2\",\ntools/testing/selftests/bpf/prog_tests/tracing_multi.c:46:\t\"bpf_testmod_fentry_test3\",\ntools/testing/selftests/bpf/prog_tests/tracing_multi.c:47:\t\"bpf_testmod_fentry_test7\",\ntools/testing/selftests/bpf/prog_tests/tracing_multi.c:48:\t\"bpf_testmod_fentry_test11\",\ntools/testing/selftests/bpf/prog_tests/tracing_multi.c-49-};\n--\ntools/testing/selftests/bpf/prog_tests/tracing_multi.c=314=static void test_module_link_api_pattern(void)\n--\ntools/testing/selftests/bpf/prog_tests/tracing_multi.c-324-\tskel-\u003elinks.test_fentry = bpf_program__attach_tracing_multi(skel-\u003eprogs.test_fentry,\ntools/testing/selftests/bpf/prog_tests/tracing_multi.c:325:\t\t\t\t\t\"bpf_testmod:bpf_testmod_fentry_test*\", NULL);\ntools/testing/selftests/bpf/prog_tests/tracing_multi.c-326-\tif (!ASSERT_OK_PTR(skel-\u003elinks.test_fentry, \"bpf_program__attach_tracing_multi\"))\n--\ntools/testing/selftests/bpf/prog_tests/tracing_multi.c-329-\tskel-\u003elinks.test_fexit = bpf_program__attach_tracing_multi(skel-\u003eprogs.test_fexit,\ntools/testing/selftests/bpf/prog_tests/tracing_multi.c:330:\t\t\t\t\t\"bpf_testmod:bpf_testmod_fentry_test*\", NULL);\ntools/testing/selftests/bpf/prog_tests/tracing_multi.c-331-\tif (!ASSERT_OK_PTR(skel-\u003elinks.test_fexit, \"bpf_program__attach_tracing_multi\"))\n--\ntools/testing/selftests/bpf/prog_tests/tracing_multi.c=342=static void test_module_link_api_ids(void)\ntools/testing/selftests/bpf/prog_tests/tracing_multi.c-343-{\ntools/testing/selftests/bpf/prog_tests/tracing_multi.c:344:\tsize_t cnt = ARRAY_SIZE(bpf_testmod_fentry_test);\ntools/testing/selftests/bpf/prog_tests/tracing_multi.c-345-\tLIBBPF_OPTS(bpf_tracing_multi_opts, opts);\n--\ntools/testing/selftests/bpf/prog_tests/tracing_multi.c-354-\ntools/testing/selftests/bpf/prog_tests/tracing_multi.c:355:\tids = get_ids(bpf_testmod_fentry_test, cnt, \"bpf_testmod\");\ntools/testing/selftests/bpf/prog_tests/tracing_multi.c-356-\tif (!ASSERT_OK_PTR(ids, \"get_ids\"))\n--\ntools/testing/selftests/bpf/prog_tests/uprobe_syscall.c=109=static void test_uprobe_regs_equal(bool retprobe)\n--\ntools/testing/selftests/bpf/prog_tests/uprobe_syscall.c-193-\ntools/testing/selftests/bpf/prog_tests/uprobe_syscall.c:194:#define BPF_TESTMOD_UPROBE_TEST_FILE \"/sys/kernel/bpf_testmod_uprobe\"\ntools/testing/selftests/bpf/prog_tests/uprobe_syscall.c-195-\ntools/testing/selftests/bpf/prog_tests/uprobe_syscall.c:196:static int write_bpf_testmod_uprobe(unsigned long offset)\ntools/testing/selftests/bpf/prog_tests/uprobe_syscall.c-197-{\n--\ntools/testing/selftests/bpf/prog_tests/uprobe_syscall.c=213=static void test_regs_change(void)\n--\ntools/testing/selftests/bpf/prog_tests/uprobe_syscall.c-222-\ntools/testing/selftests/bpf/prog_tests/uprobe_syscall.c:223:\terr = write_bpf_testmod_uprobe(offset);\ntools/testing/selftests/bpf/prog_tests/uprobe_syscall.c-224-\tif (!ASSERT_OK(err, \"register_uprobe\"))\n--\ntools/testing/selftests/bpf/prog_tests/uprobe_syscall.c-231-\ntools/testing/selftests/bpf/prog_tests/uprobe_syscall.c:232:\terr = write_bpf_testmod_uprobe(0);\ntools/testing/selftests/bpf/prog_tests/uprobe_syscall.c-233-\tif (!ASSERT_OK(err, \"unregister_uprobe\"))\n--\ntools/testing/selftests/bpf/progs/aggregate_ret_kfunc.c-5-#include \"bpf_misc.h\"\ntools/testing/selftests/bpf/progs/aggregate_ret_kfunc.c:6:#include \"../test_kmods/bpf_testmod_kfunc.h\"\ntools/testing/selftests/bpf/progs/aggregate_ret_kfunc.c-7-\n--\ntools/testing/selftests/bpf/progs/aggregate_ret_kfunc_arena.c-6-#include \"bpf_misc.h\"\ntools/testing/selftests/bpf/progs/aggregate_ret_kfunc_arena.c:7:#include \"../test_kmods/bpf_testmod_kfunc.h\"\ntools/testing/selftests/bpf/progs/aggregate_ret_kfunc_arena.c-8-\n--\ntools/testing/selftests/bpf/progs/arena_kfunc.c-9-#include \u003cbpf_arena_common.h\u003e\ntools/testing/selftests/bpf/progs/arena_kfunc.c:10:#include \"../test_kmods/bpf_testmod_kfunc.h\"\ntools/testing/selftests/bpf/progs/arena_kfunc.c-11-\n--\ntools/testing/selftests/bpf/progs/arena_kfunc_jit.c-14-#include \u003cbpf_arena_common.h\u003e\ntools/testing/selftests/bpf/progs/arena_kfunc_jit.c:15:#include \"../test_kmods/bpf_testmod_kfunc.h\"\ntools/testing/selftests/bpf/progs/arena_kfunc_jit.c-16-\n--\ntools/testing/selftests/bpf/progs/bad_struct_ops.c-5-#include \u003cbpf/bpf_tracing.h\u003e\ntools/testing/selftests/bpf/progs/bad_struct_ops.c:6:#include \"../test_kmods/bpf_testmod.h\"\ntools/testing/selftests/bpf/progs/bad_struct_ops.c-7-\n--\ntools/testing/selftests/bpf/progs/bad_struct_ops.c=16=SEC(\".struct_ops.link\")\ntools/testing/selftests/bpf/progs/bad_struct_ops.c:17:struct bpf_testmod_ops testmod_1 = {\ntools/testing/selftests/bpf/progs/bad_struct_ops.c-18-\t.test_1 = (void *)test_1,\n--\ntools/testing/selftests/bpf/progs/bad_struct_ops.c=22=SEC(\".struct_ops.link\")\ntools/testing/selftests/bpf/progs/bad_struct_ops.c:23:struct bpf_testmod_ops2 testmod_2 = {\ntools/testing/selftests/bpf/progs/bad_struct_ops.c-24-\t.test_1 = (void *)test_1\n--\ntools/testing/selftests/bpf/progs/btf__stack_arg_precision.c-4-#include \u003cbpf/bpf_helpers.h\u003e\ntools/testing/selftests/bpf/progs/btf__stack_arg_precision.c:5:#include \"../test_kmods/bpf_testmod_kfunc.h\"\ntools/testing/selftests/bpf/progs/btf__stack_arg_precision.c-6-\n--\ntools/testing/selftests/bpf/progs/btf_type_tag_percpu.c-6-\ntools/testing/selftests/bpf/progs/btf_type_tag_percpu.c:7:struct bpf_testmod_btf_type_tag_1 {\ntools/testing/selftests/bpf/progs/btf_type_tag_percpu.c-8-\tint a;\n--\ntools/testing/selftests/bpf/progs/btf_type_tag_percpu.c-10-\ntools/testing/selftests/bpf/progs/btf_type_tag_percpu.c:11:struct bpf_testmod_btf_type_tag_2 {\ntools/testing/selftests/bpf/progs/btf_type_tag_percpu.c:12:\tstruct bpf_testmod_btf_type_tag_1 *p;\ntools/testing/selftests/bpf/progs/btf_type_tag_percpu.c-13-};\n--\ntools/testing/selftests/bpf/progs/btf_type_tag_percpu.c=15=__u64 g;\ntools/testing/selftests/bpf/progs/btf_type_tag_percpu.c-16-\ntools/testing/selftests/bpf/progs/btf_type_tag_percpu.c:17:SEC(\"fentry/bpf_testmod_test_btf_type_tag_percpu_1\")\ntools/testing/selftests/bpf/progs/btf_type_tag_percpu.c:18:int BPF_PROG(test_percpu1, struct bpf_testmod_btf_type_tag_1 *arg)\ntools/testing/selftests/bpf/progs/btf_type_tag_percpu.c-19-{\n--\ntools/testing/selftests/bpf/progs/btf_type_tag_percpu.c-23-\ntools/testing/selftests/bpf/progs/btf_type_tag_percpu.c:24:SEC(\"fentry/bpf_testmod_test_btf_type_tag_percpu_2\")\ntools/testing/selftests/bpf/progs/btf_type_tag_percpu.c:25:int BPF_PROG(test_percpu2, struct bpf_testmod_btf_type_tag_2 *arg)\ntools/testing/selftests/bpf/progs/btf_type_tag_percpu.c-26-{\n--\ntools/testing/selftests/bpf/progs/btf_type_tag_user.c-6-\ntools/testing/selftests/bpf/progs/btf_type_tag_user.c:7:struct bpf_testmod_btf_type_tag_1 {\ntools/testing/selftests/bpf/progs/btf_type_tag_user.c-8-\tint a;\n--\ntools/testing/selftests/bpf/progs/btf_type_tag_user.c-10-\ntools/testing/selftests/bpf/progs/btf_type_tag_user.c:11:struct bpf_testmod_btf_type_tag_2 {\ntools/testing/selftests/bpf/progs/btf_type_tag_user.c:12:\tstruct bpf_testmod_btf_type_tag_1 *p;\ntools/testing/selftests/bpf/progs/btf_type_tag_user.c-13-};\n--\ntools/testing/selftests/bpf/progs/btf_type_tag_user.c=15=int g;\ntools/testing/selftests/bpf/progs/btf_type_tag_user.c-16-\ntools/testing/selftests/bpf/progs/btf_type_tag_user.c:17:SEC(\"fentry/bpf_testmod_test_btf_type_tag_user_1\")\ntools/testing/selftests/bpf/progs/btf_type_tag_user.c:18:int BPF_PROG(test_user1, struct bpf_testmod_btf_type_tag_1 *arg)\ntools/testing/selftests/bpf/progs/btf_type_tag_user.c-19-{\n--\ntools/testing/selftests/bpf/progs/btf_type_tag_user.c-23-\ntools/testing/selftests/bpf/progs/btf_type_tag_user.c:24:SEC(\"fentry/bpf_testmod_test_btf_type_tag_user_2\")\ntools/testing/selftests/bpf/progs/btf_type_tag_user.c:25:int BPF_PROG(test_user2, struct bpf_testmod_btf_type_tag_2 *arg)\ntools/testing/selftests/bpf/progs/btf_type_tag_user.c-26-{\n--\ntools/testing/selftests/bpf/progs/cb_refs.c-4-#include \u003cbpf/bpf_helpers.h\u003e\ntools/testing/selftests/bpf/progs/cb_refs.c:5:#include \"../test_kmods/bpf_testmod_kfunc.h\"\ntools/testing/selftests/bpf/progs/cb_refs.c-6-\n--\ntools/testing/selftests/bpf/progs/core_kern.c=66=struct __sk_bUfF /* it will not exist in vmlinux */ {\n--\ntools/testing/selftests/bpf/progs/core_kern.c-69-\ntools/testing/selftests/bpf/progs/core_kern.c:70:struct bpf_testmod_test_read_ctx /* it exists in bpf_testmod */ {\ntools/testing/selftests/bpf/progs/core_kern.c-71-\tsize_t len;\n--\ntools/testing/selftests/bpf/progs/core_kern.c=75=int balancer_ingress(struct __sk_buff *ctx)\n--\ntools/testing/selftests/bpf/progs/core_kern.c-93-\t\t/* this CO-RE relo may or may not resolve\ntools/testing/selftests/bpf/progs/core_kern.c:94:\t\t * depending on whether bpf_testmod is loaded.\ntools/testing/selftests/bpf/progs/core_kern.c-95-\t\t */ \\\ntools/testing/selftests/bpf/progs/core_kern.c:96:\t\ti += ((struct bpf_testmod_test_read_ctx *)ctx)-\u003elen; \\\ntools/testing/selftests/bpf/progs/core_kern.c-97-\t} \\\n--\ntools/testing/selftests/bpf/progs/epilogue_exit.c-6-#include \"bpf_misc.h\"\ntools/testing/selftests/bpf/progs/epilogue_exit.c:7:#include \"../test_kmods/bpf_testmod.h\"\ntools/testing/selftests/bpf/progs/epilogue_exit.c:8:#include \"../test_kmods/bpf_testmod_kfunc.h\"\ntools/testing/selftests/bpf/progs/epilogue_exit.c-9-\n--\ntools/testing/selftests/bpf/progs/epilogue_exit.c=61=SEC(\".struct_ops.link\")\ntools/testing/selftests/bpf/progs/epilogue_exit.c:62:struct bpf_testmod_st_ops epilogue_exit = {\ntools/testing/selftests/bpf/progs/epilogue_exit.c-63-\t.test_epilogue = (void *)test_epilogue_exit,\n--\ntools/testing/selftests/bpf/progs/epilogue_tailcall.c-6-#include \"bpf_misc.h\"\ntools/testing/selftests/bpf/progs/epilogue_tailcall.c:7:#include \"../test_kmods/bpf_testmod.h\"\ntools/testing/selftests/bpf/progs/epilogue_tailcall.c:8:#include \"../test_kmods/bpf_testmod_kfunc.h\"\ntools/testing/selftests/bpf/progs/epilogue_tailcall.c-9-\n--\ntools/testing/selftests/bpf/progs/epilogue_tailcall.c=44=SEC(\".struct_ops.link\")\ntools/testing/selftests/bpf/progs/epilogue_tailcall.c:45:struct bpf_testmod_st_ops epilogue_tailcall = {\ntools/testing/selftests/bpf/progs/epilogue_tailcall.c-46-\t.test_epilogue = (void *)test_epilogue_tailcall,\n--\ntools/testing/selftests/bpf/progs/epilogue_tailcall.c=49=SEC(\".struct_ops.link\")\ntools/testing/selftests/bpf/progs/epilogue_tailcall.c:50:struct bpf_testmod_st_ops epilogue_subprog = {\ntools/testing/selftests/bpf/progs/epilogue_tailcall.c-51-\t.test_epilogue = (void *)test_epilogue_subprog,\n\n"
}

5/2 2026/08/31 09:27 llm patch-evaluator
0m Model:
gemini-3.7-flash

Args:
null

Results:
null

Tokens:
							input: 21515
							output: 66
							thoughts: 352
						

Thoughts:
**My Assessment of This Commit**

Okay, so this commit is entirely contained within `tools/testing/selftests/bpf/`. I need to confirm that. Let me quickly review the changes: `test_struct_ops_multi_args.c`, `struct_ops_multi_args.c`, `bpf_testmod.c`, and `bpf_testmod.h`. Yep, looks like all the changes are within that directory.

No kernel code whatsoever is being touched. This is just selftest code, and the supporting kernel module (`bpf_testmod`). Good. Selftests aren't part of the standard build; they're only executed in the selftest context. They're not targeted by fuzzers like syzkaller, which focuses on syscalls and core kernel interfaces.

Therefore, this patch doesn't introduce any functional changes to the kernel's core logic. It's purely about testing.

Now, I need to make sure this aligns with the "WorthFuzzing=false" criteria. Selftest changes, like these, should absolutely *not* trigger fuzzing. We don't want to waste resources on them. Yes, that's correct.

Alright, I'll call `set-results` with `WorthFuzzing=false`. I also want to set `FocusSymbols` to empty and `EnableConfigs` to empty because the only changes are limited to selftests, and I'll include a clear `Reasoning` message explaining that the patch exclusively modifies selftest files within `tools/testing/selftests/bpf/`. That should cover it.



6/2 2026/08/31 09:27 tool set-results
0m Args:
{
  "EnableConfigs": [],
  "FocusSymbols": [],
  "Reasoning": "The patch only adds and modifies test cases and test kernel module definitions within tools/testing/selftests/bpf/, with no functional modifications to the core Linux kernel.",
  "WorthFuzzing": false
}

Results:
{
  "EnableConfigs": null,
  "FocusSymbols": [],
  "Reasoning": "The patch only adds and modifies test cases and test kernel module definitions within tools/testing/selftests/bpf/, with no functional modifications to the core Linux kernel.",
  "WorthFuzzing": false
}

7/1 2026/08/31 09:27 action If
0m Args:
{
  "WorthFuzzing": false
}

Results:
null

LLM Calls Summary:
Total Calls Total Tokens Avg Tokens Total Duration (Seconds) Avg Duration (Seconds)
Tool Calls Summary:
Total Calls Total Duration (Seconds) Avg Duration (Seconds)