linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] bpf: Mark kfuncs as __noclone
@ 2025-08-22 14:05 Andrea Righi
  2025-08-26 20:17 ` Yonghong Song
  2025-08-27  2:10 ` David Vernet
  0 siblings, 2 replies; 16+ messages in thread
From: Andrea Righi @ 2025-08-22 14:05 UTC (permalink / raw)
  To: Alexei Starovoitov, Daniel Borkmann, Andrii Nakryiko
  Cc: Martin KaFai Lau, Eduard Zingerman, Song Liu, Yonghong Song,
	John Fastabend, KP Singh, Stanislav Fomichev, Hao Luo, Jiri Olsa,
	David Vernet, bpf, linux-kernel

Some distributions (e.g., CachyOS) support building the kernel with -O3,
but doing so may break kfuncs, resulting in their symbols not being
properly exported.

In fact, with gcc -O3, some kfuncs may be optimized away despite being
annotated as noinline. This happens because gcc can still clone the
function during IPA optimizations, e.g., by duplicating or inlining it
into callers, and then dropping the standalone symbol. This breaks BTF
ID resolution since resolve_btfids relies on the presence of a global
symbol for each kfunc.

Currently, this is not an issue for upstream, because we don't allow
building the kernel with -O3, but it may be safer to address it anyway,
to prevent potential issues in the future if compilers become more
aggressive with optimizations.

Therefore, add __noclone to __bpf_kfunc to ensure kfuncs are never
cloned and remain distinct, globally visible symbols, regardless of
the optimization level.

Fixes: 57e7c169cd6af ("bpf: Add __bpf_kfunc tag for marking kernel functions as kfuncs")
Signed-off-by: Andrea Righi <arighi@nvidia.com>
---
 include/linux/btf.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/include/linux/btf.h b/include/linux/btf.h
index 9eda6b113f9b4..f06976ffb63f9 100644
--- a/include/linux/btf.h
+++ b/include/linux/btf.h
@@ -86,7 +86,7 @@
  * as to avoid issues such as the compiler inlining or eliding either a static
  * kfunc, or a global kfunc in an LTO build.
  */
-#define __bpf_kfunc __used __retain noinline
+#define __bpf_kfunc __used __retain __noclone noinline
 
 #define __bpf_kfunc_start_defs()					       \
 	__diag_push();							       \
-- 
2.50.1


^ permalink raw reply related	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2025-08-27 22:28 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-08-22 14:05 [PATCH] bpf: Mark kfuncs as __noclone Andrea Righi
2025-08-26 20:17 ` Yonghong Song
2025-08-27  5:02   ` Eduard Zingerman
2025-08-27  5:41     ` Andrea Righi
2025-08-27  6:52       ` Eduard Zingerman
2025-08-27  7:01         ` Eduard Zingerman
2025-08-27  7:45           ` Andrea Righi
2025-08-27 17:03         ` Yonghong Song
2025-08-27 17:00     ` Yonghong Song
2025-08-27 19:13       ` Eduard Zingerman
2025-08-27 19:28         ` Alan Maguire
2025-08-27 19:41           ` Eduard Zingerman
2025-08-27 19:52             ` Alan Maguire
2025-08-27 22:28               ` Yonghong Song
2025-08-27 22:10         ` Yonghong Song
2025-08-27  2:10 ` David Vernet

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).