File Index
Files and directories
Sign in
FILE

raw_tp_writable_test_run.c

File preview with syntax highlighting.

linux-6.19.14/tools/testing/selftests/bpf/prog_tests/raw_tp_writable_test_run.c C
 1// SPDX-License-Identifier: GPL-2.0
 2
 3#include <test_progs.h>
 4#include <linux/nbd.h>
 5#include "bpf_util.h"
 6
 7/* NOTE: conflict with other tests. */
 8void serial_test_raw_tp_writable_test_run(void)
 9{
10	__u32 duration = 0;
11	char error[4096];
12
13	const struct bpf_insn trace_program[] = {
14		BPF_LDX_MEM(BPF_DW, BPF_REG_6, BPF_REG_1, 0),
15		BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_6, 0),
16		BPF_MOV64_IMM(BPF_REG_0, 42),
17		BPF_STX_MEM(BPF_W, BPF_REG_6, BPF_REG_0, 0),
18		BPF_EXIT_INSN(),
19	};
20
21	LIBBPF_OPTS(bpf_prog_load_opts, trace_opts,
22		.log_level = 2,
23		.log_buf = error,
24		.log_size = sizeof(error),
25	);
26
27	int bpf_fd = bpf_prog_load(BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE, NULL, "GPL v2",
28				   trace_program, ARRAY_SIZE(trace_program),
29				   &trace_opts);
30	if (CHECK(bpf_fd < 0, "bpf_raw_tracepoint_writable loaded",
31		  "failed: %d errno %d\n", bpf_fd, errno))
32		return;
33
34	const struct bpf_insn skb_program[] = {
35		BPF_MOV64_IMM(BPF_REG_0, 0),
36		BPF_EXIT_INSN(),
37	};
38
39	LIBBPF_OPTS(bpf_prog_load_opts, skb_opts,
40		.log_buf = error,
41		.log_size = sizeof(error),
42	);
43
44	int filter_fd = bpf_prog_load(BPF_PROG_TYPE_SOCKET_FILTER, NULL, "GPL v2",
45				      skb_program, ARRAY_SIZE(skb_program),
46				      &skb_opts);
47	if (CHECK(filter_fd < 0, "test_program_loaded", "failed: %d errno %d\n",
48		  filter_fd, errno))
49		goto out_bpffd;
50
51	int tp_fd = bpf_raw_tracepoint_open("bpf_test_finish", bpf_fd);
52	if (CHECK(tp_fd < 0, "bpf_raw_tracepoint_writable opened",
53		  "failed: %d errno %d\n", tp_fd, errno))
54		goto out_filterfd;
55
56	char test_skb[128] = {
57		0,
58	};
59
60	LIBBPF_OPTS(bpf_test_run_opts, topts,
61		.data_in = test_skb,
62		.data_size_in = sizeof(test_skb),
63		.repeat = 1,
64	);
65	int err = bpf_prog_test_run_opts(filter_fd, &topts);
66	CHECK(err != 42, "test_run",
67	      "tracepoint did not modify return value\n");
68	CHECK(topts.retval != 0, "test_run_ret",
69	      "socket_filter did not return 0\n");
70
71	close(tp_fd);
72
73	err = bpf_prog_test_run_opts(filter_fd, &topts);
74	CHECK(err != 0, "test_run_notrace",
75	      "test_run failed with %d errno %d\n", err, errno);
76	CHECK(topts.retval != 0, "test_run_ret_notrace",
77	      "socket_filter did not return 0\n");
78
79out_filterfd:
80	close(filter_fd);
81out_bpffd:
82	close(bpf_fd);
83}
~/ Read-only file preview.