aboutsummaryrefslogtreecommitdiffstats
path: root/src/selftest/cookie.c
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2021-05-19 01:02:43 +0200
committerJason A. Donenfeld <Jason@zx2c4.com>2021-05-19 01:23:09 +0200
commita554cedba4b98df6cfedf254f2be7cfb919ea526 (patch)
treeb73147326e8d75e88db011386df990a895034d9f /src/selftest/cookie.c
parentci: add a Cirrus-CI config file to build + smoke test (diff)
downloadwireguard-freebsd-a554cedba4b98df6cfedf254f2be7cfb919ea526.tar.xz
wireguard-freebsd-a554cedba4b98df6cfedf254f2be7cfb919ea526.zip
if_wg: pass back result of selftests and enable in CI
Hopefully bad tests will cause the module to not insert, so the CI picks this up. It looks like a failure to insert the module at the moment actually causes another crash, though: Kernel page fault with the following non-sleepable locks held: exclusive sleep mutex if_cloners lock (if_cloners lock) r = 0 (0xffffffff81d9a9b8) locked @ /usr/src/sys/net/if_clone.c:447 stack backtrace: #0 0xffffffff80c66181 at witness_debugger+0x71 #1 0xffffffff80c6729d at witness_warn+0x40d #2 0xffffffff8109499e at trap_pfault+0x7e #3 0xffffffff81093fab at trap+0x2ab #4 0xffffffff810687f8 at calltrap+0x8 #5 0xffffffff82925610 at wg_module_event_handler+0x120 #6 0xffffffff80bd53c3 at module_register_init+0xd3 #7 0xffffffff80bc5c61 at linker_load_module+0xc01 #8 0xffffffff80bc73b9 at kern_kldload+0xe9 #9 0xffffffff80bc74db at sys_kldload+0x5b #10 0xffffffff810952f7 at amd64_syscall+0x147 #11 0xffffffff8106911e at fast_syscall_common+0xf8 Fatal trap 12: page fault while in kernel mode cpuid = 9; apic id = 09 fault virtual address = 0x70 fault code = supervisor read data, page not present instruction pointer = 0x20:0xffffffff80d18e37 stack pointer = 0x28:0xfffffe0115fb35a0 frame pointer = 0x28:0xfffffe0115fb35c0 code segment = base 0x0, limit 0xfffff, type 0x1b = DPL 0, pres 1, long 1, def32 0, gran 1 processor eflags = interrupt enabled, resume, IOPL = 0 current process = 1587 (kldload) trap number = 12 panic: page fault cpuid = 9 time = 1621380034 KDB: stack backtrace: #0 0xffffffff80c44695 at kdb_backtrace+0x65 #1 0xffffffff80bf9d01 at vpanic+0x181 #2 0xffffffff80bf9ad3 at panic+0x43 #3 0xffffffff81094917 at trap_fatal+0x387 #4 0xffffffff810949b7 at trap_pfault+0x97 #5 0xffffffff81093fab at trap+0x2ab #6 0xffffffff810687f8 at calltrap+0x8 #7 0xffffffff82925610 at wg_module_event_handler+0x120 #8 0xffffffff80bd53c3 at module_register_init+0xd3 #9 0xffffffff80bc5c61 at linker_load_module+0xc01 #10 0xffffffff80bc73b9 at kern_kldload+0xe9 #11 0xffffffff80bc74db at sys_kldload+0x5b #12 0xffffffff810952f7 at amd64_syscall+0x147 #13 0xffffffff8106911e at fast_syscall_common+0xf8 Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to 'src/selftest/cookie.c')
-rw-r--r--src/selftest/cookie.c33
1 files changed, 23 insertions, 10 deletions
diff --git a/src/selftest/cookie.c b/src/selftest/cookie.c
index 543aacb..4076e4c 100644
--- a/src/selftest/cookie.c
+++ b/src/selftest/cookie.c
@@ -30,9 +30,10 @@ static const struct expected_results {
static struct ratelimit rl;
-static void
+static bool
cookie_ratelimit_timings_test(void)
{
+ bool ret = false;
struct sockaddr_in sin;
#ifdef INET6
struct sockaddr_in6 sin6;
@@ -91,15 +92,18 @@ cookie_ratelimit_timings_test(void)
#endif
}
T_PASSED;
+ ret = true;
cleanup:
ratelimit_deinit(&rl);
+ return ret;
}
-static void
+static bool
cookie_ratelimit_capacity_test(void)
{
struct sockaddr_in sin;
int i;
+ bool ret = false;
bzero(&rl, sizeof(rl));
ratelimit_init(&rl);
@@ -120,15 +124,18 @@ cookie_ratelimit_capacity_test(void)
}
}
T_PASSED;
+ ret = true;
cleanup:
ratelimit_deinit(&rl);
+ return ret;
}
-static void
+static bool
cookie_ratelimit_gc_test(void)
{
struct sockaddr_in sin;
int i;
+ bool ret = false;
bzero(&rl, sizeof(rl));
ratelimit_init(&rl);
@@ -165,11 +172,13 @@ cookie_ratelimit_gc_test(void)
if (rl.rl_table_num != 0)
T_FAILED("gc");
T_PASSED;
+ ret = true;
cleanup:
ratelimit_deinit(&rl);
+ return ret;
}
-static void
+static bool
cookie_mac_test(void)
{
struct cookie_checker checker;
@@ -177,6 +186,7 @@ cookie_mac_test(void)
struct cookie_macs cm;
struct sockaddr_in sin;
int res, i;
+ bool ret = false;
uint8_t nonce[COOKIE_NONCE_SIZE];
uint8_t cookie[COOKIE_ENCRYPTED_SIZE];
@@ -280,15 +290,18 @@ cookie_mac_test(void)
T_FAILED("validate_macs_load_normal_mac2_retry");
T_PASSED;
+ ret = true;
cleanup:
- return;
+ return ret;
}
-void
+bool
cookie_selftest(void)
{
- cookie_ratelimit_timings_test();
- cookie_ratelimit_capacity_test();
- cookie_ratelimit_gc_test();
- cookie_mac_test();
+ bool ret = true;
+ ret &= cookie_ratelimit_timings_test();
+ ret &= cookie_ratelimit_capacity_test();
+ ret &= cookie_ratelimit_gc_test();
+ ret &= cookie_mac_test();
+ return ret;
}