On Thu, Mar 19, 2015 at 18:40:36 -0400, John Ferlan wrote: > > > On 03/17/2015 10:20 AM, Peter Krempa wrote: > > Add code to hot-add memory devices to running qemu instances. > > --- > > > > Notes: > > Version 3: > > - added comment to clarify that @mem is always consumed by > > qemuDomainAttachMemory > > Version 2: > > - no change > > > > Version 2: > > - no change > > > > src/qemu/qemu_command.c | 4 +-- > > src/qemu/qemu_command.h | 15 ++++++++ > > src/qemu/qemu_driver.c | 5 ++- > > src/qemu/qemu_hotplug.c | 95 > > +++++++++++++++++++++++++++++++++++++++++++++++++ > > src/qemu/qemu_hotplug.h | 3 ++ > > 5 files changed, 119 insertions(+), 3 deletions(-) > > > > @@ -1672,6 +1672,101 @@ qemuDomainAttachRNGDevice(virQEMUDriverPtr driver,
...
> > }
> >
> >
> > +/**
> > + * qemuDomainAttachMemory:
> > + * @driver: qemu driver data
> > + * @vm: VM object
> > + * @mem: Definition of the memory device to be attached. @mem is always
> > consumed
> > + *
> > + * Attaches memory device described by @mem to domain @vm.
> > + *
> > + * Returns 0 on success -1 on error.
> > + */
> > +int
> > +qemuDomainAttachMemory(virQEMUDriverPtr driver,
> > + virDomainObjPtr vm,
> > + virDomainMemoryDefPtr mem)
> > +{
> > + qemuDomainObjPrivatePtr priv = vm->privateData;
> > + virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
> > + char *devstr = NULL;
> > + char *objalias = NULL;
> > + const char *backendType;
> > + virJSONValuePtr props = NULL;
> > + int id;
> > + int ret = -1;
> > +
> > + if (virAsprintf(&mem->info.alias, "dimm%zu", vm->def->nmems) < 0)
> > + goto cleanup;
> > +
> > + if (virAsprintf(&objalias, "mem%s", mem->info.alias) < 0)
> > + goto cleanup;
> > +
> > + if (!(devstr = qemuBuildMemoryDeviceStr(mem, priv->qemuCaps)))
> > + goto cleanup;
> > +
> > + qemuDomainMemoryDeviceAlignSize(mem);
> > +
> > + if (qemuBuildMemoryBackendStr(mem->size, mem->pagesize,
> > + mem->targetNode, mem->sourceNodes, NULL,
> > + vm->def, priv->qemuCaps, cfg,
> > + &backendType, &props, true) < 0)
>
> Coverity determines that qemuBuildMemoryBackendStr can return props here
> with a -1 return and thus leak props
>
> That's because qemuBuildMemoryBackendStr sets the returned *backendProps
> and sets the local props to NULL before the (!hugepages) code which if
> it fails won't cause 'props' to be free'd properly
>
> Adding the virJSONValueFree(props); makes Coverity happy again.
I'll fix qemuBuildMemoryBackendStr separately rather than adding a
pseudo-hack that would violate the style we are using for functions that
return via argument.
Peter
signature.asc
Description: Digital signature
-- libvir-list mailing list [email protected] https://www.redhat.com/mailman/listinfo/libvir-list
