[libvirt] [PATCH] xenFormatXLDomainDisks: avoid double free on OOM testing

Wim Ten Have posted 1 patch 7 years ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/libvirt tags/patchew/20170327202019.18901-2-wim.ten.have@oracle.com
src/xenconfig/xen_xl.c | 15 +++++++++------
1 file changed, 9 insertions(+), 6 deletions(-)
[libvirt] [PATCH] xenFormatXLDomainDisks: avoid double free on OOM testing
Posted by Wim Ten Have 7 years ago
From: Wim ten Have <wim.ten.have@oracle.com>

Fix xlconfigtest runs build for --enable-test-oom on
        Xen XL-2-XML Parse  new-disk

    #0  0x00007ffff3bd791f in raise () from /lib64/libc.so.6
    #1  0x00007ffff3bd951a in abort () from /lib64/libc.so.6
    #2  0x00007ffff3c1b200 in __libc_message () from /lib64/libc.so.6
    #3  0x00007ffff3c2488a in _int_free () from /lib64/libc.so.6
    #4  0x00007ffff3c282bc in free () from /lib64/libc.so.6
    #5  0x00007ffff7864fcb in virFree (ptrptr=ptrptr@entry=0x7fffffffd868) at util/viralloc.c:582
    #6  0x00007ffff78776e5 in virConfFreeValue (val=<optimized out>) at util/virconf.c:178
==> #7  0x0000000000425759 in xenFormatXLDomainDisks (def=0x7fffffffd8c0, def=0x7fffffffd8c0, conf=0x658220)
        at xenconfig/xen_xl.c:1159
    #8  xenFormatXL (def=def@entry=0x66ec20, conn=conn@entry=0x668cf0) at xenconfig/xen_xl.c:1558
    #9  0x000000000040ea1d in testCompareParseXML (replaceVars=<optimized out>,
        xml=0x65f5e0 "/home/wtenhave/WORK/libvirt/history/libvirt/tests/xlconfigdata/test-fullvirt-ovmf.xml",
        xlcfg=0x65f6b0 "/home/wtenhave/WORK/libvirt/history/libvirt/tests/xlconfigdata/test-fullvirt-ovmf.cfg")
        at xlconfigtest.c:105
    #10 testCompareHelper (data=<optimized out>) at xlconfigtest.c:205
    #11 0x000000000041079a in virTestRun (title=title@entry=0x431cf0 "Xen XL-2-XML Parse  fullvirt-ovmf",
        body=body@entry=0x40e720 <testCompareHelper>, data=data@entry=0x7fffffffda50) at testutils.c:247
    #12 0x000000000040ebc2 in mymain () at xlconfigtest.c:256
    #13 0x0000000000411070 in virTestMain (argc=1, argv=0x7fffffffdc08, func=0x40f2c0 <mymain>) at testutils.c:992
    #14 0x00007ffff3bc2401 in __libc_start_main () from /lib64/libc.so.6
    #15 0x000000000040e5da in _start ()

symmetry seems missing its sibbling coded functionality
demonstrated under functions;
        xenFormatXLUSBController()
        xenFormatXLUSB()
        xenFormatXLDomainChannels()
        xenFormatXMDisks

Signed-off-by: Wim ten Have <wim.ten.have@oracle.com>
---
 src/xenconfig/xen_xl.c | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/src/xenconfig/xen_xl.c b/src/xenconfig/xen_xl.c
index 74f68b3..43ecf41 100644
--- a/src/xenconfig/xen_xl.c
+++ b/src/xenconfig/xen_xl.c
@@ -1132,7 +1132,6 @@ xenFormatXLDisk(virConfValuePtr list, virDomainDiskDefPtr disk)
 static int
 xenFormatXLDomainDisks(virConfPtr conf, virDomainDefPtr def)
 {
-    int ret = -1;
     virConfValuePtr diskVal;
     size_t i;
 
@@ -1150,15 +1149,19 @@ xenFormatXLDomainDisks(virConfPtr conf, virDomainDefPtr def)
             goto cleanup;
     }
 
-    if (diskVal->list != NULL)
-        if (virConfSetValue(conf, "disk", diskVal) == 0)
-            diskVal = NULL;
+    if (diskVal->list != NULL) {
+        int ret = virConfSetValue(conf, "disk", diskVal);
+        diskVal = NULL;
+        if (ret < 0)
+            return -1;
+    }
+    VIR_FREE(diskVal);
 
-    ret = 0;
+    return 0;
 
  cleanup:
     virConfFreeValue(diskVal);
-    return ret;
+    return -1;
 }
 
 
-- 
2.9.3

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH] xenFormatXLDomainDisks: avoid double free on OOM testing
Posted by Jim Fehlig 7 years ago
Wim Ten Have wrote:
> From: Wim ten Have <wim.ten.have@oracle.com>
> 
> Fix xlconfigtest runs build for --enable-test-oom on
>         Xen XL-2-XML Parse  new-disk
> 
>     #0  0x00007ffff3bd791f in raise () from /lib64/libc.so.6
>     #1  0x00007ffff3bd951a in abort () from /lib64/libc.so.6
>     #2  0x00007ffff3c1b200 in __libc_message () from /lib64/libc.so.6
>     #3  0x00007ffff3c2488a in _int_free () from /lib64/libc.so.6
>     #4  0x00007ffff3c282bc in free () from /lib64/libc.so.6
>     #5  0x00007ffff7864fcb in virFree (ptrptr=ptrptr@entry=0x7fffffffd868) at util/viralloc.c:582
>     #6  0x00007ffff78776e5 in virConfFreeValue (val=<optimized out>) at util/virconf.c:178
> ==> #7  0x0000000000425759 in xenFormatXLDomainDisks (def=0x7fffffffd8c0, def=0x7fffffffd8c0, conf=0x658220)
>         at xenconfig/xen_xl.c:1159
>     #8  xenFormatXL (def=def@entry=0x66ec20, conn=conn@entry=0x668cf0) at xenconfig/xen_xl.c:1558
>     #9  0x000000000040ea1d in testCompareParseXML (replaceVars=<optimized out>,
>         xml=0x65f5e0 "/home/wtenhave/WORK/libvirt/history/libvirt/tests/xlconfigdata/test-fullvirt-ovmf.xml",
>         xlcfg=0x65f6b0 "/home/wtenhave/WORK/libvirt/history/libvirt/tests/xlconfigdata/test-fullvirt-ovmf.cfg")
>         at xlconfigtest.c:105
>     #10 testCompareHelper (data=<optimized out>) at xlconfigtest.c:205
>     #11 0x000000000041079a in virTestRun (title=title@entry=0x431cf0 "Xen XL-2-XML Parse  fullvirt-ovmf",
>         body=body@entry=0x40e720 <testCompareHelper>, data=data@entry=0x7fffffffda50) at testutils.c:247
>     #12 0x000000000040ebc2 in mymain () at xlconfigtest.c:256
>     #13 0x0000000000411070 in virTestMain (argc=1, argv=0x7fffffffdc08, func=0x40f2c0 <mymain>) at testutils.c:992
>     #14 0x00007ffff3bc2401 in __libc_start_main () from /lib64/libc.so.6
>     #15 0x000000000040e5da in _start ()
> 
> symmetry seems missing its sibbling coded functionality
> demonstrated under functions;
>         xenFormatXLUSBController()
>         xenFormatXLUSB()
>         xenFormatXLDomainChannels()
>         xenFormatXMDisks

Right. This code should follow the pattern used in similar functions. ACK and
pushed. Thanks for your contributions!

Regards,
Jim

> 
> Signed-off-by: Wim ten Have <wim.ten.have@oracle.com>
> ---
>  src/xenconfig/xen_xl.c | 15 +++++++++------
>  1 file changed, 9 insertions(+), 6 deletions(-)
> 
> diff --git a/src/xenconfig/xen_xl.c b/src/xenconfig/xen_xl.c
> index 74f68b3..43ecf41 100644
> --- a/src/xenconfig/xen_xl.c
> +++ b/src/xenconfig/xen_xl.c
> @@ -1132,7 +1132,6 @@ xenFormatXLDisk(virConfValuePtr list, virDomainDiskDefPtr disk)
>  static int
>  xenFormatXLDomainDisks(virConfPtr conf, virDomainDefPtr def)
>  {
> -    int ret = -1;
>      virConfValuePtr diskVal;
>      size_t i;
>  
> @@ -1150,15 +1149,19 @@ xenFormatXLDomainDisks(virConfPtr conf, virDomainDefPtr def)
>              goto cleanup;
>      }
>  
> -    if (diskVal->list != NULL)
> -        if (virConfSetValue(conf, "disk", diskVal) == 0)
> -            diskVal = NULL;
> +    if (diskVal->list != NULL) {
> +        int ret = virConfSetValue(conf, "disk", diskVal);
> +        diskVal = NULL;
> +        if (ret < 0)
> +            return -1;
> +    }
> +    VIR_FREE(diskVal);
>  
> -    ret = 0;
> +    return 0;
>  
>   cleanup:
>      virConfFreeValue(diskVal);
> -    return ret;
> +    return -1;
>  }
>  
>  

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