]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
conf: resctrl object is not properly handled
authorWang Huaqiang <huaqiang.wang@intel.com>
Tue, 20 Aug 2019 10:06:03 +0000 (18:06 +0800)
committerMichal Privoznik <mprivozn@redhat.com>
Tue, 20 Aug 2019 13:36:36 +0000 (15:36 +0200)
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@intel.com>
Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
src/conf/domain_conf.c
tests/genericxml2xmlindata/memorytune.xml

index 617ccac4a538f8ebefa346b858ce73688292aede..604e006dab3d5ca8133d4c886d0b34bc141df57d 100644 (file)
@@ -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;
 }
 
 
index ea03e22fc2b0efdf4c0574eebee5309d58be316e..7486b542c568208d3ee53d4303cec5a8d467d532 100644 (file)
@@ -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'/>