1 #include <darwintest.h> 2 #include <signal.h> 3 #include <errno.h> 4 5 T_GLOBAL_META( 6 T_META_RADAR_COMPONENT_NAME("xnu"), 7 T_META_RADAR_COMPONENT_VERSION("signals"), 8 T_META_TAG_VM_PREFERRED, 9 T_META_RUN_CONCURRENTLY(true), 10 T_META_CHECK_LEAKS(false) 11 ); 12 13 T_DECL(signal_initproc_prohibited, "Check that signalling initproc is prohibited", T_META_ASROOT(TRUE), T_META_TAG_VM_PREFERRED) 14 { 15 /* All user-initiated signals to launchd are prohibited. */ 16 bool saw_sigterm = false; 17 bool saw_sigkill = false; 18 int signal_max = SIGUSR2; 19 20 for (int signal = 1; signal < signal_max; signal++) { 21 T_WITH_ERRNO; 22 T_ASSERT_POSIX_FAILURE(kill(1, signal), 23 EPERM, 24 "Shouln't be able to send signal '%s' to initproc", 25 strsignal(signal)); 26 27 saw_sigkill |= signal == SIGKILL; 28 saw_sigterm |= signal == SIGTERM; 29 } 30 31 T_ASSERT_TRUE(saw_sigkill, "Tried sigkill"); 32 T_ASSERT_TRUE(saw_sigterm, "Tried sigterm"); 33 } 34