diff options
author | Qi Wang <qiwan@redhat.com> | 2020-07-31 08:26:50 -0400 |
---|---|---|
committer | Qi Wang <qiwan@redhat.com> | 2020-07-31 08:27:12 -0400 |
commit | 3fccb699e4ba2748bd3f7d156335ea2ea34c33f8 (patch) | |
tree | 337518a8e360e2ffffd9ce466ff6ebc52a4d30c5 /libpod/oci_conmon_exec_linux.go | |
parent | bb96c8918b0df7a1179a5ca61f9adae07e0b4620 (diff) | |
download | podman-3fccb699e4ba2748bd3f7d156335ea2ea34c33f8.tar.gz podman-3fccb699e4ba2748bd3f7d156335ea2ea34c33f8.tar.bz2 podman-3fccb699e4ba2748bd3f7d156335ea2ea34c33f8.zip |
Fix close fds of exec --preserve-fds
Fix the closing of fds from --preserve-fds to avoid the operation on unrelated fds.
Signed-off-by: Qi Wang <qiwan@redhat.com>
Diffstat (limited to 'libpod/oci_conmon_exec_linux.go')
-rw-r--r-- | libpod/oci_conmon_exec_linux.go | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/libpod/oci_conmon_exec_linux.go b/libpod/oci_conmon_exec_linux.go index f8d87759a..cfe3745fa 100644 --- a/libpod/oci_conmon_exec_linux.go +++ b/libpod/oci_conmon_exec_linux.go @@ -449,9 +449,12 @@ func (r *ConmonOCIRuntime) startExec(c *Container, sessionID string, options *Ex return nil, nil, err } + var filesToClose []*os.File if options.PreserveFDs > 0 { for fd := 3; fd < int(3+options.PreserveFDs); fd++ { - execCmd.ExtraFiles = append(execCmd.ExtraFiles, os.NewFile(uintptr(fd), fmt.Sprintf("fd-%d", fd))) + f := os.NewFile(uintptr(fd), fmt.Sprintf("fd-%d", fd)) + filesToClose = append(filesToClose, f) + execCmd.ExtraFiles = append(execCmd.ExtraFiles, f) } } @@ -483,14 +486,10 @@ func (r *ConmonOCIRuntime) startExec(c *Container, sessionID string, options *Ex return nil, nil, err } - if options.PreserveFDs > 0 { - for fd := 3; fd < int(3+options.PreserveFDs); fd++ { - // These fds were passed down to the runtime. Close them - // and not interfere - if err := os.NewFile(uintptr(fd), fmt.Sprintf("fd-%d", fd)).Close(); err != nil { - logrus.Debugf("unable to close file fd-%d", fd) - } - } + // These fds were passed down to the runtime. Close them + // and not interfere + for _, f := range filesToClose { + errorhandling.CloseQuiet(f) } return execCmd, pipes, nil |