[libvirt] [PATCH] cgroup: cleanup eventParams when virTypedParamsAddULLong failed

Xu Yandong posted 1 patch 4 years, 6 months ago
Test syntax-check passed
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/libvirt tags/patchew/1568880142-88315-1-git-send-email-xuyandong2@huawei.com
src/qemu/qemu_cgroup.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
[libvirt] [PATCH] cgroup: cleanup eventParams when virTypedParamsAddULLong failed
Posted by Xu Yandong 4 years, 6 months ago
Function virTypedParamsAddULLong use realloc to gain memory,
and doesn't free it when failed. so we need free eventParams to
prevent a memory leak.

Signed-off-by: Xu Yandong <xuyandong2@huawei.com>
---
 src/qemu/qemu_cgroup.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/src/qemu/qemu_cgroup.c b/src/qemu/qemu_cgroup.c
index ecd96efb0a..bc498e4b10 100644
--- a/src/qemu/qemu_cgroup.c
+++ b/src/qemu/qemu_cgroup.c
@@ -869,8 +869,11 @@ qemuSetupCpuCgroup(virDomainObjPtr vm)
             if (virTypedParamsAddULLong(&eventParams, &eventNparams,
                                         &eventMaxparams,
                                         VIR_DOMAIN_TUNABLE_CPU_CPU_SHARES,
-                                        val) < 0)
+                                        val) < 0) {
+                if (eventParams)
+                    virTypedParamsFree(eventParams, eventNparams);
                 return -1;
+            }
 
             event = virDomainEventTunableNewFromObj(vm, eventParams, eventNparams);
         }
-- 
2.18.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH] cgroup: cleanup eventParams when virTypedParamsAddULLong failed
Posted by Michal Privoznik 4 years, 6 months ago
On 9/19/19 10:02 AM, Xu Yandong wrote:
> Function virTypedParamsAddULLong use realloc to gain memory,
> and doesn't free it when failed. so we need free eventParams to
> prevent a memory leak.
> 
> Signed-off-by: Xu Yandong <xuyandong2@huawei.com>
> ---
>   src/qemu/qemu_cgroup.c | 5 ++++-
>   1 file changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/src/qemu/qemu_cgroup.c b/src/qemu/qemu_cgroup.c
> index ecd96efb0a..bc498e4b10 100644
> --- a/src/qemu/qemu_cgroup.c
> +++ b/src/qemu/qemu_cgroup.c
> @@ -869,8 +869,11 @@ qemuSetupCpuCgroup(virDomainObjPtr vm)
>               if (virTypedParamsAddULLong(&eventParams, &eventNparams,
>                                           &eventMaxparams,
>                                           VIR_DOMAIN_TUNABLE_CPU_CPU_SHARES,
> -                                        val) < 0)
> +                                        val) < 0) {
> +                if (eventParams)

This check seems needless.

> +                    virTypedParamsFree(eventParams, eventNparams);
>                   return -1;
> +            }
>   
>               event = virDomainEventTunableNewFromObj(vm, eventParams, eventNparams);
>           }
> 


Have you actually seen a leak here or was this just found via code 
investigation?

Because the only way that virTypedParamsAddULLong() can fail is if 
VIR_RESIZE_N() called inside it fails at which point it doesn't allocate 
any new memory.

Michal

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list