diff options
author | Jonathan Dieter <jonathan.dieter@spearline.com> | 2020-08-11 15:51:16 +0100 |
---|---|---|
committer | Jonathan Dieter <jonathan.dieter@spearline.com> | 2020-08-11 16:42:39 +0100 |
commit | ec231973d813e68479b99382350a8684d9c0a685 (patch) | |
tree | 1111f512d30a97b016eca0463415535c82703377 /pkg/rootless/rootless_linux.go | |
parent | a90ae00df1c2be0f3d46d4e7cd292599c93ded0f (diff) | |
download | podman-ec231973d813e68479b99382350a8684d9c0a685.tar.gz podman-ec231973d813e68479b99382350a8684d9c0a685.tar.bz2 podman-ec231973d813e68479b99382350a8684d9c0a685.zip |
Fix hang when `path` doesn't exist
I'm not sure if this is an OS-specific issue, but on CentOS 8, if `path`
doesn't exist, this hangs while waiting to read from this socket, even
though the socket is closed by the `reexec_in_user_namespace`. Switching
to a pipe fixes the problem, and pipes shouldn't be an issue since this is
Linux-specific code.
Signed-off-by: Jonathan Dieter <jonathan.dieter@spearline.com>
Diffstat (limited to 'pkg/rootless/rootless_linux.go')
-rw-r--r-- | pkg/rootless/rootless_linux.go | 4 |
1 files changed, 1 insertions, 3 deletions
diff --git a/pkg/rootless/rootless_linux.go b/pkg/rootless/rootless_linux.go index c3f1fc7fa..ecd309d36 100644 --- a/pkg/rootless/rootless_linux.go +++ b/pkg/rootless/rootless_linux.go @@ -389,14 +389,12 @@ func TryJoinFromFilePaths(pausePidPath string, needNewNamespace bool, paths []st lastErr = nil break } else { - fds, err := unix.Socketpair(unix.AF_UNIX, unix.SOCK_DGRAM, 0) + r, w, err := os.Pipe() if err != nil { lastErr = err continue } - r, w := os.NewFile(uintptr(fds[0]), "read file"), os.NewFile(uintptr(fds[1]), "write file") - defer errorhandling.CloseQuiet(r) if _, _, err := becomeRootInUserNS("", path, w); err != nil { |