[Libvir] PATCH: Fix accident close of monitor FD & leak of logfile FD to child
Daniel P. Berrange
berrange at redhat.com
Thu Jul 19 00:52:00 UTC 2007
After the QEMU monitor filehandle has been successfully initialized, we
then promptly close it ! It seems a 'return' statement accidentally got
removed somewhere during previously refactoring.
Second, the QEMU logfile does not have the close-on-exec flag set so the
logfile is leaked to child processes.
qemu_driver.c | 13 +++++++++++++
1 file changed, 13 insertions(+)
Dan.
--
|=- Red Hat, Engineering, Emerging Technologies, Boston. +1 978 392 2496 -=|
|=- Perl modules: http://search.cpan.org/~danberr/ -=|
|=- Projects: http://freshmeat.net/~danielpb/ -=|
|=- GnuPG: 7D3B9505 F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 -=|
-------------- next part --------------
Index: src/qemu_driver.c
===================================================================
RCS file: /data/cvs/libvirt/src/qemu_driver.c,v
retrieving revision 1.8
diff -u -p -r1.8 qemu_driver.c
--- src/qemu_driver.c 12 Jul 2007 15:09:01 -0000 1.8
+++ src/qemu_driver.c 19 Jul 2007 00:50:04 -0000
@@ -540,6 +540,11 @@ static int qemudOpenMonitor(virConnectPt
buf, sizeof(buf),
qemudCheckMonitorPrompt,
"monitor");
+
+ /* Keep monitor open upon success */
+ if (ret == 0)
+ return ret;
+
error:
close(monfd);
return ret;
@@ -701,6 +706,14 @@ static int qemudStartVMDaemon(virConnect
logfile, strerror(errno));
return -1;
}
+ if (qemudSetCloseExec(vm->logfile) < 0) {
+ qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
+ "Unable to set VM logfile close-on-exec flag %s",
+ strerror(errno));
+ close(vm->logfile);
+ vm->logfile = -1;
+ return -1;
+ }
if (qemudBuildCommandLine(conn, driver, vm, &argv) < 0) {
close(vm->logfile);
More information about the libvir-list
mailing list