[Libvirt-cim] [PATCH 15/19] Coverity: Resolve REVERSE_INULL - lifecycle_thread_native()

John Ferlan jferlan at redhat.com
Thu May 16 14:57:50 UTC 2013


602             csi_thread_data_t *thread = (csi_thread_data_t *) params;

(1) Event alias:
    Assigning: "args" = "thread->args".

603             struct ind_args *args = thread->args;

(2) Event deref_ptr:
    Directly dereferencing pointer "args".

...
(3) Event check_after_deref:
    Null-checking "thread->args" suggests that it may be null, but it
    has already been dereferenced on all paths leading to the check.

728             if (thread->args != NULL) {
729                     stdi_free_ind_args(&thread->args);
730             }

Resolve by changing the initialization to only set 'args', 'context', and
'prefix' if thread->args is not NULL.  Each is initialized to NULL so the
if prefix == NULL is still valid
---
 src/Virt_ComputerSystemIndication.c | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/src/Virt_ComputerSystemIndication.c b/src/Virt_ComputerSystemIndication.c
index 1ae8193..04e4d89 100644
--- a/src/Virt_ComputerSystemIndication.c
+++ b/src/Virt_ComputerSystemIndication.c
@@ -600,9 +600,9 @@ static CMPI_THREAD_RETURN lifecycle_thread_native(void *params)
 {
         CU_DEBUG("Entering libvirtc-cim native CSI thread.");
         csi_thread_data_t *thread = (csi_thread_data_t *) params;
-        struct ind_args *args = thread->args;
-        CMPIContext *context = args->context;
-        char *prefix = class_prefix_name(args->classname);
+        struct ind_args *args = NULL;
+        CMPIContext *context = NULL;
+        char *prefix = NULL;
         virConnectPtr conn;
         CMPIStatus s;
         int retry_time = FAIL_WAIT_TIME;
@@ -614,6 +614,11 @@ static CMPI_THREAD_RETURN lifecycle_thread_native(void *params)
         virDomainPtr *tmp_list = NULL;
         int CBAttached = 0;
 
+        if (thread->args != NULL) {
+                args = thread->args;
+                context = args->context;
+                prefix = class_prefix_name(args->classname);
+        }
         if (prefix == NULL) {
                 goto init_out;
         }
-- 
1.8.1.4




More information about the Libvirt-cim mailing list