From daf27d4d82bd391f426f7b4d09df426df2b36755 Mon Sep 17 00:00:00 2001 From: John Ferlan Date: Thu, 4 Sep 2014 11:31:08 -0400 Subject: [PATCH] virsh: Resolve Coverity DEADCODE Since 0766783abbe8bbc9ea686c2c3149f4c0ac139e19 Coverity complains that the EDIT_FREE definition results in DEADCODE. As it turns out with the change to use the EDIT_FREE macro the call to vir*Free() wouldn't be necessary nor would it happen... Prior code to above commitid would : vir*Ptr foo = NULL; ... foo = vir*GetXMLDesc() ... vir*Free(foo); foo = vir*DefineXML() ... And thus the free was needed. With the change to use EDIT_FREE the same code changed to: vir*Ptr foo = NULL; vir*Ptr foo_edited = NULL; ... foo = vir*GetXMLDesc() ... if (foo_edited) vir*Free(foo_edited); foo_edited = vir*DefineXML() ... However, foo_edited could never be set in the code path - even with all the goto's since the only way for it to be set is if vir*DefineXML() succeeds in which case the code to allow a retry (and thus all the goto's) never leaves foo_edited set All error paths lead to "cleanup:" which causes both foo and foo_edited to call the respective vir*Free() routines if set. Signed-off-by: John Ferlan --- tools/virsh-domain.c | 5 ----- tools/virsh-edit.c | 9 --------- tools/virsh-interface.c | 3 --- tools/virsh-network.c | 3 --- tools/virsh-nwfilter.c | 3 --- tools/virsh-pool.c | 3 --- tools/virsh-snapshot.c | 3 --- 7 files changed, 29 deletions(-) diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c index 6aa8631a72..3169b45b05 100644 --- a/tools/virsh-domain.c +++ b/tools/virsh-domain.c @@ -4242,7 +4242,6 @@ cmdSaveImageEdit(vshControl *ctl, const vshCmd *cmd) ret = true; goto edit_cleanup; #define EDIT_DEFINE \ (virDomainSaveImageDefineXML(ctl->conn, file, doc_edited, define_flags) == 0) -#define EDIT_FREE /* */ #include "virsh-edit.c" vshPrint(ctl, _("State file %s edited.\n"), file); @@ -7400,7 +7399,6 @@ cmdMetadata(vshControl *ctl, const vshCmd *cmd) #define EDIT_DEFINE \ (virDomainSetMetadata(dom, VIR_DOMAIN_METADATA_ELEMENT, doc_edited, \ key, uri, flags) == 0) -#define EDIT_FREE /* nothing */ #include "virsh-edit.c" vshPrint("%s\n", _("Metadata modified")); @@ -10894,9 +10892,6 @@ cmdEdit(vshControl *ctl, const vshCmd *cmd) ret = true; goto edit_cleanup; #define EDIT_DEFINE \ (dom_edited = virDomainDefineXML(ctl->conn, doc_edited)) -#define EDIT_FREE \ - if (dom_edited) \ - virDomainFree(dom_edited); #include "virsh-edit.c" vshPrint(ctl, _("Domain %s XML configuration edited.\n"), diff --git a/tools/virsh-edit.c b/tools/virsh-edit.c index 5d35c55679..10298f68c8 100644 --- a/tools/virsh-edit.c +++ b/tools/virsh-edit.c @@ -40,9 +40,6 @@ * For example: * #define EDIT_DEFINE (dom_edited = virDomainDefineXML(ctl->conn, doc_edited)) * - * EDIT_FREE - statement which vir*Free()-s object defined by EDIT_DEFINE, e.g: - * #define EDIT_FREE if (dom_edited) virDomainFree(dom_edited); - * * Michal Privoznik */ @@ -58,10 +55,6 @@ # error Missing EDIT_DEFINE definition #endif -#ifndef EDIT_FREE -# error Missing EDIT_FREE definition -#endif - do { char *tmp = NULL; char *doc = NULL; @@ -116,7 +109,6 @@ do { } /* Everything checks out, so redefine the object. */ - EDIT_FREE; if (!msg && !(EDIT_DEFINE)) { msg = _("Failed."); } @@ -162,4 +154,3 @@ do { #undef EDIT_GET_XML #undef EDIT_NOT_CHANGED #undef EDIT_DEFINE -#undef EDIT_FREE diff --git a/tools/virsh-interface.c b/tools/virsh-interface.c index d4ec8540e0..6cacaf1071 100644 --- a/tools/virsh-interface.c +++ b/tools/virsh-interface.c @@ -128,9 +128,6 @@ cmdInterfaceEdit(vshControl *ctl, const vshCmd *cmd) ret = true; goto edit_cleanup; #define EDIT_DEFINE \ (iface_edited = virInterfaceDefineXML(ctl->conn, doc_edited, 0)) -#define EDIT_FREE \ - if (iface_edited) \ - virInterfaceFree(iface_edited); #include "virsh-edit.c" vshPrint(ctl, _("Interface %s XML configuration edited.\n"), diff --git a/tools/virsh-network.c b/tools/virsh-network.c index 9497472541..5fe4b32661 100644 --- a/tools/virsh-network.c +++ b/tools/virsh-network.c @@ -1111,9 +1111,6 @@ cmdNetworkEdit(vshControl *ctl, const vshCmd *cmd) ret = true; goto edit_cleanup; #define EDIT_DEFINE \ (network_edited = virNetworkDefineXML(ctl->conn, doc_edited)) -#define EDIT_FREE \ - if (network_edited) \ - virNetworkFree(network_edited); #include "virsh-edit.c" vshPrint(ctl, _("Network %s XML configuration edited.\n"), diff --git a/tools/virsh-nwfilter.c b/tools/virsh-nwfilter.c index 6e6e21b7d1..ca54c9db58 100644 --- a/tools/virsh-nwfilter.c +++ b/tools/virsh-nwfilter.c @@ -428,9 +428,6 @@ cmdNWFilterEdit(vshControl *ctl, const vshCmd *cmd) ret = true; goto edit_cleanup; #define EDIT_DEFINE \ (nwfilter_edited = virNWFilterDefineXML(ctl->conn, doc_edited)) -#define EDIT_FREE \ - if (nwfilter_edited) \ - virNWFilterFree(nwfilter); #include "virsh-edit.c" vshPrint(ctl, _("Network filter %s XML configuration edited.\n"), diff --git a/tools/virsh-pool.c b/tools/virsh-pool.c index 80313b1d53..0b8dba5f13 100644 --- a/tools/virsh-pool.c +++ b/tools/virsh-pool.c @@ -1767,9 +1767,6 @@ cmdPoolEdit(vshControl *ctl, const vshCmd *cmd) ret = true; goto edit_cleanup; #define EDIT_DEFINE \ (pool_edited = virStoragePoolDefineXML(ctl->conn, doc_edited, 0)) -#define EDIT_FREE \ - if (pool_edited) \ - virStoragePoolFree(pool_edited); #include "virsh-edit.c" vshPrint(ctl, _("Pool %s XML configuration edited.\n"), diff --git a/tools/virsh-snapshot.c b/tools/virsh-snapshot.c index 3ecb3def53..885ad22ec5 100644 --- a/tools/virsh-snapshot.c +++ b/tools/virsh-snapshot.c @@ -589,9 +589,6 @@ cmdSnapshotEdit(vshControl *ctl, const vshCmd *cmd) (strstr(doc, "disk-snapshot") ? \ define_flags |= VIR_DOMAIN_SNAPSHOT_CREATE_DISK_ONLY : 0), \ edited = virDomainSnapshotCreateXML(dom, doc_edited, define_flags) -#define EDIT_FREE \ - if (edited) \ - virDomainSnapshotFree(edited); #include "virsh-edit.c" edited_name = virDomainSnapshotGetName(edited);