From 8211c677a36609c8d861f23ef21ec2c2e5645ece Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A1n=20Tomko?= Date: Tue, 21 Aug 2012 11:01:44 +0200 Subject: [PATCH] command: avoid double close in virExecWithHook Fix possible double close in the child process after the fork in case infd and outfd are equal, just like they are after being called from virNetSocketNewConnectCommand. --- src/util/command.c | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/src/util/command.c b/src/util/command.c index 7755572d4e..49ec1787c1 100644 --- a/src/util/command.c +++ b/src/util/command.c @@ -547,17 +547,13 @@ virExecWithHook(const char *const*argv, goto fork_error; } - if (infd != STDIN_FILENO && infd != null) + if (infd != STDIN_FILENO && infd != null && infd != childerr && + infd != childout) VIR_FORCE_CLOSE(infd); - if (childout > STDERR_FILENO && childout != null) { - tmpfd = childout; /* preserve childout value */ - VIR_FORCE_CLOSE(tmpfd); - } - if (childerr > STDERR_FILENO && - childerr != childout && - childerr != null) { + if (childout > STDERR_FILENO && childout != null && childout != childerr) + VIR_FORCE_CLOSE(childout); + if (childerr > STDERR_FILENO && childerr != null) VIR_FORCE_CLOSE(childerr); - } VIR_FORCE_CLOSE(null); /* Initialize full logging for a while */