nspawn: fix abort when we cannot execve
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Mon, 8 Jul 2019 13:16:41 +0000 (15:16 +0200)
committerLennart Poettering <lennart@poettering.net>
Mon, 8 Jul 2019 23:24:20 +0000 (01:24 +0200)
If execve failed, we would die in safe_close(), because master was already
closed by fdset_close_others() on line 3123. IIUC, we don't need to keep the
fd open after sending it, so let's just close it immediately.

Reproducer:
sudo build/systemd-nspawn -M rawhide fooooooo

Fixup for 3acc84ebd9aebe8cf1771b42644ebbfbecdfaa37.

src/nspawn/nspawn.c

index 7ada411..a563c02 100644 (file)
@@ -2798,7 +2798,6 @@ static int inner_child(
                 int master_pty_socket,
                 FDSet *fds) {
 
-        _cleanup_close_ int master = -1;
         _cleanup_free_ char *home = NULL;
         char as_uuid[37];
         size_t n_env = 1;
@@ -2931,6 +2930,7 @@ static int inner_child(
         }
 
         if (arg_console_mode != CONSOLE_PIPE) {
+                _cleanup_close_ int master = -1;
                 _cleanup_free_ char *console = NULL;
 
                 /* Allocate a pty and make it available as /dev/console. */