qemu: Don't leak file descriptors in case of error

[ port from runtime commit 7b269ff7aa2d62fe12593ff7040798e6c9bd5d65 ]

If we take one of the error paths from setupVirtiofsd() after
opening the fd variable, the fd.Close() function is not called.

Signed-off-by: Christophe de Dinechin <dinechin@redhat.com>
Signed-off-by: Peng Tao <bergwolf@hyper.sh>
This commit is contained in:
Christophe de Dinechin 2020-06-29 01:19:18 -07:00 committed by Peng Tao
parent 60606647de
commit be9ca0d58b

View File

@ -663,6 +663,7 @@ func (q *qemu) setupVirtiofsd() (err error) {
if err != nil { if err != nil {
return err return err
} }
defer fd.Close()
const sockFd = 3 // Cmd.ExtraFiles[] fds are numbered starting from 3 const sockFd = 3 // Cmd.ExtraFiles[] fds are numbered starting from 3
cmd := exec.Command(q.config.VirtioFSDaemon, q.virtiofsdArgs(sockFd)...) cmd := exec.Command(q.config.VirtioFSDaemon, q.virtiofsdArgs(sockFd)...)
@ -677,7 +678,6 @@ func (q *qemu) setupVirtiofsd() (err error) {
return fmt.Errorf("virtiofs daemon %v returned with error: %v", q.config.VirtioFSDaemon, err) return fmt.Errorf("virtiofs daemon %v returned with error: %v", q.config.VirtioFSDaemon, err)
} }
q.state.VirtiofsdPid = cmd.Process.Pid q.state.VirtiofsdPid = cmd.Process.Pid
fd.Close()
// Monitor virtiofsd's stderr and stop sandbox if virtiofsd quits // Monitor virtiofsd's stderr and stop sandbox if virtiofsd quits
go func() { go func() {