X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=main.c;h=7dbcc90d5ebff9ae9695883782af49ddb7777975;hp=68a90210839f127748f29d465d35966cf7d79185;hb=8d0e8067af90e2a05d2051e7fdbe0b7f847dd167;hpb=601f6a1e820462b1df6ff632d112bef241d556b1 diff --git a/main.c b/main.c index 68a902108..7dbcc90d5 100644 --- a/main.c +++ b/main.c @@ -127,6 +127,10 @@ static void install_crash_handler(void) { sa.sa_flags = SA_NODEFER; assert_se(sigaction(SIGSEGV, &sa, NULL) == 0); + assert_se(sigaction(SIGILL, &sa, NULL) == 0); + assert_se(sigaction(SIGFPE, &sa, NULL) == 0); + assert_se(sigaction(SIGBUS, &sa, NULL) == 0); + assert_se(sigaction(SIGQUIT, &sa, NULL) == 0); assert_se(sigaction(SIGABRT, &sa, NULL) == 0); } @@ -383,6 +387,10 @@ int main(int argc, char *argv[]) { /* Reset all signal handlers. */ assert_se(reset_all_signal_handlers() == 0); + /* If we are init, we can block sigkill. Yay. */ + signal(SIGKILL, SIG_IGN); + signal(SIGPIPE, SIG_IGN); + /* Close all open files */ assert_se(close_all_fds(NULL, 0) == 0); @@ -427,7 +435,8 @@ int main(int argc, char *argv[]) { log_open_syslog(); log_open_kmsg(); - /* Make sure we leave a core dump */ + /* Make sure we leave a core dump without panicing the + * kernel. */ if (getpid() == 1) install_crash_handler();