summaryrefslogtreecommitdiffstats
path: root/xlators
diff options
context:
space:
mode:
authorAmar Tumballi <amar@gluster.com>2010-07-27 11:13:32 +0000
committerAnand V. Avati <avati@dev.gluster.com>2010-07-28 03:34:48 -0700
commit753146c0ff4b1b55892b71b36d6ca97797867aaa (patch)
tree2e449e2c30f41248c6e533d7dde7dd381166725d /xlators
parent0aae2c46579421b871919e93619273d9a9bc79fb (diff)
some check added to the variables after GF_CALLOC
handles some NULL dereference problems (reported by clang when ran with code where '#define GF_CALLOC NULL'). Signed-off-by: Amar Tumballi <amar@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 966 (NULL check for avoiding NULL dereferencing of pointers..) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=966
Diffstat (limited to 'xlators')
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-sm.c6
-rw-r--r--xlators/performance/write-behind/src/write-behind.c10
-rw-r--r--xlators/protocol/client/src/client3_1-fops.c2
-rw-r--r--xlators/protocol/legacy/server/src/server-protocol.c3
-rw-r--r--xlators/protocol/server/src/server-handshake.c3
-rw-r--r--xlators/protocol/server/src/server-helpers.c3
-rw-r--r--xlators/protocol/server/src/server-resolve.c4
-rw-r--r--xlators/storage/posix/src/posix.c2
8 files changed, 23 insertions, 10 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-sm.c b/xlators/mgmt/glusterd/src/glusterd-sm.c
index b1a4c0d8a..1ac3f902b 100644
--- a/xlators/mgmt/glusterd/src/glusterd-sm.c
+++ b/xlators/mgmt/glusterd/src/glusterd-sm.c
@@ -550,6 +550,8 @@ glusterd_friend_sm ()
event->peerinfo = peerinfo;
}
+ if (!peerinfo)
+ goto out;
state = glusterd_friend_state_table[peerinfo->state.state];
@@ -573,7 +575,7 @@ glusterd_friend_sm ()
gf_log ("glusterd", GF_LOG_ERROR, "Unable to transition"
"state from %d to %d", peerinfo->state.state,
state[event_type].next_state);
- return ret;
+ goto out;
}
GF_FREE (event);
@@ -582,7 +584,7 @@ glusterd_friend_sm ()
ret = 0;
-
+out:
return ret;
}
diff --git a/xlators/performance/write-behind/src/write-behind.c b/xlators/performance/write-behind/src/write-behind.c
index 4095527d8..d3f24a590 100644
--- a/xlators/performance/write-behind/src/write-behind.c
+++ b/xlators/performance/write-behind/src/write-behind.c
@@ -564,6 +564,7 @@ out:
}
GF_FREE (local);
+ local = NULL;
}
if (iobref != NULL) {
@@ -579,10 +580,11 @@ out:
* had we winded these requests, we would have unrefed
* in wb_sync_cbk.
*/
-
- list_for_each_entry_safe (request, dummy, &local->winds,
- winds) {
- wb_request_unref (request);
+ if (local) {
+ list_for_each_entry_safe (request, dummy, &local->winds,
+ winds) {
+ wb_request_unref (request);
+ }
}
if (file != NULL) {
diff --git a/xlators/protocol/client/src/client3_1-fops.c b/xlators/protocol/client/src/client3_1-fops.c
index 06b333484..a007803b7 100644
--- a/xlators/protocol/client/src/client3_1-fops.c
+++ b/xlators/protocol/client/src/client3_1-fops.c
@@ -2080,7 +2080,7 @@ out:
GF_FREE (fdctx);
}
- if (ret)
+ if (ret && fr)
STACK_DESTROY (fr->root);
return ret;
diff --git a/xlators/protocol/legacy/server/src/server-protocol.c b/xlators/protocol/legacy/server/src/server-protocol.c
index 839c6a557..e6c668d15 100644
--- a/xlators/protocol/legacy/server/src/server-protocol.c
+++ b/xlators/protocol/legacy/server/src/server-protocol.c
@@ -4914,7 +4914,8 @@ _volfile_update_checksum (xlator_t *this, char *key, uint32_t checksum)
if (!temp_volfile) {
temp_volfile = GF_CALLOC (1, sizeof (struct _volfile_ctx),
gf_server_mt_volfile_ctx);
-
+ if (!temp_volfile)
+ goto out;
temp_volfile->next = conf->volfile;
temp_volfile->key = (key)? gf_strdup (key): NULL;
temp_volfile->checksum = checksum;
diff --git a/xlators/protocol/server/src/server-handshake.c b/xlators/protocol/server/src/server-handshake.c
index d386e9ce5..f9a4bca36 100644
--- a/xlators/protocol/server/src/server-handshake.c
+++ b/xlators/protocol/server/src/server-handshake.c
@@ -91,7 +91,8 @@ _volfile_update_checksum (xlator_t *this, char *key, uint32_t checksum)
if (!temp_volfile) {
temp_volfile = GF_CALLOC (1, sizeof (struct _volfile_ctx),
gf_server_mt_volfile_ctx_t);
-
+ if (!temp_volfile)
+ goto out;
temp_volfile->next = conf->volfile;
temp_volfile->key = (key)? gf_strdup (key): NULL;
temp_volfile->checksum = checksum;
diff --git a/xlators/protocol/server/src/server-helpers.c b/xlators/protocol/server/src/server-helpers.c
index 37418ac1d..84c66d114 100644
--- a/xlators/protocol/server/src/server-helpers.c
+++ b/xlators/protocol/server/src/server-helpers.c
@@ -684,6 +684,8 @@ server_connection_get (xlator_t *this, const char *id)
if (!conn) {
conn = (void *) GF_CALLOC (1, sizeof (*conn),
gf_server_mt_conn_t);
+ if (!conn)
+ goto unlock;
conn->id = gf_strdup (id);
conn->fdtable = gf_fd_fdtable_alloc ();
@@ -697,6 +699,7 @@ server_connection_get (xlator_t *this, const char *id)
conn->ref++;
conn->active_transports++;
}
+unlock:
pthread_mutex_unlock (&conf->mutex);
return conn;
diff --git a/xlators/protocol/server/src/server-resolve.c b/xlators/protocol/server/src/server-resolve.c
index 77336216f..91cf0d96f 100644
--- a/xlators/protocol/server/src/server-resolve.c
+++ b/xlators/protocol/server/src/server-resolve.c
@@ -75,6 +75,8 @@ prepare_components (call_frame_t *frame)
count = component_count (resolve->path);
components = GF_CALLOC (sizeof (*components), count,
gf_server_mt_resolv_comp_t);
+ if (!components)
+ goto out;
resolve->components = components;
components[0].basename = "";
@@ -90,7 +92,7 @@ prepare_components (call_frame_t *frame)
i++;
}
}
-
+out:
return 0;
}
diff --git a/xlators/storage/posix/src/posix.c b/xlators/storage/posix/src/posix.c
index 2810bbd6a..da5156709 100644
--- a/xlators/storage/posix/src/posix.c
+++ b/xlators/storage/posix/src/posix.c
@@ -179,6 +179,8 @@ _posix_xattr_get_set (dict_t *xattr_req,
if (xattr_size > 0) {
value = GF_CALLOC (1, xattr_size + 1,
gf_posix_mt_char);
+ if (!value)
+ return;
sys_lgetxattr (filler->real_path, key, value,
xattr_size);