Commit c5a237a4 authored by Ilya Leoshkevich's avatar Ilya Leoshkevich Committed by Andrii Nakryiko
Browse files

selftests/bpf: Use bpf_{btf,link,map,prog}_get_info_by_fd()



Use the new type-safe wrappers around bpf_obj_get_info_by_fd().
Fix a prog/map mixup in prog_holds_map().

Signed-off-by: default avatarIlya Leoshkevich <iii@linux.ibm.com>
Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
Link: https://lore.kernel.org/bpf/20230214231221.249277-6-iii@linux.ibm.com
parent c0ca277b
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -18,7 +18,7 @@ static __u32 get_map_id_from_fd(int map_fd)
	uint32_t info_len = sizeof(map_info);
	int ret;

	ret = bpf_obj_get_info_by_fd(map_fd, &map_info, &info_len);
	ret = bpf_map_get_info_by_fd(map_fd, &map_info, &info_len);
	CHECK(ret < 0, "Finding map info failed", "error:%s\n",
	      strerror(errno));

+4 −4
Original line number Diff line number Diff line
@@ -195,8 +195,8 @@ static void check_bpf_link_info(const struct bpf_program *prog)
		return;

	info_len = sizeof(info);
	err = bpf_obj_get_info_by_fd(bpf_link__fd(link), &info, &info_len);
	ASSERT_OK(err, "bpf_obj_get_info_by_fd");
	err = bpf_link_get_info_by_fd(bpf_link__fd(link), &info, &info_len);
	ASSERT_OK(err, "bpf_link_get_info_by_fd");
	ASSERT_EQ(info.iter.task.tid, getpid(), "check_task_tid");

	bpf_link__destroy(link);
@@ -684,13 +684,13 @@ static void test_overflow(bool test_e2big_overflow, bool ret1)

	/* setup filtering map_id in bpf program */
	map_info_len = sizeof(map_info);
	err = bpf_obj_get_info_by_fd(map1_fd, &map_info, &map_info_len);
	err = bpf_map_get_info_by_fd(map1_fd, &map_info, &map_info_len);
	if (CHECK(err, "get_map_info", "get map info failed: %s\n",
		  strerror(errno)))
		goto free_map2;
	skel->bss->map1_id = map_info.id;

	err = bpf_obj_get_info_by_fd(map2_fd, &map_info, &map_info_len);
	err = bpf_map_get_info_by_fd(map2_fd, &map_info, &map_info_len);
	if (CHECK(err, "get_map_info", "get map info failed: %s\n",
		  strerror(errno)))
		goto free_map2;
+10 −10
Original line number Diff line number Diff line
@@ -44,7 +44,7 @@ void serial_test_bpf_obj_id(void)
	CHECK(err >= 0 || errno != ENOENT,
	      "get-fd-by-notexist-link-id", "err %d errno %d\n", err, errno);

	/* Check bpf_obj_get_info_by_fd() */
	/* Check bpf_map_get_info_by_fd() */
	bzero(zeros, sizeof(zeros));
	for (i = 0; i < nr_iters; i++) {
		now = time(NULL);
@@ -79,7 +79,7 @@ void serial_test_bpf_obj_id(void)
		/* Check getting map info */
		info_len = sizeof(struct bpf_map_info) * 2;
		bzero(&map_infos[i], info_len);
		err = bpf_obj_get_info_by_fd(map_fds[i], &map_infos[i],
		err = bpf_map_get_info_by_fd(map_fds[i], &map_infos[i],
					     &info_len);
		if (CHECK(err ||
			  map_infos[i].type != BPF_MAP_TYPE_ARRAY ||
@@ -118,7 +118,7 @@ void serial_test_bpf_obj_id(void)
		err = clock_gettime(CLOCK_BOOTTIME, &boot_time_ts);
		if (CHECK_FAIL(err))
			goto done;
		err = bpf_obj_get_info_by_fd(prog_fds[i], &prog_infos[i],
		err = bpf_prog_get_info_by_fd(prog_fds[i], &prog_infos[i],
					      &info_len);
		load_time = (real_time_ts.tv_sec - boot_time_ts.tv_sec)
			+ (prog_infos[i].load_time / nsec_per_sec);
@@ -161,7 +161,7 @@ void serial_test_bpf_obj_id(void)
		bzero(&link_infos[i], info_len);
		link_infos[i].raw_tracepoint.tp_name = ptr_to_u64(&tp_name);
		link_infos[i].raw_tracepoint.tp_name_len = sizeof(tp_name);
		err = bpf_obj_get_info_by_fd(bpf_link__fd(links[i]),
		err = bpf_link_get_info_by_fd(bpf_link__fd(links[i]),
					      &link_infos[i], &info_len);
		if (CHECK(err ||
			  link_infos[i].type != BPF_LINK_TYPE_RAW_TRACEPOINT ||
@@ -217,7 +217,7 @@ void serial_test_bpf_obj_id(void)
		 * prog_info.map_ids = NULL
		 */
		prog_info.nr_map_ids = 1;
		err = bpf_obj_get_info_by_fd(prog_fd, &prog_info, &info_len);
		err = bpf_prog_get_info_by_fd(prog_fd, &prog_info, &info_len);
		if (CHECK(!err || errno != EFAULT,
			  "get-prog-fd-bad-nr-map-ids", "err %d errno %d(%d)",
			  err, errno, EFAULT))
@@ -228,7 +228,7 @@ void serial_test_bpf_obj_id(void)
		saved_map_id = *(int *)((long)prog_infos[i].map_ids);
		prog_info.map_ids = prog_infos[i].map_ids;
		prog_info.nr_map_ids = 2;
		err = bpf_obj_get_info_by_fd(prog_fd, &prog_info, &info_len);
		err = bpf_prog_get_info_by_fd(prog_fd, &prog_info, &info_len);
		prog_infos[i].jited_prog_insns = 0;
		prog_infos[i].xlated_prog_insns = 0;
		CHECK(err || info_len != sizeof(struct bpf_prog_info) ||
@@ -277,7 +277,7 @@ void serial_test_bpf_obj_id(void)
		if (CHECK_FAIL(err))
			goto done;

		err = bpf_obj_get_info_by_fd(map_fd, &map_info, &info_len);
		err = bpf_map_get_info_by_fd(map_fd, &map_info, &info_len);
		CHECK(err || info_len != sizeof(struct bpf_map_info) ||
		      memcmp(&map_info, &map_infos[i], info_len) ||
		      array_value != array_magic_value,
@@ -322,7 +322,7 @@ void serial_test_bpf_obj_id(void)

		nr_id_found++;

		err = bpf_obj_get_info_by_fd(link_fd, &link_info, &info_len);
		err = bpf_link_get_info_by_fd(link_fd, &link_info, &info_len);
		cmp_res = memcmp(&link_info, &link_infos[i],
				offsetof(struct bpf_link_info, raw_tracepoint));
		CHECK(err || info_len != sizeof(link_info) || cmp_res,
+12 −12
Original line number Diff line number Diff line
@@ -4422,7 +4422,7 @@ static int test_big_btf_info(unsigned int test_num)
	info->btf = ptr_to_u64(user_btf);
	info->btf_size = raw_btf_size;

	err = bpf_obj_get_info_by_fd(btf_fd, info, &info_len);
	err = bpf_btf_get_info_by_fd(btf_fd, info, &info_len);
	if (CHECK(!err, "!err")) {
		err = -1;
		goto done;
@@ -4435,7 +4435,7 @@ static int test_big_btf_info(unsigned int test_num)
	 * to userspace.
	 */
	info_garbage.garbage = 0;
	err = bpf_obj_get_info_by_fd(btf_fd, info, &info_len);
	err = bpf_btf_get_info_by_fd(btf_fd, info, &info_len);
	if (CHECK(err || info_len != sizeof(*info),
		  "err:%d errno:%d info_len:%u sizeof(*info):%zu",
		  err, errno, info_len, sizeof(*info))) {
@@ -4499,7 +4499,7 @@ static int test_btf_id(unsigned int test_num)

	/* Test BPF_OBJ_GET_INFO_BY_ID on btf_id */
	info_len = sizeof(info[0]);
	err = bpf_obj_get_info_by_fd(btf_fd[0], &info[0], &info_len);
	err = bpf_btf_get_info_by_fd(btf_fd[0], &info[0], &info_len);
	if (CHECK(err, "errno:%d", errno)) {
		err = -1;
		goto done;
@@ -4512,7 +4512,7 @@ static int test_btf_id(unsigned int test_num)
	}

	ret = 0;
	err = bpf_obj_get_info_by_fd(btf_fd[1], &info[1], &info_len);
	err = bpf_btf_get_info_by_fd(btf_fd[1], &info[1], &info_len);
	if (CHECK(err || info[0].id != info[1].id ||
		  info[0].btf_size != info[1].btf_size ||
		  (ret = memcmp(user_btf[0], user_btf[1], info[0].btf_size)),
@@ -4535,7 +4535,7 @@ static int test_btf_id(unsigned int test_num)
	}

	info_len = sizeof(map_info);
	err = bpf_obj_get_info_by_fd(map_fd, &map_info, &info_len);
	err = bpf_map_get_info_by_fd(map_fd, &map_info, &info_len);
	if (CHECK(err || map_info.btf_id != info[0].id ||
		  map_info.btf_key_type_id != 1 || map_info.btf_value_type_id != 2,
		  "err:%d errno:%d info.id:%u btf_id:%u btf_key_type_id:%u btf_value_type_id:%u",
@@ -4638,7 +4638,7 @@ static void do_test_get_info(unsigned int test_num)
	info.btf_size = user_btf_size;

	ret = 0;
	err = bpf_obj_get_info_by_fd(btf_fd, &info, &info_len);
	err = bpf_btf_get_info_by_fd(btf_fd, &info, &info_len);
	if (CHECK(err || !info.id || info_len != sizeof(info) ||
		  info.btf_size != raw_btf_size ||
		  (ret = memcmp(raw_btf, user_btf, expected_nbytes)),
@@ -4755,7 +4755,7 @@ static void do_test_file(unsigned int test_num)

	/* get necessary program info */
	info_len = sizeof(struct bpf_prog_info);
	err = bpf_obj_get_info_by_fd(prog_fd, &info, &info_len);
	err = bpf_prog_get_info_by_fd(prog_fd, &info, &info_len);

	if (CHECK(err < 0, "invalid get info (1st) errno:%d", errno)) {
		fprintf(stderr, "%s\n", btf_log_buf);
@@ -4787,7 +4787,7 @@ static void do_test_file(unsigned int test_num)
	info.func_info_rec_size = rec_size;
	info.func_info = ptr_to_u64(func_info);

	err = bpf_obj_get_info_by_fd(prog_fd, &info, &info_len);
	err = bpf_prog_get_info_by_fd(prog_fd, &info, &info_len);

	if (CHECK(err < 0, "invalid get info (2nd) errno:%d", errno)) {
		fprintf(stderr, "%s\n", btf_log_buf);
@@ -6405,7 +6405,7 @@ static int test_get_finfo(const struct prog_info_raw_test *test,

	/* get necessary lens */
	info_len = sizeof(struct bpf_prog_info);
	err = bpf_obj_get_info_by_fd(prog_fd, &info, &info_len);
	err = bpf_prog_get_info_by_fd(prog_fd, &info, &info_len);
	if (CHECK(err < 0, "invalid get info (1st) errno:%d", errno)) {
		fprintf(stderr, "%s\n", btf_log_buf);
		return -1;
@@ -6435,7 +6435,7 @@ static int test_get_finfo(const struct prog_info_raw_test *test,
	info.nr_func_info = nr_func_info;
	info.func_info_rec_size = rec_size;
	info.func_info = ptr_to_u64(func_info);
	err = bpf_obj_get_info_by_fd(prog_fd, &info, &info_len);
	err = bpf_prog_get_info_by_fd(prog_fd, &info, &info_len);
	if (CHECK(err < 0, "invalid get info (2nd) errno:%d", errno)) {
		fprintf(stderr, "%s\n", btf_log_buf);
		err = -1;
@@ -6499,7 +6499,7 @@ static int test_get_linfo(const struct prog_info_raw_test *test,
	nr_jited_func_lens = nr_jited_ksyms;

	info_len = sizeof(struct bpf_prog_info);
	err = bpf_obj_get_info_by_fd(prog_fd, &info, &info_len);
	err = bpf_prog_get_info_by_fd(prog_fd, &info, &info_len);
	if (CHECK(err < 0, "err:%d errno:%d", err, errno)) {
		err = -1;
		goto done;
@@ -6573,7 +6573,7 @@ static int test_get_linfo(const struct prog_info_raw_test *test,
		info.jited_func_lens = ptr_to_u64(jited_func_lens);
	}

	err = bpf_obj_get_info_by_fd(prog_fd, &info, &info_len);
	err = bpf_prog_get_info_by_fd(prog_fd, &info, &info_len);

	/*
	 * Only recheck the info.*line_info* fields.
+1 −1
Original line number Diff line number Diff line
@@ -14,7 +14,7 @@ static __u32 bpf_map_id(struct bpf_map *map)
	int err;

	memset(&info, 0, info_len);
	err = bpf_obj_get_info_by_fd(bpf_map__fd(map), &info, &info_len);
	err = bpf_map_get_info_by_fd(bpf_map__fd(map), &info, &info_len);
	if (err)
		return 0;
	return info.id;
Loading