[PATCH 2/3] qemu: fix memory leak in qemu_driver.c

Peng Liang tcx4c70 at gmail.com
Fri Sep 9 13:37:44 UTC 2022



On 09/09/2022 14:10, Jiacheng Jiang wrote:
> From: jiangjiacheng <jiangjiacheng at huawei.com>
> 
> Function virTypedParamsAddString may return -1

I don't think `virTypedParamsAddString` will return -1 in the code paths 
you touched. The only case where `virTypedParamsAddString` returns -1 is 
that the `name` you pass to it is too long (>=80), however, in the code 
path you touched `name`s are hard-coded and the lengths of them are <80.

> and the clean path
> doesn't free the memory of eventParams, which will lead to potential
> memory leak.
> 
> Signed-off-by: jiangjiacheng <jiangjiacheng at huawei.com>
> ---
>   src/qemu/qemu_driver.c | 12 ++++++++++++
>   1 file changed, 12 insertions(+)
> 
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index 707f4cc1bb..c43bc4070e 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -4474,11 +4474,15 @@ qemuDomainPinVcpuLive(virDomainObj *vm,
>           goto cleanup;
>   
>       event = virDomainEventTunableNewFromObj(vm, eventParams, eventNparams);
> +    eventParams = NULL;
> +    eventNparams = 0;
>   
>       ret = 0;
>   
>    cleanup:
>       virObjectEventStateQueue(driver->domainEventState, event);
> +    if (eventParams)
> +        virTypedParamsFree(eventParams, eventNparams);
>       return ret;
>   }
>   
> @@ -4683,6 +4687,8 @@ qemuDomainPinEmulator(virDomainPtr dom,
>               goto endjob;
>   
>           event = virDomainEventTunableNewFromDom(dom, eventParams, eventNparams);
> +        eventParams = NULL;
> +        eventNparams = 0;
>       }
>   
>       if (persistentDef) {
> @@ -4699,6 +4705,8 @@ qemuDomainPinEmulator(virDomainPtr dom,
>       qemuDomainObjEndJob(vm);
>   
>    cleanup:
> +    if (eventParams)
> +        virTypedParamsFree(eventParams, eventNparams);
>       virObjectEventStateQueue(driver->domainEventState, event);
>       virDomainObjEndAPI(&vm);
>       return ret;
> @@ -5080,6 +5088,8 @@ qemuDomainPinIOThread(virDomainPtr dom,
>               goto endjob;
>   
>           event = virDomainEventTunableNewFromDom(dom, eventParams, eventNparams);
> +        eventParams = NULL;
> +        eventNparams = 0;
>       }
>   
>       if (persistentDef) {
> @@ -5105,6 +5115,8 @@ qemuDomainPinIOThread(virDomainPtr dom,
>       qemuDomainObjEndJob(vm);
>   
>    cleanup:
> +    if (eventParams)
> +        virTypedParamsFree(eventParams, eventNparams);
>       virObjectEventStateQueue(driver->domainEventState, event);
>       virDomainObjEndAPI(&vm);
>       return ret;



More information about the libvir-list mailing list