[Libvirt-cim] [PATCH 6/8] Fix misuse of signed variables

Eduardo Lima (Etrunko) eblima at linux.vnet.ibm.com
Thu Nov 3 17:48:34 UTC 2011


From: Eduardo Lima (Etrunko) <eblima at br.ibm.com>

As revealed by Coverity scan report:

https://bugzilla.redhat.com/show_bug.cgi?id=728245#c8
https://bugzilla.redhat.com/attachment.cgi?id=530435

Error: NEGATIVE_RETURNS:
infostore.c:183: negative_return_fn: Function "open(filename, 66, 384)" returns
                 a negative number.
infostore.c:183: var_assign: Assigning: signed variable "isc->fd" = "open".
infostore.c:214: negative_returns: "isc->fd" is passed to a parameter that
                 cannot be negative.
infostore.c:53: neg_sink_parm_call: Passing "ctx->fd" to "close", which cannot
                accept a negative.

Error: NEGATIVE_RETURNS:
Virt_ComputerSystemIndication.c:518: negative_return_fn: Function
                                     "platform_from_class(args->classname)"
                                     returns a negative number.
Virt_ComputerSystemIndication.c:503: return_negative_constant: Explicitly
                                     returning negative value "-1".
Virt_ComputerSystemIndication.c:518: var_assign: Assigning: signed variable
                                     "platform" = "platform_from_class".
Virt_ComputerSystemIndication.c:539: negative_returns: Using variable "platform"
                                     as an index to array "active_filters".

Error: NEGATIVE_RETURNS:
Virt_ComputerSystemIndication.c:518: negative_return_fn: Function
                                     "platform_from_class(args->classname)"
                                     returns a negative number.
Virt_ComputerSystemIndication.c:503: return_negative_constant: Explicitly
                                     returning negative value "-1".
Virt_ComputerSystemIndication.c:518: var_assign: Assigning: signed variable
                                     "platform" = "platform_from_class".
Virt_ComputerSystemIndication.c:596: negative_returns: Using variable "platform"
                                     as an index to array "thread_id".

Error: NEGATIVE_RETURNS:
Virt_VSMigrationService.c:512: negative_return_fn: Function "mkstemp(filename)"
                               returns a negative number.
Virt_VSMigrationService.c:512: var_assign: Assigning: signed variable
                               "fd" = "mkstemp".
Virt_VSMigrationService.c:547: negative_returns: "fd" is passed to a parameter
                               that cannot be negative.

Signed-off-by: Eduardo Lima (Etrunko) <eblima at br.ibm.com>
---
 libxkutil/infostore.c               |    4 +++-
 src/Virt_ComputerSystemIndication.c |   12 +++++++++---
 src/Virt_VSMigrationService.c       |    3 ++-
 3 files changed, 14 insertions(+), 5 deletions(-)

diff --git a/libxkutil/infostore.c b/libxkutil/infostore.c
index 716dedd..dd1e38c 100644
--- a/libxkutil/infostore.c
+++ b/libxkutil/infostore.c
@@ -50,7 +50,9 @@ static void infostore_cleanup_ctx(struct infostore_ctx *ctx)
 {
         xmlXPathFreeContext(ctx->xpathctx);
         xmlFreeDoc(ctx->doc);
-        close(ctx->fd);
+
+        if (ctx->fd >= 0)
+                close(ctx->fd);
 
         free(ctx);
 }
diff --git a/src/Virt_ComputerSystemIndication.c b/src/Virt_ComputerSystemIndication.c
index 337f20a..9b3b80b 100644
--- a/src/Virt_ComputerSystemIndication.c
+++ b/src/Virt_ComputerSystemIndication.c
@@ -518,11 +518,14 @@ static CMPI_THREAD_RETURN lifecycle_thread(void *params)
         char *prefix = class_prefix_name(args->classname);
         int platform = platform_from_class(args->classname);
 
+        if (prefix == NULL || platform == -1)
+                goto init_out;
+
         conn = connect_by_classname(_BROKER, args->classname, &s);
         if (conn == NULL) {
                 CU_DEBUG("Unable to start lifecycle thread: "
                          "Failed to connect (cn: %s)", args->classname);
-                goto out;
+                goto conn_out;
         }
 
         pthread_mutex_lock(&lifecycle_mutex);
@@ -591,16 +594,19 @@ static CMPI_THREAD_RETURN lifecycle_thread(void *params)
                 }
         }
 
- out:
         CU_DEBUG("Exiting CSI event loop (%s)", prefix);
 
         thread_id[platform] = 0;
 
         pthread_mutex_unlock(&lifecycle_mutex);
         stdi_free_ind_args(&args);
-        free(prefix);
+
+ conn_out:
         virConnectClose(conn);
 
+ init_out:
+        free(prefix);
+
         return NULL;
 }
 
diff --git a/src/Virt_VSMigrationService.c b/src/Virt_VSMigrationService.c
index 414feda..be9bb7c 100644
--- a/src/Virt_VSMigrationService.c
+++ b/src/Virt_VSMigrationService.c
@@ -544,7 +544,8 @@ static char *write_params(CMPIArray *array)
         if (file != NULL)
                 fclose(file);
 
-        close(fd);
+        if (fd >= 0)
+                close(fd);
 
         return filename;
 }
-- 
1.7.4.4




More information about the Libvirt-cim mailing list