]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
core/main: fix logging of /sbin/init exec failure
authorMike Yuan <me@yhndnzj.com>
Sun, 9 Mar 2025 13:14:45 +0000 (14:14 +0100)
committerLennart Poettering <lennart@poettering.net>
Tue, 11 Mar 2025 11:02:57 +0000 (12:02 +0100)
Follow-up for 93e19483dc9fae94d713d036ecee669450bd002d

While at it, avoid duplicate manager_status_printf()
(error_message will be shown in main()).

src/core/main.c

index 89b283cca21f24ae739d4efc1e798434e960b69a..0368ec891fcf60817ef103e8137b509fb6acc439 100644 (file)
@@ -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(