Re: [PATCH] kernel: trace: do not generate undefsyms_base.c
From: Nathan Chancellor
Date: Tue Apr 21 2026 - 17:52:35 EST
On Tue, Apr 21, 2026 at 11:04:55AM +0100, Paolo Bonzini wrote:
> The code to autogenerate undefsyms_base.c in the Makefile is larger
> than the file itself.
>
> Remove the "echo" indirection that creates the file, which keeps
> the build system sane and makes it much easier to edit it if/when
> new situations arrive.
>
> Reported-by: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>
> Signed-off-by: Paolo Bonzini <pbonzini@xxxxxxxxxx>
Yeah, I don't really know how I did not see this originally :/ tunnel
vision is real I suppose.
Reviewed-by: Nathan Chancellor <nathan@xxxxxxxxxx>
Tested-by: Nathan Chancellor <nathan@xxxxxxxxxx>
> ---
> kernel/trace/.gitignore | 1 -
> kernel/trace/Makefile | 35 ++++-------------------------------
> kernel/trace/undefsyms_base.c | 28 ++++++++++++++++++++++++++++
> 3 files changed, 32 insertions(+), 32 deletions(-)
> delete mode 100644 kernel/trace/.gitignore
> create mode 100644 kernel/trace/undefsyms_base.c
>
> diff --git a/kernel/trace/.gitignore b/kernel/trace/.gitignore
> deleted file mode 100644
> index 6adbb09d6deb..000000000000
> --- a/kernel/trace/.gitignore
> +++ /dev/null
> @@ -1 +0,0 @@
> -/undefsyms_base.c
> diff --git a/kernel/trace/Makefile b/kernel/trace/Makefile
> index 4d4229e5eec4..1decdce8cbef 100644
> --- a/kernel/trace/Makefile
> +++ b/kernel/trace/Makefile
> @@ -133,41 +133,14 @@ obj-$(CONFIG_TRACE_REMOTE) += trace_remote.o
> obj-$(CONFIG_SIMPLE_RING_BUFFER) += simple_ring_buffer.o
> obj-$(CONFIG_TRACE_REMOTE_TEST) += remote_test.o
>
> -#
> # simple_ring_buffer is used by the pKVM hypervisor which does not have access
> # to all kernel symbols. Fail the build if forbidden symbols are found.
> -#
> -# undefsyms_base generates a set of compiler and tooling-generated symbols that can
> -# safely be ignored for simple_ring_buffer.
> -#
> -filechk_undefsyms_base = \
> - echo '$(pound)include <linux/atomic.h>'; \
> - echo '$(pound)include <linux/string.h>'; \
> - echo '$(pound)include <asm/page.h>'; \
> - echo 'static char page[PAGE_SIZE] __aligned(PAGE_SIZE);'; \
> - echo 'void undefsyms_base(void *p, int n);'; \
> - echo 'void undefsyms_base(void *p, int n) {'; \
> - echo ' char buffer[256] = { 0 };'; \
> - echo ' u32 u = 0;'; \
> - echo ' memset((char * volatile)page, 8, PAGE_SIZE);'; \
> - echo ' memset((char * volatile)buffer, 8, sizeof(buffer));'; \
> - echo ' memcpy((void * volatile)p, buffer, sizeof(buffer));'; \
> - echo ' cmpxchg((u32 * volatile)&u, 0, 8);'; \
> - echo ' WARN_ON(n == 0xdeadbeef);'; \
> - echo '}'
> -
> -$(obj)/undefsyms_base.c: FORCE
> - $(call filechk,undefsyms_base)
> -
> -clean-files += undefsyms_base.c
> -
> -$(obj)/undefsyms_base.o: $(obj)/undefsyms_base.c
>
> +# Basic compiler and tooling-generated symbols that can safely be left
> +# undefined. Ensure KASAN is enabled to avoid logic that may disable
> +# FORTIFY_SOURCE when KASAN is not enabled. undefsyms_base.o does not
> +# automatically get KASAN flags because it is not linked into vmlinux.
> targets += undefsyms_base.o
> -
> -# Ensure KASAN is enabled to avoid logic that may disable FORTIFY_SOURCE when
> -# KASAN is not enabled. undefsyms_base.o does not automatically get KASAN flags
> -# because it is not linked into vmlinux.
> KASAN_SANITIZE_undefsyms_base.o := y
>
> UNDEFINED_ALLOWLIST = __asan __gcov __kasan __kcsan __hwasan __sancov __sanitizer __tsan __ubsan __x86_indirect_thunk \
> diff --git a/kernel/trace/undefsyms_base.c b/kernel/trace/undefsyms_base.c
> new file mode 100644
> index 000000000000..e65baf58e6ff
> --- /dev/null
> +++ b/kernel/trace/undefsyms_base.c
> @@ -0,0 +1,28 @@
> +// SPDX-License-Identifier: GPL-2.0
> +
> +/*
> + * simple_ring_buffer is used by the pKVM hypervisor which does not have access
> + * to all kernel symbols. Whatever is undefined when compiling this file is
> + * compiler and tooling-generated symbols that can safely be ignored for
> + * simple_ring_buffer.
> + */
> +
> +#include <linux/atomic.h>
> +#include <linux/string.h>
> +#include <asm/page.h>
> +
> +void undefsyms_base(void *p, int n);
> +
> +static char page[PAGE_SIZE] __aligned(PAGE_SIZE);
> +
> +void undefsyms_base(void *p, int n)
> +{
> + char buffer[256] = { 0 };
> +
> + u32 u = 0;
> + memset((char * volatile)page, 8, PAGE_SIZE);
> + memset((char * volatile)buffer, 8, sizeof(buffer));
> + memcpy((void * volatile)p, buffer, sizeof(buffer));
> + cmpxchg((u32 * volatile)&u, 0, 8);
> + WARN_ON(n == 0xdeadbeef);
> +}
> --
> 2.53.0
>