diff options
author | Amar Tumballi <amar@gluster.com> | 2010-07-27 11:13:32 +0000 |
---|---|---|
committer | Anand V. Avati <avati@dev.gluster.com> | 2010-07-28 03:34:48 -0700 |
commit | 753146c0ff4b1b55892b71b36d6ca97797867aaa (patch) | |
tree | 2e449e2c30f41248c6e533d7dde7dd381166725d | |
parent | 0aae2c46579421b871919e93619273d9a9bc79fb (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
-rw-r--r-- | glusterfsd/src/glusterfsd.c | 6 | ||||
-rw-r--r-- | libglusterfs/src/common-utils.c | 2 | ||||
-rw-r--r-- | libglusterfs/src/event.c | 5 | ||||
-rw-r--r-- | libglusterfs/src/logging.c | 5 | ||||
-rw-r--r-- | libglusterfs/src/xlator.c | 3 | ||||
-rw-r--r-- | rpc/rpc-transport/socket/src/socket.c | 3 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-sm.c | 6 | ||||
-rw-r--r-- | xlators/performance/write-behind/src/write-behind.c | 10 | ||||
-rw-r--r-- | xlators/protocol/client/src/client3_1-fops.c | 2 | ||||
-rw-r--r-- | xlators/protocol/legacy/server/src/server-protocol.c | 3 | ||||
-rw-r--r-- | xlators/protocol/server/src/server-handshake.c | 3 | ||||
-rw-r--r-- | xlators/protocol/server/src/server-helpers.c | 3 | ||||
-rw-r--r-- | xlators/protocol/server/src/server-resolve.c | 4 | ||||
-rw-r--r-- | xlators/storage/posix/src/posix.c | 2 |
14 files changed, 47 insertions, 10 deletions
diff --git a/glusterfsd/src/glusterfsd.c b/glusterfsd/src/glusterfsd.c index 30057b5dbec..7fd4478800f 100644 --- a/glusterfsd/src/glusterfsd.c +++ b/glusterfsd/src/glusterfsd.c @@ -315,6 +315,9 @@ gf_remember_xlator_option (struct list_head *options, char *arg) option = GF_CALLOC (1, sizeof (xlator_cmdline_option_t), gfd_mt_xlator_cmdline_option_t); + if (!option) + goto out; + INIT_LIST_HEAD (&option->cmd_args); dot = strchr (arg, '.'); @@ -331,6 +334,9 @@ gf_remember_xlator_option (struct list_head *options, char *arg) option->key = GF_CALLOC ((equals - dot) + 1, sizeof (char), gfd_mt_char); + if (!option->key) + goto out; + strncpy (option->key, dot + 1, (equals - dot - 1)); if (!*(equals + 1)) diff --git a/libglusterfs/src/common-utils.c b/libglusterfs/src/common-utils.c index 1be1f81268b..1077f610011 100644 --- a/libglusterfs/src/common-utils.c +++ b/libglusterfs/src/common-utils.c @@ -90,6 +90,8 @@ gf_resolve_ip6 (const char *hostname, if (!*dnscache) { *dnscache = GF_CALLOC (1, sizeof (struct dnscache6), gf_common_mt_dnscache6); + if (!*dnscache) + return -1; } cache = *dnscache; diff --git a/libglusterfs/src/event.c b/libglusterfs/src/event.c index 3243e7f2320..59b1bd79eac 100644 --- a/libglusterfs/src/event.c +++ b/libglusterfs/src/event.c @@ -195,6 +195,8 @@ event_register_poll (struct event_pool *event_pool, int fd, event_pool->reg = GF_REALLOC (event_pool->reg, event_pool->count * sizeof (*event_pool->reg)); + if (!event_pool->reg) + goto unlock; } idx = event_pool->used++; @@ -239,6 +241,7 @@ event_register_poll (struct event_pool *event_pool, int fd, event_pool->changed = 1; } +unlock: pthread_mutex_unlock (&event_pool->mutex); return idx; @@ -402,6 +405,8 @@ event_dispatch_poll_resize (struct event_pool *event_pool, ufds = GF_CALLOC (sizeof (struct pollfd), event_pool->evcache_size, gf_common_mt_pollfd); + if (!ufds) + goto unlock; event_pool->evcache = ufds; } diff --git a/libglusterfs/src/logging.c b/libglusterfs/src/logging.c index d5a38e6b6b8..000c2ccd34f 100644 --- a/libglusterfs/src/logging.c +++ b/libglusterfs/src/logging.c @@ -311,6 +311,9 @@ __logfile_for_client (char *identifier) if (!client_logs) { client = GF_CALLOC (1, sizeof (*client), gf_common_mt_client_log); + if (!client) + return NULL; + client_log_init (client, identifier); client_logs = client; @@ -324,6 +327,8 @@ __logfile_for_client (char *identifier) if (!client) { client = GF_CALLOC (1, sizeof (*client), gf_common_mt_client_log); + if (!client) + return NULL; client_log_init (client, identifier); diff --git a/libglusterfs/src/xlator.c b/libglusterfs/src/xlator.c index c2f585d03a0..e5b97f7c4a5 100644 --- a/libglusterfs/src/xlator.c +++ b/libglusterfs/src/xlator.c @@ -749,6 +749,9 @@ xlator_set_type (xlator_t *xl, vol_opt = GF_CALLOC (1, sizeof (volume_opt_list_t), gf_common_mt_volume_opt_list_t); + if (!vol_opt) + return -1; + if (!(vol_opt->given_opt = dlsym (handle, "options"))) { dlerror (); gf_log (xl->name, GF_LOG_DEBUG, diff --git a/rpc/rpc-transport/socket/src/socket.c b/rpc/rpc-transport/socket/src/socket.c index 6406d4589e9..4396454a33a 100644 --- a/rpc/rpc-transport/socket/src/socket.c +++ b/rpc/rpc-transport/socket/src/socket.c @@ -1503,6 +1503,9 @@ socket_server_event_handler (int fd, int idx, void *data, new_trans = GF_CALLOC (1, sizeof (*new_trans), gf_common_mt_rpc_trans_t); + if (!new_trans) + goto unlock; + new_trans->fini = this->fini; new_trans->name = gf_strdup (this->name); diff --git a/xlators/mgmt/glusterd/src/glusterd-sm.c b/xlators/mgmt/glusterd/src/glusterd-sm.c index b1a4c0d8a57..1ac3f902bf3 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 4095527d828..d3f24a5909b 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 06b33348493..a007803b7c3 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 839c6a55745..e6c668d1567 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 d386e9ce55b..f9a4bca364c 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 37418ac1de4..84c66d1141d 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 77336216f19..91cf0d96f30 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 2810bbd6a8c..da5156709d1 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); |