You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
104 lines
4.3 KiB
104 lines
4.3 KiB
From f9fc5821db08f04ecc92aabb3c87ce2869e78fb2 Mon Sep 17 00:00:00 2001 |
|
From: John Ferlan <jferlan@redhat.com> |
|
Date: Tue, 21 Jan 2014 14:42:24 -0500 |
|
Subject: [PATCH 40/60] VSMS: Coverity cleanups |
|
|
|
A new version of Coverity found a number of issues: |
|
|
|
parse_ip_address(): FORWARD_NULL |
|
- Benign issue regarding how 'tmp_ip' was compared against NULL for |
|
the IPv6 processing and then used blindly later when strdup()'ing |
|
into *ip. Rather than use NULL check, compare against return of 1 |
|
or more which indicates that something is there |
|
|
|
update_system_settings(): RESOURCE_LEAK |
|
- The 'uuid' value was being leaked if strdup()'d. Also rather than |
|
strdup()'g and strdup()'d value and risking failure, just assign the |
|
initially strdup()'d value and reinitialize uuid to NULL |
|
|
|
fv_vssd_to_domain(): USE_AFTER_FREE |
|
- The domain->os_info.fv.arch is free()'d only to be potentially |
|
strdup()'d after processing the 'cu_get_str_prop()' for "Arch". |
|
The complaint was that it was possible to not strdup() a new value |
|
and thus possible to pass a free()'d value to get_default_machine(). |
|
Passing a NULL is not an issue as that is checked. |
|
|
|
Additionally found by inspection, 'val' was not initialized to NULL, |
|
so the setting of os_info.fv.arch may not be what was expected. Also, |
|
after processing "Arch" it was not reinitialized to NULL so its |
|
contents could potentially have been saved in os_info.fv.machine. |
|
|
|
Signed-off-by: John Ferlan <jferlan@redhat.com> |
|
--- |
|
src/Virt_VirtualSystemManagementService.c | 14 ++++++++++---- |
|
1 file changed, 10 insertions(+), 4 deletions(-) |
|
|
|
diff --git a/src/Virt_VirtualSystemManagementService.c b/src/Virt_VirtualSystemManagementService.c |
|
index 5c7238f..83e5c53 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 */ |
|
@@ -506,6 +507,8 @@ static int fv_vssd_to_domain(CMPIInstance *inst, |
|
domain->os_info.fv.arch = strdup(val); |
|
|
|
free(domain->os_info.fv.machine); |
|
+ domain->os_info.fv.machine = NULL; |
|
+ val = NULL; |
|
retr = cu_get_str_prop(inst, "Machine", &val); |
|
if (retr != CMPI_RC_OK) { |
|
if (capsinfo != NULL && domtype != NULL) { /* set default */ |
|
@@ -1415,7 +1418,7 @@ static int parse_ip_address(const char *id, |
|
if (strstr(id, "[") != NULL) { |
|
/* its an ipv6 address */ |
|
ret = sscanf(id, "%a[^]]]:%as", &tmp_ip, &tmp_port); |
|
- if (tmp_ip != NULL) { |
|
+ if (ret >= 1) { |
|
tmp_ip = realloc(tmp_ip, strlen(tmp_ip) + 2); |
|
if (tmp_ip == NULL) { |
|
ret = 0; |
|
@@ -2755,7 +2758,7 @@ static CMPIStatus update_system_settings(const CMPIContext *context, |
|
virDomainPtr dom = NULL; |
|
struct domain *dominfo = NULL; |
|
char *xml = NULL; |
|
- const char *uuid = NULL; |
|
+ char *uuid = NULL; |
|
|
|
CU_DEBUG("Enter update_system_settings"); |
|
ret = cu_get_str_prop(vssd, "VirtualSystemIdentifier", &name); |
|
@@ -2798,7 +2801,9 @@ static CMPIStatus update_system_settings(const CMPIContext *context, |
|
} |
|
|
|
if ((dominfo->uuid == NULL) || (STREQ(dominfo->uuid, ""))) { |
|
- dominfo->uuid = strdup(uuid); |
|
+ free(dominfo->uuid); |
|
+ dominfo->uuid = uuid; |
|
+ uuid = NULL; |
|
} else if (!STREQ(uuid, dominfo->uuid)) { |
|
cu_statusf(_BROKER, &s, |
|
CMPI_RC_ERR_FAILED, |
|
@@ -2829,6 +2834,7 @@ static CMPIStatus update_system_settings(const CMPIContext *context, |
|
} |
|
|
|
out: |
|
+ free(uuid); |
|
free(xml); |
|
virDomainFree(dom); |
|
virConnectClose(conn); |
|
-- |
|
2.1.0
|
|
|