Coverity fix for CID 1125630
authorRajesh Joseph <rjoseph@redhat.com>
Thu, 16 Apr 2015 06:25:53 +0000 (11:55 +0530)
committerMartin Schwenke <martin@meltin.net>
Wed, 24 Feb 2016 06:12:09 +0000 (17:12 +1100)
Due to usage of CTDB_NO_MEMORY macro,
some of the resources are not freed in failure cases.

Signed-off-by: Rajesh Joseph <rjoseph@redhat.com>
Reviewed-by: Guenther Deschner <gd@samba.org>
Reviewed-by: Michael Adam <obnox@samba.org>
Autobuild-User(master): Günther Deschner <gd@samba.org>
Autobuild-Date(master): Fri Apr 17 16:49:05 CEST 2015 on sn-devel-104

(Imported from commit 9b33732a57a919059bf17e9348a60019146e9e1d)

server/ctdb_takeover.c

index 8defb68ddde840140628636b0dd72a06709582c8..bb38696e9dbba5208459baad004d77fc097eb319 100644 (file)
@@ -1005,11 +1005,22 @@ int32_t ctdb_control_release_ip(struct ctdb_context *ctdb,
                pip->pnn));
 
        state = talloc(ctdb, struct takeover_callback_state);
-       CTDB_NO_MEMORY(ctdb, state);
+       if (state == NULL) {
+               ctdb_set_error(ctdb, "Out of memory at %s:%d",
+                              __FILE__, __LINE__);
+               free(iface);
+               return -1;
+       }
 
        state->c = talloc_steal(state, c);
        state->addr = talloc(state, ctdb_sock_addr);       
-       CTDB_NO_MEMORY(ctdb, state->addr);
+       if (state->addr == NULL) {
+               ctdb_set_error(ctdb, "Out of memory at %s:%d",
+                              __FILE__, __LINE__);
+               free(iface);
+               talloc_free(state);
+               return -1;
+       }
        *state->addr = pip->addr;
        state->vnn   = vnn;