xref: /xnu-12377.61.12/tests/signals/signal_initproc.c (revision 4d495c6e23c53686cf65f45067f79024cf5dcee8)
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