From: John Ferlan Date: Tue, 23 Apr 2013 13:02:07 +0000 (-0400) Subject: Adjust usage of qemu -no-reboot and -no-shutdown options X-Git-Tag: CVE-2013-1962~22 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0e034efaf9b963760516a65413fd9771034357aa;p=thirdparty%2Flibvirt.git Adjust usage of qemu -no-reboot and -no-shutdown options During building of the qemu command line determine whether to add/use the '-no-reboot' option only if each of the 'on' events want to to destroy the domain; otherwise, use the '-no-shutdown' option. Prior to this change both could be on the command line, which while allowed could be construed as a conflict. --- diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 588316649e..58eab54a28 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -6422,6 +6422,7 @@ qemuBuildCommandLine(virConnectPtr conn, int last_good_net = -1; bool hasHwVirt = false; virCommandPtr cmd = NULL; + bool allowReboot = true; bool emitBootindex = false; int sdl = 0; int vnc = 0; @@ -6808,16 +6809,24 @@ qemuBuildCommandLine(virConnectPtr conn, } } - if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_NO_REBOOT) && - def->onReboot != VIR_DOMAIN_LIFECYCLE_RESTART) - virCommandAddArg(cmd, "-no-reboot"); + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_NO_REBOOT)) { + /* Only add -no-reboot option if each event destroys domain */ + if (def->onReboot == VIR_DOMAIN_LIFECYCLE_DESTROY && + def->onPoweroff == VIR_DOMAIN_LIFECYCLE_DESTROY && + def->onCrash == VIR_DOMAIN_LIFECYCLE_DESTROY) { + allowReboot = false; + virCommandAddArg(cmd, "-no-reboot"); + } + } /* If JSON monitor is enabled, we can receive an event * when QEMU stops. If we use no-shutdown, then we can * watch for this event and do a soft/warm reboot. */ - if (monitor_json && virQEMUCapsGet(qemuCaps, QEMU_CAPS_NO_SHUTDOWN)) + if (monitor_json && allowReboot && + virQEMUCapsGet(qemuCaps, QEMU_CAPS_NO_SHUTDOWN)) { virCommandAddArg(cmd, "-no-shutdown"); + } if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_NO_ACPI)) { if (!(def->features & (1 << VIR_DOMAIN_FEATURE_ACPI)))