cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

global_func_args.c (1598B)


      1// SPDX-License-Identifier: GPL-2.0
      2#include "test_progs.h"
      3#include "network_helpers.h"
      4
      5static __u32 duration;
      6
      7static void test_global_func_args0(struct bpf_object *obj)
      8{
      9	int err, i, map_fd, actual_value;
     10	const char *map_name = "values";
     11
     12	map_fd = bpf_find_map(__func__, obj, map_name);
     13	if (CHECK(map_fd < 0, "bpf_find_map", "cannot find BPF map %s: %s\n",
     14		map_name, strerror(errno)))
     15		return;
     16
     17	struct {
     18		const char *descr;
     19		int expected_value;
     20	} tests[] = {
     21		{"passing NULL pointer", 0},
     22		{"returning value", 1},
     23		{"reading local variable", 100 },
     24		{"writing local variable", 101 },
     25		{"reading global variable", 42 },
     26		{"writing global variable", 43 },
     27		{"writing to pointer-to-pointer", 1 },
     28	};
     29
     30	for (i = 0; i < ARRAY_SIZE(tests); ++i) {
     31		const int expected_value = tests[i].expected_value;
     32
     33		err = bpf_map_lookup_elem(map_fd, &i, &actual_value);
     34
     35		CHECK(err || actual_value != expected_value, tests[i].descr,
     36			 "err %d result %d expected %d\n", err, actual_value, expected_value);
     37	}
     38}
     39
     40void test_global_func_args(void)
     41{
     42	const char *file = "./test_global_func_args.o";
     43	struct bpf_object *obj;
     44	int err, prog_fd;
     45	LIBBPF_OPTS(bpf_test_run_opts, topts,
     46		.data_in = &pkt_v4,
     47		.data_size_in = sizeof(pkt_v4),
     48		.repeat = 1,
     49	);
     50
     51	err = bpf_prog_test_load(file, BPF_PROG_TYPE_CGROUP_SKB, &obj, &prog_fd);
     52	if (CHECK(err, "load program", "error %d loading %s\n", err, file))
     53		return;
     54
     55	err = bpf_prog_test_run_opts(prog_fd, &topts);
     56	ASSERT_OK(err, "test_run");
     57	ASSERT_OK(topts.retval, "test_run retval");
     58
     59	test_global_func_args0(obj);
     60
     61	bpf_object__close(obj);
     62}