[libvirt] [PATCH] conf: resctrl object is not properly handled

Daniel Henrique Barboza danielhb413 at gmail.com
Tue Aug 20 13:18:10 UTC 2019



On 8/20/19 7:06 AM, Wang Huaqiang wrote:
> resctrl object stored in def->resctrls is shared by cachetune and
> memorytune. The domain xml configuration is parsed firstly for
> cachetune then memorytune, and the resctrl object will not be created
> in parsing settings for memorytune once it found sharing exists.
>
> But resctrl is improperly freed when sharing happens.
>
> Signed-off-by: Wang Huaqiang <huaqiang.wang at intel.com>
> ---
>   src/conf/domain_conf.c                    | 12 +++++-------
>   tests/genericxml2xmlindata/memorytune.xml |  4 ++++
>   2 files changed, 9 insertions(+), 7 deletions(-)
>
> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
> index 617ccac..604e006 100644
> --- a/src/conf/domain_conf.c
> +++ b/src/conf/domain_conf.c
> @@ -19590,7 +19590,6 @@ virDomainMemorytuneDefParse(virDomainDefPtr def,
>       VIR_AUTOUNREF(virResctrlAllocPtr) alloc = NULL;
>       ssize_t i = 0;
>       int n;
> -    int ret = -1;
>   
>       ctxt->node = node;
>   
> @@ -19632,14 +19631,13 @@ virDomainMemorytuneDefParse(virDomainDefPtr def,
>           if (!(resctrl = virDomainResctrlNew(node, alloc, vcpus, flags)))
>               return -1;
>   
> -        if (VIR_APPEND_ELEMENT(def->resctrls, def->nresctrls, resctrl) < 0)
> -            goto cleanup;
> +        if (VIR_APPEND_ELEMENT(def->resctrls, def->nresctrls, resctrl) < 0) {
> +            virDomainResctrlDefFree(resctrl);
> +            return -1;
> +        }
>       }
>   
> -    ret = 0;
> - cleanup:
> -    virDomainResctrlDefFree(resctrl);
> -    return ret;
> +    return 0;
>   }

This could also be fixed by putting the free into a conditional:

if (resctrl)
     virDomainRescrtlDefFree(resctrl);


But I appreciate one less 'goto' jump to worry about.


Reviewed-by: Daniel Henrique Barboza <danielhb413 at gmail.com>

>   
>   
> diff --git a/tests/genericxml2xmlindata/memorytune.xml b/tests/genericxml2xmlindata/memorytune.xml
> index ea03e22..7486b54 100644
> --- a/tests/genericxml2xmlindata/memorytune.xml
> +++ b/tests/genericxml2xmlindata/memorytune.xml
> @@ -5,6 +5,10 @@
>     <currentMemory unit='KiB'>219136</currentMemory>
>     <vcpu placement='static'>4</vcpu>
>     <cputune>
> +    <cachetune vcpus='0-1'>
> +      <cache id='0' level='3' type='both' size='768' unit='KiB'/>
> +      <cache id='1' level='3' type='both' size='768' unit='KiB'/>
> +    </cachetune>
>       <memorytune vcpus='0-1'>
>         <node id='0' bandwidth='20'/>
>         <node id='1' bandwidth='30'/>




More information about the libvir-list mailing list