]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
libxl: Fix Coverity warning
authorJim Fehlig <jfehlig@suse.com>
Wed, 4 Sep 2013 20:27:20 +0000 (14:27 -0600)
committerJim Fehlig <jfehlig@suse.com>
Wed, 4 Sep 2013 21:32:24 +0000 (15:32 -0600)
John Ferlan reported the following Coverity warning:

In libxlDomainCoreDump() Coverity has noted a FORWARD_NULL reference:

2004      if ((flags & VIR_DUMP_CRASH) && !vm->persistent) {
2005          virDomainObjListRemove(driver->domains, vm);

(20) Event assign_zero:  Assigning: "vm" = "NULL".
Also see events:  [var_deref_model]

2006          vm = NULL;
2007      }
2008
2009      ret = 0;
2010
2011  cleanup_unpause:

(21) Event var_deref_model:  Passing null pointer "vm" to function
     "virDomainObjIsActive(virDomainObjPtr)", which dereferences it. [details]
Also see events:  [assign_zero]

2012      if (virDomainObjIsActive(vm) && paused) {
2013          if (libxl_domain_unpause(priv->ctx, dom->id) != 0) {
2014              virReportError(VIR_ERR_INTERNAL_ERROR,

Removing the vm from domain obj list and setting it to NULL can be
done in the previous 'if (flags & VIR_DUMP_CRASH)' conditional.  Fix
the Coverity warning by ensuring vm is not NULL before testing if it
is still active.

src/libxl/libxl_driver.c

index 69b992b93875ffb45581dfa8df924e59a8cb1a8d..426167cb8c0119de22820e455816e50391367a6f 100644 (file)
@@ -1999,17 +1999,16 @@ libxlDomainCoreDump(virDomainPtr dom, const char *to, unsigned int flags)
 
         event = virDomainEventNewFromObj(vm, VIR_DOMAIN_EVENT_STOPPED,
                                          VIR_DOMAIN_EVENT_STOPPED_CRASHED);
-    }
-
-    if ((flags & VIR_DUMP_CRASH) && !vm->persistent) {
-        virDomainObjListRemove(driver->domains, vm);
-        vm = NULL;
+        if (!vm->persistent) {
+            virDomainObjListRemove(driver->domains, vm);
+            vm = NULL;
+        }
     }
 
     ret = 0;
 
 cleanup_unpause:
-    if (virDomainObjIsActive(vm) && paused) {
+    if (vm && virDomainObjIsActive(vm) && paused) {
         if (libxl_domain_unpause(priv->ctx, dom->id) != 0) {
             virReportError(VIR_ERR_INTERNAL_ERROR,
                            _("After dumping core, failed to resume domain '%d' with"