Commit 7cefbb47 authored by Emil Tsalapatis's avatar Emil Tsalapatis Committed by Andrii Nakryiko
Browse files

libbpf: Do not use PROG_TYPE_TRACEPOINT program for feature gating



Commit 728ff167 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: 728ff167 ("libbpf: Add gating for arena globals relocation feature")
Reported-by: default avatarAlexei Starovoitov <ast@kernel.org>
Signed-off-by: default avatarEmil Tsalapatis <emil@etsalapatis.com>
Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
Link: https://lore.kernel.org/bpf/20260217204345.548648-2-emil@etsalapatis.com
parent b0b1a858
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -536,14 +536,15 @@ static int probe_ldimm64_full_range_off(int token_fd)
	}
	insns[0].imm = map_fd;

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

	close(map_fd);
	close(prog_fd);

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