diff --git a/gck-rpc-daemon-standalone.c b/gck-rpc-daemon-standalone.c index 6aff4d34a4f0dc0ffd9f0624c4ed7e3c17291c6a..563f83f5f34d9f8a2da5cd80742e239d97cf2a52 100644 --- a/gck-rpc-daemon-standalone.c +++ b/gck-rpc-daemon-standalone.c @@ -32,6 +32,7 @@ #include <unistd.h> #include <stdlib.h> #include <string.h> +#include <signal.h> #include <dlfcn.h> #include <pthread.h> @@ -111,6 +112,7 @@ static int install_syscall_filter(void) ALLOW_SYSCALL(set_robust_list), ALLOW_SYSCALL(recvfrom), ALLOW_SYSCALL(madvise), + ALLOW_SYSCALL(rt_sigaction), KILL_PROCESS, }; struct sock_fprog prog = { @@ -154,6 +156,11 @@ static int usage(void) exit(2); } +void termination_handler (int signum) +{ + is_running = 0; +} + int main(int argc, char *argv[]) { CK_C_GetFunctionList func_get_list; @@ -225,6 +232,10 @@ int main(int argc, char *argv[]) if (sock == -1) exit(1); + /* Shut down gracefully on SIGTERM. */ + if (signal (SIGTERM, termination_handler) == SIG_IGN) + signal (SIGTERM, SIG_IGN); + is_running = 1; while (is_running) { FD_ZERO(&read_fds);