From: Mike Yuan Date: Sun, 9 Mar 2025 13:14:45 +0000 (+0100) Subject: core/main: fix logging of /sbin/init exec failure X-Git-Tag: v258-rc1~1119 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fce19eb67f4fad35ffbea5fdd7f99e55998453a8;p=thirdparty%2Fsystemd.git core/main: fix logging of /sbin/init exec failure Follow-up for 93e19483dc9fae94d713d036ecee669450bd002d While at it, avoid duplicate manager_status_printf() (error_message will be shown in main()). --- diff --git a/src/core/main.c b/src/core/main.c index 89b283cca21..0368ec891fc 100644 --- a/src/core/main.c +++ b/src/core/main.c @@ -2124,22 +2124,23 @@ static int do_reexecute( args[0] = "/sbin/init"; (void) execv(args[0], (char* const*) args); r = -errno; - - manager_status_printf(NULL, STATUS_TYPE_EMERGENCY, - ANSI_HIGHLIGHT_RED " !! " ANSI_NORMAL, - "Failed to execute /sbin/init"); + *ret_error_message = "Failed to execute /sbin/init"; if (r == -ENOENT) { + manager_status_printf(NULL, STATUS_TYPE_EMERGENCY, + ANSI_HIGHLIGHT_RED " !! " ANSI_NORMAL, + "%s", *ret_error_message); + log_warning_errno(r, "No /sbin/init, trying fallback shell"); args[0] = "/bin/sh"; args[1] = NULL; (void) execve(args[0], (char* const*) args, saved_env); r = -errno; + *ret_error_message = "Failed to execute fallback shell"; } - *ret_error_message = "Failed to execute fallback shell"; - return log_error_errno(r, "Failed to execute /bin/sh, giving up: %m"); + return log_error_errno(r, "%s, giving up: %m", *ret_error_message); } static int invoke_main_loop(