[Libvirt-cim] [PATCH] VSMS: fv_vssd_to_domain() resolve Coverity error

John Ferlan jferlan at redhat.com
Tue Nov 12 23:29:38 UTC 2013


Coverity discovered that the free(domain->os_info.fv.arch) and then
usage later on during get_default_machine() and get_default_emulator()
calls could result in using free()'d memory.

If the 'cu_get_str_prop() failed or capsinfo == NULL, then the fv.arch
wouldn't necessarily be strdup()'d.

Passing a NULL os_info.fv_arch into the get*() API's is fine since
they'll call findDomainInfo() which can handle a NULL arch value.

Also added an initialization of val just to be safe.  I don't think it's
necessary though.

---
NOTE:

I found this during a Coverity run applying the endianness patches. For
some reason Coverity "woke up" and saw this even though it hasn't found
this issue in a couple months of runs since the changes to this module
were made.  See commit id '117dabb9'.


 src/Virt_VirtualSystemManagementService.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/Virt_VirtualSystemManagementService.c b/src/Virt_VirtualSystemManagementService.c
index d51f230..9f8b5b9 100644
--- a/src/Virt_VirtualSystemManagementService.c
+++ b/src/Virt_VirtualSystemManagementService.c
@@ -464,7 +464,7 @@ static int fv_vssd_to_domain(CMPIInstance *inst,
 {
         int ret = 1;
         int retr;
-        const char *val;
+        const char *val = NULL;
         const char *domtype = NULL;
         const char *ostype = "hvm";
         struct capabilities *capsinfo = NULL;
@@ -494,6 +494,7 @@ static int fv_vssd_to_domain(CMPIInstance *inst,
         }
 
         free(domain->os_info.fv.arch);
+        domain->os_info.fv.arch = NULL;
         retr = cu_get_str_prop(inst, "Arch", &val);
         if (retr != CMPI_RC_OK) {
                 if (capsinfo != NULL) { /* set default */
-- 
1.8.3.1




More information about the Libvirt-cim mailing list