Re: [PATCH bpf-next v6 02/11] selftests/bpf: Fix test_kmods KDIR to honor O= and distro kernels

Alexei Starovoitov <[email protected]>
Newsgroups dev.linux.lists.sashiko,org.kernel.vger.bpf
Message-ID <CAADnVQLXvs_+c67FH5rk15L+QDGS0=UovgOaTvHeQ9-_suzo=g@mail.gmail.com>
On Thu, Apr 16, 2026 at 5:53 AM <[email protected]> wrote:
>
> Sashiko AI review found 2 potential issue(s):
> - [Medium] Relative paths passed via `O=` are incorrectly evaluated from the kernel source root instead of the invocation directory.
> - [Medium] The `make clean` target unconditionally fails and aborts the build if the kernel source tree is unconfigured and distro headers are missing.
> --
>
> commit 533e8d39cc98f56f3dff4f8c5bff0dcd49fc6ef1
> Author: Ricardo B. Marlière <[email protected]>
>
> selftests/bpf: Fix test_kmods KDIR to honor O= and distro kernels
>
> This commit modifies test_kmods/Makefile to honor O= and KBUILD_OUTPUT, and
> adds a fallback to /lib/modules/$(uname -r)/build for distro kernels. It also
> makes missing KDIR silently skipped when building in permissive mode.
>
> > diff --git a/tools/testing/selftests/bpf/test_kmods/Makefile b/tools/testing/selftests/bpf/test_kmods/Makefile
> > index 63c4d3f6a12f6..10f202bd0d8c2 100644
> > --- a/tools/testing/selftests/bpf/test_kmods/Makefile
> > +++ b/tools/testing/selftests/bpf/test_kmods/Makefile
> > @@ -1,5 +1,7 @@
> >  TEST_KMOD_DIR := $(realpath $(dir $(abspath $(lastword $(MAKEFILE_LIST)))))
> > -KDIR ?= $(abspath $(TEST_KMOD_DIR)/../../../../..)
> > +SRCTREE_KDIR := $(abspath $(TEST_KMOD_DIR)/../../../../..)
> > +KMOD_O := $(or $(O),$(KBUILD_OUTPUT))
>
> Will this break out-of-tree builds if a user passes a relative path?
>
> If a user builds selftests with a relative O= path (e.g. make O=out), KMOD_O
> captures this relative string and passes it unaltered to the kernel build
> system via make -C $(KDIR) O=$(KMOD_O).
>
> Because make -C changes the working directory to $(KDIR) before evaluating
> O=, the relative path will be evaluated relative to the kernel root rather
> than the directory where make was originally invoked.
>
> [ ... ]
> > @@ -14,8 +16,24 @@ $(foreach m,$(MODULES),$(eval obj-m += $(m:.ko=.o)))
> >
> >  CFLAGS_bpf_testmod.o = -I$(src)
> >
> > +# When BPF_STRICT_BUILD != 0, a missing KDIR is fatal (the default).
> > +# When permissive, skip silently.
> > +PERMISSIVE := $(filter 0,$(BPF_STRICT_BUILD))
> > +
> >  all:
> > -     $(Q)$(MAKE) -C $(KDIR) M=$(TEST_KMOD_DIR) modules
> > +ifeq ($(PERMISSIVE),)
> > +     $(Q)$(MAKE) -C $(KDIR) $(if $(KMOD_O),O=$(KMOD_O),KBUILD_OUTPUT=) \
> > +             M=$(TEST_KMOD_DIR) modules
>
> [ ... ]
>
> >  clean:
> > -     $(Q)$(MAKE) -C $(KDIR) M=$(TEST_KMOD_DIR) clean
> > +ifeq ($(PERMISSIVE),)
> > +     $(Q)$(MAKE) -C $(KDIR) $(if $(KMOD_O),O=$(KMOD_O),KBUILD_OUTPUT=) \
> > +             M=$(TEST_KMOD_DIR) clean
>
> Does this unconditionally abort make clean if the kernel source tree is
> unconfigured and distro headers are missing?

I think both issues flagged are valid and need to be addressed.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.