From: Eduardo Lima (Etrunko) <eblima(a)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(a)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