diff options
author | OpenShift Merge Robot <openshift-merge-robot@users.noreply.github.com> | 2021-07-29 07:06:12 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-07-29 07:06:12 -0400 |
commit | 0f42cce2f2b47cf04af28e468918dbabb4630679 (patch) | |
tree | f659d3520ee64991028e5ff460dd3835743d3d59 | |
parent | 2041731ecfabe09283e031d613b32778c05d62a4 (diff) | |
parent | 724d048234bd247e233423fbc012de24b7454a9e (diff) | |
download | podman-0f42cce2f2b47cf04af28e468918dbabb4630679.tar.gz podman-0f42cce2f2b47cf04af28e468918dbabb4630679.tar.bz2 podman-0f42cce2f2b47cf04af28e468918dbabb4630679.zip |
Merge pull request #11073 from giuseppe/fix-zombie-process-first-run
rootless: avoid zombie process on first launch
-rw-r--r-- | pkg/rootless/rootless_linux.c | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/pkg/rootless/rootless_linux.c b/pkg/rootless/rootless_linux.c index e5f9e88d9..4d8443fcb 100644 --- a/pkg/rootless/rootless_linux.c +++ b/pkg/rootless/rootless_linux.c @@ -465,38 +465,43 @@ reexec_in_user_namespace_wait (int pid, int options) static int create_pause_process (const char *pause_pid_file_path, char **argv) { - int r, p[2]; + pid_t pid; + int p[2]; if (pipe (p) < 0) - _exit (EXIT_FAILURE); + return -1; - r = fork (); - if (r < 0) - _exit (EXIT_FAILURE); + pid = fork (); + if (pid < 0) + { + close (p[0]); + close (p[1]); + return -1; + } - if (r) + if (pid) { char b; + int r; close (p[1]); /* Block until we write the pid file. */ r = TEMP_FAILURE_RETRY (read (p[0], &b, 1)); close (p[0]); - reexec_in_user_namespace_wait (r, 0); + reexec_in_user_namespace_wait (pid, 0); return r == 1 && b == '0' ? 0 : -1; } else { - int fd; - pid_t pid; + int r, fd; close (p[0]); setsid (); pid = fork (); - if (r < 0) + if (pid < 0) _exit (EXIT_FAILURE); if (pid) |