CVS commit: src/tests/net/bpfjit

2016-08-08 Thread Paul Goyette
Module Name:src
Committed By:   pgoyette
Date:   Mon Aug  8 15:01:59 UTC 2016

Modified Files:
src/tests/net/bpfjit: Makefile

Log Message:
This now needs librumpdev and librumpvfs to work.


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 src/tests/net/bpfjit/Makefile

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/tests/net/bpfjit/Makefile
diff -u src/tests/net/bpfjit/Makefile:1.5 src/tests/net/bpfjit/Makefile:1.6
--- src/tests/net/bpfjit/Makefile:1.5	Tue May 24 10:16:34 2016
+++ src/tests/net/bpfjit/Makefile	Mon Aug  8 15:01:59 2016
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.5 2016/05/24 10:16:34 hannken Exp $
+# $NetBSD: Makefile,v 1.6 2016/08/08 15:01:59 pgoyette Exp $
 #
 
 .include 
@@ -14,6 +14,6 @@ PAXCTL_FLAGS=	+m
 
 LDADD+=		-lrumpnet_bpfjit -lrumpkern_sljit
 LDADD+=		-lrumpdev_bpf -lrumpnet_net -lrumpnet
-LDADD+=		-lrump -lrumpuser -lpthread
+LDADD+=		-lrump -lrumpuser -lpthread -lrumpdev -lrumpvfs
 
 .include 



CVS commit: src/tests/net/bpfjit

2015-02-14 Thread Alexander Nasonov
Module Name:src
Committed By:   alnsn
Date:   Sat Feb 14 22:34:33 UTC 2015

Modified Files:
src/tests/net/bpfjit: t_bpfjit.c

Log Message:
Add two more bpfjit_jmp_jeq_x_noinit_XX tests.


To generate a diff of this commit:
cvs rdiff -u -r1.10 -r1.11 src/tests/net/bpfjit/t_bpfjit.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/tests/net/bpfjit/t_bpfjit.c
diff -u src/tests/net/bpfjit/t_bpfjit.c:1.10 src/tests/net/bpfjit/t_bpfjit.c:1.11
--- src/tests/net/bpfjit/t_bpfjit.c:1.10	Sat Feb 14 20:25:08 2015
+++ src/tests/net/bpfjit/t_bpfjit.c	Sat Feb 14 22:34:33 2015
@@ -1,7 +1,7 @@
-/*	$NetBSD: t_bpfjit.c,v 1.10 2015/02/14 20:25:08 alnsn Exp $ */
+/*	$NetBSD: t_bpfjit.c,v 1.11 2015/02/14 22:34:33 alnsn Exp $ */
 
 /*-
- * Copyright (c) 2011-2012, 2014 Alexander Nasonov.
+ * Copyright (c) 2011-2012, 2014-2015 Alexander Nasonov.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -27,7 +27,7 @@
  */
 
 #include 
-__RCSID("$NetBSD: t_bpfjit.c,v 1.10 2015/02/14 20:25:08 alnsn Exp $");
+__RCSID("$NetBSD: t_bpfjit.c,v 1.11 2015/02/14 22:34:33 alnsn Exp $");
 
 #include 
 #include 
@@ -2298,6 +2298,80 @@ ATF_TC_BODY(bpfjit_jmp_jeq_x_noinit_ax, 
 	rump_unschedule();
 }
 
+ATF_TC(bpfjit_jmp_jeq_x_noinit_a);
+ATF_TC_HEAD(bpfjit_jmp_jeq_x_noinit_a, tc)
+{
+	atf_tc_set_md_var(tc, "descr", "Test JIT compilation "
+	"of BPF_JMP+BPF_EQ+BPF_X with uninitialised A");
+}
+
+ATF_TC_BODY(bpfjit_jmp_jeq_x_noinit_a, tc)
+{
+	static struct bpf_insn insns[] = {
+		BPF_STMT(BPF_LDX+BPF_W+BPF_LEN, 0), /* X > 0 */
+		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 0, 1),
+		BPF_STMT(BPF_RET+BPF_K, 10),
+		BPF_STMT(BPF_RET+BPF_K, 11)
+	};
+
+	bpfjit_func_t code;
+	uint8_t pkt[8]; /* the program doesn't read any data */
+
+	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+	RZ(rump_init());
+
+	ATF_CHECK(prog_validate(insns, insn_count));
+
+	rump_schedule();
+	code = rumpns_bpfjit_generate_code(NULL, insns, insn_count);
+	rump_unschedule();
+	ATF_REQUIRE(code != NULL);
+
+	ATF_CHECK(jitcall(code, pkt, 1, 1) == 11);
+
+	rump_schedule();
+	rumpns_bpfjit_free_code(code);
+	rump_unschedule();
+}
+
+ATF_TC(bpfjit_jmp_jeq_x_noinit_x);
+ATF_TC_HEAD(bpfjit_jmp_jeq_x_noinit_x, tc)
+{
+	atf_tc_set_md_var(tc, "descr", "Test JIT compilation "
+	"of BPF_JMP+BPF_EQ+BPF_X with uninitialised X");
+}
+
+ATF_TC_BODY(bpfjit_jmp_jeq_x_noinit_x, tc)
+{
+	static struct bpf_insn insns[] = {
+		BPF_STMT(BPF_LD+BPF_LEN, 0), /* A > 0 */
+		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 0, 1),
+		BPF_STMT(BPF_RET+BPF_K, 10),
+		BPF_STMT(BPF_RET+BPF_K, 11)
+	};
+
+	bpfjit_func_t code;
+	uint8_t pkt[8]; /* the program doesn't read any data */
+
+	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+	RZ(rump_init());
+
+	ATF_CHECK(prog_validate(insns, insn_count));
+
+	rump_schedule();
+	code = rumpns_bpfjit_generate_code(NULL, insns, insn_count);
+	rump_unschedule();
+	ATF_REQUIRE(code != NULL);
+
+	ATF_CHECK(jitcall(code, pkt, 1, 1) == 11);
+
+	rump_schedule();
+	rumpns_bpfjit_free_code(code);
+	rump_unschedule();
+}
+
 ATF_TC(bpfjit_jmp_modulo_x);
 ATF_TC_HEAD(bpfjit_jmp_modulo_x, tc)
 {
@@ -4568,6 +4642,8 @@ ATF_TP_ADD_TCS(tp)
 	ATF_TP_ADD_TC(tp, bpfjit_jmp_jeq_x);
 	ATF_TP_ADD_TC(tp, bpfjit_jmp_jset_x);
 	ATF_TP_ADD_TC(tp, bpfjit_jmp_jeq_x_noinit_ax);
+	ATF_TP_ADD_TC(tp, bpfjit_jmp_jeq_x_noinit_a);
+	ATF_TP_ADD_TC(tp, bpfjit_jmp_jeq_x_noinit_x);
 	ATF_TP_ADD_TC(tp, bpfjit_jmp_modulo_x);
 	ATF_TP_ADD_TC(tp, bpfjit_ld_abs);
 	ATF_TP_ADD_TC(tp, bpfjit_ld_abs_k_overflow);



CVS commit: src/tests/net/bpfjit

2015-02-14 Thread Alexander Nasonov
Module Name:src
Committed By:   alnsn
Date:   Sat Feb 14 20:25:08 UTC 2015

Modified Files:
src/tests/net/bpfjit: t_bpfjit.c

Log Message:
Improve bpfjit_jmp_jeq_x test.


To generate a diff of this commit:
cvs rdiff -u -r1.9 -r1.10 src/tests/net/bpfjit/t_bpfjit.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/tests/net/bpfjit/t_bpfjit.c
diff -u src/tests/net/bpfjit/t_bpfjit.c:1.9 src/tests/net/bpfjit/t_bpfjit.c:1.10
--- src/tests/net/bpfjit/t_bpfjit.c:1.9	Sat Feb 14 19:55:05 2015
+++ src/tests/net/bpfjit/t_bpfjit.c	Sat Feb 14 20:25:08 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: t_bpfjit.c,v 1.9 2015/02/14 19:55:05 alnsn Exp $ */
+/*	$NetBSD: t_bpfjit.c,v 1.10 2015/02/14 20:25:08 alnsn Exp $ */
 
 /*-
  * Copyright (c) 2011-2012, 2014 Alexander Nasonov.
@@ -27,7 +27,7 @@
  */
 
 #include 
-__RCSID("$NetBSD: t_bpfjit.c,v 1.9 2015/02/14 19:55:05 alnsn Exp $");
+__RCSID("$NetBSD: t_bpfjit.c,v 1.10 2015/02/14 20:25:08 alnsn Exp $");
 
 #include 
 #include 
@@ -2149,26 +2149,26 @@ ATF_TC_BODY(bpfjit_jmp_jeq_x, tc)
 		BPF_STMT(BPF_LD+BPF_W+BPF_LEN, 0),
 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 8),
 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 0, 1),
-		BPF_STMT(BPF_RET+BPF_K, 0),
+		BPF_STMT(BPF_RET+BPF_K, 1),
 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 3),
 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 2, 0),
 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 9),
 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 1, 1),
-		BPF_STMT(BPF_RET+BPF_K, 1),
-		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 5),
-		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 1, 1),
 		BPF_STMT(BPF_RET+BPF_K, 2),
+		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 5),
+		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 0, 1),
+		BPF_STMT(BPF_RET+BPF_K, 3),
 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 7),
 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 2, 3),
-		BPF_STMT(BPF_RET+BPF_K, 3),
 		BPF_STMT(BPF_RET+BPF_K, 4),
 		BPF_STMT(BPF_RET+BPF_K, 5),
+		BPF_STMT(BPF_RET+BPF_K, 6),
 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 6),
 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 3, 1),
-		BPF_STMT(BPF_RET+BPF_K, 6),
-		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 1, 0, 0),
 		BPF_STMT(BPF_RET+BPF_K, 7),
-		BPF_STMT(BPF_RET+BPF_K, 8)
+		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 1, 0),
+		BPF_STMT(BPF_RET+BPF_K, 8),
+		BPF_STMT(BPF_RET+BPF_K, 9)
 	};
 
 	bpfjit_func_t code;
@@ -2185,14 +2185,14 @@ ATF_TC_BODY(bpfjit_jmp_jeq_x, tc)
 	rump_unschedule();
 	ATF_REQUIRE(code != NULL);
 
-	ATF_CHECK(jitcall(code, pkt, 1, 1) == 7);
-	ATF_CHECK(jitcall(code, pkt, 2, 2) == 7);
-	ATF_CHECK(jitcall(code, pkt, 3, 3) == 1);
-	ATF_CHECK(jitcall(code, pkt, 4, 4) == 7);
-	ATF_CHECK(jitcall(code, pkt, 5, 5) == 7);
-	ATF_CHECK(jitcall(code, pkt, 6, 6) == 8);
-	ATF_CHECK(jitcall(code, pkt, 7, 7) == 5);
-	ATF_CHECK(jitcall(code, pkt, 8, 8) == 0);
+	ATF_CHECK(jitcall(code, pkt, 1, 1) == 8);
+	ATF_CHECK(jitcall(code, pkt, 2, 2) == 8);
+	ATF_CHECK(jitcall(code, pkt, 3, 3) == 2);
+	ATF_CHECK(jitcall(code, pkt, 4, 4) == 8);
+	ATF_CHECK(jitcall(code, pkt, 5, 5) == 3);
+	ATF_CHECK(jitcall(code, pkt, 6, 6) == 9);
+	ATF_CHECK(jitcall(code, pkt, 7, 7) == 6);
+	ATF_CHECK(jitcall(code, pkt, 8, 8) == 1);
 
 	rump_schedule();
 	rumpns_bpfjit_free_code(code);



CVS commit: src/tests/net/bpfjit

2015-02-14 Thread Alexander Nasonov
Module Name:src
Committed By:   alnsn
Date:   Sat Feb 14 19:55:05 UTC 2015

Modified Files:
src/tests/net/bpfjit: t_bpfjit.c

Log Message:
BPF_JMP+BPF_JEQ+BPF_X doesn't compare X with k, it compares X with A.
Fix it in the bpfjit_jmp_jeq_x_noinit_ax test.


To generate a diff of this commit:
cvs rdiff -u -r1.8 -r1.9 src/tests/net/bpfjit/t_bpfjit.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/tests/net/bpfjit/t_bpfjit.c
diff -u src/tests/net/bpfjit/t_bpfjit.c:1.8 src/tests/net/bpfjit/t_bpfjit.c:1.9
--- src/tests/net/bpfjit/t_bpfjit.c:1.8	Sat Feb 14 17:28:19 2015
+++ src/tests/net/bpfjit/t_bpfjit.c	Sat Feb 14 19:55:05 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: t_bpfjit.c,v 1.8 2015/02/14 17:28:19 alnsn Exp $ */
+/*	$NetBSD: t_bpfjit.c,v 1.9 2015/02/14 19:55:05 alnsn Exp $ */
 
 /*-
  * Copyright (c) 2011-2012, 2014 Alexander Nasonov.
@@ -27,7 +27,7 @@
  */
 
 #include 
-__RCSID("$NetBSD: t_bpfjit.c,v 1.8 2015/02/14 17:28:19 alnsn Exp $");
+__RCSID("$NetBSD: t_bpfjit.c,v 1.9 2015/02/14 19:55:05 alnsn Exp $");
 
 #include 
 #include 
@@ -2262,19 +2262,19 @@ ATF_TC_BODY(bpfjit_jmp_jset_x, tc)
 	rump_unschedule();
 }
 
-ATF_TC(bpfjit_jmp_x_uninitialised);
-ATF_TC_HEAD(bpfjit_jmp_x_uninitialised, tc)
+ATF_TC(bpfjit_jmp_jeq_x_noinit_ax);
+ATF_TC_HEAD(bpfjit_jmp_jeq_x_noinit_ax, tc)
 {
 	atf_tc_set_md_var(tc, "descr", "Test JIT compilation "
-	"of BPF_JMP+BPF_EQ+BPF_X with uninitialised X");
+	"of BPF_JMP+BPF_EQ+BPF_X with uninitialised A and X");
 }
 
-ATF_TC_BODY(bpfjit_jmp_x_uninitialised, tc)
+ATF_TC_BODY(bpfjit_jmp_jeq_x_noinit_ax, tc)
 {
 	static struct bpf_insn insns[] = {
-		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 1, 0, 1),
-		BPF_STMT(BPF_RET+BPF_K, 11),
-		BPF_STMT(BPF_RET+BPF_K, 10)
+		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 0, 1),
+		BPF_STMT(BPF_RET+BPF_K, 10),
+		BPF_STMT(BPF_RET+BPF_K, 11)
 	};
 
 	bpfjit_func_t code;
@@ -4567,7 +4567,7 @@ ATF_TP_ADD_TCS(tp)
 	ATF_TP_ADD_TC(tp, bpfjit_jmp_jge_x);
 	ATF_TP_ADD_TC(tp, bpfjit_jmp_jeq_x);
 	ATF_TP_ADD_TC(tp, bpfjit_jmp_jset_x);
-	ATF_TP_ADD_TC(tp, bpfjit_jmp_x_uninitialised);
+	ATF_TP_ADD_TC(tp, bpfjit_jmp_jeq_x_noinit_ax);
 	ATF_TP_ADD_TC(tp, bpfjit_jmp_modulo_x);
 	ATF_TP_ADD_TC(tp, bpfjit_ld_abs);
 	ATF_TP_ADD_TC(tp, bpfjit_ld_abs_k_overflow);



CVS commit: src/tests/net/bpfjit

2015-02-14 Thread Alexander Nasonov
Module Name:src
Committed By:   alnsn
Date:   Sat Feb 14 17:28:19 UTC 2015

Modified Files:
src/tests/net/bpfjit: t_bpfjit.c

Log Message:
Avoid testing for zero rv in bpfjit_jmp_x_uninitialised. Unitialised
X isn't a problem for bpf_validate().


To generate a diff of this commit:
cvs rdiff -u -r1.7 -r1.8 src/tests/net/bpfjit/t_bpfjit.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/tests/net/bpfjit/t_bpfjit.c
diff -u src/tests/net/bpfjit/t_bpfjit.c:1.7 src/tests/net/bpfjit/t_bpfjit.c:1.8
--- src/tests/net/bpfjit/t_bpfjit.c:1.7	Sat Feb 14 16:48:30 2015
+++ src/tests/net/bpfjit/t_bpfjit.c	Sat Feb 14 17:28:19 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: t_bpfjit.c,v 1.7 2015/02/14 16:48:30 alnsn Exp $ */
+/*	$NetBSD: t_bpfjit.c,v 1.8 2015/02/14 17:28:19 alnsn Exp $ */
 
 /*-
  * Copyright (c) 2011-2012, 2014 Alexander Nasonov.
@@ -27,7 +27,7 @@
  */
 
 #include 
-__RCSID("$NetBSD: t_bpfjit.c,v 1.7 2015/02/14 16:48:30 alnsn Exp $");
+__RCSID("$NetBSD: t_bpfjit.c,v 1.8 2015/02/14 17:28:19 alnsn Exp $");
 
 #include 
 #include 
@@ -2273,8 +2273,8 @@ ATF_TC_BODY(bpfjit_jmp_x_uninitialised, 
 {
 	static struct bpf_insn insns[] = {
 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 1, 0, 1),
-		BPF_STMT(BPF_RET+BPF_K, 1),
-		BPF_STMT(BPF_RET+BPF_K, 0)
+		BPF_STMT(BPF_RET+BPF_K, 11),
+		BPF_STMT(BPF_RET+BPF_K, 10)
 	};
 
 	bpfjit_func_t code;
@@ -2284,15 +2284,14 @@ ATF_TC_BODY(bpfjit_jmp_x_uninitialised, 
 
 	RZ(rump_init());
 
-	/* X isn't initialised. */
-	ATF_CHECK(!prog_validate(insns, insn_count));
+	ATF_CHECK(prog_validate(insns, insn_count));
 
 	rump_schedule();
 	code = rumpns_bpfjit_generate_code(NULL, insns, insn_count);
 	rump_unschedule();
 	ATF_REQUIRE(code != NULL);
 
-	ATF_CHECK(jitcall(code, pkt, 1, 1) == 0);
+	ATF_CHECK(jitcall(code, pkt, 1, 1) == 10);
 
 	rump_schedule();
 	rumpns_bpfjit_free_code(code);



CVS commit: src/tests/net/bpfjit

2015-02-14 Thread Alexander Nasonov
Module Name:src
Committed By:   alnsn
Date:   Sat Feb 14 16:48:30 UTC 2015

Modified Files:
src/tests/net/bpfjit: t_bpfjit.c

Log Message:
Add bpfjit_jmp_x_uninitialised test.

Found by http://lcamtuf.coredump.cx/afl/.


To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 src/tests/net/bpfjit/t_bpfjit.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/tests/net/bpfjit/t_bpfjit.c
diff -u src/tests/net/bpfjit/t_bpfjit.c:1.6 src/tests/net/bpfjit/t_bpfjit.c:1.7
--- src/tests/net/bpfjit/t_bpfjit.c:1.6	Wed Feb 11 23:29:48 2015
+++ src/tests/net/bpfjit/t_bpfjit.c	Sat Feb 14 16:48:30 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: t_bpfjit.c,v 1.6 2015/02/11 23:29:48 alnsn Exp $ */
+/*	$NetBSD: t_bpfjit.c,v 1.7 2015/02/14 16:48:30 alnsn Exp $ */
 
 /*-
  * Copyright (c) 2011-2012, 2014 Alexander Nasonov.
@@ -27,7 +27,7 @@
  */
 
 #include 
-__RCSID("$NetBSD: t_bpfjit.c,v 1.6 2015/02/11 23:29:48 alnsn Exp $");
+__RCSID("$NetBSD: t_bpfjit.c,v 1.7 2015/02/14 16:48:30 alnsn Exp $");
 
 #include 
 #include 
@@ -2262,6 +2262,43 @@ ATF_TC_BODY(bpfjit_jmp_jset_x, tc)
 	rump_unschedule();
 }
 
+ATF_TC(bpfjit_jmp_x_uninitialised);
+ATF_TC_HEAD(bpfjit_jmp_x_uninitialised, tc)
+{
+	atf_tc_set_md_var(tc, "descr", "Test JIT compilation "
+	"of BPF_JMP+BPF_EQ+BPF_X with uninitialised X");
+}
+
+ATF_TC_BODY(bpfjit_jmp_x_uninitialised, tc)
+{
+	static struct bpf_insn insns[] = {
+		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 1, 0, 1),
+		BPF_STMT(BPF_RET+BPF_K, 1),
+		BPF_STMT(BPF_RET+BPF_K, 0)
+	};
+
+	bpfjit_func_t code;
+	uint8_t pkt[8]; /* the program doesn't read any data */
+
+	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+	RZ(rump_init());
+
+	/* X isn't initialised. */
+	ATF_CHECK(!prog_validate(insns, insn_count));
+
+	rump_schedule();
+	code = rumpns_bpfjit_generate_code(NULL, insns, insn_count);
+	rump_unschedule();
+	ATF_REQUIRE(code != NULL);
+
+	ATF_CHECK(jitcall(code, pkt, 1, 1) == 0);
+
+	rump_schedule();
+	rumpns_bpfjit_free_code(code);
+	rump_unschedule();
+}
+
 ATF_TC(bpfjit_jmp_modulo_x);
 ATF_TC_HEAD(bpfjit_jmp_modulo_x, tc)
 {
@@ -4531,6 +4568,7 @@ ATF_TP_ADD_TCS(tp)
 	ATF_TP_ADD_TC(tp, bpfjit_jmp_jge_x);
 	ATF_TP_ADD_TC(tp, bpfjit_jmp_jeq_x);
 	ATF_TP_ADD_TC(tp, bpfjit_jmp_jset_x);
+	ATF_TP_ADD_TC(tp, bpfjit_jmp_x_uninitialised);
 	ATF_TP_ADD_TC(tp, bpfjit_jmp_modulo_x);
 	ATF_TP_ADD_TC(tp, bpfjit_ld_abs);
 	ATF_TP_ADD_TC(tp, bpfjit_ld_abs_k_overflow);



CVS commit: src/tests/net/bpfjit

2015-02-11 Thread Alexander Nasonov
Module Name:src
Committed By:   alnsn
Date:   Wed Feb 11 23:29:48 UTC 2015

Modified Files:
src/tests/net/bpfjit: t_bpfjit.c

Log Message:
Add bpfjit_jmp_ja_overflow test.


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 src/tests/net/bpfjit/t_bpfjit.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/tests/net/bpfjit/t_bpfjit.c
diff -u src/tests/net/bpfjit/t_bpfjit.c:1.5 src/tests/net/bpfjit/t_bpfjit.c:1.6
--- src/tests/net/bpfjit/t_bpfjit.c:1.5	Wed Feb 11 22:37:55 2015
+++ src/tests/net/bpfjit/t_bpfjit.c	Wed Feb 11 23:29:48 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: t_bpfjit.c,v 1.5 2015/02/11 22:37:55 alnsn Exp $ */
+/*	$NetBSD: t_bpfjit.c,v 1.6 2015/02/11 23:29:48 alnsn Exp $ */
 
 /*-
  * Copyright (c) 2011-2012, 2014 Alexander Nasonov.
@@ -27,7 +27,7 @@
  */
 
 #include 
-__RCSID("$NetBSD: t_bpfjit.c,v 1.5 2015/02/11 22:37:55 alnsn Exp $");
+__RCSID("$NetBSD: t_bpfjit.c,v 1.6 2015/02/11 23:29:48 alnsn Exp $");
 
 #include 
 #include 
@@ -1700,6 +1700,36 @@ ATF_TC_BODY(bpfjit_jmp_ja_invalid, tc)
 	ATF_CHECK(code == NULL);
 }
 
+ATF_TC(bpfjit_jmp_ja_overflow);
+ATF_TC_HEAD(bpfjit_jmp_ja_overflow, tc)
+{
+	atf_tc_set_md_var(tc, "descr",
+	"Test BPF_JMP+BPF_JA with negative offset");
+}
+
+ATF_TC_BODY(bpfjit_jmp_ja_overflow, tc)
+{
+	static struct bpf_insn insns[] = {
+		BPF_STMT(BPF_JMP+BPF_JA, 1),
+		BPF_STMT(BPF_RET+BPF_K, 777),
+		BPF_STMT(BPF_JMP+BPF_JA, UINT32_MAX - 1), // -2
+		BPF_STMT(BPF_RET+BPF_K, 0)
+	};
+
+	bpfjit_func_t code;
+	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+	RZ(rump_init());
+
+	/* Jumps with negative offsets work only in userspace. */
+	ATF_CHECK(!prog_validate(insns, insn_count));
+
+	rump_schedule();
+	code = rumpns_bpfjit_generate_code(NULL, insns, insn_count);
+	rump_unschedule();
+	ATF_CHECK(code == NULL);
+}
+
 ATF_TC(bpfjit_jmp_jgt_k);
 ATF_TC_HEAD(bpfjit_jmp_jgt_k, tc)
 {
@@ -4491,6 +4521,7 @@ ATF_TP_ADD_TCS(tp)
 	ATF_TP_ADD_TC(tp, bpfjit_alu_neg);
 	ATF_TP_ADD_TC(tp, bpfjit_jmp_ja);
 	ATF_TP_ADD_TC(tp, bpfjit_jmp_ja_invalid);
+	ATF_TP_ADD_TC(tp, bpfjit_jmp_ja_overflow);
 	ATF_TP_ADD_TC(tp, bpfjit_jmp_jgt_k);
 	ATF_TP_ADD_TC(tp, bpfjit_jmp_jge_k);
 	ATF_TP_ADD_TC(tp, bpfjit_jmp_jeq_k);



CVS commit: src/tests/net/bpfjit

2015-02-11 Thread Alexander Nasonov
Module Name:src
Committed By:   alnsn
Date:   Wed Feb 11 22:37:55 UTC 2015

Modified Files:
src/tests/net/bpfjit: t_bpfjit.c

Log Message:
Add bpfjit_ret_k, bpfjit_bad_ret_k, bpfjit_jmp_ja_invalid tests.


To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 src/tests/net/bpfjit/t_bpfjit.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/tests/net/bpfjit/t_bpfjit.c
diff -u src/tests/net/bpfjit/t_bpfjit.c:1.4 src/tests/net/bpfjit/t_bpfjit.c:1.5
--- src/tests/net/bpfjit/t_bpfjit.c:1.4	Thu Nov 20 11:36:13 2014
+++ src/tests/net/bpfjit/t_bpfjit.c	Wed Feb 11 22:37:55 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: t_bpfjit.c,v 1.4 2014/11/20 11:36:13 alnsn Exp $ */
+/*	$NetBSD: t_bpfjit.c,v 1.5 2015/02/11 22:37:55 alnsn Exp $ */
 
 /*-
  * Copyright (c) 2011-2012, 2014 Alexander Nasonov.
@@ -27,7 +27,7 @@
  */
 
 #include 
-__RCSID("$NetBSD: t_bpfjit.c,v 1.4 2014/11/20 11:36:13 alnsn Exp $");
+__RCSID("$NetBSD: t_bpfjit.c,v 1.5 2015/02/11 22:37:55 alnsn Exp $");
 
 #include 
 #include 
@@ -79,15 +79,73 @@ ATF_TC_HEAD(bpfjit_empty, tc)
 ATF_TC_BODY(bpfjit_empty, tc)
 {
 	struct bpf_insn dummy;
-	bpfjit_func_t fn;
+	bpfjit_func_t code;
 
 	RZ(rump_init());
 
+	ATF_CHECK(!prog_validate(&dummy, 0));
+
 	rump_schedule();
-	fn = rumpns_bpfjit_generate_code(NULL, &dummy, 0);
+	code = rumpns_bpfjit_generate_code(NULL, &dummy, 0);
 	rump_unschedule();
 
-	ATF_CHECK(fn == NULL);
+	ATF_CHECK(code == NULL);
+}
+
+ATF_TC(bpfjit_ret_k);
+ATF_TC_HEAD(bpfjit_ret_k, tc)
+{
+	atf_tc_set_md_var(tc, "descr",
+	"Test JIT compilation of a trivial bpf program");
+}
+
+ATF_TC_BODY(bpfjit_ret_k, tc)
+{
+	static struct bpf_insn insns[] = {
+		BPF_STMT(BPF_RET+BPF_K, 17)
+	};
+
+	uint8_t pkt[1]; /* the program doesn't read any data */
+
+	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+	RZ(rump_init());
+
+	ATF_CHECK(prog_validate(insns, insn_count));
+	ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == 17);
+}
+
+ATF_TC(bpfjit_bad_ret_k);
+ATF_TC_HEAD(bpfjit_bad_ret_k, tc)
+{
+	atf_tc_set_md_var(tc, "descr",
+	"Test that JIT compilation of a program with bad BPF_RET fails");
+}
+
+ATF_TC_BODY(bpfjit_bad_ret_k, tc)
+{
+	static struct bpf_insn insns[] = {
+		BPF_STMT(BPF_RET+BPF_K+0x8000, 13)
+	};
+
+	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+	uint8_t pkt[1]; /* the program doesn't read any data */
+
+	/*
+	 * The point of this test is checking a bad instruction of
+	 * a valid class and with a valid BPF_RVAL data.
+	 */
+	const uint16_t rcode = insns[0].code;
+	ATF_CHECK(BPF_CLASS(rcode) == BPF_RET &&
+	(BPF_RVAL(rcode) == BPF_K || BPF_RVAL(rcode) == BPF_A));
+
+	RZ(rump_init());
+
+	ATF_CHECK(!prog_validate(insns, insn_count));
+
+	/* Current implementation generates code. */
+	ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == 13);
 }
 
 ATF_TC(bpfjit_alu_add_k);
@@ -1612,6 +1670,36 @@ ATF_TC_BODY(bpfjit_jmp_ja, tc)
 	ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == UINT32_MAX);
 }
 
+ATF_TC(bpfjit_jmp_ja_invalid);
+ATF_TC_HEAD(bpfjit_jmp_ja_invalid, tc)
+{
+	atf_tc_set_md_var(tc, "descr",
+	"Test BPF_JMP+BPF_JA to invalid destination");
+}
+
+ATF_TC_BODY(bpfjit_jmp_ja_invalid, tc)
+{
+	static struct bpf_insn insns[] = {
+		BPF_STMT(BPF_JMP+BPF_JA, 4),
+		BPF_STMT(BPF_RET+BPF_K, 0),
+		BPF_STMT(BPF_RET+BPF_K, 1),
+		BPF_STMT(BPF_RET+BPF_K, 2),
+		BPF_STMT(BPF_RET+BPF_K, 3),
+	};
+
+	bpfjit_func_t code;
+	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+	RZ(rump_init());
+
+	ATF_CHECK(!prog_validate(insns, insn_count));
+
+	rump_schedule();
+	code = rumpns_bpfjit_generate_code(NULL, insns, insn_count);
+	rump_unschedule();
+	ATF_CHECK(code == NULL);
+}
+
 ATF_TC(bpfjit_jmp_jgt_k);
 ATF_TC_HEAD(bpfjit_jmp_jgt_k, tc)
 {
@@ -4344,6 +4432,8 @@ ATF_TP_ADD_TCS(tp)
 	 * to ../../lib/libbpfjit/t_bpfjit.c
 	 */
 	ATF_TP_ADD_TC(tp, bpfjit_empty);
+	ATF_TP_ADD_TC(tp, bpfjit_ret_k);
+	ATF_TP_ADD_TC(tp, bpfjit_bad_ret_k);
 	ATF_TP_ADD_TC(tp, bpfjit_alu_add_k);
 	ATF_TP_ADD_TC(tp, bpfjit_alu_sub_k);
 	ATF_TP_ADD_TC(tp, bpfjit_alu_mul_k);
@@ -4400,6 +4490,7 @@ ATF_TP_ADD_TCS(tp)
 	ATF_TP_ADD_TC(tp, bpfjit_alu_modulo_x);
 	ATF_TP_ADD_TC(tp, bpfjit_alu_neg);
 	ATF_TP_ADD_TC(tp, bpfjit_jmp_ja);
+	ATF_TP_ADD_TC(tp, bpfjit_jmp_ja_invalid);
 	ATF_TP_ADD_TC(tp, bpfjit_jmp_jgt_k);
 	ATF_TP_ADD_TC(tp, bpfjit_jmp_jge_k);
 	ATF_TP_ADD_TC(tp, bpfjit_jmp_jeq_k);



CVS commit: src/tests/net/bpfjit

2014-11-20 Thread Alexander Nasonov
Module Name:src
Committed By:   alnsn
Date:   Thu Nov 20 11:36:13 UTC 2014

Modified Files:
src/tests/net/bpfjit: t_bpfjit.c

Log Message:
Add BPF_MOD tests. Plus one tiny change.


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 src/tests/net/bpfjit/t_bpfjit.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/tests/net/bpfjit/t_bpfjit.c
diff -u src/tests/net/bpfjit/t_bpfjit.c:1.3 src/tests/net/bpfjit/t_bpfjit.c:1.4
--- src/tests/net/bpfjit/t_bpfjit.c:1.3	Wed Nov 19 23:00:12 2014
+++ src/tests/net/bpfjit/t_bpfjit.c	Thu Nov 20 11:36:13 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: t_bpfjit.c,v 1.3 2014/11/19 23:00:12 alnsn Exp $ */
+/*	$NetBSD: t_bpfjit.c,v 1.4 2014/11/20 11:36:13 alnsn Exp $ */
 
 /*-
  * Copyright (c) 2011-2012, 2014 Alexander Nasonov.
@@ -27,7 +27,7 @@
  */
 
 #include 
-__RCSID("$NetBSD: t_bpfjit.c,v 1.3 2014/11/19 23:00:12 alnsn Exp $");
+__RCSID("$NetBSD: t_bpfjit.c,v 1.4 2014/11/20 11:36:13 alnsn Exp $");
 
 #include 
 #include 
@@ -364,6 +364,205 @@ ATF_TC_BODY(bpfjit_alu_div8000_k, tc
 	ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == 1);
 }
 
+ATF_TC(bpfjit_alu_mod0_k);
+ATF_TC_HEAD(bpfjit_alu_mod0_k, tc)
+{
+	atf_tc_set_md_var(tc, "descr",
+	"Test JIT compilation of BPF_ALU+BPF_MOD+BPF_K with k=0");
+}
+
+ATF_TC_BODY(bpfjit_alu_mod0_k, tc)
+{
+	static struct bpf_insn insns[] = {
+		BPF_STMT(BPF_ALU+BPF_MOD+BPF_K, 0),
+		BPF_STMT(BPF_RET+BPF_A, 0)
+	};
+
+	uint8_t pkt[1]; /* the program doesn't read any data */
+
+	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+	RZ(rump_init());
+
+	//ATF_CHECK(prog_validate(insns, insn_count));
+	ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == 0);
+}
+
+ATF_TC(bpfjit_alu_mod1_k);
+ATF_TC_HEAD(bpfjit_alu_mod1_k, tc)
+{
+	atf_tc_set_md_var(tc, "descr",
+	"Test JIT compilation of BPF_ALU+BPF_MOD+BPF_K with k=1");
+}
+
+ATF_TC_BODY(bpfjit_alu_mod1_k, tc)
+{
+	static struct bpf_insn insns[] = {
+		BPF_STMT(BPF_LD+BPF_IMM, 7),
+		BPF_STMT(BPF_ALU+BPF_MOD+BPF_K, 1),
+		BPF_STMT(BPF_RET+BPF_A, 0)
+	};
+
+	uint8_t pkt[1]; /* the program doesn't read any data */
+
+	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+	RZ(rump_init());
+
+	ATF_CHECK(prog_validate(insns, insn_count));
+	ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == 0);
+}
+
+ATF_TC(bpfjit_alu_mod2_k);
+ATF_TC_HEAD(bpfjit_alu_mod2_k, tc)
+{
+	atf_tc_set_md_var(tc, "descr",
+	"Test JIT compilation of BPF_ALU+BPF_MOD+BPF_K with k=2");
+}
+
+ATF_TC_BODY(bpfjit_alu_mod2_k, tc)
+{
+	static struct bpf_insn insns[] = {
+		BPF_STMT(BPF_LD+BPF_IMM, 7),
+		BPF_STMT(BPF_ALU+BPF_MOD+BPF_K, 2),
+		BPF_STMT(BPF_RET+BPF_A, 0)
+	};
+
+	uint8_t pkt[1]; /* the program doesn't read any data */
+
+	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+	RZ(rump_init());
+
+	ATF_CHECK(prog_validate(insns, insn_count));
+	ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == 1);
+}
+
+ATF_TC(bpfjit_alu_mod4_k);
+ATF_TC_HEAD(bpfjit_alu_mod4_k, tc)
+{
+	atf_tc_set_md_var(tc, "descr",
+	"Test JIT compilation of BPF_ALU+BPF_MOD+BPF_K with k=4");
+}
+
+ATF_TC_BODY(bpfjit_alu_mod4_k, tc)
+{
+	static struct bpf_insn insns[] = {
+		BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(0x)),
+		BPF_STMT(BPF_ALU+BPF_MOD+BPF_K, 4),
+		BPF_STMT(BPF_RET+BPF_A, 0)
+	};
+
+	uint8_t pkt[1]; /* the program doesn't read any data */
+
+	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+	RZ(rump_init());
+
+	ATF_CHECK(prog_validate(insns, insn_count));
+	ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == 3);
+}
+
+ATF_TC(bpfjit_alu_mod10_k);
+ATF_TC_HEAD(bpfjit_alu_mod10_k, tc)
+{
+	atf_tc_set_md_var(tc, "descr",
+	"Test JIT compilation of BPF_ALU+BPF_MOD+BPF_K with k=10");
+}
+
+ATF_TC_BODY(bpfjit_alu_mod10_k, tc)
+{
+	static struct bpf_insn insns[] = {
+		BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(4294843849)),
+		BPF_STMT(BPF_ALU+BPF_MOD+BPF_K, 10),
+		BPF_STMT(BPF_RET+BPF_A, 0)
+	};
+
+	uint8_t pkt[1]; /* the program doesn't read any data */
+
+	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+	RZ(rump_init());
+
+	ATF_CHECK(prog_validate(insns, insn_count));
+	ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == 9);
+}
+
+ATF_TC(bpfjit_alu_mod1_k);
+ATF_TC_HEAD(bpfjit_alu_mod1_k, tc)
+{
+	atf_tc_set_md_var(tc, "descr",
+	"Test JIT compilation of BPF_ALU+BPF_MOD+BPF_K with k=1");
+}
+
+ATF_TC_BODY(bpfjit_alu_mod1_k, tc)
+{
+	static struct bpf_insn insns[] = {
+		BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(4294843849)),
+		BPF_STMT(BPF_ALU+BPF_MOD+BPF_K, 1),
+		BPF_STMT(BPF_RET+BPF_A, 0)
+	};
+
+	uint8_t pkt[1]; /* the program doesn't read any data */
+
+	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+	RZ(rump_init());
+
+	ATF_CHECK(prog_validate(insns, insn_count));
+	ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == 3849);
+}
+
+ATF_TC(bpfjit_alu_mod7609801_k);
+ATF_TC_HEAD(bpfjit_alu_mod7609801_k, tc)
+{
+	atf_tc_set_md_var(tc, "descr",
+	"Test JIT compilati

CVS commit: src/tests/net/bpfjit

2014-11-19 Thread Alexander Nasonov
Module Name:src
Committed By:   alnsn
Date:   Wed Nov 19 23:00:12 UTC 2014

Modified Files:
src/tests/net/bpfjit: t_bpfjit.c

Log Message:
Add BPF_XOR tests.


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 src/tests/net/bpfjit/t_bpfjit.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/tests/net/bpfjit/t_bpfjit.c
diff -u src/tests/net/bpfjit/t_bpfjit.c:1.2 src/tests/net/bpfjit/t_bpfjit.c:1.3
--- src/tests/net/bpfjit/t_bpfjit.c:1.2	Tue Jul  8 21:44:26 2014
+++ src/tests/net/bpfjit/t_bpfjit.c	Wed Nov 19 23:00:12 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: t_bpfjit.c,v 1.2 2014/07/08 21:44:26 alnsn Exp $ */
+/*	$NetBSD: t_bpfjit.c,v 1.3 2014/11/19 23:00:12 alnsn Exp $ */
 
 /*-
  * Copyright (c) 2011-2012, 2014 Alexander Nasonov.
@@ -27,7 +27,7 @@
  */
 
 #include 
-__RCSID("$NetBSD: t_bpfjit.c,v 1.2 2014/07/08 21:44:26 alnsn Exp $");
+__RCSID("$NetBSD: t_bpfjit.c,v 1.3 2014/11/19 23:00:12 alnsn Exp $");
 
 #include 
 #include 
@@ -414,6 +414,31 @@ ATF_TC_BODY(bpfjit_alu_or_k, tc)
 	ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == 0xdeadbeef);
 }
 
+ATF_TC(bpfjit_alu_xor_k);
+ATF_TC_HEAD(bpfjit_alu_xor_k, tc)
+{
+	atf_tc_set_md_var(tc, "descr",
+	"Test JIT compilation of BPF_ALU+BPF_XOR+BPF_K");
+}
+
+ATF_TC_BODY(bpfjit_alu_xor_k, tc)
+{
+	static struct bpf_insn insns[] = {
+		BPF_STMT(BPF_LD+BPF_IMM, 0xdead0f0f),
+		BPF_STMT(BPF_ALU+BPF_XOR+BPF_K, 0xb1e0),
+		BPF_STMT(BPF_RET+BPF_A, 0)
+	};
+
+	uint8_t pkt[1]; /* the program doesn't read any data */
+
+	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+	RZ(rump_init());
+
+	ATF_CHECK(prog_validate(insns, insn_count));
+	ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == 0xdeadbeef);
+}
+
 ATF_TC(bpfjit_alu_lsh_k);
 ATF_TC_HEAD(bpfjit_alu_lsh_k, tc)
 {
@@ -920,6 +945,32 @@ ATF_TC_BODY(bpfjit_alu_or_x, tc)
 	ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == 0xdeadbeef);
 }
 
+ATF_TC(bpfjit_alu_xor_x);
+ATF_TC_HEAD(bpfjit_alu_xor_x, tc)
+{
+	atf_tc_set_md_var(tc, "descr",
+	"Test JIT compilation of BPF_ALU+BPF_XOR+BPF_X");
+}
+
+ATF_TC_BODY(bpfjit_alu_xor_x, tc)
+{
+	static struct bpf_insn insns[] = {
+		BPF_STMT(BPF_LD+BPF_IMM, 0xdead0f0f),
+		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 0xb1e0),
+		BPF_STMT(BPF_ALU+BPF_XOR+BPF_X, 0),
+		BPF_STMT(BPF_RET+BPF_A, 0)
+	};
+
+	uint8_t pkt[1]; /* the program doesn't read any data */
+
+	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+	RZ(rump_init());
+
+	ATF_CHECK(prog_validate(insns, insn_count));
+	ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == 0xdeadbeef);
+}
+
 ATF_TC(bpfjit_alu_lsh_x);
 ATF_TC_HEAD(bpfjit_alu_lsh_x, tc)
 {
@@ -3900,6 +3951,7 @@ ATF_TP_ADD_TCS(tp)
 	ATF_TP_ADD_TC(tp, bpfjit_alu_div8000_k);
 	ATF_TP_ADD_TC(tp, bpfjit_alu_and_k);
 	ATF_TP_ADD_TC(tp, bpfjit_alu_or_k);
+	ATF_TP_ADD_TC(tp, bpfjit_alu_xor_k);
 	ATF_TP_ADD_TC(tp, bpfjit_alu_lsh_k);
 	ATF_TP_ADD_TC(tp, bpfjit_alu_lsh0_k);
 	ATF_TP_ADD_TC(tp, bpfjit_alu_rsh_k);
@@ -3918,6 +3970,7 @@ ATF_TP_ADD_TCS(tp)
 	ATF_TP_ADD_TC(tp, bpfjit_alu_div8000_x);
 	ATF_TP_ADD_TC(tp, bpfjit_alu_and_x);
 	ATF_TP_ADD_TC(tp, bpfjit_alu_or_x);
+	ATF_TP_ADD_TC(tp, bpfjit_alu_xor_x);
 	ATF_TP_ADD_TC(tp, bpfjit_alu_lsh_x);
 	ATF_TP_ADD_TC(tp, bpfjit_alu_lsh0_x);
 	ATF_TP_ADD_TC(tp, bpfjit_alu_rsh_x);



CVS commit: src/tests/net/bpfjit

2014-07-09 Thread Alexander Nasonov
Module Name:src
Committed By:   alnsn
Date:   Wed Jul  9 15:56:12 UTC 2014

Modified Files:
src/tests/net/bpfjit: t_cop.c

Log Message:
Fix copy/paste error: s/rump_unschedule/rump_schedule/.


To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/tests/net/bpfjit/t_cop.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/tests/net/bpfjit/t_cop.c
diff -u src/tests/net/bpfjit/t_cop.c:1.1 src/tests/net/bpfjit/t_cop.c:1.2
--- src/tests/net/bpfjit/t_cop.c:1.1	Wed Jul  9 13:49:49 2014
+++ src/tests/net/bpfjit/t_cop.c	Wed Jul  9 15:56:12 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: t_cop.c,v 1.1 2014/07/09 13:49:49 alnsn Exp $ */
+/*	$NetBSD: t_cop.c,v 1.2 2014/07/09 15:56:12 alnsn Exp $ */
 
 /*-
  * Copyright (c) 2014 Alexander Nasonov.
@@ -30,7 +30,7 @@
  */
 
 #include 
-__RCSID("$NetBSD: t_cop.c,v 1.1 2014/07/09 13:49:49 alnsn Exp $");
+__RCSID("$NetBSD: t_cop.c,v 1.2 2014/07/09 15:56:12 alnsn Exp $");
 
 #include 
 #include 
@@ -467,7 +467,7 @@ ATF_TC_BODY(bpfjit_copx_ret_buflen, tc)
 
 	ATF_CHECK(code(&ctx, &args) == sizeof(pkt));
 
-	rump_unschedule();
+	rump_schedule();
 	rumpns_bpfjit_free_code(code);
 	rump_unschedule();
 }



CVS commit: src/tests/net/bpfjit

2014-07-09 Thread Alexander Nasonov
Module Name:src
Committed By:   alnsn
Date:   Wed Jul  9 13:49:49 UTC 2014

Added Files:
src/tests/net/bpfjit: t_cop.c t_extmem.c

Log Message:
Add t_cop and t_extmem kernel bpfjit tests.


To generate a diff of this commit:
cvs rdiff -u -r0 -r1.1 src/tests/net/bpfjit/t_cop.c \
src/tests/net/bpfjit/t_extmem.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Added files:

Index: src/tests/net/bpfjit/t_cop.c
diff -u /dev/null src/tests/net/bpfjit/t_cop.c:1.1
--- /dev/null	Wed Jul  9 13:49:49 2014
+++ src/tests/net/bpfjit/t_cop.c	Wed Jul  9 13:49:49 2014
@@ -0,0 +1,664 @@
+/*	$NetBSD: t_cop.c,v 1.1 2014/07/09 13:49:49 alnsn Exp $ */
+
+/*-
+ * Copyright (c) 2014 Alexander Nasonov.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *notice, this list of conditions and the following disclaimer in
+ *the documentation and/or other materials provided with the
+ *distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
+ * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include 
+__RCSID("$NetBSD: t_cop.c,v 1.1 2014/07/09 13:49:49 alnsn Exp $");
+
+#include 
+#include 
+
+#define __BPF_PRIVATE
+#include 
+#include 
+
+#include "../../net/bpf/h_bpf.h"
+
+/* XXX: atf-c.h has collisions with mbuf */
+#undef m_type
+#undef m_data
+#include 
+
+#include "../../h_macros.h"
+
+static uint32_t retA(const bpf_ctx_t *bc, bpf_args_t *args, uint32_t A);
+static uint32_t retBL(const bpf_ctx_t *bc, bpf_args_t *args, uint32_t A);
+static uint32_t retWL(const bpf_ctx_t *bc, bpf_args_t *args, uint32_t A);
+static uint32_t retNF(const bpf_ctx_t *bc, bpf_args_t *args, uint32_t A);
+static uint32_t setARG(const bpf_ctx_t *bc, bpf_args_t *args, uint32_t A);
+
+static const bpf_copfunc_t copfuncs[] = {
+	&retA,
+	&retBL,
+	&retWL,
+	&retNF,
+	&setARG
+};
+
+static const bpf_ctx_t ctx = {
+	.copfuncs = copfuncs,
+	.nfuncs = sizeof(copfuncs) / sizeof(copfuncs[0]),
+	.extwords = 0
+};
+
+static uint32_t
+retA(const bpf_ctx_t *bc, bpf_args_t *args, uint32_t A)
+{
+
+	return A;
+}
+
+static uint32_t
+retBL(const bpf_ctx_t *bc, bpf_args_t *args, uint32_t A)
+{
+
+	return args->buflen;
+}
+
+static uint32_t
+retWL(const bpf_ctx_t *bc, bpf_args_t *args, uint32_t A)
+{
+
+	return args->wirelen;
+}
+
+static uint32_t
+retNF(const bpf_ctx_t *bc, bpf_args_t *args, uint32_t A)
+{
+
+	return bc->nfuncs;
+}
+
+/*
+ * COP function with a side effect.
+ */
+static uint32_t
+setARG(const bpf_ctx_t *bc, bpf_args_t *args, uint32_t A)
+{
+	bool *arg = (bool *)args->arg;
+	bool old = *arg;
+
+	*arg = true;
+	return old;
+}
+
+ATF_TC(bpfjit_cop_no_ctx);
+ATF_TC_HEAD(bpfjit_cop_no_ctx, tc)
+{
+	atf_tc_set_md_var(tc, "descr", "Test that bpf program with BPF_COP "
+	"instruction isn't valid without a context");
+}
+
+ATF_TC_BODY(bpfjit_cop_no_ctx, tc)
+{
+	static struct bpf_insn insns[] = {
+		BPF_STMT(BPF_MISC+BPF_COP, 0),
+		BPF_STMT(BPF_RET+BPF_K, 7)
+	};
+
+	bpfjit_func_t code;
+
+	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+	RZ(rump_init());
+
+	ATF_CHECK(!prog_validate(insns, insn_count));
+
+	rump_schedule();
+	code = rumpns_bpfjit_generate_code(NULL, insns, insn_count);
+	rump_unschedule();
+	ATF_CHECK(code == NULL);
+}
+
+ATF_TC(bpfjit_cop_ret_A);
+ATF_TC_HEAD(bpfjit_cop_ret_A, tc)
+{
+	atf_tc_set_md_var(tc, "descr", "Test coprocessor function "
+	"that returns a content of the A register");
+}
+
+ATF_TC_BODY(bpfjit_cop_ret_A, tc)
+{
+	static struct bpf_insn insns[] = {
+		BPF_STMT(BPF_LD+BPF_IMM, 13),
+		BPF_STMT(BPF_MISC+BPF_COP, 0), // retA
+		BPF_STMT(BPF_RET+BPF_A, 0)
+	};
+
+	bpfjit_func_t code;
+	uint8_t pkt[1] = { 0 };
+	bpf_args_t args = {
+		.pkt = pkt,
+		.buflen = sizeof(pkt),
+		.wirelen = sizeof(pkt),
+	};
+
+	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+	RZ(rump_init());
+
+	rump_schedule();
+	code = rumpns_bpfjit_generate_code(&ctx, insns, insn_count)

CVS commit: src/tests/net/bpfjit

2014-07-08 Thread Alexander Nasonov
Module Name:src
Committed By:   alnsn
Date:   Tue Jul  8 21:45:55 UTC 2014

Added Files:
src/tests/net/bpfjit: t_mbuf.c

Log Message:
Move bpfjit mbuf tests to t_mbuf.c.


To generate a diff of this commit:
cvs rdiff -u -r0 -r1.1 src/tests/net/bpfjit/t_mbuf.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Added files:

Index: src/tests/net/bpfjit/t_mbuf.c
diff -u /dev/null src/tests/net/bpfjit/t_mbuf.c:1.1
--- /dev/null	Tue Jul  8 21:45:55 2014
+++ src/tests/net/bpfjit/t_mbuf.c	Tue Jul  8 21:45:55 2014
@@ -0,0 +1,982 @@
+/*	$NetBSD: t_mbuf.c,v 1.1 2014/07/08 21:45:55 alnsn Exp $	*/
+
+/*-
+ * Copyright (c) 2014 Alexander Nasonov.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *notice, this list of conditions and the following disclaimer in the
+ *documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include 
+__RCSID("$NetBSD: t_mbuf.c,v 1.1 2014/07/08 21:45:55 alnsn Exp $");
+
+#include 
+#include 
+
+#include 
+#include 
+
+#include 
+#include 
+
+#include 
+#include 
+
+#include "../../net/bpf/h_bpf.h"
+
+/* XXX: atf-c.h has collisions with mbuf */
+#undef m_type
+#undef m_data
+#include 
+
+#include "../../h_macros.h"
+
+static bool
+test_ldb_abs(size_t split)
+{
+	/* Return a product of all packet bytes. */
+	static struct bpf_insn insns[] = {
+		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 1), /* X <- 1 */
+
+		BPF_STMT(BPF_LD+BPF_B+BPF_ABS, 0),  /* A <- P[0]  */
+		BPF_STMT(BPF_ALU+BPF_MUL+BPF_X, 0), /* A <- A * X */
+		BPF_STMT(BPF_MISC+BPF_TAX, 0),  /* X <- A */
+
+		BPF_STMT(BPF_LD+BPF_B+BPF_ABS, 1),  /* A <- P[1]  */
+		BPF_STMT(BPF_ALU+BPF_MUL+BPF_X, 0), /* A <- A * X */
+		BPF_STMT(BPF_MISC+BPF_TAX, 0),  /* X <- A */
+
+		BPF_STMT(BPF_LD+BPF_B+BPF_ABS, 2),  /* A <- P[2]  */
+		BPF_STMT(BPF_ALU+BPF_MUL+BPF_X, 0), /* A <- A * X */
+		BPF_STMT(BPF_MISC+BPF_TAX, 0),  /* X <- A */
+
+		BPF_STMT(BPF_LD+BPF_B+BPF_ABS, 3),  /* A <- P[3]  */
+		BPF_STMT(BPF_ALU+BPF_MUL+BPF_X, 0), /* A <- A * X */
+		BPF_STMT(BPF_MISC+BPF_TAX, 0),  /* X <- A */
+
+		BPF_STMT(BPF_LD+BPF_B+BPF_ABS, 4),  /* A <- P[4]  */
+		BPF_STMT(BPF_ALU+BPF_MUL+BPF_X, 0), /* A <- A * X */
+		BPF_STMT(BPF_RET+BPF_A, 0), /* ret A  */
+	};
+
+	static unsigned char P[] = { 1, 2, 3, 4, 5 };
+	const unsigned int res = 120;
+	const size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+	if (!prog_validate(insns, insn_count))
+		return false;
+
+	return exec_prog_mchain2(insns, insn_count, P, sizeof(P), split) == res;
+}
+
+static bool
+test_ldh_abs(size_t split)
+{
+	static struct bpf_insn insns[] = {
+		BPF_STMT(BPF_LD+BPF_H+BPF_ABS, 0),  /* A <- P[0:2]  */
+		BPF_STMT(BPF_ALU+BPF_ADD+BPF_X, 0), /* A <- A + X   */
+		BPF_STMT(BPF_MISC+BPF_TAX, 0),  /* X <- A   */
+
+		BPF_STMT(BPF_LD+BPF_H+BPF_ABS, 1),  /* A <- P[1:2]  */
+		BPF_STMT(BPF_ALU+BPF_ADD+BPF_X, 0), /* A <- A + X   */
+		BPF_STMT(BPF_MISC+BPF_TAX, 0),  /* X <- A   */
+
+		BPF_STMT(BPF_LD+BPF_H+BPF_ABS, 2),  /* A <- P[2:2]  */
+		BPF_STMT(BPF_ALU+BPF_ADD+BPF_X, 0), /* A <- A + X   */
+		BPF_STMT(BPF_MISC+BPF_TAX, 0),  /* X <- A   */
+
+		BPF_STMT(BPF_LD+BPF_H+BPF_ABS, 3),  /* A <- P[3:2]  */
+		BPF_STMT(BPF_ALU+BPF_ADD+BPF_X, 0), /* A <- A + X   */
+		BPF_STMT(BPF_RET+BPF_A, 0), /* ret A*/
+	};
+
+	static unsigned char P[] = { 1, 2, 3, 4, 5 };
+	const unsigned int res = 0x0a0e; /* 10 14 */
+	const size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+	if (!prog_validate(insns, insn_count))
+		return false;
+
+	return exec_prog_mchain2(insns, insn_count, P, sizeof(P), split) == res;
+}
+
+static bool
+test_ldw_abs(size_t split)
+{
+	static struct bpf_insn insns[] = {
+		BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),  /* A <- P[0:4] */
+		BPF_STMT(BPF_ALU+BPF_ADD+BPF_X, 0), /* A <- A + X  */
+		BPF_STMT(

CVS commit: src/tests/net/bpfjit

2014-06-30 Thread Alexander Nasonov
Module Name:src
Committed By:   alnsn
Date:   Mon Jun 30 21:34:22 UTC 2014

Modified Files:
src/tests/net/bpfjit: Makefile

Log Message:
Fix test directory.


To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/tests/net/bpfjit/Makefile

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/tests/net/bpfjit/Makefile
diff -u src/tests/net/bpfjit/Makefile:1.1 src/tests/net/bpfjit/Makefile:1.2
--- src/tests/net/bpfjit/Makefile:1.1	Mon Jun 30 21:30:51 2014
+++ src/tests/net/bpfjit/Makefile	Mon Jun 30 21:34:22 2014
@@ -1,9 +1,9 @@
-# $NetBSD: Makefile,v 1.1 2014/06/30 21:30:51 alnsn Exp $
+# $NetBSD: Makefile,v 1.2 2014/06/30 21:34:22 alnsn Exp $
 #
 
 .include 
 
-TESTSDIR=	${TESTSBASE}/kernel/bpfjit
+TESTSDIR=	${TESTSBASE}/net/bpfjit
 
 TESTS_C=	t_bpfjit