xref: /xnu-12377.1.9/tests/signal_initproc.c (revision f6217f891ac0bb64f3d375211650a4c1ff8ca1ea)
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_OWNER("m_staveleytaylor"),
9 	T_META_RUN_CONCURRENTLY(true)
10 	);
11 
12 T_DECL(signal_initproc_prohibited, "Check that signalling initproc is prohibited", T_META_ASROOT(TRUE), T_META_TAG_VM_PREFERRED)
13 {
14 	/* All user-initiated signals to launchd are prohibited. */
15 	bool saw_sigterm = false;
16 	bool saw_sigkill = false;
17 	int signal_max = SIGUSR2;
18 
19 	for (int signal = 1; signal < signal_max; signal++) {
20 		T_WITH_ERRNO;
21 		T_ASSERT_POSIX_FAILURE(kill(1, signal),
22 		    EPERM,
23 		    "Shouln't be able to send signal '%s' to initproc",
24 		    strsignal(signal));
25 
26 		saw_sigkill |= signal == SIGKILL;
27 		saw_sigterm |= signal == SIGTERM;
28 	}
29 
30 	T_ASSERT_TRUE(saw_sigkill, "Tried sigkill");
31 	T_ASSERT_TRUE(saw_sigterm, "Tried sigterm");
32 }
33