Esempio n. 1
0
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");
}
Esempio n. 2
0
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();
}
Esempio n. 10
0
void
rump_pub_allbetsareoff_setid(pid_t arg1, int arg2)
{

	rump_schedule();
	rump_allbetsareoff_setid(arg1, arg2);
	rump_unschedule();
}
Esempio n. 11
0
void
rump_pub_lwproc_sysent_usenative(void)
{

	rump_schedule();
	rump_lwproc_sysent_usenative();
	rump_unschedule();
}
Esempio n. 12
0
void
rump_pub_lwproc_releaselwp(void)
{

	rump_schedule();
	rump_lwproc_releaselwp();
	rump_unschedule();
}
Esempio n. 13
0
void
rump_pub_lwproc_switch(struct lwp *arg1)
{

	rump_schedule();
	rump_lwproc_switch(arg1);
	rump_unschedule();
}
Esempio n. 14
0
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();
}
Esempio n. 20
0
ATF_TC_BODY(kthread, tc)
{

	rump_init();

	rump_schedule();
	rumptest_threadjoin(); /* panics if fails */
	rump_unschedule();
}
Esempio n. 21
0
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");
}
Esempio n. 22
0
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;
}