brintos

brintos / linux-shallow public Read only

0
0
Text · 1.5 KiB · 14c91b6 Raw
61 lines · c
1// SPDX-License-Identifier: GPL-2.02/* Copyright (c) 2019 Facebook */3#include <test_progs.h>4#include "bpf_util.h"5 6void serial_test_fexit_stress(void)7{8	int bpf_max_tramp_links, err, i;9	int *fd, *fexit_fd, *link_fd;10 11	bpf_max_tramp_links = get_bpf_max_tramp_links();12	if (!ASSERT_GE(bpf_max_tramp_links, 1, "bpf_max_tramp_links"))13		return;14	fd = calloc(bpf_max_tramp_links * 2, sizeof(*fd));15	if (!ASSERT_OK_PTR(fd, "fd"))16		return;17	fexit_fd = fd;18	link_fd = fd + bpf_max_tramp_links;19 20	const struct bpf_insn trace_program[] = {21		BPF_MOV64_IMM(BPF_REG_0, 0),22		BPF_EXIT_INSN(),23	};24 25	LIBBPF_OPTS(bpf_prog_load_opts, trace_opts,26		.expected_attach_type = BPF_TRACE_FEXIT,27	);28 29	LIBBPF_OPTS(bpf_test_run_opts, topts);30 31	err = libbpf_find_vmlinux_btf_id("bpf_fentry_test1",32					 trace_opts.expected_attach_type);33	if (!ASSERT_GT(err, 0, "find_vmlinux_btf_id"))34		goto out;35	trace_opts.attach_btf_id = err;36 37	for (i = 0; i < bpf_max_tramp_links; i++) {38		fexit_fd[i] = bpf_prog_load(BPF_PROG_TYPE_TRACING, NULL, "GPL",39					    trace_program,40					    ARRAY_SIZE(trace_program),41					    &trace_opts);42		if (!ASSERT_GE(fexit_fd[i], 0, "fexit load"))43			goto out;44		link_fd[i] = bpf_link_create(fexit_fd[i], 0, BPF_TRACE_FEXIT, NULL);45		if (!ASSERT_GE(link_fd[i], 0, "fexit attach"))46			goto out;47	}48 49	err = bpf_prog_test_run_opts(fexit_fd[0], &topts);50	ASSERT_OK(err, "bpf_prog_test_run_opts");51 52out:53	for (i = 0; i < bpf_max_tramp_links; i++) {54		if (link_fd[i] > 0)55			close(link_fd[i]);56		if (fexit_fd[i] > 0)57			close(fexit_fd[i]);58	}59	free(fd);60}61