Module Name:    src
Committed By:   riastradh
Date:           Wed Oct 30 11:03:32 UTC 2024

Modified Files:
        src/usr.sbin/npf/npftest: npftest.conf
        src/usr.sbin/npf/npftest/libnpftest: npf_rule_test.c

Log Message:
npftest: Expand test cases to cover more compiler paths.

Cover masked ranges with full- and partial-word sizes.

PR bin/55403: npfctl miscompiles IPv6 rules


To generate a diff of this commit:
cvs rdiff -u -r1.11 -r1.12 src/usr.sbin/npf/npftest/npftest.conf
cvs rdiff -u -r1.22 -r1.23 \
    src/usr.sbin/npf/npftest/libnpftest/npf_rule_test.c

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

Modified files:

Index: src/usr.sbin/npf/npftest/npftest.conf
diff -u src/usr.sbin/npf/npftest/npftest.conf:1.11 src/usr.sbin/npf/npftest/npftest.conf:1.12
--- src/usr.sbin/npf/npftest/npftest.conf:1.11	Wed Oct 30 10:12:32 2024
+++ src/usr.sbin/npf/npftest/npftest.conf	Wed Oct 30 11:03:32 2024
@@ -1,4 +1,4 @@
-# $NetBSD: npftest.conf,v 1.11 2024/10/30 10:12:32 riastradh Exp $
+# $NetBSD: npftest.conf,v 1.12 2024/10/30 11:03:32 riastradh Exp $
 
 $ext_if = "npftest0"
 $int_if = "npftest1"
@@ -32,7 +32,7 @@ $net6_outer = 2001:db8:1::/48
 
 # Example of multiple addresses with a common 32-bit word, taken from
 # PR bin/55403: npfctl miscompiles IPv6 rules.
-$net6_pr55403 = { fe80::1, fe80::2 }
+$net6_pr55403 = { fe80::1, fe80::1000:0:0/95, fe80::2, fe80::2000:0:0/96, fe80::3, fe80::3000:0:0/97 }
 
 $net_a = 10.100.0.0/16
 $net_b = 10.255.0.0/16

Index: src/usr.sbin/npf/npftest/libnpftest/npf_rule_test.c
diff -u src/usr.sbin/npf/npftest/libnpftest/npf_rule_test.c:1.22 src/usr.sbin/npf/npftest/libnpftest/npf_rule_test.c:1.23
--- src/usr.sbin/npf/npftest/libnpftest/npf_rule_test.c:1.22	Wed Oct 30 10:12:32 2024
+++ src/usr.sbin/npf/npftest/libnpftest/npf_rule_test.c	Wed Oct 30 11:03:32 2024
@@ -53,47 +53,133 @@ static const struct test_case {
 	},
 
 	/*
-	 * Pass in any of the { fe80::1, fe80::2 } group.
+	 * Pass in from any of the { fe80::1, fe80:1000:0:0/95,
+	 * fe80::2, fe80::2000:0:0/96, fe80::3, fe80::3000:0:0/97 }
+	 * group.
 	 */
-	{
+	{			/* fe80::1 */
 		.af = AF_INET6,
 		.src = "fe80::1", .dst = "fe80::adec:c91c:d116:7592",
 		.ifname = IFNAME_INT,		.di = PFIL_IN,
 		.stateful_ret = RESULT_PASS,	.ret = RESULT_PASS
 	},
-	{
+	{			/* fe80::1000:0:0/95 */
+		.af = AF_INET6,
+		.src = "fe80::1001:0:0", .dst = "fe80::adec:c91c:d116:7592",
+		.ifname = IFNAME_INT,		.di = PFIL_IN,
+		.stateful_ret = RESULT_PASS,	.ret = RESULT_PASS
+	},
+	{			/* fe80::1000:0:0/95, one bit off */
+		.af = AF_INET6,
+		.src = "fe80::1003:0:0", .dst = "fe80::adec:c91c:d116:7592",
+		.ifname = IFNAME_INT,		.di = PFIL_IN,
+		.stateful_ret = RESULT_BLOCK,	.ret = RESULT_BLOCK
+	},
+	{			/* fe80::2 */
 		.af = AF_INET6,
 		.src = "fe80::2", .dst = "fe80::adec:c91c:d116:7592",
 		.ifname = IFNAME_INT,		.di = PFIL_IN,
 		.stateful_ret = RESULT_PASS,	.ret = RESULT_PASS
 	},
-	{
+	{			/* fe80::2000:0:0/96 */
+		.af = AF_INET6,
+		.src = "fe80::2000:8000:0", .dst = "fe80::adec:c91c:d116:7592",
+		.ifname = IFNAME_INT,		.di = PFIL_IN,
+		.stateful_ret = RESULT_PASS,	.ret = RESULT_PASS
+	},
+	{			/* fe80::2000:0:0/96, one bit off */
+		.af = AF_INET6,
+		.src = "fe80::2001:8000:0", .dst = "fe80::adec:c91c:d116:7592",
+		.ifname = IFNAME_INT,		.di = PFIL_IN,
+		.stateful_ret = RESULT_BLOCK,	.ret = RESULT_BLOCK
+	},
+	{			/* fe80::3 */
 		.af = AF_INET6,
 		.src = "fe80::3", .dst = "fe80::adec:c91c:d116:7592",
 		.ifname = IFNAME_INT,		.di = PFIL_IN,
+		.stateful_ret = RESULT_PASS,	.ret = RESULT_PASS
+	},
+	{			/* fe80::3000:0:0/97 */
+		.af = AF_INET6,
+		.src = "fe80::3000:7fff:0", .dst = "fe80::adec:c91c:d116:7592",
+		.ifname = IFNAME_INT,		.di = PFIL_IN,
+		.stateful_ret = RESULT_PASS,	.ret = RESULT_PASS
+	},
+	{			/* fe80::3000:0:0/97, one bit off */
+		.af = AF_INET6,
+		.src = "fe80::3000:ffff:0", .dst = "fe80::adec:c91c:d116:7592",
+		.ifname = IFNAME_INT,		.di = PFIL_IN,
+		.stateful_ret = RESULT_BLOCK,	.ret = RESULT_BLOCK
+	},
+	{
+		.af = AF_INET6,
+		.src = "fe80::4", .dst = "fe80::adec:c91c:d116:7592",
+		.ifname = IFNAME_INT,		.di = PFIL_IN,
 		.stateful_ret = RESULT_BLOCK,	.ret = RESULT_BLOCK
 	},
 
 	/*
-	 * Pass in anything _not_ in the group { fe80::1, fe80::2 }, as
-	 * long as it is to that group.
+	 * Pass in from anywhere _not_ in that group, as long as it is
+	 * to that group.
 	 */
-	{
+	{			/* fe80::1 */
 		.af = AF_INET6,
 		.src = "fe80::adec:c91c:d116:7592", .dst = "fe80::1",
 		.ifname = IFNAME_INT,		.di = PFIL_IN,
 		.stateful_ret = RESULT_PASS,	.ret = RESULT_PASS
 	},
-	{
+	{			/* fe80::1000:0:0/95 */
+		.af = AF_INET6,
+		.src = "fe80::adec:c91c:d116:7592", .dst = "fe80::1001:0:0",
+		.ifname = IFNAME_INT,		.di = PFIL_IN,
+		.stateful_ret = RESULT_PASS,	.ret = RESULT_PASS
+	},
+	{			/* fe80::1000:0:0/95, one bit off */
+		.af = AF_INET6,
+		.src = "fe80::adec:c91c:d116:7592", .dst = "fe80::1003:0:0",
+		.ifname = IFNAME_INT,		.di = PFIL_IN,
+		.stateful_ret = RESULT_BLOCK,	.ret = RESULT_BLOCK
+	},
+	{			/* fe80::2 */
 		.af = AF_INET6,
 		.src = "fe80::adec:c91c:d116:7592", .dst = "fe80::2",
 		.ifname = IFNAME_INT,		.di = PFIL_IN,
 		.stateful_ret = RESULT_PASS,	.ret = RESULT_PASS
 	},
-	{
+	{			/* fe80::2000:0:0/96 */
+		.af = AF_INET6,
+		.src = "fe80::adec:c91c:d116:7592", .dst = "fe80::2000:8000:0",
+		.ifname = IFNAME_INT,		.di = PFIL_IN,
+		.stateful_ret = RESULT_PASS,	.ret = RESULT_PASS
+	},
+	{			/* fe80::2000:0:0/96, one bit off */
+		.af = AF_INET6,
+		.src = "fe80::adec:c91c:d116:7592", .dst = "fe80::2001:8000:0",
+		.ifname = IFNAME_INT,		.di = PFIL_IN,
+		.stateful_ret = RESULT_BLOCK,	.ret = RESULT_BLOCK
+	},
+	{			/* fe80::3 */
 		.af = AF_INET6,
 		.src = "fe80::adec:c91c:d116:7592", .dst = "fe80::3",
 		.ifname = IFNAME_INT,		.di = PFIL_IN,
+		.stateful_ret = RESULT_PASS,	.ret = RESULT_PASS
+	},
+	{			/* fe80::3000:0:0/97 */
+		.af = AF_INET6,
+		.src = "fe80::adec:c91c:d116:7592", .dst = "fe80::3000:7fff:0",
+		.ifname = IFNAME_INT,		.di = PFIL_IN,
+		.stateful_ret = RESULT_PASS,	.ret = RESULT_PASS
+	},
+	{			/* fe80::3000:0:0/97, one bit off */
+		.af = AF_INET6,
+		.src = "fe80::adec:c91c:d116:7592", .dst = "fe80::3000:ffff:0",
+		.ifname = IFNAME_INT,		.di = PFIL_IN,
+		.stateful_ret = RESULT_BLOCK,	.ret = RESULT_BLOCK
+	},
+	{
+		.af = AF_INET6,
+		.src = "fe80::adec:c91c:d116:7592", .dst = "fe80::4",
+		.ifname = IFNAME_INT,		.di = PFIL_IN,
 		.stateful_ret = RESULT_BLOCK,	.ret = RESULT_BLOCK
 	},
 

Reply via email to