Re: [PATCH v2] kbuild: rpm-pkg: Preserve .BTF section in kernel modules during debuginfo stripping

Yafang Shao <[email protected]> Fri, 24 Jul 2026 10:49:24 +0800
Newsgroups org.kernel.vger.linux-kbuild,dev.linux.lists.sashiko-reviews,org.kernel.vger.bpf
Message-ID <CALOAHbCaKNF2=Q0qCHbQttP4+LOwOdnxHKbdLeiJi0+2JKkvNQ@mail.gmail.com>
On Fri, Jul 24, 2026 at 8:00=E2=80=AFAM Nathan Chancellor <[email protected]=
g> wrote:
>
> On Thu, Jul 16, 2026 at 05:11:05PM +0800, Yafang Shao wrote:
> > On Thu, Jul 16, 2026 at 11:01=E2=80=AFAM <[email protected]> wrote=
:
> > >
> > > Thank you for your contribution! Sashiko AI review found 1 potential =
issue(s) to consider:
> > > - [Medium] The check for `find-debuginfo.sh` capabilities in `mkspec`=
 hardcodes host properties into `kernel.spec`, breaking SRPM portability ac=
ross distributions and failing silently when the tool is not in `$PATH`.
> > > --
> > >
> > > --- Patch [1]: [PATCH v2] kbuild: rpm-pkg: Preserve .BTF section in k=
ernel modules during debuginfo stripping ---
> > > commit 99202060a54c32638e01a2bfdc4d23b190f3f77c
> > > Author: Yafang Shao <[email protected]>
> > >
> > > kbuild: rpm-pkg: Preserve .BTF section in kernel modules during debug=
info stripping
> > >
> > > This commit updates the RPM packaging scripts to pass --keep-section =
.BTF
> > > to find-debuginfo.sh. This ensures that BTF information is preserved =
when
> > > debuginfo is stripped from kernel modules.
> > >
> > > > diff --git a/scripts/package/mkspec b/scripts/package/mkspec
> > > > index c604f8c174e2c..00acef348ba84 100755
> > > > --- a/scripts/package/mkspec
> > > > +++ b/scripts/package/mkspec
> > > [ ... ]
> > > > @@ -65,6 +65,11 @@ fi
> > > >  echo "%define with_debuginfo_manual $with_debuginfo_manual"
> > > >  echo "%define with_debuginfo_rpm $with_debuginfo_rpm"
> > > >
> > > > +# Detect if find-debuginfo.sh supports --keep-section (RHEL 9+)
> > > > +if find-debuginfo.sh --help 2>&1 | grep -q keep-section; then
> > > > +     echo "%global with_keep_section 1"
> > > > +fi
> > >
> > > [Severity: Medium]
> > > Is it safe to assume find-debuginfo.sh is in the standard user $PATH?
> > >
> > > On many systems, this script resides in /usr/lib/rpm/, which isn't ty=
pically
> > > in the $PATH. This could cause the check to silently fail and strip t=
he .BTF
> > > section during a local make rpm-pkg build.
> > >
> > > Also, since mkspec runs during SRPM generation (make srcrpm-pkg), doe=
sn't
> > > this statically bake the generation host's capabilities into the resu=
lting
> > > kernel.spec file?
> > >
> > > If the SRPM is rebuilt on an older distribution, rpmbuild might fail =
because
> > > the older script rejects the --keep-section argument. If generated on=
 an
> > > older host and built on a newer one, BTF info would be silently strip=
ped.
> > > Could we dynamically query the target host's capabilities using somet=
hing
> > > like %(__find_debuginfo) inside the spec file itself?
> > >
> > > --
> > > Sashiko AI review =C2=B7 https://sashiko.dev/#/patchset/2026071602534=
[email protected]?part=3D1
> >
> > I believe we could use the builtin _rpmconfigdir to locate
> > find-debuginfo.sh reliably. This avoids relying on $PATH.
> > What do you think about the following change?
>
> Just an FYI, this was not sent to anyone with authority to comment on
> said change, as the Kbuild folks were not included in the AI review
> thread. I just happened to find this when browsing the archives.

My apologies, I failed to notice that the linux-kbuild mailing list
was excluded from Sashiko's reply.

>
> > diff --git a/scripts/package/kernel.spec b/scripts/package/kernel.spec
> > index c732415662ef..4335e99f2aca 100644
> > --- a/scripts/package/kernel.spec
> > +++ b/scripts/package/kernel.spec
> > @@ -67,7 +67,21 @@ This package provides debug information for the
> > kernel image and modules from th
> >  %undefine _unique_debug_srcs
> >  %undefine _debugsource_packages
> >  %undefine _debuginfo_subpackages
> > +
> > +# Preserve .BTF section in kernel modules during debuginfo stripping
> > +# find-debuginfo.sh (from debugedit) uses eu-strip which removes
> > +# non-allocated ELF sections like .BTF by default.
> > +# --keep-section .BTF preserves BPF Type Format information.
> > +#
> > +# Uses _rpmconfigdir for reliable script location instead of relying o=
n $PATH.
> > +%{!?with_keep_section:%global __fd %{_rpmconfigdir}/find-debuginfo.sh}
> > +%{!?with_keep_section:%global with_keep_section %(%{__fd} --help 2>&1
> > | grep -c keep-section)}
> > +%if %{with_keep_section}
> > +%global _find_debuginfo_opts -r --keep-section .BTF
> > +%else
> >  %global _find_debuginfo_opts -r
> > +%endif
> > +
> >  %global _missing_build_ids_terminate_build 1
> >  %global _no_recompute_build_ids 1
> >  %{debug_package}
> >
> > Please let me know if this approach works or if there are any concerns.
>
> /usr/lib/rpm/find-debuginfo.sh might not exist on certain distributions
> that can build .rpm packages like Arch Linux:
>
>   $ ls -l /usr/lib/rpm/find-debuginfo.sh
>   "/usr/lib/rpm/find-debuginfo.sh": No such file or directory (os error 2=
)
>
> Even on modern Fedora, this is a symlink:
>
>   $ ls -l /usr/lib/rpm/find-debuginfo.sh
>   lrwxrwxrwx@ - root 19 Jul 17:00 /usr/lib/rpm/find-debuginfo.sh -> ../..=
/bin/find-debuginfo
>
> I think we would be better off just using the __find_debuginfo rpm
> macro:
>
>   $ rg -m 1 find-debuginfo /usr/lib/rpm/macros
>   69:%__find_debuginfo    /usr/bin/find-debuginfo
>
> This appears to work for me, it would be good if you can confirm this
> works for you as well.
>
> diff --git a/scripts/package/kernel.spec b/scripts/package/kernel.spec
> index c732415662ef..590b5b2e1b40 100644
> --- a/scripts/package/kernel.spec
> +++ b/scripts/package/kernel.spec
> @@ -67,7 +67,18 @@ This package provides debug information for the kernel=
 image and modules from th
>  %undefine _unique_debug_srcs
>  %undefine _debugsource_packages
>  %undefine _debuginfo_subpackages
> +
> +# Preserve .BTF section in kernel modules during debuginfo stripping
> +# find-debuginfo.sh (from debugedit) uses eu-strip which removes
> +# non-allocated ELF sections like .BTF by default.
> +%global with_keep_section %(%{__find_debuginfo} --help 2>&1 | grep -c ke=
ep-section)
> +%if %{with_keep_section}
> +%global _find_debuginfo_opts -r --keep-section .BTF
> +%else
>  %global _find_debuginfo_opts -r
> +%endif
> +
>  %global _missing_build_ids_terminate_build 1
>  %global _no_recompute_build_ids 1
>  %{debug_package}

This works for me, thanks for the improvement.
Do you plan to send the official patch, or would you like me to send a
new version?

--=20
Regards
Yafang