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