
From: Eduardo Lima (Etrunko) <eblima@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: FORWARD_NULL: Virt_DevicePool.c:999: var_compare_op: Comparing "netnames" to null implies that "netnames" might be null. Virt_DevicePool.c:1019: var_deref_op: Dereferencing null variable "netnames". Error: FORWARD_NULL: Virt_ComputerSystemIndication.c:259: var_compare_op: Comparing "ind" to null implies that "ind" might be null. Virt_ComputerSystemIndication.c:267: var_deref_op: Dereferencing null variable "ind". Error: FORWARD_NULL: Virt_ResourcePoolConfigurationService.c:759: var_compare_op: Comparing "op" to null implies that "op" might be null. Virt_ResourcePoolConfigurationService.c:779: var_deref_op: Dereferencing null variable "op". Error: FORWARD_NULL: Virt_ResourcePoolConfigurationService.c:1028: var_compare_op: Comparing "res" to null implies that "res" might be null. Virt_ResourcePoolConfigurationService.c:1035: var_deref_op: Dereferencing null variable "res". Error: FORWARD_NULL: Virt_VSMigrationService.c:766: var_compare_op: Comparing "ref" to null implies that "ref" might be null. Virt_VSMigrationService.c:796: var_deref_op: Dereferencing null variable "ref". Error: FORWARD_NULL: Virt_VirtualSystemManagementService.c:1274: var_compare_op: Comparing "op" to null implies that "op" might be null. Virt_VirtualSystemManagementService.c:1292: var_deref_op: Dereferencing null variable "op". Error: FORWARD_NULL: Virt_VirtualSystemSnapshotService.c:353: var_compare_op: Comparing "ctx" to null implies that "ctx" might be null. Virt_VirtualSystemSnapshotService.c:376: var_deref_model: Passing null variable "ctx" to function "snap_job_free", which dereferences it. Virt_VirtualSystemSnapshotService.c:66: deref_parm: Directly dereferencing parameter "ctx". Error: REVERSE_INULL: Virt_ResourcePoolConfigurationService.c:173: deref_ptr: Directly dereferencing pointer "path_list". Virt_ResourcePoolConfigurationService.c:174: check_after_deref: Dereferencing "path_list" before a null check. Signed-off-by: Eduardo Lima (Etrunko) <eblima@br.ibm.com> --- src/Virt_ComputerSystemIndication.c | 1 + src/Virt_DevicePool.c | 8 +++++--- src/Virt_ResourcePoolConfigurationService.c | 6 +++--- src/Virt_VSMigrationService.c | 9 +++++++-- src/Virt_VirtualSystemManagementService.c | 2 +- src/Virt_VirtualSystemSnapshotService.c | 3 +++ 6 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/Virt_ComputerSystemIndication.c b/src/Virt_ComputerSystemIndication.c index c057a0c..337f20a 100644 --- a/src/Virt_ComputerSystemIndication.c +++ b/src/Virt_ComputerSystemIndication.c @@ -262,6 +262,7 @@ static bool _do_indication(const CMPIBroker *broker, prefix, ind_type_name); ret = false; + goto out; } ind_op = CMGetObjectPath(ind, &s); diff --git a/src/Virt_DevicePool.c b/src/Virt_DevicePool.c index 7112a9d..a41a378 100644 --- a/src/Virt_DevicePool.c +++ b/src/Virt_DevicePool.c @@ -1015,9 +1015,11 @@ static CMPIStatus netpool_instance(virConnectPtr conn, } out: - for (i = 0; i < nets; i++) - free(netnames[i]); - free(netnames); + if (netnames != NULL) { + for (i = 0; i < nets; i++) + free(netnames[i]); + free(netnames); + } return s; } diff --git a/src/Virt_ResourcePoolConfigurationService.c b/src/Virt_ResourcePoolConfigurationService.c index 3908c9c..7e76032 100644 --- a/src/Virt_ResourcePoolConfigurationService.c +++ b/src/Virt_ResourcePoolConfigurationService.c @@ -171,7 +171,7 @@ static char *get_dev_paths(CMPIInstance *inst, return "Unable to get DevicePaths array count"; *path_list = calloc(ct, sizeof(char *)); - if (path_list == NULL) + if (*path_list == NULL) return "Failed to alloc space for device paths"; *count = ct; @@ -775,7 +775,7 @@ static const char *rasd_to_res(CMPIInstance *inst, msg = "This function does not support this resource type"; out: - if (msg) + if (msg && op) CU_DEBUG("rasd_to_res(%s): %s", CLASSNAME(op), msg); return msg; @@ -1025,7 +1025,7 @@ static CMPIStatus delete_resource_in_pool(CMPIMethodMI *self, goto out; res = CMGetObjectPath(resource, &s); - if ((res == NULL) && (s.rc != CMPI_RC_OK)) { + if ((res == NULL) || (s.rc != CMPI_RC_OK)) { cu_statusf(_BROKER, &s, CMPI_RC_ERR_FAILED, "Unable to get ObjectPath of Resource instance"); diff --git a/src/Virt_VSMigrationService.c b/src/Virt_VSMigrationService.c index ee79a96..414feda 100644 --- a/src/Virt_VSMigrationService.c +++ b/src/Virt_VSMigrationService.c @@ -761,10 +761,15 @@ static bool raise_indication(const CMPIContext *context, /* This is a workaround for Pegasus, it loses its objectpath by CMGetObjectPath. So set it back. */ - inst->ft->setObjectPath((CMPIInstance *)inst, ref); + if (ref != NULL) + inst->ft->setObjectPath((CMPIInstance *)inst, ref); if ((ref == NULL) || (s.rc != CMPI_RC_OK)) { CU_DEBUG("Failed to get job reference"); + cu_statusf(_BROKER, &s, + CMPI_RC_ERR_FAILED, + "Failed to get job reference"); + goto out; } else { s = get_host_system_properties(&host, &ccname, @@ -798,7 +803,7 @@ static bool raise_indication(const CMPIContext *context, s = stdi_raise_indication(_BROKER, context, type, ns, ind); free(type); - + out: return s.rc == CMPI_RC_OK; } diff --git a/src/Virt_VirtualSystemManagementService.c b/src/Virt_VirtualSystemManagementService.c index 5edc65f..fa1e266 100644 --- a/src/Virt_VirtualSystemManagementService.c +++ b/src/Virt_VirtualSystemManagementService.c @@ -1526,7 +1526,7 @@ static const char *rasd_to_vdev(CMPIInstance *inst, else msg = _sysvirt_rasd_to_vdev(inst, dev, type, ns); out: - if (msg) + if (msg && op) CU_DEBUG("rasd_to_vdev(%s): %s", CLASSNAME(op), msg); return msg; diff --git a/src/Virt_VirtualSystemSnapshotService.c b/src/Virt_VirtualSystemSnapshotService.c index e7789cb..898fa57 100644 --- a/src/Virt_VirtualSystemSnapshotService.c +++ b/src/Virt_VirtualSystemSnapshotService.c @@ -63,6 +63,9 @@ struct snap_context { static void snap_job_free(struct snap_context *ctx) { + if (ctx == NULL) + return; + free(ctx->domain); free(ctx->save_path); free(ctx->ref_ns); -- 1.7.4.4