chiark / gitweb /
switch-root: reopen /dev/console before we switch root
[elogind.git] / src / core / main.c
index 6a2dbc2f54d864e7912a7ba74d5e2cd29e562307..6f6b565d68d9d5424bfaa3ccea2f9986347de8a6 100644 (file)
@@ -164,16 +164,11 @@ _noreturn_ static void crash(int sig) {
                 sa.sa_flags = SA_NOCLDSTOP|SA_NOCLDWAIT|SA_RESTART;
                 assert_se(sigaction(SIGCHLD, &sa, NULL) == 0);
 
-                if ((pid = fork()) < 0)
+                pid = fork();
+                if (pid < 0)
                         log_error("Failed to fork off crash shell: %s", strerror(errno));
                 else if (pid == 0) {
-                        int fd, r;
-
-                        if ((fd = acquire_terminal("/dev/console", false, true, true, (usec_t) -1)) < 0)
-                                log_error("Failed to acquire terminal: %s", strerror(-fd));
-                        else if ((r = make_stdio(fd)) < 0)
-                                log_error("Failed to duplicate terminal fd: %s", strerror(-r));
-
+                        make_console_stdio();
                         execl("/bin/sh", "/bin/sh", NULL);
 
                         log_error("execl() failed: %s", strerror(errno));
@@ -1677,6 +1672,9 @@ finish:
                  * rebooted while we do that */
                 watchdog_close(true);
 
+                /* Reopen the console */
+                make_console_stdio();
+
                 if (switch_root_dir) {
                         r = switch_root(switch_root_dir);
                         if (r < 0)