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

fexit_stress.c (1889B)


      1// SPDX-License-Identifier: GPL-2.0
      2/* Copyright (c) 2019 Facebook */
      3#include <test_progs.h>
      4
      5/* that's kernel internal BPF_MAX_TRAMP_PROGS define */
      6#define CNT 38
      7
      8void serial_test_fexit_stress(void)
      9{
     10	char test_skb[128] = {};
     11	int fexit_fd[CNT] = {};
     12	int link_fd[CNT] = {};
     13	char error[4096];
     14	int err, i, filter_fd;
     15
     16	const struct bpf_insn trace_program[] = {
     17		BPF_MOV64_IMM(BPF_REG_0, 0),
     18		BPF_EXIT_INSN(),
     19	};
     20
     21	LIBBPF_OPTS(bpf_prog_load_opts, trace_opts,
     22		.expected_attach_type = BPF_TRACE_FEXIT,
     23		.log_buf = error,
     24		.log_size = sizeof(error),
     25	);
     26
     27	const struct bpf_insn skb_program[] = {
     28		BPF_MOV64_IMM(BPF_REG_0, 0),
     29		BPF_EXIT_INSN(),
     30	};
     31
     32	LIBBPF_OPTS(bpf_prog_load_opts, skb_opts,
     33		.log_buf = error,
     34		.log_size = sizeof(error),
     35	);
     36
     37	LIBBPF_OPTS(bpf_test_run_opts, topts,
     38		.data_in = test_skb,
     39		.data_size_in = sizeof(test_skb),
     40		.repeat = 1,
     41	);
     42
     43	err = libbpf_find_vmlinux_btf_id("bpf_fentry_test1",
     44					 trace_opts.expected_attach_type);
     45	if (!ASSERT_GT(err, 0, "find_vmlinux_btf_id"))
     46		goto out;
     47	trace_opts.attach_btf_id = err;
     48
     49	for (i = 0; i < CNT; i++) {
     50		fexit_fd[i] = bpf_prog_load(BPF_PROG_TYPE_TRACING, NULL, "GPL",
     51					    trace_program,
     52					    sizeof(trace_program) / sizeof(struct bpf_insn),
     53					    &trace_opts);
     54		if (!ASSERT_GE(fexit_fd[i], 0, "fexit load"))
     55			goto out;
     56		link_fd[i] = bpf_link_create(fexit_fd[i], 0, BPF_TRACE_FEXIT, NULL);
     57		if (!ASSERT_GE(link_fd[i], 0, "fexit attach"))
     58			goto out;
     59	}
     60
     61	filter_fd = bpf_prog_load(BPF_PROG_TYPE_SOCKET_FILTER, NULL, "GPL",
     62				  skb_program, sizeof(skb_program) / sizeof(struct bpf_insn),
     63				  &skb_opts);
     64	if (!ASSERT_GE(filter_fd, 0, "test_program_loaded"))
     65		goto out;
     66
     67	err = bpf_prog_test_run_opts(filter_fd, &topts);
     68	close(filter_fd);
     69	CHECK_FAIL(err);
     70out:
     71	for (i = 0; i < CNT; i++) {
     72		if (link_fd[i])
     73			close(link_fd[i]);
     74		if (fexit_fd[i])
     75			close(fexit_fd[i]);
     76	}
     77}