Commit 186d1a86 authored by Andrii Nakryiko's avatar Andrii Nakryiko Committed by Alexei Starovoitov
Browse files

selftests/bpf: Remove all the uses of deprecated bpf_prog_load_xattr()



Migrate all the selftests that were still using bpf_prog_load_xattr().
Few are converted to skeleton, others will use bpf_object__open_file()
API.

Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
Link: https://lore.kernel.org/bpf/20211201232824.3166325-7-andrii@kernel.org
parent 00872de6
Loading
Loading
Loading
Loading
+21 −9
Original line number Diff line number Diff line
@@ -19,16 +19,28 @@ extern int extra_prog_load_log_flags;

static int check_load(const char *file, enum bpf_prog_type type)
{
	struct bpf_prog_load_attr attr;
	struct bpf_object *obj = NULL;
	int err, prog_fd;

	memset(&attr, 0, sizeof(struct bpf_prog_load_attr));
	attr.file = file;
	attr.prog_type = type;
	attr.log_level = 4 | extra_prog_load_log_flags;
	attr.prog_flags = BPF_F_TEST_RND_HI32;
	err = bpf_prog_load_xattr(&attr, &obj, &prog_fd);
	struct bpf_program *prog;
	int err;

	obj = bpf_object__open_file(file, NULL);
	err = libbpf_get_error(obj);
	if (err)
		return err;

	prog = bpf_object__next_program(obj, NULL);
	if (!prog) {
		err = -ENOENT;
		goto err_out;
	}

	bpf_program__set_type(prog, type);
	bpf_program__set_flags(prog, BPF_F_TEST_RND_HI32);
	bpf_program__set_log_level(prog, 4 | extra_prog_load_log_flags);

	err = bpf_object__load(obj);

err_out:
	bpf_object__close(obj);
	return err;
}
+9 −8
Original line number Diff line number Diff line
@@ -51,19 +51,20 @@ static int run_test(int cgroup_fd, int server_fd, int family, int type)
	bool v4 = family == AF_INET;
	__u16 expected_local_port = v4 ? 22222 : 22223;
	__u16 expected_peer_port = 60000;
	struct bpf_prog_load_attr attr = {
		.file = v4 ? "./connect_force_port4.o" :
			     "./connect_force_port6.o",
	};
	struct bpf_program *prog;
	struct bpf_object *obj;
	int xlate_fd, fd, err;
	const char *obj_file = v4 ? "connect_force_port4.o" : "connect_force_port6.o";
	int fd, err;
	__u32 duration = 0;

	err = bpf_prog_load_xattr(&attr, &obj, &xlate_fd);
	if (err) {
		log_err("Failed to load BPF object");
	obj = bpf_object__open_file(obj_file, NULL);
	if (!ASSERT_OK_PTR(obj, "bpf_obj_open"))
		return -1;

	err = bpf_object__load(obj);
	if (!ASSERT_OK(err, "bpf_obj_load")) {
		err = -EIO;
		goto close_bpf_object;
	}

	prog = bpf_object__find_program_by_title(obj, v4 ?
+19 −39
Original line number Diff line number Diff line
// SPDX-License-Identifier: GPL-2.0
#include <test_progs.h>
#include <network_helpers.h>
#include "kfree_skb.skel.h"

struct meta {
	int ifindex;
@@ -58,16 +59,11 @@ void serial_test_kfree_skb(void)
		.ctx_in = &skb,
		.ctx_size_in = sizeof(skb),
	};
	struct bpf_prog_load_attr attr = {
		.file = "./kfree_skb.o",
	};

	struct bpf_link *link = NULL, *link_fentry = NULL, *link_fexit = NULL;
	struct bpf_map *perf_buf_map, *global_data;
	struct bpf_program *prog, *fentry, *fexit;
	struct bpf_object *obj, *obj2 = NULL;
	struct kfree_skb *skel = NULL;
	struct bpf_link *link;
	struct bpf_object *obj;
	struct perf_buffer *pb = NULL;
	int err, kfree_skb_fd;
	int err;
	bool passed = false;
	__u32 duration = 0;
	const int zero = 0;
@@ -78,40 +74,27 @@ void serial_test_kfree_skb(void)
	if (CHECK(err, "prog_load sched cls", "err %d errno %d\n", err, errno))
		return;

	err = bpf_prog_load_xattr(&attr, &obj2, &kfree_skb_fd);
	if (CHECK(err, "prog_load raw tp", "err %d errno %d\n", err, errno))
		goto close_prog;

	prog = bpf_object__find_program_by_title(obj2, "tp_btf/kfree_skb");
	if (CHECK(!prog, "find_prog", "prog kfree_skb not found\n"))
		goto close_prog;
	fentry = bpf_object__find_program_by_title(obj2, "fentry/eth_type_trans");
	if (CHECK(!fentry, "find_prog", "prog eth_type_trans not found\n"))
		goto close_prog;
	fexit = bpf_object__find_program_by_title(obj2, "fexit/eth_type_trans");
	if (CHECK(!fexit, "find_prog", "prog eth_type_trans not found\n"))
		goto close_prog;

	global_data = bpf_object__find_map_by_name(obj2, ".bss");
	if (CHECK(!global_data, "find global data", "not found\n"))
	skel = kfree_skb__open_and_load();
	if (!ASSERT_OK_PTR(skel, "kfree_skb_skel"))
		goto close_prog;

	link = bpf_program__attach_raw_tracepoint(prog, NULL);
	link = bpf_program__attach_raw_tracepoint(skel->progs.trace_kfree_skb, NULL);
	if (!ASSERT_OK_PTR(link, "attach_raw_tp"))
		goto close_prog;
	link_fentry = bpf_program__attach_trace(fentry);
	if (!ASSERT_OK_PTR(link_fentry, "attach fentry"))
		goto close_prog;
	link_fexit = bpf_program__attach_trace(fexit);
	if (!ASSERT_OK_PTR(link_fexit, "attach fexit"))
	skel->links.trace_kfree_skb = link;

	link = bpf_program__attach_trace(skel->progs.fentry_eth_type_trans);
	if (!ASSERT_OK_PTR(link, "attach fentry"))
		goto close_prog;
	skel->links.fentry_eth_type_trans = link;

	perf_buf_map = bpf_object__find_map_by_name(obj2, "perf_buf_map");
	if (CHECK(!perf_buf_map, "find_perf_buf_map", "not found\n"))
	link = bpf_program__attach_trace(skel->progs.fexit_eth_type_trans);
	if (!ASSERT_OK_PTR(link, "attach fexit"))
		goto close_prog;
	skel->links.fexit_eth_type_trans = link;

	/* set up perf buffer */
	pb = perf_buffer__new(bpf_map__fd(perf_buf_map), 1,
	pb = perf_buffer__new(bpf_map__fd(skel->maps.perf_buf_map), 1,
			      on_sample, NULL, &passed, NULL);
	if (!ASSERT_OK_PTR(pb, "perf_buf__new"))
		goto close_prog;
@@ -133,7 +116,7 @@ void serial_test_kfree_skb(void)
	 */
	ASSERT_TRUE(passed, "passed");

	err = bpf_map_lookup_elem(bpf_map__fd(global_data), &zero, test_ok);
	err = bpf_map_lookup_elem(bpf_map__fd(skel->maps.bss), &zero, test_ok);
	if (CHECK(err, "get_result",
		  "failed to get output data: %d\n", err))
		goto close_prog;
@@ -141,9 +124,6 @@ void serial_test_kfree_skb(void)
	CHECK_FAIL(!test_ok[0] || !test_ok[1]);
close_prog:
	perf_buffer__free(pb);
	bpf_link__destroy(link);
	bpf_link__destroy(link_fentry);
	bpf_link__destroy(link_fexit);
	bpf_object__close(obj);
	bpf_object__close(obj2);
	kfree_skb__destroy(skel);
}
+6 −6
Original line number Diff line number Diff line
@@ -167,20 +167,20 @@ static int prog_attach(struct bpf_object *obj, int cgroup_fd, const char *title)

static void run_test(int cgroup_fd)
{
	struct bpf_prog_load_attr attr = {
		.file = "./sockopt_inherit.o",
	};
	int server_fd = -1, client_fd;
	struct bpf_object *obj;
	void *server_err;
	pthread_t tid;
	int ignored;
	int err;

	err = bpf_prog_load_xattr(&attr, &obj, &ignored);
	if (CHECK_FAIL(err))
	obj = bpf_object__open_file("sockopt_inherit.o", NULL);
	if (!ASSERT_OK_PTR(obj, "obj_open"))
		return;

	err = bpf_object__load(obj);
	if (!ASSERT_OK(err, "obj_load"))
		goto close_bpf_object;

	err = prog_attach(obj, cgroup_fd, "cgroup/getsockopt");
	if (CHECK_FAIL(err))
		goto close_bpf_object;
+6 −6
Original line number Diff line number Diff line
@@ -297,14 +297,10 @@ static int run_setsockopt_test(struct bpf_object *obj, int cg_parent,

void test_sockopt_multi(void)
{
	struct bpf_prog_load_attr attr = {
		.file = "./sockopt_multi.o",
	};
	int cg_parent = -1, cg_child = -1;
	struct bpf_object *obj = NULL;
	int sock_fd = -1;
	int err = -1;
	int ignored;

	cg_parent = test__join_cgroup("/parent");
	if (CHECK_FAIL(cg_parent < 0))
@@ -314,8 +310,12 @@ void test_sockopt_multi(void)
	if (CHECK_FAIL(cg_child < 0))
		goto out;

	err = bpf_prog_load_xattr(&attr, &obj, &ignored);
	if (CHECK_FAIL(err))
	obj = bpf_object__open_file("sockopt_multi.o", NULL);
	if (!ASSERT_OK_PTR(obj, "obj_load"))
		goto out;

	err = bpf_object__load(obj);
	if (!ASSERT_OK(err, "obj_load"))
		goto out;

	sock_fd = socket(AF_INET, SOCK_STREAM, 0);
Loading