Re: [PATCH] genksyms: Fix parsing a declarator with a preceding attribute

From: Nicolas Schier

Date: Fri Feb 27 2026 - 03:12:20 EST


On Wed, Feb 25, 2026 at 03:07:17PM -0700, Nathan Chancellor wrote:
> After commit 07919126ecfc ("netfilter: annotate NAT helper hook pointers
> with __rcu"), genksyms fails to parse the __rcu annotation when building
> with CONFIG_DEBUG_INFO_BTF=y, CONFIG_PAHOLE_HAS_BTF_TAG=y, and a version
> of clang that supports btf_type_tag.
>
> $ clang --version | head -1
> ClangBuiltLinux clang version 22.1.0 (https://github.com/llvm/llvm-project.git 4434dabb69916856b824f68a64b029c67175e532)
>
> $ cat kernel/configs/repro.config
> CONFIG_BPF_SYSCALL=y
> CONFIG_MODVERSIONS=y
> # CONFIG_DEBUG_INFO_NONE is not set
> CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT=y
> CONFIG_DEBUG_INFO_BTF=y
>
> $ make -skj"$(nproc)" ARCH=x86_64 LLVM=1 mrproper defconfig repro.config all
> WARNING: modpost: EXPORT symbol "nf_nat_ftp_hook" [vmlinux] version generation failed, symbol will not be versioned.
> ...
> WARNING: modpost: EXPORT symbol "nf_nat_irc_hook" [vmlinux] version generation failed, symbol will not be versioned.
> ...
>
> genksyms falls over parsing the __rcu attribute in the declarator:
>
> # Kernel reproducer
> $ make -skj"$(nproc)" ARCH=x86_64 KCFLAGS=-D__GENKSYMS__ LLVM=1 net/netfilter/nf_conntrack_ftp.i
>
> $ scripts/genksyms/genksyms -w <net/netfilter/nf_conntrack_ftp.i &| rg 'syntax error'
> include/linux/netfilter/nf_conntrack_ftp.h:29: syntax error
> net/netfilter/nf_conntrack_ftp.c:46: syntax error
>
> # Trivial reproducer
> $ cat test.c
> int (*func)(void *foo, int bar);
> int (__attribute__((btf_type_tag("rcu"))) *func_with_attr)(void *foo, int bar);
>
> $ scripts/genksyms/genksyms -w <test.c
> <stdin>:2: syntax error
>
> Optionally allow an attribute to precede a declarator to resolve this
> error and properly generate symbol versions.
>
> Fixes: 07919126ecfc ("netfilter: annotate NAT helper hook pointers with __rcu")
> Signed-off-by: Nathan Chancellor <nathan@xxxxxxxxxx>
> ---
> I plan to take this via the Kbuild tree for 7.0.
> ---
> scripts/genksyms/parse.y | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>

Thanks for the detailed explanation and reproducer!

Tested-by: Nicolas Schier <nsc@xxxxxxxxxx>
Reviewed-by: Nicolas Schier <nsc@xxxxxxxxxx>