[libvirt] [PATCHv2 08/14] Fix vmdef usage while in monitor in qemu process
John Ferlan
jferlan at redhat.com
Mon Jan 12 22:37:14 UTC 2015
<no commit message>?
Since it seems there's a second bugfix here (eg, the alias setting),
perhaps one should be added.
On 01/07/2015 10:42 AM, Ján Tomko wrote:
> ---
> src/qemu/qemu_process.c | 22 ++++++++++++++++------
> 1 file changed, 16 insertions(+), 6 deletions(-)
>
> diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
> index 4528b58..3d383ef 100644
> --- a/src/qemu/qemu_process.c
> +++ b/src/qemu/qemu_process.c
> @@ -2584,6 +2584,7 @@ qemuProcessInitPasswords(virConnectPtr conn,
> qemuDomainObjPrivatePtr priv = vm->privateData;
> virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
> size_t i;
> + char *alias = NULL;
>
> for (i = 0; i < vm->def->ngraphics; ++i) {
> virDomainGraphicsDefPtr graphics = vm->def->graphics[i];
> @@ -2609,7 +2610,6 @@ qemuProcessInitPasswords(virConnectPtr conn,
> for (i = 0; i < vm->def->ndisks; i++) {
> char *secret;
> size_t secretLen;
> - const char *alias;
>
> if (!vm->def->disks[i]->src->encryption ||
> !virDomainDiskGetSource(vm->def->disks[i]))
> @@ -2620,20 +2620,26 @@ qemuProcessInitPasswords(virConnectPtr conn,
> &secret, &secretLen) < 0)
> goto cleanup;
>
> - alias = vm->def->disks[i]->info.alias;
> + VIR_FREE(alias);
> + if (VIR_STRDUP(alias, vm->def->disks[i]->info.alias) < 0)
> + goto cleanup;
This will leak secret (my coverity checker found this)
> if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) {
> VIR_FREE(secret);
> goto cleanup;
> }
> ret = qemuMonitorSetDrivePassphrase(priv->mon, alias, secret);
> VIR_FREE(secret);
> - qemuDomainObjExitMonitor(driver, vm);
> + if (qemuDomainObjExitMonitor(driver, vm) < 0) {
> + ret = -1;
> + goto cleanup;
superfluous considering the following statement
> + }
> if (ret < 0)
> goto cleanup;
> }
> }
>
> cleanup:
> + VIR_FREE(alias);
> virObjectUnref(cfg);
> return ret;
> }
> @@ -4181,6 +4187,7 @@ int qemuProcessStart(virConnectPtr conn,
> virCommandPtr cmd = NULL;
> struct qemuProcessHookData hookData;
> unsigned long cur_balloon;
> + unsigned int period = 0;
> size_t i;
> bool rawio_set = false;
> char *nodeset = NULL;
> @@ -4793,15 +4800,18 @@ int qemuProcessStart(virConnectPtr conn,
> vm->def->mem.cur_balloon);
> goto cleanup;
> }
> + if (vm->def->memballoon && vm->def->memballoon->period)
> + period = vm->def->memballoon->period;
> if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0)
> goto cleanup;
> - if (vm->def->memballoon && vm->def->memballoon->period)
> - qemuMonitorSetMemoryStatsPeriod(priv->mon, vm->def->memballoon->period);
> + if (period)
> + qemuMonitorSetMemoryStatsPeriod(priv->mon, period);
> if (qemuMonitorSetBalloon(priv->mon, cur_balloon) < 0) {
> qemuDomainObjExitMonitor(driver, vm);
Hmm no status check on this one? Although fixed in 11/14 it seems
ACK with adjustments
John
> goto cleanup;
> }
> - qemuDomainObjExitMonitor(driver, vm);
> + if (qemuDomainObjExitMonitor(driver, vm) < 0)
> + goto cleanup;
>
> if (!(flags & VIR_QEMU_PROCESS_START_PAUSED)) {
> VIR_DEBUG("Starting domain CPUs");
>
More information about the libvir-list
mailing list