bpf: fix perf_snapshot_branch_stack link failure
authorArnd Bergmann <arnd@arndb.de>
Fri, 5 Apr 2024 14:26:25 +0000 (16:26 +0200)
committerAlexei Starovoitov <ast@kernel.org>
Fri, 5 Apr 2024 15:39:15 +0000 (08:39 -0700)
The newly added code to handle bpf_get_branch_snapshot fails to link when
CONFIG_PERF_EVENTS is disabled:

aarch64-linux-ld: kernel/bpf/verifier.o: in function `do_misc_fixups':
verifier.c:(.text+0x1090c): undefined reference to `__SCK__perf_snapshot_branch_stack'

Add a build-time check for that Kconfig symbol around the code to
remove the link time dependency.

Fixes: 314a53623cd4 ("bpf: inline bpf_get_branch_snapshot() helper")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Link: https://lore.kernel.org/r/20240405142637.577046-1-arnd@kernel.org
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
kernel/bpf/verifier.c

index 41446bea8fabf1a05deea1f33a4f1a58f18c3bc3..4353cb09c35beb062efb144f0e52d89ef91c3841 100644 (file)
@@ -20191,7 +20191,8 @@ patch_map_ops_generic:
                }
 
                /* Implement bpf_get_branch_snapshot inline. */
-               if (prog->jit_requested && BITS_PER_LONG == 64 &&
+               if (IS_ENABLED(CONFIG_PERF_EVENTS) &&
+                   prog->jit_requested && BITS_PER_LONG == 64 &&
                    insn->imm == BPF_FUNC_get_branch_snapshot) {
                        /* We are dealing with the following func protos:
                         * u64 bpf_get_branch_snapshot(void *buf, u32 size, u64 flags);