Module Name: src Committed By: kamil Date: Thu Feb 14 05:38:45 UTC 2019
Modified Files: src/tests/lib/libc/sys: t_ptrace_wait.c Log Message: Add new regression scenarios for crash signals in t_ptrace_wait* Verify correct behavior of crash signals (SIGTRAP, SIGBUS, SIGILL, SIGFPE, SIGSEGV) in existing test scenarios: - traceme_raise - traceme_sendsignal_handle - traceme_sendsignal_masked - traceme_sendsignal_ignored - traceme_sendsignal_simple - traceme_vfork_raise These tests verify signals out of the context of CPU trap. These new tests will help to retain expected behavior in future changes in semantics of the trapsignals in the kernel. To generate a diff of this commit: cvs rdiff -u -r1.84 -r1.85 src/tests/lib/libc/sys/t_ptrace_wait.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/lib/libc/sys/t_ptrace_wait.c diff -u src/tests/lib/libc/sys/t_ptrace_wait.c:1.84 src/tests/lib/libc/sys/t_ptrace_wait.c:1.85 --- src/tests/lib/libc/sys/t_ptrace_wait.c:1.84 Tue Feb 12 21:35:35 2019 +++ src/tests/lib/libc/sys/t_ptrace_wait.c Thu Feb 14 05:38:45 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: t_ptrace_wait.c,v 1.84 2019/02/12 21:35:35 kamil Exp $ */ +/* $NetBSD: t_ptrace_wait.c,v 1.85 2019/02/14 05:38:45 kamil Exp $ */ /*- * Copyright (c) 2016, 2017, 2018, 2019 The NetBSD Foundation, Inc. @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__RCSID("$NetBSD: t_ptrace_wait.c,v 1.84 2019/02/12 21:35:35 kamil Exp $"); +__RCSID("$NetBSD: t_ptrace_wait.c,v 1.85 2019/02/14 05:38:45 kamil Exp $"); #include <sys/param.h> #include <sys/types.h> @@ -179,6 +179,11 @@ TRACEME_RAISE(traceme_raise2, SIGSTOP) / TRACEME_RAISE(traceme_raise3, SIGABRT) /* regular abort trap */ TRACEME_RAISE(traceme_raise4, SIGHUP) /* hangup */ TRACEME_RAISE(traceme_raise5, SIGCONT) /* continued? */ +TRACEME_RAISE(traceme_raise6, SIGTRAP) /* crash signal */ +TRACEME_RAISE(traceme_raise7, SIGBUS) /* crash signal */ +TRACEME_RAISE(traceme_raise8, SIGILL) /* crash signal */ +TRACEME_RAISE(traceme_raise9, SIGFPE) /* crash signal */ +TRACEME_RAISE(traceme_raise10, SIGSEGV) /* crash signal */ /// ---------------------------------------------------------------------------- @@ -392,6 +397,11 @@ ATF_TC_BODY(test, tc) \ TRACEME_SENDSIGNAL_HANDLE(traceme_sendsignal_handle1, SIGABRT) /* abort trap */ TRACEME_SENDSIGNAL_HANDLE(traceme_sendsignal_handle2, SIGHUP) /* hangup */ TRACEME_SENDSIGNAL_HANDLE(traceme_sendsignal_handle3, SIGCONT) /* continued? */ +TRACEME_SENDSIGNAL_HANDLE(traceme_sendsignal_handle4, SIGTRAP) /* crash sig. */ +TRACEME_SENDSIGNAL_HANDLE(traceme_sendsignal_handle5, SIGBUS) /* crash sig. */ +TRACEME_SENDSIGNAL_HANDLE(traceme_sendsignal_handle6, SIGILL) /* crash sig. */ +TRACEME_SENDSIGNAL_HANDLE(traceme_sendsignal_handle7, SIGFPE) /* crash sig. */ +TRACEME_SENDSIGNAL_HANDLE(traceme_sendsignal_handle8, SIGSEGV) /* crash sig. */ /// ---------------------------------------------------------------------------- @@ -475,6 +485,11 @@ ATF_TC_BODY(test, tc) \ TRACEME_SENDSIGNAL_MASKED(traceme_sendsignal_masked1, SIGABRT) /* abort trap */ TRACEME_SENDSIGNAL_MASKED(traceme_sendsignal_masked2, SIGHUP) /* hangup */ TRACEME_SENDSIGNAL_MASKED(traceme_sendsignal_masked3, SIGCONT) /* continued? */ +TRACEME_SENDSIGNAL_MASKED(traceme_sendsignal_masked4, SIGTRAP) /* crash sig. */ +TRACEME_SENDSIGNAL_MASKED(traceme_sendsignal_masked5, SIGBUS) /* crash sig. */ +TRACEME_SENDSIGNAL_MASKED(traceme_sendsignal_masked6, SIGILL) /* crash sig. */ +TRACEME_SENDSIGNAL_MASKED(traceme_sendsignal_masked7, SIGFPE) /* crash sig. */ +TRACEME_SENDSIGNAL_MASKED(traceme_sendsignal_masked8, SIGSEGV) /* crash sig. */ /// ---------------------------------------------------------------------------- @@ -560,6 +575,11 @@ ATF_TC_BODY(test, tc) \ TRACEME_SENDSIGNAL_IGNORED(traceme_sendsignal_ignored1, SIGABRT) /* abort */ TRACEME_SENDSIGNAL_IGNORED(traceme_sendsignal_ignored2, SIGHUP) /* hangup */ TRACEME_SENDSIGNAL_IGNORED(traceme_sendsignal_ignored3, SIGCONT) /* continued */ +TRACEME_SENDSIGNAL_IGNORED(traceme_sendsignal_ignored4, SIGTRAP) /* crash s. */ +TRACEME_SENDSIGNAL_IGNORED(traceme_sendsignal_ignored5, SIGBUS) /* crash s. */ +TRACEME_SENDSIGNAL_IGNORED(traceme_sendsignal_ignored6, SIGILL) /* crash s. */ +TRACEME_SENDSIGNAL_IGNORED(traceme_sendsignal_ignored7, SIGFPE) /* crash s. */ +TRACEME_SENDSIGNAL_IGNORED(traceme_sendsignal_ignored8, SIGSEGV) /* crash s. */ /// ---------------------------------------------------------------------------- @@ -571,7 +591,21 @@ traceme_sendsignal_simple(int sigsent) pid_t child, wpid; #if defined(TWAIT_HAVE_STATUS) int status; - int expect_core = (sigsent == SIGABRT) ? 1 : 0; + int expect_core; + + switch (sigsent) { + case SIGABRT: + case SIGTRAP: + case SIGBUS: + case SIGILL: + case SIGFPE: + case SIGSEGV: + expect_core = 1; + break; + default: + expect_core = 0; + break; + } #endif struct ptrace_siginfo info; @@ -678,6 +712,11 @@ TRACEME_SENDSIGNAL_SIMPLE(traceme_sendsi TRACEME_SENDSIGNAL_SIMPLE(traceme_sendsignal_simple3, SIGABRT) /* abort trap */ TRACEME_SENDSIGNAL_SIMPLE(traceme_sendsignal_simple4, SIGHUP) /* hangup */ TRACEME_SENDSIGNAL_SIMPLE(traceme_sendsignal_simple5, SIGCONT) /* continued? */ +TRACEME_SENDSIGNAL_SIMPLE(traceme_sendsignal_simple6, SIGTRAP) /* crash sig. */ +TRACEME_SENDSIGNAL_SIMPLE(traceme_sendsignal_simple7, SIGBUS) /* crash sig. */ +TRACEME_SENDSIGNAL_SIMPLE(traceme_sendsignal_simple8, SIGILL) /* crash sig. */ +TRACEME_SENDSIGNAL_SIMPLE(traceme_sendsignal_simple9, SIGFPE) /* crash sig. */ +TRACEME_SENDSIGNAL_SIMPLE(traceme_sendsignal_simple10, SIGSEGV) /* crash sig. */ /// ---------------------------------------------------------------------------- @@ -748,7 +787,23 @@ traceme_vfork_raise(int sigval) int rv; #if defined(TWAIT_HAVE_STATUS) int status; - int expect_core = (sigval == SIGABRT) ? 1 : 0; + + /* volatile workarounds GCC -Werror=clobbered */ + volatile int expect_core; + + switch (sigval) { + case SIGABRT: + case SIGTRAP: + case SIGBUS: + case SIGILL: + case SIGFPE: + case SIGSEGV: + expect_core = 1; + break; + default: + expect_core = 0; + break; + } #endif /* @@ -805,6 +860,11 @@ traceme_vfork_raise(int sigval) case SIGKILL: case SIGABRT: case SIGHUP: + case SIGTRAP: + case SIGBUS: + case SIGILL: + case SIGFPE: + case SIGSEGV: /* NOTREACHED */ FORKEE_ASSERTX(0 && "This shall not be reached"); __unreachable(); @@ -822,6 +882,11 @@ traceme_vfork_raise(int sigval) case SIGKILL: case SIGABRT: case SIGHUP: + case SIGTRAP: + case SIGBUS: + case SIGILL: + case SIGFPE: + case SIGSEGV: validate_status_signaled(status, sigval, expect_core); break; case SIGSTOP: @@ -866,6 +931,11 @@ TRACEME_VFORK_RAISE(traceme_vfork_raise5 TRACEME_VFORK_RAISE(traceme_vfork_raise6, SIGABRT) /* regular abort trap */ TRACEME_VFORK_RAISE(traceme_vfork_raise7, SIGHUP) /* hangup */ TRACEME_VFORK_RAISE(traceme_vfork_raise8, SIGCONT) /* continued? */ +TRACEME_VFORK_RAISE(traceme_vfork_raise9, SIGTRAP) /* crash signal */ +TRACEME_VFORK_RAISE(traceme_vfork_raise10, SIGBUS) /* crash signal */ +TRACEME_VFORK_RAISE(traceme_vfork_raise11, SIGILL) /* crash signal */ +TRACEME_VFORK_RAISE(traceme_vfork_raise12, SIGFPE) /* crash signal */ +TRACEME_VFORK_RAISE(traceme_vfork_raise13, SIGSEGV) /* crash signal */ /// ---------------------------------------------------------------------------- @@ -5180,6 +5250,11 @@ ATF_TP_ADD_TCS(tp) ATF_TP_ADD_TC(tp, traceme_raise3); ATF_TP_ADD_TC(tp, traceme_raise4); ATF_TP_ADD_TC(tp, traceme_raise5); + ATF_TP_ADD_TC(tp, traceme_raise6); + ATF_TP_ADD_TC(tp, traceme_raise7); + ATF_TP_ADD_TC(tp, traceme_raise8); + ATF_TP_ADD_TC(tp, traceme_raise9); + ATF_TP_ADD_TC(tp, traceme_raise10); ATF_TP_ADD_TC(tp, traceme_crash_trap); ATF_TP_ADD_TC(tp, traceme_crash_segv); @@ -5190,20 +5265,40 @@ ATF_TP_ADD_TCS(tp) ATF_TP_ADD_TC(tp, traceme_sendsignal_handle1); ATF_TP_ADD_TC(tp, traceme_sendsignal_handle2); ATF_TP_ADD_TC(tp, traceme_sendsignal_handle3); + ATF_TP_ADD_TC(tp, traceme_sendsignal_handle4); + ATF_TP_ADD_TC(tp, traceme_sendsignal_handle5); + ATF_TP_ADD_TC(tp, traceme_sendsignal_handle6); + ATF_TP_ADD_TC(tp, traceme_sendsignal_handle7); + ATF_TP_ADD_TC(tp, traceme_sendsignal_handle8); ATF_TP_ADD_TC(tp, traceme_sendsignal_masked1); ATF_TP_ADD_TC(tp, traceme_sendsignal_masked2); ATF_TP_ADD_TC(tp, traceme_sendsignal_masked3); + ATF_TP_ADD_TC(tp, traceme_sendsignal_masked4); + ATF_TP_ADD_TC(tp, traceme_sendsignal_masked5); + ATF_TP_ADD_TC(tp, traceme_sendsignal_masked6); + ATF_TP_ADD_TC(tp, traceme_sendsignal_masked7); + ATF_TP_ADD_TC(tp, traceme_sendsignal_masked8); ATF_TP_ADD_TC(tp, traceme_sendsignal_ignored1); ATF_TP_ADD_TC(tp, traceme_sendsignal_ignored2); ATF_TP_ADD_TC(tp, traceme_sendsignal_ignored3); + ATF_TP_ADD_TC(tp, traceme_sendsignal_ignored4); + ATF_TP_ADD_TC(tp, traceme_sendsignal_ignored5); + ATF_TP_ADD_TC(tp, traceme_sendsignal_ignored6); + ATF_TP_ADD_TC(tp, traceme_sendsignal_ignored7); + ATF_TP_ADD_TC(tp, traceme_sendsignal_ignored8); ATF_TP_ADD_TC(tp, traceme_sendsignal_simple1); ATF_TP_ADD_TC(tp, traceme_sendsignal_simple2); ATF_TP_ADD_TC(tp, traceme_sendsignal_simple3); ATF_TP_ADD_TC(tp, traceme_sendsignal_simple4); ATF_TP_ADD_TC(tp, traceme_sendsignal_simple5); + ATF_TP_ADD_TC(tp, traceme_sendsignal_simple6); + ATF_TP_ADD_TC(tp, traceme_sendsignal_simple7); + ATF_TP_ADD_TC(tp, traceme_sendsignal_simple8); + ATF_TP_ADD_TC(tp, traceme_sendsignal_simple9); + ATF_TP_ADD_TC(tp, traceme_sendsignal_simple10); ATF_TP_ADD_TC(tp, traceme_pid1_parent); @@ -5215,6 +5310,11 @@ ATF_TP_ADD_TCS(tp) ATF_TP_ADD_TC(tp, traceme_vfork_raise6); ATF_TP_ADD_TC(tp, traceme_vfork_raise7); ATF_TP_ADD_TC(tp, traceme_vfork_raise8); + ATF_TP_ADD_TC(tp, traceme_vfork_raise9); + ATF_TP_ADD_TC(tp, traceme_vfork_raise10); + ATF_TP_ADD_TC(tp, traceme_vfork_raise11); + ATF_TP_ADD_TC(tp, traceme_vfork_raise12); + ATF_TP_ADD_TC(tp, traceme_vfork_raise13); ATF_TP_ADD_TC(tp, traceme_vfork_crash_trap); ATF_TP_ADD_TC(tp, traceme_vfork_crash_segv);