AI Trajectory


Trajectory: (Expand/Collapse All)
Seq Timestamp Type Name Duration
0/0 2026/08/10 17:13 flow patch-triage
0m Args:
null

Results:
{
  "EnableConfigs": null,
  "FocusSymbols": [],
  "KMSANReasoning": "",
  "NeedsKMSAN": false,
  "Reasoning": "The patch only adds and modifies BPF selftests in tools/testing/selftests/bpf/. It does not make any functional changes to the kernel code itself.",
  "WorthFuzzing": false
}

1/1 2026/08/10 17:13 action read-patch-diff
0m Args:
null

Results:
{
  "PatchDiff": "commit 70204f281f5ff5d1cfdc0abcb36799bc6ca260cc\nAuthor: syz-cluster \u003ctriage@syzkaller.com\u003e\nDate:   Mon Aug 10 17:13:13 2026 +0000\n\n    syz-cluster: applied patch under review\n\ndiff --git a/tools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c b/tools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c\nnew file mode 100644\nindex 0000000000000..19500b785ee32\n--- /dev/null\n+++ b/tools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c\n@@ -0,0 +1,142 @@\n+// SPDX-License-Identifier: GPL-2.0\n+/* Copyright (c) 2025 Meta Platforms, Inc. and affiliates. */\n+\n+#include \u003ctest_progs.h\u003e\n+#include \u003cunistd.h\u003e\n+#include \"test_sleepable_tracepoints.skel.h\"\n+#include \"test_sleepable_tracepoints_fail.skel.h\"\n+\n+static void run_test(struct test_sleepable_tracepoints *skel)\n+{\n+\tchar buf[PATH_MAX] = \"/\";\n+\n+\tskel-\u003ebss-\u003etarget_pid = getpid();\n+\tskel-\u003ebss-\u003eprog_triggered = 0;\n+\tskel-\u003ebss-\u003eerr = 0;\n+\tskel-\u003ebss-\u003ecopied_byte = 0;\n+\n+\tsyscall(__NR_getcwd, buf, sizeof(buf));\n+\n+\tASSERT_EQ(skel-\u003ebss-\u003eprog_triggered, 1, \"prog_triggered\");\n+\tASSERT_EQ(skel-\u003ebss-\u003eerr, 0, \"err\");\n+\tASSERT_EQ(skel-\u003ebss-\u003ecopied_byte, '/', \"copied_byte\");\n+}\n+\n+static void run_auto_attach_test(struct bpf_program *prog,\n+\t\t\t\t struct test_sleepable_tracepoints *skel)\n+{\n+\tstruct bpf_link *link;\n+\n+\tlink = bpf_program__attach(prog);\n+\tif (!ASSERT_OK_PTR(link, \"prog_attach\"))\n+\t\treturn;\n+\n+\trun_test(skel);\n+\tbpf_link__destroy(link);\n+}\n+\n+static void test_attach_only(struct bpf_program *prog)\n+{\n+\tstruct bpf_link *link;\n+\n+\tlink = bpf_program__attach(prog);\n+\tif (ASSERT_OK_PTR(link, \"attach\"))\n+\t\tbpf_link__destroy(link);\n+}\n+\n+static void test_attach_reject(struct bpf_program *prog)\n+{\n+\tstruct bpf_link *link;\n+\n+\tlink = bpf_program__attach(prog);\n+\tif (!ASSERT_ERR_PTR(link, \"attach_should_fail\"))\n+\t\tbpf_link__destroy(link);\n+}\n+\n+static void test_raw_tp_bare(struct test_sleepable_tracepoints *skel)\n+{\n+\tstruct bpf_link *link;\n+\n+\tlink = bpf_program__attach_raw_tracepoint(skel-\u003eprogs.handle_raw_tp_bare,\n+\t\t\t\t\t\t  \"sys_enter\");\n+\tif (ASSERT_OK_PTR(link, \"attach\"))\n+\t\tbpf_link__destroy(link);\n+}\n+\n+static void test_tp_bare(struct test_sleepable_tracepoints *skel)\n+{\n+\tstruct bpf_link *link;\n+\n+\tlink = bpf_program__attach_tracepoint(skel-\u003eprogs.handle_tp_bare,\n+\t\t\t\t\t      \"syscalls\", \"sys_enter_getcwd\");\n+\tif (ASSERT_OK_PTR(link, \"attach\"))\n+\t\tbpf_link__destroy(link);\n+}\n+\n+static void test_test_run(struct test_sleepable_tracepoints *skel)\n+{\n+\t__u64 args[2] = {0x1234ULL, 0x5678ULL};\n+\tLIBBPF_OPTS(bpf_test_run_opts, topts,\n+\t\t.ctx_in = args,\n+\t\t.ctx_size_in = sizeof(args),\n+\t);\n+\tint fd, err;\n+\n+\tfd = bpf_program__fd(skel-\u003eprogs.handle_test_run);\n+\terr = bpf_prog_test_run_opts(fd, \u0026topts);\n+\tASSERT_OK(err, \"test_run\");\n+\tASSERT_EQ(topts.retval, args[0] + args[1], \"test_run_retval\");\n+}\n+\n+static void test_test_run_on_cpu_reject(struct test_sleepable_tracepoints *skel)\n+{\n+\t__u64 args[2] = {};\n+\tLIBBPF_OPTS(bpf_test_run_opts, topts,\n+\t\t.ctx_in = args,\n+\t\t.ctx_size_in = sizeof(args),\n+\t\t.flags = BPF_F_TEST_RUN_ON_CPU,\n+\t);\n+\tint fd, err;\n+\n+\tfd = bpf_program__fd(skel-\u003eprogs.handle_test_run);\n+\terr = bpf_prog_test_run_opts(fd, \u0026topts);\n+\tASSERT_ERR(err, \"test_run_on_cpu_reject\");\n+}\n+\n+void test_sleepable_tracepoints(void)\n+{\n+\tstruct test_sleepable_tracepoints *skel;\n+\n+\tskel = test_sleepable_tracepoints__open_and_load();\n+\tif (!ASSERT_OK_PTR(skel, \"open_and_load\"))\n+\t\treturn;\n+\n+\tif (test__start_subtest(\"tp_btf\"))\n+\t\trun_auto_attach_test(skel-\u003eprogs.handle_sys_enter_tp_btf, skel);\n+\tif (test__start_subtest(\"raw_tp\"))\n+\t\trun_auto_attach_test(skel-\u003eprogs.handle_sys_enter_raw_tp, skel);\n+\tif (test__start_subtest(\"tracepoint\"))\n+\t\trun_auto_attach_test(skel-\u003eprogs.handle_sys_enter_tp, skel);\n+\tif (test__start_subtest(\"sys_exit\"))\n+\t\trun_auto_attach_test(skel-\u003eprogs.handle_sys_exit_tp, skel);\n+\tif (test__start_subtest(\"tracepoint_alias\"))\n+\t\ttest_attach_only(skel-\u003eprogs.handle_sys_enter_tp_alias);\n+\tif (test__start_subtest(\"raw_tracepoint_alias\"))\n+\t\ttest_attach_only(skel-\u003eprogs.handle_sys_enter_raw_tp_alias);\n+\tif (test__start_subtest(\"raw_tp_bare\"))\n+\t\ttest_raw_tp_bare(skel);\n+\tif (test__start_subtest(\"tp_bare\"))\n+\t\ttest_tp_bare(skel);\n+\tif (test__start_subtest(\"test_run\"))\n+\t\ttest_test_run(skel);\n+\tif (test__start_subtest(\"test_run_on_cpu_reject\"))\n+\t\ttest_test_run_on_cpu_reject(skel);\n+\tif (test__start_subtest(\"raw_tp_non_faultable\"))\n+\t\ttest_attach_reject(skel-\u003eprogs.handle_raw_tp_non_faultable);\n+\tif (test__start_subtest(\"tp_non_syscall\"))\n+\t\ttest_attach_reject(skel-\u003eprogs.handle_tp_non_syscall);\n+\tif (test__start_subtest(\"tp_btf_non_faultable_reject\"))\n+\t\tRUN_TESTS(test_sleepable_tracepoints_fail);\n+\n+\ttest_sleepable_tracepoints__destroy(skel);\n+}\ndiff --git a/tools/testing/selftests/bpf/progs/test_sleepable_tracepoints.c b/tools/testing/selftests/bpf/progs/test_sleepable_tracepoints.c\nnew file mode 100644\nindex 0000000000000..254f7fd895d9f\n--- /dev/null\n+++ b/tools/testing/selftests/bpf/progs/test_sleepable_tracepoints.c\n@@ -0,0 +1,112 @@\n+// SPDX-License-Identifier: GPL-2.0\n+/* Copyright (c) 2025 Meta Platforms, Inc. and affiliates. */\n+\n+#include \u003cvmlinux.h\u003e\n+#include \u003casm/unistd.h\u003e\n+#include \u003cbpf/bpf_tracing.h\u003e\n+#include \u003cbpf/bpf_core_read.h\u003e\n+#include \u003cbpf/bpf_helpers.h\u003e\n+\n+char _license[] SEC(\"license\") = \"GPL\";\n+\n+int target_pid;\n+int prog_triggered;\n+long err;\n+char copied_byte;\n+\n+static int copy_getcwd_arg(char *ubuf)\n+{\n+\terr = bpf_copy_from_user(\u0026copied_byte, sizeof(copied_byte), ubuf);\n+\tif (err)\n+\t\treturn err;\n+\n+\tprog_triggered = 1;\n+\treturn 0;\n+}\n+\n+SEC(\"tp_btf.s/sys_enter\")\n+int BPF_PROG(handle_sys_enter_tp_btf, struct pt_regs *regs, long id)\n+{\n+\tif ((bpf_get_current_pid_tgid() \u003e\u003e 32) != target_pid ||\n+\t    id != __NR_getcwd)\n+\t\treturn 0;\n+\n+\treturn copy_getcwd_arg((void *)PT_REGS_PARM1_SYSCALL(regs));\n+}\n+\n+SEC(\"raw_tp.s/sys_enter\")\n+int BPF_PROG(handle_sys_enter_raw_tp, struct pt_regs *regs, long id)\n+{\n+\tif ((bpf_get_current_pid_tgid() \u003e\u003e 32) != target_pid ||\n+\t    id != __NR_getcwd)\n+\t\treturn 0;\n+\n+\treturn copy_getcwd_arg((void *)PT_REGS_PARM1_CORE_SYSCALL(regs));\n+}\n+\n+SEC(\"tp.s/syscalls/sys_enter_getcwd\")\n+int handle_sys_enter_tp(struct syscall_trace_enter *args)\n+{\n+\tif ((bpf_get_current_pid_tgid() \u003e\u003e 32) != target_pid)\n+\t\treturn 0;\n+\n+\treturn copy_getcwd_arg((void *)args-\u003eargs[0]);\n+}\n+\n+SEC(\"tp.s/syscalls/sys_exit_getcwd\")\n+int handle_sys_exit_tp(struct syscall_trace_exit *args)\n+{\n+\tstruct pt_regs *regs;\n+\n+\tif ((bpf_get_current_pid_tgid() \u003e\u003e 32) != target_pid)\n+\t\treturn 0;\n+\n+\tregs = (struct pt_regs *)bpf_task_pt_regs(bpf_get_current_task_btf());\n+\treturn copy_getcwd_arg((void *)PT_REGS_PARM1_CORE_SYSCALL(regs));\n+}\n+\n+SEC(\"raw_tp.s\")\n+int BPF_PROG(handle_raw_tp_bare, struct pt_regs *regs, long id)\n+{\n+\treturn 0;\n+}\n+\n+SEC(\"tp.s\")\n+int handle_tp_bare(void *ctx)\n+{\n+\treturn 0;\n+}\n+\n+SEC(\"tracepoint.s/syscalls/sys_enter_getcwd\")\n+int handle_sys_enter_tp_alias(struct syscall_trace_enter *args)\n+{\n+\treturn 0;\n+}\n+\n+SEC(\"raw_tracepoint.s/sys_enter\")\n+int BPF_PROG(handle_sys_enter_raw_tp_alias, struct pt_regs *regs, long id)\n+{\n+\treturn 0;\n+}\n+\n+SEC(\"raw_tp.s/sys_enter\")\n+int BPF_PROG(handle_test_run, struct pt_regs *regs, long id)\n+{\n+\tif ((__u64)regs == 0x1234ULL \u0026\u0026 (__u64)id == 0x5678ULL)\n+\t\treturn (__u64)regs + (__u64)id;\n+\n+\treturn 0;\n+}\n+\n+SEC(\"raw_tp.s/sched_switch\")\n+int BPF_PROG(handle_raw_tp_non_faultable, bool preempt,\n+\t     struct task_struct *prev, struct task_struct *next)\n+{\n+\treturn 0;\n+}\n+\n+SEC(\"tp.s/sched/sched_switch\")\n+int handle_tp_non_syscall(void *ctx)\n+{\n+\treturn 0;\n+}\ndiff --git a/tools/testing/selftests/bpf/progs/test_sleepable_tracepoints_fail.c b/tools/testing/selftests/bpf/progs/test_sleepable_tracepoints_fail.c\nnew file mode 100644\nindex 0000000000000..1a0748a9520bb\n--- /dev/null\n+++ b/tools/testing/selftests/bpf/progs/test_sleepable_tracepoints_fail.c\n@@ -0,0 +1,18 @@\n+// SPDX-License-Identifier: GPL-2.0\n+/* Copyright (c) 2025 Meta Platforms, Inc. and affiliates. */\n+\n+#include \u003cvmlinux.h\u003e\n+#include \u003cbpf/bpf_tracing.h\u003e\n+#include \u003cbpf/bpf_helpers.h\u003e\n+#include \"bpf_misc.h\"\n+\n+char _license[] SEC(\"license\") = \"GPL\";\n+\n+/* Sleepable program on a non-faultable tracepoint should fail to load */\n+SEC(\"tp_btf.s/sched_switch\")\n+__failure __msg(\"Sleepable program cannot attach to non-faultable tracepoint\")\n+int BPF_PROG(handle_sched_switch, bool preempt,\n+\t     struct task_struct *prev, struct task_struct *next)\n+{\n+\treturn 0;\n+}\ndiff --git a/tools/testing/selftests/bpf/verifier/sleepable.c b/tools/testing/selftests/bpf/verifier/sleepable.c\nindex c2b7f5ebf168c..6dabc55229455 100644\n--- a/tools/testing/selftests/bpf/verifier/sleepable.c\n+++ b/tools/testing/selftests/bpf/verifier/sleepable.c\n@@ -76,7 +76,20 @@\n \t.runs = -1,\n },\n {\n-\t\"sleepable raw tracepoint reject\",\n+\t\"sleepable raw tracepoint accept\",\n+\t.insns = {\n+\tBPF_MOV64_IMM(BPF_REG_0, 0),\n+\tBPF_EXIT_INSN(),\n+\t},\n+\t.prog_type = BPF_PROG_TYPE_TRACING,\n+\t.expected_attach_type = BPF_TRACE_RAW_TP,\n+\t.kfunc = \"sys_enter\",\n+\t.result = ACCEPT,\n+\t.flags = BPF_F_SLEEPABLE,\n+\t.runs = -1,\n+},\n+{\n+\t\"sleepable raw tracepoint reject non-faultable\",\n \t.insns = {\n \tBPF_MOV64_IMM(BPF_REG_0, 0),\n \tBPF_EXIT_INSN(),\n@@ -85,7 +98,7 @@\n \t.expected_attach_type = BPF_TRACE_RAW_TP,\n \t.kfunc = \"sched_switch\",\n \t.result = REJECT,\n-\t.errstr = \"Only fentry/fexit/fsession/fmod_ret, lsm, iter, uprobe, and struct_ops programs can be sleepable\",\n+\t.errstr = \"Sleepable program cannot attach to non-faultable tracepoint\",\n \t.flags = BPF_F_SLEEPABLE,\n \t.runs = -1,\n },\n"
}

2/1 2026/08/10 17:13 agent patch-evaluator
0m Model:
best-expensive

Args:
null

Results:
{
  "EnableConfigs": null,
  "FocusSymbols": [],
  "Reasoning": "The patch only adds and modifies BPF selftests in tools/testing/selftests/bpf/. It does not make any functional changes to the kernel code itself.",
  "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 70204f281f5ff5d1cfdc0abcb36799bc6ca260cc
Author: syz-cluster <triage@syzkaller.com>
Date:   Mon Aug 10 17:13:13 2026 +0000

    syz-cluster: applied patch under review

diff --git a/tools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c b/tools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c
new file mode 100644
index 0000000000000..19500b785ee32
--- /dev/null
+++ b/tools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c
@@ -0,0 +1,142 @@
+// SPDX-License-Identifier: GPL-2.0
+/* Copyright (c) 2025 Meta Platforms, Inc. and affiliates. */
+
+#include <test_progs.h>
+#include <unistd.h>
+#include "test_sleepable_tracepoints.skel.h"
+#include "test_sleepable_tracepoints_fail.skel.h"
+
+static void run_test(struct test_sleepable_tracepoints *skel)
+{
+	char buf[PATH_MAX] = "/";
+
+	skel->bss->target_pid = getpid();
+	skel->bss->prog_triggered = 0;
+	skel->bss->err = 0;
+	skel->bss->copied_byte = 0;
+
+	syscall(__NR_getcwd, buf, sizeof(buf));
+
+	ASSERT_EQ(skel->bss->prog_triggered, 1, "prog_triggered");
+	ASSERT_EQ(skel->bss->err, 0, "err");
+	ASSERT_EQ(skel->bss->copied_byte, '/', "copied_byte");
+}
+
+static void run_auto_attach_test(struct bpf_program *prog,
+				 struct test_sleepable_tracepoints *skel)
+{
+	struct bpf_link *link;
+
+	link = bpf_program__attach(prog);
+	if (!ASSERT_OK_PTR(link, "prog_attach"))
+		return;
+
+	run_test(skel);
+	bpf_link__destroy(link);
+}
+
+static void test_attach_only(struct bpf_program *prog)
+{
+	struct bpf_link *link;
+
+	link = bpf_program__attach(prog);
+	if (ASSERT_OK_PTR(link, "attach"))
+		bpf_link__destroy(link);
+}
+
+static void test_attach_reject(struct bpf_program *prog)
+{
+	struct bpf_link *link;
+
+	link = bpf_program__attach(prog);
+	if (!ASSERT_ERR_PTR(link, "attach_should_fail"))
+		bpf_link__destroy(link);
+}
+
+static void test_raw_tp_bare(struct test_sleepable_tracepoints *skel)
+{
+	struct bpf_link *link;
+
+	link = bpf_program__attach_raw_tracepoint(skel->progs.handle_raw_tp_bare,
+						  "sys_enter");
+	if (ASSERT_OK_PTR(link, "attach"))
+		bpf_link__destroy(link);
+}
+
+static void test_tp_bare(struct test_sleepable_tracepoints *skel)
+{
+	struct bpf_link *link;
+
+	link = bpf_program__attach_tracepoint(skel->progs.handle_tp_bare,
+					      "syscalls", "sys_enter_getcwd");
+	if (ASSERT_OK_PTR(link, "attach"))
+		bpf_link__destroy(link);
+}
+
+static void test_test_run(struct test_sleepable_tracepoints *skel)
+{
+	__u64 args[2] = {0x1234ULL, 0x5678ULL};
+	LIBBPF_OPTS(bpf_test_run_opts, topts,
+		.ctx_in = args,
+		.ctx_size_in = sizeof(args),
+	);
+	int fd, err;
+
+	fd = bpf_program__fd(skel->progs.handle_test_run);
+	err = bpf_prog_test_run_opts(fd, &topts);
+	ASSERT_OK(err, "test_run");
+	ASSERT_EQ(topts.retval, args[0] + args[1], "test_run_retval");
+}
+
+static void test_test_run_on_cpu_reject(struct test_sleepable_tracepoints *skel)
+{
+	__u64 args[2] = {};
+	LIBBPF_OPTS(bpf_test_run_opts, topts,
+		.ctx_in = args,
+		.ctx_size_in = sizeof(args),
+		.flags = BPF_F_TEST_RUN_ON_CPU,
+	);
+	int fd, err;
+
+	fd = bpf_program__fd(skel->progs.handle_test_run);
+	err = bpf_prog_test_run_opts(fd, &topts);
+	ASSERT_ERR(err, "test_run_on_cpu_reject");
+}
+
+void test_sleepable_tracepoints(void)
+{
+	struct test_sleepable_tracepoints *skel;
+
+	skel = test_sleepable_tracepoints__open_and_load();
+	if (!ASSERT_OK_PTR(skel, "open_and_load"))
+		return;
+
+	if (test__start_subtest("tp_btf"))
+		run_auto_attach_test(skel->progs.handle_sys_enter_tp_btf, skel);
+	if (test__start_subtest("raw_tp"))
+		run_auto_attach_test(skel->progs.handle_sys_enter_raw_tp, skel);
+	if (test__start_subtest("tracepoint"))
+		run_auto_attach_test(skel->progs.handle_sys_enter_tp, skel);
+	if (test__start_subtest("sys_exit"))
+		run_auto_attach_test(skel->progs.handle_sys_exit_tp, skel);
+	if (test__start_subtest("tracepoint_alias"))
+		test_attach_only(skel->progs.handle_sys_enter_tp_alias);
+	if (test__start_subtest("raw_tracepoint_alias"))
+		test_attach_only(skel->progs.handle_sys_enter_raw_tp_alias);
+	if (test__start_subtest("raw_tp_bare"))
+		test_raw_tp_bare(skel);
+	if (test__start_subtest("tp_bare"))
+		test_tp_bare(skel);
+	if (test__start_subtest("test_run"))
+		test_test_run(skel);
+	if (test__start_subtest("test_run_on_cpu_reject"))
+		test_test_run_on_cpu_reject(skel);
+	if (test__start_subtest("raw_tp_non_faultable"))
+		test_attach_reject(skel->progs.handle_raw_tp_non_faultable);
+	if (test__start_subtest("tp_non_syscall"))
+		test_attach_reject(skel->progs.handle_tp_non_syscall);
+	if (test__start_subtest("tp_btf_non_faultable_reject"))
+		RUN_TESTS(test_sleepable_tracepoints_fail);
+
+	test_sleepable_tracepoints__destroy(skel);
+}
diff --git a/tools/testing/selftests/bpf/progs/test_sleepable_tracepoints.c b/tools/testing/selftests/bpf/progs/test_sleepable_tracepoints.c
new file mode 100644
index 0000000000000..254f7fd895d9f
--- /dev/null
+++ b/tools/testing/selftests/bpf/progs/test_sleepable_tracepoints.c
@@ -0,0 +1,112 @@
+// SPDX-License-Identifier: GPL-2.0
+/* Copyright (c) 2025 Meta Platforms, Inc. and affiliates. */
+
+#include <vmlinux.h>
+#include <asm/unistd.h>
+#include <bpf/bpf_tracing.h>
+#include <bpf/bpf_core_read.h>
+#include <bpf/bpf_helpers.h>
+
+char _license[] SEC("license") = "GPL";
+
+int target_pid;
+int prog_triggered;
+long err;
+char copied_byte;
+
+static int copy_getcwd_arg(char *ubuf)
+{
+	err = bpf_copy_from_user(&copied_byte, sizeof(copied_byte), ubuf);
+	if (err)
+		return err;
+
+	prog_triggered = 1;
+	return 0;
+}
+
+SEC("tp_btf.s/sys_enter")
+int BPF_PROG(handle_sys_enter_tp_btf, struct pt_regs *regs, long id)
+{
+	if ((bpf_get_current_pid_tgid() >> 32) != target_pid ||
+	    id != __NR_getcwd)
+		return 0;
+
+	return copy_getcwd_arg((void *)PT_REGS_PARM1_SYSCALL(regs));
+}
+
+SEC("raw_tp.s/sys_enter")
+int BPF_PROG(handle_sys_enter_raw_tp, struct pt_regs *regs, long id)
+{
+	if ((bpf_get_current_pid_tgid() >> 32) != target_pid ||
+	    id != __NR_getcwd)
+		return 0;
+
+	return copy_getcwd_arg((void *)PT_REGS_PARM1_CORE_SYSCALL(regs));
+}
+
+SEC("tp.s/syscalls/sys_enter_getcwd")
+int handle_sys_enter_tp(struct syscall_trace_enter *args)
+{
+	if ((bpf_get_current_pid_tgid() >> 32) != target_pid)
+		return 0;
+
+	return copy_getcwd_arg((void *)args->args[0]);
+}
+
+SEC("tp.s/syscalls/sys_exit_getcwd")
+int handle_sys_exit_tp(struct syscall_trace_exit *args)
+{
+	struct pt_regs *regs;
+
+	if ((bpf_get_current_pid_tgid() >> 32) != target_pid)
+		return 0;
+
+	regs = (struct pt_regs *)bpf_task_pt_regs(bpf_get_current_task_btf());
+	return copy_getcwd_arg((void *)PT_REGS_PARM1_CORE_SYSCALL(regs));
+}
+
+SEC("raw_tp.s")
+int BPF_PROG(handle_raw_tp_bare, struct pt_regs *regs, long id)
+{
+	return 0;
+}
+
+SEC("tp.s")
+int handle_tp_bare(void *ctx)
+{
+	return 0;
+}
+
+SEC("tracepoint.s/syscalls/sys_enter_getcwd")
+int handle_sys_enter_tp_alias(struct syscall_trace_enter *args)
+{
+	return 0;
+}
+
+SEC("raw_tracepoint.s/sys_enter")
+int BPF_PROG(handle_sys_enter_raw_tp_alias, struct pt_regs *regs, long id)
+{
+	return 0;
+}
+
+SEC("raw_tp.s/sys_enter")
+int BPF_PROG(handle_test_run, struct pt_regs *regs, long id)
+{
+	if ((__u64)regs == 0x1234ULL && (__u64)id == 0x5678ULL)
+		return (__u64)regs + (__u64)id;
+
+	return 0;
+}
+
+SEC("raw_tp.s/sched_switch")
+int BPF_PROG(handle_raw_tp_non_faultable, bool preempt,
+	     struct task_struct *prev, struct task_struct *next)
+{
+	return 0;
+}
+
+SEC("tp.s/sched/sched_switch")
+int handle_tp_non_syscall(void *ctx)
+{
+	return 0;
+}
diff --git a/tools/testing/selftests/bpf/progs/test_sleepable_tracepoints_fail.c b/tools/testing/selftests/bpf/progs/test_sleepable_tracepoints_fail.c
new file mode 100644
index 0000000000000..1a0748a9520bb
--- /dev/null
+++ b/tools/testing/selftests/bpf/progs/test_sleepable_tracepoints_fail.c
@@ -0,0 +1,18 @@
+// SPDX-License-Identifier: GPL-2.0
+/* Copyright (c) 2025 Meta Platforms, Inc. and affiliates. */
+
+#include <vmlinux.h>
+#include <bpf/bpf_tracing.h>
+#include <bpf/bpf_helpers.h>
+#include "bpf_misc.h"
+
+char _license[] SEC("license") = "GPL";
+
+/* Sleepable program on a non-faultable tracepoint should fail to load */
+SEC("tp_btf.s/sched_switch")
+__failure __msg("Sleepable program cannot attach to non-faultable tracepoint")
+int BPF_PROG(handle_sched_switch, bool preempt,
+	     struct task_struct *prev, struct task_struct *next)
+{
+	return 0;
+}
diff --git a/tools/testing/selftests/bpf/verifier/sleepable.c b/tools/testing/selftests/bpf/verifier/sleepable.c
index c2b7f5ebf168c..6dabc55229455 100644
--- a/tools/testing/selftests/bpf/verifier/sleepable.c
+++ b/tools/testing/selftests/bpf/verifier/sleepable.c
@@ -76,7 +76,20 @@
 	.runs = -1,
 },
 {
-	"sleepable raw tracepoint reject",
+	"sleepable raw tracepoint accept",
+	.insns = {
+	BPF_MOV64_IMM(BPF_REG_0, 0),
+	BPF_EXIT_INSN(),
+	},
+	.prog_type = BPF_PROG_TYPE_TRACING,
+	.expected_attach_type = BPF_TRACE_RAW_TP,
+	.kfunc = "sys_enter",
+	.result = ACCEPT,
+	.flags = BPF_F_SLEEPABLE,
+	.runs = -1,
+},
+{
+	"sleepable raw tracepoint reject non-faultable",
 	.insns = {
 	BPF_MOV64_IMM(BPF_REG_0, 0),
 	BPF_EXIT_INSN(),
@@ -85,7 +98,7 @@
 	.expected_attach_type = BPF_TRACE_RAW_TP,
 	.kfunc = "sched_switch",
 	.result = REJECT,
-	.errstr = "Only fentry/fexit/fsession/fmod_ret, lsm, iter, uprobe, and struct_ops programs can be sleepable",
+	.errstr = "Sleepable program cannot attach to non-faultable tracepoint",
 	.flags = BPF_F_SLEEPABLE,
 	.runs = -1,
 },

3/2 2026/08/10 17:13 llm patch-evaluator
0m Model:
gemini-3.1-pro-preview

Args:
null

Results:
null

Tokens:
							input: 5837
							output: 20
							thoughts: 185
						

Thoughts:
**Analyzing the BPF Sleepable Tracepoint Patch**

Okay, so I've got this patch here that's supposedly adding tests for sleepable tracepoints within BPF. My initial instinct is to make sure it's self-contained; I don't want any unexpected regressions in core kernel functionality. So, the first thing I'm doing is checking if any files *outside* of the `tools/testing/selftests/bpf/` directory have been touched. That's the primary area of concern when adding new self tests.

Alright, the diff confirms it. It looks like the changes are all isolated within that specific testing framework. Let me take a closer look at the modified files just to confirm. Okay, I see:

*   `tools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c` - This is expected, the test definitions.
*   `tools/testing/selftests/bpf/progs/test_sleepable_tracepoints.c` - This is also expected, the successful program to use.
*   `tools/testing/selftests/bpf/progs/test_sleepable_tracepoints_fail.c` - And of course, the failure test program.
*   `tools/testing/selftests/bpf/verifier/sleepable.c` - This is interesting. Looks like we're updating the verifier to allow for these sleepable tracepoints. That's exactly what I'd expect.

I still want to be absolutely sure. Let me quickly double-check using `git log` or `git show`, just to rule out any potential surprises in the overall commit. Just a sanity check at this point.



4/2 2026/08/10 17:13 tool grepper
0m Args:
{
  "Expression": "sleepable raw tracepoint accept"
}

Results:
{
  "Output": "tools/testing/selftests/bpf/verifier/sleepable.c-78-{\ntools/testing/selftests/bpf/verifier/sleepable.c:79:\t\"sleepable raw tracepoint accept\",\ntools/testing/selftests/bpf/verifier/sleepable.c-80-\t.insns = {\n"
}

5/2 2026/08/10 17:13 llm patch-evaluator
0m Model:
gemini-3.1-pro-preview

Args:
null

Results:
null

Tokens:
							input: 6508
							output: 26
							thoughts: 69
						

Thoughts:
Here's my thought process, as requested:

**Analyzing the Commit Diff**

Okay, hold on a second. This diff... it looks like the *complete* diff for the commit, right? Let me just confirm that. I need to be sure I'm seeing the whole picture here. Now, let me quickly go back and review the commit message. Ah, "syz-cluster: applied patch under review." Right, that narrows it down. It looks like the changes are isolated to `tools/testing/selftests/bpf/`. That's good; it keeps the scope relatively contained. Just to be absolutely thorough, though, I'm going to quickly check if there are any *other* kernel-level modifications in HEAD that might relate to this particular area. I need to get a broader view of the system before I dig further. This is a common situation with syz-cluster patches.



6/2 2026/08/10 17:13 tool grepper
0m Args:
{
  "Expression": "Sleepable program cannot attach to non-faultable tracepoint"
}

Results:
{
  "Output": "tools/testing/selftests/bpf/progs/test_sleepable_tracepoints_fail.c=12=SEC(\"tp_btf.s/sched_switch\")\ntools/testing/selftests/bpf/progs/test_sleepable_tracepoints_fail.c:13:__failure __msg(\"Sleepable program cannot attach to non-faultable tracepoint\")\ntools/testing/selftests/bpf/progs/test_sleepable_tracepoints_fail.c-14-int BPF_PROG(handle_sched_switch, bool preempt,\n--\ntools/testing/selftests/bpf/verifier/sleepable.c-100-\t.result = REJECT,\ntools/testing/selftests/bpf/verifier/sleepable.c:101:\t.errstr = \"Sleepable program cannot attach to non-faultable tracepoint\",\ntools/testing/selftests/bpf/verifier/sleepable.c-102-\t.flags = BPF_F_SLEEPABLE,\n"
}

7/2 2026/08/10 17:13 llm patch-evaluator
0m Model:
gemini-3.1-pro-preview

Args:
null

Results:
null

Tokens:
							input: 7054
							output: 23
							thoughts: 16
						

Thoughts:
Okay, here's my interpretation of that thought process, tailored for an expert audience, and written in the first person:

**Digging Deeper into Commit Scope**

Right, before I get too far down this rabbit hole, I need to take a step back and make sure I'm seeing the whole picture. I've got this commit in front of me, but I can't just assume it's isolated. It's too easy to miss something crucial, especially in a large codebase. I'm going to quickly check the commit details again, and look for any clues. I need to run a quick `git` command or use my IDE's functionality to identify *all* files touched by this commit, not just the immediately obvious ones. It's a fundamental part of the review process. This is to see if any seemingly unrelated changes were included, and I also need to see if any depend on this change. This quick check will give me confidence I'm considering all relevant impacts before I dive into the nitty-gritty. I don't want to get blindsided later by a cascading effect I didn't anticipate.



8/2 2026/08/10 17:13 tool grepper
0m Error:
no matches

Args:
{
  "Expression": "syz-cluster: applied patch under review"
}

Results:
{
  "error": "no matches"
}

9/2 2026/08/10 17:13 llm patch-evaluator
0m Model:
gemini-3.1-pro-preview

Args:
null

Results:
null

Tokens:
							input: 7347
							output: 43
							thoughts: 11
						

Thoughts:
Here's a summary of my immediate thought process:

**Reviewing Current Changes with Git**

Okay, time to get a quick overview of what I've been working on, probably before I commit or push. The fastest way to see the current state is to use `git show --stat HEAD`. That command will concisely summarize the changes in my working directory compared to the last commit, right? Specifically, it'll show me the number of insertions and deletions for each file modified, which is exactly what I need for a rapid assessment. This avoids a full diff, which might be overkill right now. I just want the bird's-eye view, the file-level impact. Let's see what it tells me.



10/2 2026/08/10 17:13 tool grepper
0m Args:
{
  "Expression": ".*",
  "PathPrefix": "tools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c"
}

Results:
{
  "Output": "tools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:1:// SPDX-License-Identifier: GPL-2.0\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:2:/* Copyright (c) 2025 Meta Platforms, Inc. and affiliates. */\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:3:\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:4:#include \u003ctest_progs.h\u003e\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:5:#include \u003cunistd.h\u003e\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:6:#include \"test_sleepable_tracepoints.skel.h\"\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:7:#include \"test_sleepable_tracepoints_fail.skel.h\"\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:8:\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:9:static void run_test(struct test_sleepable_tracepoints *skel)\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:10:{\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:11:\tchar buf[PATH_MAX] = \"/\";\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:12:\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:13:\tskel-\u003ebss-\u003etarget_pid = getpid();\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:14:\tskel-\u003ebss-\u003eprog_triggered = 0;\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:15:\tskel-\u003ebss-\u003eerr = 0;\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:16:\tskel-\u003ebss-\u003ecopied_byte = 0;\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:17:\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:18:\tsyscall(__NR_getcwd, buf, sizeof(buf));\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:19:\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:20:\tASSERT_EQ(skel-\u003ebss-\u003eprog_triggered, 1, \"prog_triggered\");\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:21:\tASSERT_EQ(skel-\u003ebss-\u003eerr, 0, \"err\");\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:22:\tASSERT_EQ(skel-\u003ebss-\u003ecopied_byte, '/', \"copied_byte\");\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:23:}\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:24:\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:25:static void run_auto_attach_test(struct bpf_program *prog,\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:26:\t\t\t\t struct test_sleepable_tracepoints *skel)\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:27:{\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:28:\tstruct bpf_link *link;\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:29:\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:30:\tlink = bpf_program__attach(prog);\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:31:\tif (!ASSERT_OK_PTR(link, \"prog_attach\"))\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:32:\t\treturn;\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:33:\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:34:\trun_test(skel);\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:35:\tbpf_link__destroy(link);\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:36:}\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:37:\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:38:static void test_attach_only(struct bpf_program *prog)\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:39:{\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:40:\tstruct bpf_link *link;\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:41:\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:42:\tlink = bpf_program__attach(prog);\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:43:\tif (ASSERT_OK_PTR(link, \"attach\"))\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:44:\t\tbpf_link__destroy(link);\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:45:}\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:46:\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:47:static void test_attach_reject(struct bpf_program *prog)\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:48:{\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:49:\tstruct bpf_link *link;\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:50:\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:51:\tlink = bpf_program__attach(prog);\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:52:\tif (!ASSERT_ERR_PTR(link, \"attach_should_fail\"))\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:53:\t\tbpf_link__destroy(link);\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:54:}\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:55:\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:56:static void test_raw_tp_bare(struct test_sleepable_tracepoints *skel)\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:57:{\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:58:\tstruct bpf_link *link;\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:59:\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:60:\tlink = bpf_program__attach_raw_tracepoint(skel-\u003eprogs.handle_raw_tp_bare,\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:61:\t\t\t\t\t\t  \"sys_enter\");\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:62:\tif (ASSERT_OK_PTR(link, \"attach\"))\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:63:\t\tbpf_link__destroy(link);\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:64:}\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:65:\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:66:static void test_tp_bare(struct test_sleepable_tracepoints *skel)\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:67:{\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:68:\tstruct bpf_link *link;\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:69:\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:70:\tlink = bpf_program__attach_tracepoint(skel-\u003eprogs.handle_tp_bare,\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:71:\t\t\t\t\t      \"syscalls\", \"sys_enter_getcwd\");\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:72:\tif (ASSERT_OK_PTR(link, \"attach\"))\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:73:\t\tbpf_link__destroy(link);\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:74:}\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:75:\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:76:static void test_test_run(struct test_sleepable_tracepoints *skel)\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:77:{\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:78:\t__u64 args[2] = {0x1234ULL, 0x5678ULL};\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:79:\tLIBBPF_OPTS(bpf_test_run_opts, topts,\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:80:\t\t.ctx_in = args,\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:81:\t\t.ctx_size_in = sizeof(args),\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:82:\t);\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:83:\tint fd, err;\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:84:\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:85:\tfd = bpf_program__fd(skel-\u003eprogs.handle_test_run);\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:86:\terr = bpf_prog_test_run_opts(fd, \u0026topts);\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:87:\tASSERT_OK(err, \"test_run\");\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:88:\tASSERT_EQ(topts.retval, args[0] + args[1], \"test_run_retval\");\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:89:}\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:90:\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:91:static void test_test_run_on_cpu_reject(struct test_sleepable_tracepoints *skel)\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:92:{\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:93:\t__u64 args[2] = {};\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:94:\tLIBBPF_OPTS(bpf_test_run_opts, topts,\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:95:\t\t.ctx_in = args,\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:96:\t\t.ctx_size_in = sizeof(args),\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:97:\t\t.flags = BPF_F_TEST_RUN_ON_CPU,\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:98:\t);\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:99:\tint fd, err;\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:100:\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:101:\tfd = bpf_program__fd(skel-\u003eprogs.handle_test_run);\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:102:\terr = bpf_prog_test_run_opts(fd, \u0026topts);\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:103:\tASSERT_ERR(err, \"test_run_on_cpu_reject\");\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:104:}\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:105:\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:106:void test_sleepable_tracepoints(void)\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:107:{\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:108:\tstruct test_sleepable_tracepoints *skel;\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:109:\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:110:\tskel = test_sleepable_tracepoints__open_and_load();\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:111:\tif (!ASSERT_OK_PTR(skel, \"open_and_load\"))\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:112:\t\treturn;\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:113:\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:114:\tif (test__start_subtest(\"tp_btf\"))\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:115:\t\trun_auto_attach_test(skel-\u003eprogs.handle_sys_enter_tp_btf, skel);\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:116:\tif (test__start_subtest(\"raw_tp\"))\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:117:\t\trun_auto_attach_test(skel-\u003eprogs.handle_sys_enter_raw_tp, skel);\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:118:\tif (test__start_subtest(\"tracepoint\"))\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:119:\t\trun_auto_attach_test(skel-\u003eprogs.handle_sys_enter_tp, skel);\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:120:\tif (test__start_subtest(\"sys_exit\"))\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:121:\t\trun_auto_attach_test(skel-\u003eprogs.handle_sys_exit_tp, skel);\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:122:\tif (test__start_subtest(\"tracepoint_alias\"))\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:123:\t\ttest_attach_only(skel-\u003eprogs.handle_sys_enter_tp_alias);\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:124:\tif (test__start_subtest(\"raw_tracepoint_alias\"))\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:125:\t\ttest_attach_only(skel-\u003eprogs.handle_sys_enter_raw_tp_alias);\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:126:\tif (test__start_subtest(\"raw_tp_bare\"))\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:127:\t\ttest_raw_tp_bare(skel);\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:128:\tif (test__start_subtest(\"tp_bare\"))\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:129:\t\ttest_tp_bare(skel);\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:130:\tif (test__start_subtest(\"test_run\"))\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:131:\t\ttest_test_run(skel);\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:132:\tif (test__start_subtest(\"test_run_on_cpu_reject\"))\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:133:\t\ttest_test_run_on_cpu_reject(skel);\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:134:\tif (test__start_subtest(\"raw_tp_non_faultable\"))\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:135:\t\ttest_attach_reject(skel-\u003eprogs.handle_raw_tp_non_faultable);\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:136:\tif (test__start_subtest(\"tp_non_syscall\"))\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:137:\t\ttest_attach_reject(skel-\u003eprogs.handle_tp_non_syscall);\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:138:\tif (test__start_subtest(\"tp_btf_non_faultable_reject\"))\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:139:\t\tRUN_TESTS(test_sleepable_tracepoints_fail);\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:140:\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:141:\ttest_sleepable_tracepoints__destroy(skel);\ntools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c:142:}\n"
}

11/2 2026/08/10 17:13 llm patch-evaluator
0m Model:
gemini-3.1-pro-preview

Args:
null

Results:
null

Tokens:
							input: 12949
							output: 67
							thoughts: 565
						

Thoughts:
**WorthFuzzing Decision - Selftests Only**

Okay, let's break this down. The prompt indicates I should assess whether this patch warrants fuzzing, and I need to determine if `WorthFuzzing` should be `false`.

First, let me confirm: the diff provided precisely reflects the applied changes. It's solely within the `tools/testing/selftests/bpf/` directory. No changes are being made to the kernel's core source code, nothing in `kernel/bpf/`, `net/core/`, or anywhere else that would directly alter kernel execution.

The nature of this patch, by its location, points to modifications only within the selftests framework. Selftests, in my understanding, are user-space test programs. They are not part of the kernel's operational code that is executed during normal operation or the fuzzing process itself. Therefore, even though "selftests" isn't explicitly listed in the reasons to return `false`, the intent matches - this isn't making functional changes to the kernel that should be fuzzed. It's user-space testing.

Let me just double-check, no other files were modified beyond the `tools/testing/selftests/bpf/` directory.

The diff lists these files:

*   `tools/testing/selftests/bpf/prog_tests/sleepable_tracepoints.c`
*   `tools/testing/selftests/bpf/progs/test_sleepable_tracepoints.c`
*   `tools/testing/selftests/bpf/progs/test_sleepable_tracepoints_fail.c`
*   `tools/testing/selftests/bpf/verifier/sleepable.c`

Yes, they are all contained within `tools/testing/selftests/bpf/`, as expected. So, considering all of this, my assessment is that `WorthFuzzing` should definitely be set to `false`.



12/2 2026/08/10 17:13 tool set-results
0m Args:
{
  "EnableConfigs": [],
  "FocusSymbols": [],
  "Reasoning": "The patch only adds and modifies BPF selftests in tools/testing/selftests/bpf/. It does not make any functional changes to the kernel code itself.",
  "WorthFuzzing": false
}

Results:
{
  "EnableConfigs": null,
  "FocusSymbols": [],
  "Reasoning": "The patch only adds and modifies BPF selftests in tools/testing/selftests/bpf/. It does not make any functional changes to the kernel code itself.",
  "WorthFuzzing": false
}

13/1 2026/08/10 17:13 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)