From: Mike Yuan Date: Wed, 15 May 2024 15:02:02 +0000 (+0800) Subject: shutdown: don't freeze() if not executed by pid1 X-Git-Tag: v257-rc1~1196^2~1 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a2d4451e643886fcaa49ebee2c69f41c9bbea601;p=thirdparty%2Fsystemd.git shutdown: don't freeze() if not executed by pid1 --- diff --git a/src/shutdown/shutdown.c b/src/shutdown/shutdown.c index 49f986f8c8a..1d41b9f8e43 100644 --- a/src/shutdown/shutdown.c +++ b/src/shutdown/shutdown.c @@ -377,8 +377,12 @@ int main(int argc, char *argv[]) { log_set_prohibit_ipc(true); log_parse_environment(); - if (getpid_cached() == 1) - log_set_always_reopen_console(true); + if (getpid_cached() != 1) { + log_error("Not executed by init (PID 1). Refusing to operate."); + return EXIT_FAILURE; + } + + log_set_always_reopen_console(true); r = parse_argv(argc, argv); if (r < 0) @@ -388,11 +392,6 @@ int main(int argc, char *argv[]) { umask(0022); - if (getpid_cached() != 1) { - r = log_error_errno(SYNTHETIC_ERRNO(EPERM), "Not executed by init (PID 1)."); - goto error; - } - if (streq(arg_verb, "reboot")) cmd = RB_AUTOBOOT; else if (streq(arg_verb, "poweroff")) @@ -667,7 +666,7 @@ int main(int argc, char *argv[]) { r = log_error_errno(errno, "Failed to invoke reboot(): %m"); - error: +error: log_struct_errno(LOG_EMERG, r, LOG_MESSAGE("Critical error while doing system shutdown: %m"), "MESSAGE_ID=" SD_MESSAGE_SHUTDOWN_ERROR_STR);