// SPDX-License-Identifier: GPL-2.0 #include #include void test_raw_tp_writable_reject_nbd_invalid(void) { __u32 duration = 0; char error[4096]; int bpf_fd = -1, tp_fd = -1; const struct bpf_insn program[] = { /* r6 is our tp buffer */ BPF_LDX_MEM(BPF_DW, BPF_REG_6, BPF_REG_1, 0), /* one byte beyond the end of the nbd_request struct */ BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_6, sizeof(struct nbd_request)), BPF_EXIT_INSN(), }; struct bpf_load_program_attr load_attr = { .prog_type = BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE, .license = "GPL v2", .insns = program, .insns_cnt = sizeof(program) / sizeof(struct bpf_insn), .log_level = 2, }; bpf_fd = bpf_load_program_xattr(&load_attr, error, sizeof(error)); if (CHECK(bpf_fd < 0, "bpf_raw_tracepoint_writable load", "failed: %d errno %d\n", bpf_fd, errno)) return; tp_fd = bpf_raw_tracepoint_open("nbd_send_request", bpf_fd); if (CHECK(tp_fd >= 0, "bpf_raw_tracepoint_writable open", "erroneously succeeded\n")) goto out_bpffd; close(tp_fd); out_bpffd: close(bpf_fd); }