ATF_TC_BODY(bpfjit_extmem_side_effect, tc) { static struct bpf_insn insns[] = { BPF_STMT(BPF_LD+BPF_B+BPF_ABS, 0), /* A <- P[0] */ BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 2), /* X <- 2 */ BPF_STMT(BPF_ST, 1), /* M[1] <- A */ BPF_STMT(BPF_ALU+BPF_ADD+BPF_X, 0), /* A <- A + X */ BPF_STMT(BPF_STX, 2), /* M[2] <- X */ BPF_STMT(BPF_ST, 3), /* M[3] <- A */ BPF_STMT(BPF_LD+BPF_B+BPF_ABS, 99), /* A <- P[99] */ BPF_STMT(BPF_RET+BPF_A, 0) /* ret A */ }; bpfjit_func_t code; uint8_t pkt[1] = { 1 }; uint32_t mem[ctx.extwords]; /* Pre-inited words. */ mem[0] = 0; mem[3] = 7; mem[1] = mem[2] = 0xdeadbeef; bpf_args_t args = { .pkt = pkt, .buflen = sizeof(pkt), .wirelen = sizeof(pkt), .mem = mem, }; size_t insn_count = sizeof(insns) / sizeof(insns[0]); RZ(rump_init()); rump_schedule(); code = rumpns_bpfjit_generate_code(&ctx, insns, insn_count); rump_unschedule(); ATF_REQUIRE(code != NULL); ATF_CHECK(code(&ctx, &args) == 0); rump_schedule(); rumpns_bpfjit_free_code(code); rump_unschedule(); ATF_CHECK(mem[0] == 0); ATF_CHECK(mem[1] == 1); ATF_CHECK(mem[2] == 2); ATF_CHECK(mem[3] == 3); } ATF_TC(bpfjit_extmem_invalid_store); ATF_TC_HEAD(bpfjit_extmem_invalid_store, tc) { atf_tc_set_md_var(tc, "descr", "Test that out-of-range store " "fails validation"); }
ATF_TC_BODY(bpfjit_copx_ret_mem, tc) { static struct bpf_insn insns[] = { BPF_STMT(BPF_LD+BPF_IMM, 13), BPF_STMT(BPF_ST, 2), BPF_STMT(BPF_LD+BPF_IMM, 137), BPF_STMT(BPF_ST, 1), BPF_STMT(BPF_LDX+BPF_IMM, 0), // retM BPF_STMT(BPF_MISC+BPF_COPX, 0), BPF_STMT(BPF_RET+BPF_A, 0) }; bpfjit_func_t code; uint8_t pkt[1] = { 0 }; uint32_t mem[ctx.extwords]; void *arg = (void*)(uintptr_t)2; /* Pre-inited words. */ mem[0] = 0; mem[3] = 3; bpf_args_t args = { .pkt = pkt, .buflen = sizeof(pkt), .wirelen = sizeof(pkt), .arg = arg, .mem = mem, }; size_t insn_count = sizeof(insns) / sizeof(insns[0]); RZ(rump_init()); rump_schedule(); code = rumpns_bpfjit_generate_code(&ctx, insns, insn_count); rump_unschedule(); ATF_REQUIRE(code != NULL); ATF_CHECK(code(&ctx, &args) == 13); rump_schedule(); rumpns_bpfjit_free_code(code); rump_unschedule(); } ATF_TC(bpfjit_copx_ret_preinited_mem); ATF_TC_HEAD(bpfjit_copx_ret_preinited_mem, tc) { atf_tc_set_md_var(tc, "descr", "Test coprocessor function that " "returns a content of external pre-initialized memory word"); }
void rump_pub_vattr_setmode(struct vattr *arg1, mode_t arg2) { rump_schedule(); rump_vattr_setmode(arg1, arg2); rump_unschedule(); }
void rump_pub_vattr_setrdev(struct vattr *arg1, dev_t arg2) { rump_schedule(); rump_vattr_setrdev(arg1, arg2); rump_unschedule(); }
void rump_pub_getvninfo(struct vnode *arg1, enum rump_vtype *arg2, off_t *arg3, dev_t *arg4) { rump_schedule(); rump_getvninfo(arg1, arg2, arg3, arg4); rump_unschedule(); }
void rump_pub_freecn(struct componentname *arg1, int arg2) { rump_schedule(); rump_freecn(arg1, arg2); rump_unschedule(); }
void rump_pub_vp_interlock(struct vnode *arg1) { rump_schedule(); rump_vp_interlock(arg1); rump_unschedule(); }
void rump_pub_vattr_to_vattr50(const struct vattr *arg1, struct vattr *arg2) { rump_schedule(); rump_vattr_to_vattr50(arg1, arg2); rump_unschedule(); }
void rump_pub_vattr_settype(struct vattr *arg1, enum rump_vtype arg2) { rump_schedule(); rump_vattr_settype(arg1, arg2); rump_unschedule(); }
void rump_pub_allbetsareoff_setid(pid_t arg1, int arg2) { rump_schedule(); rump_allbetsareoff_setid(arg1, arg2); rump_unschedule(); }
void rump_pub_lwproc_sysent_usenative(void) { rump_schedule(); rump_lwproc_sysent_usenative(); rump_unschedule(); }
void rump_pub_lwproc_releaselwp(void) { rump_schedule(); rump_lwproc_releaselwp(); rump_unschedule(); }
void rump_pub_lwproc_switch(struct lwp *arg1) { rump_schedule(); rump_lwproc_switch(arg1); rump_unschedule(); }
void rump_pub_cred_put(struct kauth_cred *arg1) { rump_schedule(); rump_cred_put(arg1); rump_unschedule(); }
void rump_pub_vattr_free(struct vattr *arg1) { rump_schedule(); rump_vattr_free(arg1); rump_unschedule(); }
void rump_pub_vfs_syncwait(struct mount *arg1) { rump_schedule(); rump_vfs_syncwait(arg1); rump_unschedule(); }
void rump_pub_vp_incref(struct vnode *arg1) { rump_schedule(); rump_vp_incref(arg1); rump_unschedule(); }
void rump_pub_vfs_mount_print(const char *arg1, int arg2) { rump_schedule(); rump_vfs_mount_print(arg1, arg2); rump_unschedule(); }
void rump_pub_vp_rele(struct vnode *arg1) { rump_schedule(); rump_vp_rele(arg1); rump_unschedule(); }
ATF_TC_BODY(kthread, tc) { rump_init(); rump_schedule(); rumptest_threadjoin(); /* panics if fails */ rump_unschedule(); }
ATF_TC_BODY(bpfjit_extmem_load_preinited, tc) { static struct bpf_insn insns[] = { BPF_STMT(BPF_LD+BPF_MEM, 3), BPF_STMT(BPF_RET+BPF_A, 0) }; bpfjit_func_t code; uint8_t pkt[1] = { 0 }; uint32_t mem[ctx.extwords]; /* Pre-inited words. */ mem[0] = 0; mem[3] = 3; bpf_args_t args = { .pkt = pkt, .buflen = sizeof(pkt), .wirelen = sizeof(pkt), .mem = mem, }; size_t insn_count = sizeof(insns) / sizeof(insns[0]); RZ(rump_init()); rump_schedule(); code = rumpns_bpfjit_generate_code(&ctx, insns, insn_count); rump_unschedule(); ATF_REQUIRE(code != NULL); ATF_CHECK(code(&ctx, &args) == 3); rump_schedule(); rumpns_bpfjit_free_code(code); rump_unschedule(); } ATF_TC(bpfjit_extmem_invalid_load); ATF_TC_HEAD(bpfjit_extmem_invalid_load, tc) { atf_tc_set_md_var(tc, "descr", "Test that out-of-range load " "fails validation"); }
ATF_TC_BODY(sigignore, tc) { rump_boot_setsigmodel(RUMP_SIGMODEL_IGNORE); rump_init(); rump_schedule(); rumptest_localsig(SIGKILL); rump_unschedule(); }
int rump_pub_vfs_extattrctl(struct mount *arg1, int arg2, struct vnode *arg3, int arg4, const char *arg5) { int rv; rump_schedule(); rv = rump_vfs_extattrctl(arg1, arg2, arg3, arg4, arg5); rump_unschedule(); return rv; }
int rump_pub_vfs_vptofh(struct vnode *arg1, struct fid *arg2, size_t *arg3) { int rv; rump_schedule(); rv = rump_vfs_vptofh(arg1, arg2, arg3); rump_unschedule(); return rv; }
int rump_pub_vfs_fhtovp(struct mount *arg1, struct fid *arg2, struct vnode **arg3) { int rv; rump_schedule(); rv = rump_vfs_fhtovp(arg1, arg2, arg3); rump_unschedule(); return rv; }
int rump_pub_vfs_getmp(const char *arg1, struct mount **arg2) { int rv; rump_schedule(); rv = rump_vfs_getmp(arg1, arg2); rump_unschedule(); return rv; }
struct vattr * rump_pub_vattr_init(void) { struct vattr * rv; rump_schedule(); rv = rump_vattr_init(); rump_unschedule(); return rv; }
struct vfsops * rump_pub_vfs_getopsbyname(const char *arg1) { struct vfsops * rv; rump_schedule(); rv = rump_vfs_getopsbyname(arg1); rump_unschedule(); return rv; }
int rump_pub_syspuffs_glueinit(int arg1, int *arg2) { int rv; rump_schedule(); rv = rump_syspuffs_glueinit(arg1, arg2); rump_unschedule(); return rv; }
struct vfsops * rump_pub_vfslist_iterate(struct vfsops *arg1) { struct vfsops * rv; rump_schedule(); rv = rump_vfslist_iterate(arg1); rump_unschedule(); return rv; }