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