Skip to content

Commit 7cefbb4

Browse files
etsalanakryiko
authored andcommitted
libbpf: Do not use PROG_TYPE_TRACEPOINT program for feature gating
Commit 728ff16 uses a PROG_TYPE_TRACEPOINT BPF test program to check whether the running kernel supports large LDIMM64 offsets. The feature gate incorrectly assumes that the program will fail at verification time with one of two messages, depending on whether the feature is supported by the running kernel. However, PROG_TYPE_TRACEPOINT programs may fail to load before verification even starts, e.g., if the shell does not have the appropriate capabilities. Use a BPF_PROG_TYPE_SOCKET_FILTER program for the feature gate instead. Also fix two minor issues. First, ensure the log buffer for the test is initialized: Failing program load before verification led to libbpf dumping uninitialized data to stdout. Also, ensure that close() is only called for program_fd in the probe if the program load actually succeeded. The call was currently failing silently with -EBADF most of the time. Fixes: 728ff16 ("libbpf: Add gating for arena globals relocation feature") Reported-by: Alexei Starovoitov <ast@kernel.org> Signed-off-by: Emil Tsalapatis <emil@etsalapatis.com> Signed-off-by: Andrii Nakryiko <andrii@kernel.org> Link: https://lore.kernel.org/bpf/20260217204345.548648-2-emil@etsalapatis.com
1 parent b0b1a85 commit 7cefbb4

1 file changed

Lines changed: 3 additions & 2 deletions

File tree

tools/lib/bpf/features.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -536,14 +536,15 @@ static int probe_ldimm64_full_range_off(int token_fd)
536536
}
537537
insns[0].imm = map_fd;
538538

539-
prog_fd = bpf_prog_load(BPF_PROG_TYPE_TRACEPOINT, "global_reloc", "GPL", insns, insn_cnt, &prog_opts);
539+
log_buf[0] = '\0';
540+
prog_fd = bpf_prog_load(BPF_PROG_TYPE_SOCKET_FILTER, "global_reloc", "GPL", insns, insn_cnt, &prog_opts);
540541
ret = -errno;
541542

542543
close(map_fd);
543-
close(prog_fd);
544544

545545
if (prog_fd >= 0) {
546546
pr_warn("Error in %s(): Program loading unexpectedly succeeded.\n", __func__);
547+
close(prog_fd);
547548
return -EINVAL;
548549
}
549550

0 commit comments

Comments
 (0)