From: Wen Congyang Date: Wed, 30 May 2012 09:20:44 +0000 (+0800) Subject: command: check for fork error before closing fd X-Git-Tag: v0.9.6.1~4 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0e4efa3d53ffc9a02ce1dd73f7b240acfc9679e0;p=thirdparty%2Flibvirt.git command: check for fork error before closing fd We should not set *outfd or *errfd if virExecWithHook() failed because the caller may close these fds. Bug present since v0.4.5 (commit 60ed1d2a). (cherry picked from commit 746ff701e8727439cac8ca72531d82e5cb7fa129) --- diff --git a/src/util/command.c b/src/util/command.c index d62d9d1a15..5394a02f73 100644 --- a/src/util/command.c +++ b/src/util/command.c @@ -394,6 +394,10 @@ virExecWithHook(const char *const*argv, } if (pid) { /* parent */ + if (forkRet < 0) { + goto cleanup; + } + VIR_FORCE_CLOSE(null); if (outfd && *outfd == -1) { VIR_FORCE_CLOSE(pipeout[1]); @@ -404,10 +408,6 @@ virExecWithHook(const char *const*argv, *errfd = pipeerr[0]; } - if (forkRet < 0) { - goto cleanup; - } - *retpid = pid; if (binary != argv[0])