> diff --git a/tools/testing/selftests/bpf/Makefile > b/tools/testing/selftests/bpf/Makefile > index 6094fe99b5f6..cc6ee7a2df93 100644 > --- a/tools/testing/selftests/bpf/Makefile > +++ b/tools/testing/selftests/bpf/Makefile
[ ... ] > diff --git a/tools/testing/selftests/bpf/test_kmods/Makefile > b/tools/testing/selftests/bpf/test_kmods/Makefile > index 63c4d3f6a12f..031c7454ce65 100644 > --- a/tools/testing/selftests/bpf/test_kmods/Makefile > +++ b/tools/testing/selftests/bpf/test_kmods/Makefile > @@ -1,5 +1,16 @@ > TEST_KMOD_DIR := $(realpath $(dir $(abspath $(lastword $(MAKEFILE_LIST))))) > -KDIR ?= $(abspath $(TEST_KMOD_DIR)/../../../../..) > +SRCTREE_KDIR := $(abspath $(TEST_KMOD_DIR)/../../../../..) > +# Honor O=/KBUILD_OUTPUT only if they point at a prepared kernel build > +# directory (one containing Module.symvers); otherwise treat the value as a > +# selftests-only output directory and fall back to in-tree or distro headers. > +# The parent bpf/Makefile resolves O=/KBUILD_OUTPUT to absolute paths before > +# invoking this sub-make so relative paths still anchor to the user's > +# invocation directory. > +KMOD_O := $(or $(O),$(KBUILD_OUTPUT)) > +KMOD_O_VALID := $(if $(KMOD_O),$(if $(wildcard > $(KMOD_O)/Module.symvers),$(KMOD_O))) > +KDIR ?= $(if $(KMOD_O_VALID),$(SRCTREE_KDIR), \ > + $(if $(wildcard $(SRCTREE_KDIR)/Module.symvers),$(SRCTREE_KDIR), \ > + /lib/modules/$(shell uname -r)/build)) Will the automatic fallback to /lib/modules/$(uname -r)/build cause confusing build failures? Since bpf_testmod relies heavily on internal BPF structures, experimental macros, and kfuncs that change frequently between kernel releases, compiling it against host distro headers on a system where the running kernel does not match the upstream source tree will likely fail. If the host headers are present, the permissive skip check further down in the file will pass since the directory exists. However, because the compilation failure is not ignored by the parent bpf/Makefile, this would abort the entire BPF selftests build with confusing C compilation errors instead of silently skipping the unconfigured kernel tree. Should in-tree test modules avoid falling back to host distro headers to prevent these version mismatches? This concern was raised in v9 and v10 by [email protected] and [email protected]: "Will falling back to the host kernel headers cause compilation errors when building in-tree test modules like bpf_testmod? Since bpf_testmod relies heavily on internal BPF structures, experimental macros, and kfuncs that change frequently between kernel releases, compiling it against /lib/modules/$(uname -r)/build on a system where the running kernel does not exactly match the upstream source tree will likely fail. If the host headers are present, the permissive skip check further down in the file will pass since the directory exists. Because the compilation failure is not ignored by the parent bpf/Makefile, won't this abort the entire BPF selftests build with confusing C compilation errors instead of silently skipping the unconfigured kernel tree? Should in-tree test modules avoid falling back to host distro headers to prevent these version mismatches?" Reference: https://lore.kernel.org/bpf/d1297f1c857e5430af42dcb3e4d05c7ddaff08470a43893cac0fbcb83ec51...@mail.kernel.org/ [ ... ] --- AI reviewed your patch. Please fix the bug or email reply why it's not a bug. See: https://github.com/kernel-patches/vmtest/blob/master/ci/claude/README.md CI run summary: https://github.com/kernel-patches/bpf/actions/runs/25176431268

