[libvirt] [PATCH] virscsi: Introduce virSCSIDeviceUsedByInfoFree

John Ferlan jferlan at redhat.com
Fri Mar 7 16:13:39 UTC 2014



On 03/07/2014 10:37 AM, Ján Tomko wrote:
> On 03/07/2014 03:55 PM, John Ferlan wrote:
>> This resolves a Coverity RESOURCE_LEAK issue introduced by commit
>> id 'de6fa535' where the virSCSIDeviceSetUsedBy() didn't VIR_FREE
>> the 'copy' or possibly VIR_STRDUP()'d values.
>>
>> Signed-off-by: John Ferlan <jferlan at redhat.com>
>> ---
>>  src/util/virscsi.c | 26 +++++++++++++++-----------
>>  1 file changed, 15 insertions(+), 11 deletions(-)
>>
> 
>> @@ -296,10 +301,11 @@ virSCSIDeviceSetUsedBy(virSCSIDevicePtr dev,
>>      virUsedByInfoPtr copy;
>>      if (VIR_ALLOC(copy) < 0)
>>          return -1;
>> -    if (VIR_STRDUP(copy->drvname, drvname) < 0)
>> -        return -1;
>> -    if (VIR_STRDUP(copy->domname, domname) < 0)
>> +    if (VIR_STRDUP(copy->drvname, drvname) < 0 ||
>> +        VIR_STRDUP(copy->domname, domname) < 0) {
> 
>> +        virSCSIDeviceUsedByInfoFree(copy);
>>          return -1;
> 
> These two commands would look better in an error label
> 
>> +    }
>>  
>>      return VIR_APPEND_ELEMENT(dev->used_by, dev->n_used_by, copy);
> 
> and copy should be freed even if VIR_APPEND_ELEMENT fails.
> 
> ACK with that fixed.
> 
> Jan
> 

Ah - right... thanks. I had myopia of the first degree only :-)

Consider the following squashed in:

diff --git a/src/util/virscsi.c b/src/util/virscsi.c
index 66e3161..802f515 100644
--- a/src/util/virscsi.c
+++ b/src/util/virscsi.c
@@ -302,12 +302,17 @@ virSCSIDeviceSetUsedBy(virSCSIDevicePtr dev,
     if (VIR_ALLOC(copy) < 0)
         return -1;
     if (VIR_STRDUP(copy->drvname, drvname) < 0 ||
-        VIR_STRDUP(copy->domname, domname) < 0) {
-        virSCSIDeviceUsedByInfoFree(copy);
-        return -1;
-    }
+        VIR_STRDUP(copy->domname, domname) < 0)
+        goto cleanup;
+
+    if (VIR_APPEND_ELEMENT(dev->used_by, dev->n_used_by, copy) < 0)
+        goto cleanup;

-    return VIR_APPEND_ELEMENT(dev->used_by, dev->n_used_by, copy);
+    return 0;
+
+cleanup:
+    virSCSIDeviceUsedByInfoFree(copy);
+    return -1;
 }

 bool


John




More information about the libvir-list mailing list