AI Trajectory


Trajectory: (Expand/Collapse All)
Seq Timestamp Type Name Duration
0/0 2026/08/21 20:30 flow patch-triage
0m Args:
null

Results:
{
  "EnableConfigs": null,
  "FocusSymbols": [],
  "KMSANReasoning": "",
  "NeedsKMSAN": false,
  "Reasoning": "The patch only modifies BPF selftests in tools/testing/selftests/bpf, adding a __skip macro to skip unsupported tests instead of running dummy tests. It does not make any functional changes to the core kernel, drivers, or architectures.",
  "WorthFuzzing": false
}

1/1 2026/08/21 20:30 action read-patch-diff
0m Args:
null

Results:
{
  "PatchDiff": "commit 4c58c5370172ae5877919983cf737a9ad379d092\nAuthor: syz-cluster \u003ctriage@syzkaller.com\u003e\nDate:   Fri Aug 21 20:30:03 2026 +0000\n\n    syz-cluster: applied patch under review\n\ndiff --git a/tools/testing/selftests/bpf/progs/arena_kfunc.c b/tools/testing/selftests/bpf/progs/arena_kfunc.c\nindex bf0d304e0e59c..50609f3b0564a 100644\n--- a/tools/testing/selftests/bpf/progs/arena_kfunc.c\n+++ b/tools/testing/selftests/bpf/progs/arena_kfunc.c\n@@ -233,8 +233,9 @@ SEC(\"syscall\")\n __arch_x86_64\n __arch_arm64\n __description(\"arena_arg_stack: not supported, dummy test\")\n+__skip(\"arena_arg_stack: not supported\")\n __success\n-int arena_arg_stack(void *ctx)\n+int dummy_test(void *ctx)\n {\n \treturn 0;\n }\ndiff --git a/tools/testing/selftests/bpf/progs/bpf_misc.h b/tools/testing/selftests/bpf/progs/bpf_misc.h\nindex 5eacf1b432521..eb88d9ce6c348 100644\n--- a/tools/testing/selftests/bpf/progs/bpf_misc.h\n+++ b/tools/testing/selftests/bpf/progs/bpf_misc.h\n@@ -106,6 +106,11 @@\n  * __description     Text to be used for display and as an additional filter\n  *                   alias, while the original program name stays matchable.\n  *\n+ * __skip            Report the test as SKIP with the given reason instead of\n+ *                   running it. For placeholder programs that stand in for a\n+ *                   feature the toolchain or JIT cannot provide, so a run does\n+ *                   not report OK for coverage it never executed.\n+ *\n  * __log_level       Log level to use for the program, numeric value expected.\n  *\n  * __flag            Adds one flag use for the program, the following values are valid:\n@@ -139,6 +144,7 @@\n #define __failure\t\t__test_tag(\"test_expect_failure\")\n #define __success\t\t__test_tag(\"test_expect_success\")\n #define __description(desc)\t__test_tag(\"test_description=\" desc)\n+#define __skip(reason)\t\t__test_tag(\"test_skip=\" reason)\n #define __msg_unpriv(msg)\t__test_tag(\"test_expect_msg_unpriv=\" msg)\n #define __not_msg_unpriv(msg)\t__test_tag(\"test_expect_not_msg_unpriv=\" msg)\n #define __xlated_unpriv(msg)\t__test_tag(\"test_expect_xlated_unpriv=\" msg)\n@@ -255,11 +261,11 @@\n      (defined(__TARGET_ARCH_riscv) \u0026\u0026 __riscv_xlen == 64) ||\t\t\\\n      defined(__TARGET_ARCH_arm) || defined(__TARGET_ARCH_s390) ||\t\\\n      defined(__TARGET_ARCH_loongarch)) \u0026\u0026\t\t\t\t\\\n-\t__clang_major__ \u003e= 18\n+\t(__clang_major__ \u003e= 18 || defined(__BPF_FEATURE_GOTOL))\n #define CAN_USE_GOTOL\n #endif\n \n-#if __clang_major__ \u003e= 18\n+#if __clang_major__ \u003e= 18 || defined(__BPF_FEATURE_ST)\n #define CAN_USE_BPF_ST\n #endif\n \ndiff --git a/tools/testing/selftests/bpf/progs/compute_live_registers.c b/tools/testing/selftests/bpf/progs/compute_live_registers.c\nindex d055fc7b3b95d..904b6f12d7548 100644\n--- a/tools/testing/selftests/bpf/progs/compute_live_registers.c\n+++ b/tools/testing/selftests/bpf/progs/compute_live_registers.c\n@@ -299,7 +299,14 @@ __naked void gotol(void)\n \t\t\"r3 = 24;\"\n \t\t\"if r1 \u003e 0x7 goto +2;\"\n \t\t\"r0 = r2;\"\n+#ifdef __clang__\n \t\t\"gotol +1;\"\n+#else\n+\t\t/* gas mis-parses 'gotol +1' as 'goto l+1', same encoding\n+\t\t * without the sign (binutils PR gas/34558).\n+\t\t */\n+\t\t\"gotol 1;\"\n+#endif\n \t\t\"r0 = r3;\"\n \t\t\"exit;\"\n \t\t:\ndiff --git a/tools/testing/selftests/bpf/progs/stack_arg_fail.c b/tools/testing/selftests/bpf/progs/stack_arg_fail.c\nindex ad9d4bfe15dcc..eed97d5825157 100644\n--- a/tools/testing/selftests/bpf/progs/stack_arg_fail.c\n+++ b/tools/testing/selftests/bpf/progs/stack_arg_fail.c\n@@ -103,8 +103,9 @@ __naked void r11_store_zero_off(void)\n \n SEC(\"tc\")\n __description(\"stack_arg_fail: not supported, dummy test\")\n+__skip(\"stack_arg_fail: not supported\")\n __success\n-int test_stack_arg_big(struct __sk_buff *skb)\n+int dummy_test(struct __sk_buff *skb)\n {\n \treturn 0;\n }\ndiff --git a/tools/testing/selftests/bpf/progs/stack_arg_precision.c b/tools/testing/selftests/bpf/progs/stack_arg_precision.c\nindex bee2eeec021d7..ce0301a41fa94 100644\n--- a/tools/testing/selftests/bpf/progs/stack_arg_precision.c\n+++ b/tools/testing/selftests/bpf/progs/stack_arg_precision.c\n@@ -124,6 +124,7 @@ __naked void stack_arg_precision_bpf2bpf(void)\n \n SEC(\"socket\")\n __description(\"stack_arg_precision: not supported, dummy test\")\n+__skip(\"stack_arg_precision: not supported\")\n __success\n int dummy_test(void)\n {\ndiff --git a/tools/testing/selftests/bpf/progs/verifier_bswap.c b/tools/testing/selftests/bpf/progs/verifier_bswap.c\nindex cffaf36192bc5..48ffb5b242d24 100644\n--- a/tools/testing/selftests/bpf/progs/verifier_bswap.c\n+++ b/tools/testing/selftests/bpf/progs/verifier_bswap.c\n@@ -8,7 +8,7 @@\n \t(defined(__TARGET_ARCH_riscv) \u0026\u0026 __riscv_xlen == 64) || \\\n \tdefined(__TARGET_ARCH_arm) || defined(__TARGET_ARCH_s390) || \\\n \tdefined(__TARGET_ARCH_loongarch)) \u0026\u0026 \\\n-\t__clang_major__ \u003e= 18\n+\t(__clang_major__ \u003e= 18 || defined(__BPF_FEATURE_BSWAP))\n \n SEC(\"socket\")\n __description(\"BSWAP, 16\")\n@@ -117,6 +117,7 @@ l0_%=:\t\t\t\t\t\t\t\\\n \n SEC(\"socket\")\n __description(\"cpuv4 is not supported by compiler or jit, use a dummy test\")\n+__skip(\"cpuv4 is not supported by compiler or jit\")\n __success\n int dummy_test(void)\n {\ndiff --git a/tools/testing/selftests/bpf/progs/verifier_gotol.c b/tools/testing/selftests/bpf/progs/verifier_gotol.c\nindex d5d8f24df3949..c0fd30a3a4c13 100644\n--- a/tools/testing/selftests/bpf/progs/verifier_gotol.c\n+++ b/tools/testing/selftests/bpf/progs/verifier_gotol.c\n@@ -52,6 +52,7 @@ __naked void gotol_large_imm(void)\n \n SEC(\"socket\")\n __description(\"cpuv4 is not supported by compiler or jit, use a dummy test\")\n+__skip(\"cpuv4 is not supported by compiler or jit\")\n __success\n int dummy_test(void)\n {\ndiff --git a/tools/testing/selftests/bpf/progs/verifier_ldsx.c b/tools/testing/selftests/bpf/progs/verifier_ldsx.c\nindex 41340877dc9d9..75762e11b443f 100644\n--- a/tools/testing/selftests/bpf/progs/verifier_ldsx.c\n+++ b/tools/testing/selftests/bpf/progs/verifier_ldsx.c\n@@ -9,13 +9,7 @@\n \t(defined(__TARGET_ARCH_riscv) \u0026\u0026 __riscv_xlen == 64) || \\\n \tdefined(__TARGET_ARCH_arm) || defined(__TARGET_ARCH_s390) || \\\n \tdefined(__TARGET_ARCH_loongarch)) \u0026\u0026 \\\n-\t__clang_major__ \u003e= 18\n-\n-struct {\n-\t__uint(type, BPF_MAP_TYPE_ARENA);\n-\t__uint(map_flags, BPF_F_MMAPABLE);\n-\t__uint(max_entries, 1);\n-} arena SEC(\".maps\");\n+\t(__clang_major__ \u003e= 18 || defined(__BPF_FEATURE_LDSX))\n \n SEC(\"socket\")\n __description(\"LDSX, S8\")\n@@ -263,6 +257,14 @@ __naked void ldsx_ctx_8(void)\n \t: __clobber_all);\n }\n \n+#ifdef __BPF_FEATURE_ADDR_SPACE_CAST\n+\n+struct {\n+\t__uint(type, BPF_MAP_TYPE_ARENA);\n+\t__uint(map_flags, BPF_F_MMAPABLE);\n+\t__uint(max_entries, 1);\n+} arena SEC(\".maps\");\n+\n SEC(\"syscall\")\n __description(\"Arena LDSX Disasm\")\n __success\n@@ -432,10 +434,13 @@ void kfunc_root(void)\n \tbpf_arena_alloc_pages(0, 0, 0, 0, 0);\n }\n \n+#endif /* __BPF_FEATURE_ADDR_SPACE_CAST */\n+\n #else\n \n SEC(\"socket\")\n __description(\"cpuv4 is not supported by compiler or jit, use a dummy test\")\n+__skip(\"cpuv4 is not supported by compiler or jit\")\n __success\n int dummy_test(void)\n {\ndiff --git a/tools/testing/selftests/bpf/progs/verifier_load_acquire.c b/tools/testing/selftests/bpf/progs/verifier_load_acquire.c\nindex d17026d7480d8..bcc34e798c634 100644\n--- a/tools/testing/selftests/bpf/progs/verifier_load_acquire.c\n+++ b/tools/testing/selftests/bpf/progs/verifier_load_acquire.c\n@@ -267,6 +267,7 @@ __naked void load_acquire_with_invalid_reg(void)\n \n SEC(\"socket\")\n __description(\"Clang version \u003c 18, ENABLE_ATOMICS_TESTS not defined, and/or JIT doesn't support load-acquire, use a dummy test\")\n+__skip(\"Clang version \u003c 18, ENABLE_ATOMICS_TESTS not defined, and/or JIT doesn't support load-acquire\")\n __success\n int dummy_test(void)\n {\ndiff --git a/tools/testing/selftests/bpf/progs/verifier_movsx.c b/tools/testing/selftests/bpf/progs/verifier_movsx.c\nindex a4d8814eb5edc..195b27a51224f 100644\n--- a/tools/testing/selftests/bpf/progs/verifier_movsx.c\n+++ b/tools/testing/selftests/bpf/progs/verifier_movsx.c\n@@ -8,7 +8,7 @@\n \t(defined(__TARGET_ARCH_riscv) \u0026\u0026 __riscv_xlen == 64) || \\\n \tdefined(__TARGET_ARCH_arm) || defined(__TARGET_ARCH_s390) || \\\n \tdefined(__TARGET_ARCH_loongarch)) \u0026\u0026 \\\n-\t__clang_major__ \u003e= 18\n+\t(__clang_major__ \u003e= 18 || defined(__BPF_FEATURE_MOVSX))\n \n SEC(\"socket\")\n __description(\"MOV32SX, S8\")\n@@ -343,6 +343,7 @@ label_%=: \t                                        \\\n \n SEC(\"socket\")\n __description(\"cpuv4 is not supported by compiler or jit, use a dummy test\")\n+__skip(\"cpuv4 is not supported by compiler or jit\")\n __success\n int dummy_test(void)\n {\ndiff --git a/tools/testing/selftests/bpf/progs/verifier_private_stack.c b/tools/testing/selftests/bpf/progs/verifier_private_stack.c\nindex ea0a7e73331da..3d9994a52464e 100644\n--- a/tools/testing/selftests/bpf/progs/verifier_private_stack.c\n+++ b/tools/testing/selftests/bpf/progs/verifier_private_stack.c\n@@ -377,6 +377,7 @@ int private_stack_max_depth(void)\n \n SEC(\"kprobe\")\n __description(\"private stack is not supported, use a dummy test\")\n+__skip(\"private stack is not supported\")\n __success\n int dummy_test(void)\n {\ndiff --git a/tools/testing/selftests/bpf/progs/verifier_sdiv.c b/tools/testing/selftests/bpf/progs/verifier_sdiv.c\nindex 95f3239ce228b..d6cbe1e27fd6b 100644\n--- a/tools/testing/selftests/bpf/progs/verifier_sdiv.c\n+++ b/tools/testing/selftests/bpf/progs/verifier_sdiv.c\n@@ -9,7 +9,7 @@\n \t(defined(__TARGET_ARCH_riscv) \u0026\u0026 __riscv_xlen == 64) || \\\n \tdefined(__TARGET_ARCH_arm) || defined(__TARGET_ARCH_s390) || \\\n \tdefined(__TARGET_ARCH_loongarch)) \u0026\u0026 \\\n-\t__clang_major__ \u003e= 18\n+\t(__clang_major__ \u003e= 18 || defined(__BPF_FEATURE_SDIV_SMOD))\n \n SEC(\"socket\")\n __description(\"SDIV32, non-zero imm divisor, check 1\")\n@@ -1271,6 +1271,7 @@ __naked void smod32_int_min_mod_neg2_imm(void)\n \n SEC(\"socket\")\n __description(\"cpuv4 is not supported by compiler or jit, use a dummy test\")\n+__skip(\"cpuv4 is not supported by compiler or jit\")\n __success\n int dummy_test(void)\n {\ndiff --git a/tools/testing/selftests/bpf/progs/verifier_stack_arg.c b/tools/testing/selftests/bpf/progs/verifier_stack_arg.c\nindex 7e0ce5db28a0d..51d22faf4559f 100644\n--- a/tools/testing/selftests/bpf/progs/verifier_stack_arg.c\n+++ b/tools/testing/selftests/bpf/progs/verifier_stack_arg.c\n@@ -436,6 +436,7 @@ __naked void stack_arg_sequential_calls(void)\n \n SEC(\"socket\")\n __description(\"stack_arg is not supported by compiler or jit, use a dummy test\")\n+__skip(\"stack_arg is not supported by compiler or jit\")\n __success\n int dummy_test(void)\n {\ndiff --git a/tools/testing/selftests/bpf/progs/verifier_stack_arg_order.c b/tools/testing/selftests/bpf/progs/verifier_stack_arg_order.c\nindex c9fe4857da3f5..8e4325273b3d8 100644\n--- a/tools/testing/selftests/bpf/progs/verifier_stack_arg_order.c\n+++ b/tools/testing/selftests/bpf/progs/verifier_stack_arg_order.c\n@@ -174,6 +174,7 @@ __naked void stack_arg_read_without_write_2(void)\n \n SEC(\"socket\")\n __description(\"stack_arg order is not supported by compiler or jit, use a dummy test\")\n+__skip(\"stack_arg order is not supported by compiler or jit\")\n __success\n int dummy_test(void)\n {\ndiff --git a/tools/testing/selftests/bpf/progs/verifier_store_release.c b/tools/testing/selftests/bpf/progs/verifier_store_release.c\nindex 72f1eb0060748..0abbee5ce1092 100644\n--- a/tools/testing/selftests/bpf/progs/verifier_store_release.c\n+++ b/tools/testing/selftests/bpf/progs/verifier_store_release.c\n@@ -290,6 +290,7 @@ __naked void store_release_with_invalid_reg(void)\n \n SEC(\"socket\")\n __description(\"Clang version \u003c 18, ENABLE_ATOMICS_TESTS not defined, and/or JIT doesn't support store-release, use a dummy test\")\n+__skip(\"Clang version \u003c 18, ENABLE_ATOMICS_TESTS not defined, and/or JIT doesn't support store-release\")\n __success\n int dummy_test(void)\n {\ndiff --git a/tools/testing/selftests/bpf/test_loader.c b/tools/testing/selftests/bpf/test_loader.c\nindex 07807757b518d..794a7dfb05796 100644\n--- a/tools/testing/selftests/bpf/test_loader.c\n+++ b/tools/testing/selftests/bpf/test_loader.c\n@@ -70,6 +70,7 @@ struct test_spec {\n \tint arch_mask;\n \tint load_mask;\n \tint linear_sz;\n+\tconst char *skip_reason;\n \tbool auxiliary;\n \tbool valid;\n };\n@@ -456,6 +457,8 @@ static int parse_test_spec(struct test_loader *tester,\n \t\t\tcontinue;\n \t\tif ((val = str_has_pfx(s, \"test_description=\"))) {\n \t\t\tdescription = val;\n+\t\t} else if ((val = str_has_pfx(s, \"test_skip=\"))) {\n+\t\t\tspec-\u003eskip_reason = val;\n \t\t} else if (strcmp(s, \"test_expect_failure\") == 0) {\n \t\t\tspec-\u003epriv.expect_failure = true;\n \t\t\tspec-\u003emode_mask |= PRIV;\n@@ -1327,6 +1330,12 @@ void run_subtest(struct test_loader *tester,\n \tif (!test__start_subtest_with_desc(subspec-\u003ename, subspec-\u003edescription))\n \t\treturn;\n \n+\tif (spec-\u003eskip_reason) {\n+\t\tprintf(\"%s:SKIP: %s\\n\", __func__, spec-\u003eskip_reason);\n+\t\ttest__skip();\n+\t\treturn;\n+\t}\n+\n \tif ((get_current_arch() \u0026 spec-\u003earch_mask) == 0) {\n \t\ttest__skip();\n \t\treturn;\n"
}

2/1 2026/08/21 20:30 agent patch-evaluator
0m Model:
best-expensive

Args:
null

Results:
{
  "EnableConfigs": null,
  "FocusSymbols": [],
  "Reasoning": "The patch only modifies BPF selftests in tools/testing/selftests/bpf, adding a __skip macro to skip unsupported tests instead of running dummy tests. It does not make any functional changes to the core kernel, drivers, or architectures.",
  "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 4c58c5370172ae5877919983cf737a9ad379d092
Author: syz-cluster <triage@syzkaller.com>
Date:   Fri Aug 21 20:30:03 2026 +0000

    syz-cluster: applied patch under review

diff --git a/tools/testing/selftests/bpf/progs/arena_kfunc.c b/tools/testing/selftests/bpf/progs/arena_kfunc.c
index bf0d304e0e59c..50609f3b0564a 100644
--- a/tools/testing/selftests/bpf/progs/arena_kfunc.c
+++ b/tools/testing/selftests/bpf/progs/arena_kfunc.c
@@ -233,8 +233,9 @@ SEC("syscall")
 __arch_x86_64
 __arch_arm64
 __description("arena_arg_stack: not supported, dummy test")
+__skip("arena_arg_stack: not supported")
 __success
-int arena_arg_stack(void *ctx)
+int dummy_test(void *ctx)
 {
 	return 0;
 }
diff --git a/tools/testing/selftests/bpf/progs/bpf_misc.h b/tools/testing/selftests/bpf/progs/bpf_misc.h
index 5eacf1b432521..eb88d9ce6c348 100644
--- a/tools/testing/selftests/bpf/progs/bpf_misc.h
+++ b/tools/testing/selftests/bpf/progs/bpf_misc.h
@@ -106,6 +106,11 @@
  * __description     Text to be used for display and as an additional filter
  *                   alias, while the original program name stays matchable.
  *
+ * __skip            Report the test as SKIP with the given reason instead of
+ *                   running it. For placeholder programs that stand in for a
+ *                   feature the toolchain or JIT cannot provide, so a run does
+ *                   not report OK for coverage it never executed.
+ *
  * __log_level       Log level to use for the program, numeric value expected.
  *
  * __flag            Adds one flag use for the program, the following values are valid:
@@ -139,6 +144,7 @@
 #define __failure		__test_tag("test_expect_failure")
 #define __success		__test_tag("test_expect_success")
 #define __description(desc)	__test_tag("test_description=" desc)
+#define __skip(reason)		__test_tag("test_skip=" reason)
 #define __msg_unpriv(msg)	__test_tag("test_expect_msg_unpriv=" msg)
 #define __not_msg_unpriv(msg)	__test_tag("test_expect_not_msg_unpriv=" msg)
 #define __xlated_unpriv(msg)	__test_tag("test_expect_xlated_unpriv=" msg)
@@ -255,11 +261,11 @@
      (defined(__TARGET_ARCH_riscv) && __riscv_xlen == 64) ||		\
      defined(__TARGET_ARCH_arm) || defined(__TARGET_ARCH_s390) ||	\
      defined(__TARGET_ARCH_loongarch)) &&				\
-	__clang_major__ >= 18
+	(__clang_major__ >= 18 || defined(__BPF_FEATURE_GOTOL))
 #define CAN_USE_GOTOL
 #endif
 
-#if __clang_major__ >= 18
+#if __clang_major__ >= 18 || defined(__BPF_FEATURE_ST)
 #define CAN_USE_BPF_ST
 #endif
 
diff --git a/tools/testing/selftests/bpf/progs/compute_live_registers.c b/tools/testing/selftests/bpf/progs/compute_live_registers.c
index d055fc7b3b95d..904b6f12d7548 100644
--- a/tools/testing/selftests/bpf/progs/compute_live_registers.c
+++ b/tools/testing/selftests/bpf/progs/compute_live_registers.c
@@ -299,7 +299,14 @@ __naked void gotol(void)
 		"r3 = 24;"
 		"if r1 > 0x7 goto +2;"
 		"r0 = r2;"
+#ifdef __clang__
 		"gotol +1;"
+#else
+		/* gas mis-parses 'gotol +1' as 'goto l+1', same encoding
+		 * without the sign (binutils PR gas/34558).
+		 */
+		"gotol 1;"
+#endif
 		"r0 = r3;"
 		"exit;"
 		:
diff --git a/tools/testing/selftests/bpf/progs/stack_arg_fail.c b/tools/testing/selftests/bpf/progs/stack_arg_fail.c
index ad9d4bfe15dcc..eed97d5825157 100644
--- a/tools/testing/selftests/bpf/progs/stack_arg_fail.c
+++ b/tools/testing/selftests/bpf/progs/stack_arg_fail.c
@@ -103,8 +103,9 @@ __naked void r11_store_zero_off(void)
 
 SEC("tc")
 __description("stack_arg_fail: not supported, dummy test")
+__skip("stack_arg_fail: not supported")
 __success
-int test_stack_arg_big(struct __sk_buff *skb)
+int dummy_test(struct __sk_buff *skb)
 {
 	return 0;
 }
diff --git a/tools/testing/selftests/bpf/progs/stack_arg_precision.c b/tools/testing/selftests/bpf/progs/stack_arg_precision.c
index bee2eeec021d7..ce0301a41fa94 100644
--- a/tools/testing/selftests/bpf/progs/stack_arg_precision.c
+++ b/tools/testing/selftests/bpf/progs/stack_arg_precision.c
@@ -124,6 +124,7 @@ __naked void stack_arg_precision_bpf2bpf(void)
 
 SEC("socket")
 __description("stack_arg_precision: not supported, dummy test")
+__skip("stack_arg_precision: not supported")
 __success
 int dummy_test(void)
 {
diff --git a/tools/testing/selftests/bpf/progs/verifier_bswap.c b/tools/testing/selftests/bpf/progs/verifier_bswap.c
index cffaf36192bc5..48ffb5b242d24 100644
--- a/tools/testing/selftests/bpf/progs/verifier_bswap.c
+++ b/tools/testing/selftests/bpf/progs/verifier_bswap.c
@@ -8,7 +8,7 @@
 	(defined(__TARGET_ARCH_riscv) && __riscv_xlen == 64) || \
 	defined(__TARGET_ARCH_arm) || defined(__TARGET_ARCH_s390) || \
 	defined(__TARGET_ARCH_loongarch)) && \
-	__clang_major__ >= 18
+	(__clang_major__ >= 18 || defined(__BPF_FEATURE_BSWAP))
 
 SEC("socket")
 __description("BSWAP, 16")
@@ -117,6 +117,7 @@ l0_%=:							\
 
 SEC("socket")
 __description("cpuv4 is not supported by compiler or jit, use a dummy test")
+__skip("cpuv4 is not supported by compiler or jit")
 __success
 int dummy_test(void)
 {
diff --git a/tools/testing/selftests/bpf/progs/verifier_gotol.c b/tools/testing/selftests/bpf/progs/verifier_gotol.c
index d5d8f24df3949..c0fd30a3a4c13 100644
--- a/tools/testing/selftests/bpf/progs/verifier_gotol.c
+++ b/tools/testing/selftests/bpf/progs/verifier_gotol.c
@@ -52,6 +52,7 @@ __naked void gotol_large_imm(void)
 
 SEC("socket")
 __description("cpuv4 is not supported by compiler or jit, use a dummy test")
+__skip("cpuv4 is not supported by compiler or jit")
 __success
 int dummy_test(void)
 {
diff --git a/tools/testing/selftests/bpf/progs/verifier_ldsx.c b/tools/testing/selftests/bpf/progs/verifier_ldsx.c
index 41340877dc9d9..75762e11b443f 100644
--- a/tools/testing/selftests/bpf/progs/verifier_ldsx.c
+++ b/tools/testing/selftests/bpf/progs/verifier_ldsx.c
@@ -9,13 +9,7 @@
 	(defined(__TARGET_ARCH_riscv) && __riscv_xlen == 64) || \
 	defined(__TARGET_ARCH_arm) || defined(__TARGET_ARCH_s390) || \
 	defined(__TARGET_ARCH_loongarch)) && \
-	__clang_major__ >= 18
-
-struct {
-	__uint(type, BPF_MAP_TYPE_ARENA);
-	__uint(map_flags, BPF_F_MMAPABLE);
-	__uint(max_entries, 1);
-} arena SEC(".maps");
+	(__clang_major__ >= 18 || defined(__BPF_FEATURE_LDSX))
 
 SEC("socket")
 __description("LDSX, S8")
@@ -263,6 +257,14 @@ __naked void ldsx_ctx_8(void)
 	: __clobber_all);
 }
 
+#ifdef __BPF_FEATURE_ADDR_SPACE_CAST
+
+struct {
+	__uint(type, BPF_MAP_TYPE_ARENA);
+	__uint(map_flags, BPF_F_MMAPABLE);
+	__uint(max_entries, 1);
+} arena SEC(".maps");
+
 SEC("syscall")
 __description("Arena LDSX Disasm")
 __success
@@ -432,10 +434,13 @@ void kfunc_root(void)
 	bpf_arena_alloc_pages(0, 0, 0, 0, 0);
 }
 
+#endif /* __BPF_FEATURE_ADDR_SPACE_CAST */
+
 #else
 
 SEC("socket")
 __description("cpuv4 is not supported by compiler or jit, use a dummy test")
+__skip("cpuv4 is not supported by compiler or jit")
 __success
 int dummy_test(void)
 {
diff --git a/tools/testing/selftests/bpf/progs/verifier_load_acquire.c b/tools/testing/selftests/bpf/progs/verifier_load_acquire.c
index d17026d7480d8..bcc34e798c634 100644
--- a/tools/testing/selftests/bpf/progs/verifier_load_acquire.c
+++ b/tools/testing/selftests/bpf/progs/verifier_load_acquire.c
@@ -267,6 +267,7 @@ __naked void load_acquire_with_invalid_reg(void)
 
 SEC("socket")
 __description("Clang version < 18, ENABLE_ATOMICS_TESTS not defined, and/or JIT doesn't support load-acquire, use a dummy test")
+__skip("Clang version < 18, ENABLE_ATOMICS_TESTS not defined, and/or JIT doesn't support load-acquire")
 __success
 int dummy_test(void)
 {
diff --git a/tools/testing/selftests/bpf/progs/verifier_movsx.c b/tools/testing/selftests/bpf/progs/verifier_movsx.c
index a4d8814eb5edc..195b27a51224f 100644
--- a/tools/testing/selftests/bpf/progs/verifier_movsx.c
+++ b/tools/testing/selftests/bpf/progs/verifier_movsx.c
@@ -8,7 +8,7 @@
 	(defined(__TARGET_ARCH_riscv) && __riscv_xlen == 64) || \
 	defined(__TARGET_ARCH_arm) || defined(__TARGET_ARCH_s390) || \
 	defined(__TARGET_ARCH_loongarch)) && \
-	__clang_major__ >= 18
+	(__clang_major__ >= 18 || defined(__BPF_FEATURE_MOVSX))
 
 SEC("socket")
 __description("MOV32SX, S8")
@@ -343,6 +343,7 @@ label_%=: 	                                        \
 
 SEC("socket")
 __description("cpuv4 is not supported by compiler or jit, use a dummy test")
+__skip("cpuv4 is not supported by compiler or jit")
 __success
 int dummy_test(void)
 {
diff --git a/tools/testing/selftests/bpf/progs/verifier_private_stack.c b/tools/testing/selftests/bpf/progs/verifier_private_stack.c
index ea0a7e73331da..3d9994a52464e 100644
--- a/tools/testing/selftests/bpf/progs/verifier_private_stack.c
+++ b/tools/testing/selftests/bpf/progs/verifier_private_stack.c
@@ -377,6 +377,7 @@ int private_stack_max_depth(void)
 
 SEC("kprobe")
 __description("private stack is not supported, use a dummy test")
+__skip("private stack is not supported")
 __success
 int dummy_test(void)
 {
diff --git a/tools/testing/selftests/bpf/progs/verifier_sdiv.c b/tools/testing/selftests/bpf/progs/verifier_sdiv.c
index 95f3239ce228b..d6cbe1e27fd6b 100644
--- a/tools/testing/selftests/bpf/progs/verifier_sdiv.c
+++ b/tools/testing/selftests/bpf/progs/verifier_sdiv.c
@@ -9,7 +9,7 @@
 	(defined(__TARGET_ARCH_riscv) && __riscv_xlen == 64) || \
 	defined(__TARGET_ARCH_arm) || defined(__TARGET_ARCH_s390) || \
 	defined(__TARGET_ARCH_loongarch)) && \
-	__clang_major__ >= 18
+	(__clang_major__ >= 18 || defined(__BPF_FEATURE_SDIV_SMOD))
 
 SEC("socket")
 __description("SDIV32, non-zero imm divisor, check 1")
@@ -1271,6 +1271,7 @@ __naked void smod32_int_min_mod_neg2_imm(void)
 
 SEC("socket")
 __description("cpuv4 is not supported by compiler or jit, use a dummy test")
+__skip("cpuv4 is not supported by compiler or jit")
 __success
 int dummy_test(void)
 {
diff --git a/tools/testing/selftests/bpf/progs/verifier_stack_arg.c b/tools/testing/selftests/bpf/progs/verifier_stack_arg.c
index 7e0ce5db28a0d..51d22faf4559f 100644
--- a/tools/testing/selftests/bpf/progs/verifier_stack_arg.c
+++ b/tools/testing/selftests/bpf/progs/verifier_stack_arg.c
@@ -436,6 +436,7 @@ __naked void stack_arg_sequential_calls(void)
 
 SEC("socket")
 __description("stack_arg is not supported by compiler or jit, use a dummy test")
+__skip("stack_arg is not supported by compiler or jit")
 __success
 int dummy_test(void)
 {
diff --git a/tools/testing/selftests/bpf/progs/verifier_stack_arg_order.c b/tools/testing/selftests/bpf/progs/verifier_stack_arg_order.c
index c9fe4857da3f5..8e4325273b3d8 100644
--- a/tools/testing/selftests/bpf/progs/verifier_stack_arg_order.c
+++ b/tools/testing/selftests/bpf/progs/verifier_stack_arg_order.c
@@ -174,6 +174,7 @@ __naked void stack_arg_read_without_write_2(void)
 
 SEC("socket")
 __description("stack_arg order is not supported by compiler or jit, use a dummy test")
+__skip("stack_arg order is not supported by compiler or jit")
 __success
 int dummy_test(void)
 {
diff --git a/tools/testing/selftests/bpf/progs/verifier_store_release.c b/tools/testing/selftests/bpf/progs/verifier_store_release.c
index 72f1eb0060748..0abbee5ce1092 100644
--- a/tools/testing/selftests/bpf/progs/verifier_store_release.c
+++ b/tools/testing/selftests/bpf/progs/verifier_store_release.c
@@ -290,6 +290,7 @@ __naked void store_release_with_invalid_reg(void)
 
 SEC("socket")
 __description("Clang version < 18, ENABLE_ATOMICS_TESTS not defined, and/or JIT doesn't support store-release, use a dummy test")
+__skip("Clang version < 18, ENABLE_ATOMICS_TESTS not defined, and/or JIT doesn't support store-release")
 __success
 int dummy_test(void)
 {
diff --git a/tools/testing/selftests/bpf/test_loader.c b/tools/testing/selftests/bpf/test_loader.c
index 07807757b518d..794a7dfb05796 100644
--- a/tools/testing/selftests/bpf/test_loader.c
+++ b/tools/testing/selftests/bpf/test_loader.c
@@ -70,6 +70,7 @@ struct test_spec {
 	int arch_mask;
 	int load_mask;
 	int linear_sz;
+	const char *skip_reason;
 	bool auxiliary;
 	bool valid;
 };
@@ -456,6 +457,8 @@ static int parse_test_spec(struct test_loader *tester,
 			continue;
 		if ((val = str_has_pfx(s, "test_description="))) {
 			description = val;
+		} else if ((val = str_has_pfx(s, "test_skip="))) {
+			spec->skip_reason = val;
 		} else if (strcmp(s, "test_expect_failure") == 0) {
 			spec->priv.expect_failure = true;
 			spec->mode_mask |= PRIV;
@@ -1327,6 +1330,12 @@ void run_subtest(struct test_loader *tester,
 	if (!test__start_subtest_with_desc(subspec->name, subspec->description))
 		return;
 
+	if (spec->skip_reason) {
+		printf("%s:SKIP: %s\n", __func__, spec->skip_reason);
+		test__skip();
+		return;
+	}
+
 	if ((get_current_arch() & spec->arch_mask) == 0) {
 		test__skip();
 		return;

3/2 2026/08/21 20:30 llm patch-evaluator
0m Model:
gemini-3.1-pro-preview

Args:
null

Results:
null

Tokens:
							input: 6930
							output: 84
							thoughts: 573
						

Thoughts:
**WorthFuzzing=false: Analyzing the BPF Selftest Patch**

Okay, let's break this down. This patch is focused solely on modifications within `tools/testing/selftests/bpf/`. It's introducing a `__skip` macro, which is a common pattern for conditionally disabling tests when the required features aren't present. And it's also modifying `test_loader.c` to handle parsing a `test_skip=` directive, again, designed to bypass test execution.

Crucially, there's nothing here that touches the core kernel, any drivers, or any specific architecture code. All changes are contained within the BPF selftest infrastructure itself. That means no functional changes to the kernel that would warrant fuzzing.

Before I give the "all clear," let me quickly double-check the diff. The modified files include:

*   `tools/testing/selftests/bpf/progs/arena_kfunc.c`
*   `tools/testing/selftests/bpf/progs/bpf_misc.h`
*   `tools/testing/selftests/bpf/progs/compute_live_registers.c`
*   `tools/testing/selftests/bpf/progs/stack_arg_fail.c`
*   `tools/testing/selftests/bpf/progs/stack_arg_precision.c`
*   `tools/testing/selftests/bpf/progs/verifier_bswap.c`
*   `tools/testing/selftests/bpf/progs/verifier_gotol.c`
*   `tools/testing/selftests/bpf/progs/verifier_ldsx.c`
*   `tools/testing/selftests/bpf/progs/verifier_load_acquire.c`
*   `tools/testing/selftests/bpf/progs/verifier_movsx.c`
*   `tools/testing/selftests/bpf/progs/verifier_private_stack.c`
*   `tools/testing/selftests/bpf/progs/verifier_sdiv.c`
*   `tools/testing/selftests/bpf/progs/verifier_stack_arg.c`
*   `tools/testing/selftests/bpf/progs/verifier_stack_arg_order.c`
*   `tools/testing/selftests/bpf/progs/verifier_store_release.c`
*   `tools/testing/selftests/bpf/test_loader.c`

Yes, all those files are exactly where I expected them to be, confirming the scope of the change. Therefore, I'm confident that these modifications are purely confined to the BPF testing environment. I'm going to call `set-results` with `WorthFuzzing=false`.



4/2 2026/08/21 20:30 tool set-results
0m Args:
{
  "EnableConfigs": [],
  "FocusSymbols": [],
  "Reasoning": "The patch only modifies BPF selftests in tools/testing/selftests/bpf, adding a __skip macro to skip unsupported tests instead of running dummy tests. It does not make any functional changes to the core kernel, drivers, or architectures.",
  "WorthFuzzing": false
}

Results:
{
  "EnableConfigs": null,
  "FocusSymbols": [],
  "Reasoning": "The patch only modifies BPF selftests in tools/testing/selftests/bpf, adding a __skip macro to skip unsupported tests instead of running dummy tests. It does not make any functional changes to the core kernel, drivers, or architectures.",
  "WorthFuzzing": false
}

5/1 2026/08/21 20:30 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)