summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAmar Tumballi <amar@gluster.com>2010-07-02 04:55:28 +0000
committerAnand V. Avati <avati@dev.gluster.com>2010-07-02 05:17:03 -0700
commit2f15ffd6b5beef9abd501c594bc3cb38c2683f77 (patch)
tree107176560e1a97c42f3535380ef49d4dee3b0cd6
parent3dc79ca8e6119f5ff61058cc87f9a4fc251017ef (diff)
NULL dereference fixes in code base after running with 'clang'
* 212 logical (NULL deref/divide by zero) errors reduced to 28 (27 of them in contrib/ and lex part of codebase, 1 is invalid) * 11 API errors reduced to 0 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--libglusterfs/src/common-utils.c3
-rw-r--r--libglusterfs/src/dict.c5
-rw-r--r--libglusterfs/src/event.c2
-rw-r--r--libglusterfs/src/graph.l6
-rw-r--r--libglusterfs/src/graph.y2
-rw-r--r--libglusterfs/src/stack.h9
-rw-r--r--rpc/rpc-lib/src/rpcsvc-auth.c6
-rw-r--r--xlators/cluster/afr/src/afr-inode-read.c2
-rw-r--r--xlators/cluster/afr/src/afr.c8
-rw-r--r--xlators/cluster/afr/src/afr.h32
-rw-r--r--xlators/cluster/dht/src/dht-common.h8
-rw-r--r--xlators/cluster/dht/src/dht-rename.c10
-rw-r--r--xlators/cluster/dht/src/dht-selfheal.c2
-rw-r--r--xlators/cluster/stripe/src/stripe.c11
-rw-r--r--xlators/features/trash/src/trash.c30
-rw-r--r--xlators/mount/fuse/src/fuse-bridge.c9
-rw-r--r--xlators/nfs/server/src/nfs3-helpers.c4
-rw-r--r--xlators/performance/stat-prefetch/src/stat-prefetch.c5
-rw-r--r--xlators/performance/write-behind/src/write-behind.c8
-rw-r--r--xlators/protocol/client/src/client-handshake.c2
-rw-r--r--xlators/protocol/client/src/client3_1-fops.c49
-rw-r--r--xlators/protocol/legacy/client/src/client-protocol.c10
-rw-r--r--xlators/protocol/legacy/server/src/server-helpers.c16
-rw-r--r--xlators/protocol/legacy/server/src/server-protocol.c22
-rw-r--r--xlators/protocol/legacy/transport/ib-verbs/src/ib-verbs.c4
-rw-r--r--xlators/protocol/server/src/server-handshake.c4
-rw-r--r--xlators/protocol/server/src/server-helpers.c18
-rw-r--r--xlators/protocol/server/src/server.c3
-rw-r--r--xlators/protocol/server/src/server3_1-fops.c8
-rw-r--r--xlators/storage/posix/src/posix.c18
30 files changed, 193 insertions, 123 deletions
diff --git a/libglusterfs/src/common-utils.c b/libglusterfs/src/common-utils.c
index 694a9040c95..1be1f81268b 100644
--- a/libglusterfs/src/common-utils.c
+++ b/libglusterfs/src/common-utils.c
@@ -150,7 +150,8 @@ gf_resolve_ip6 (const char *hostname,
*addr_info = cache->next;
}
- cache->next = cache->next->ai_next;
+ if (cache->next)
+ cache->next = cache->next->ai_next;
if (cache->next) {
ret = getnameinfo((struct sockaddr *)cache->next->ai_addr,
cache->next->ai_addrlen,
diff --git a/libglusterfs/src/dict.c b/libglusterfs/src/dict.c
index 7d560bdac71..ca6275f26b8 100644
--- a/libglusterfs/src/dict.c
+++ b/libglusterfs/src/dict.c
@@ -581,9 +581,10 @@ dict_unserialize_old (char *buf, int32_t size, dict_t **fill)
int32_t ret = 0;
int32_t cnt = 0;
- if (!buf || fill == NULL || !*fill) {
+ if (!buf || !fill || !(*fill)) {
gf_log ("dict", GF_LOG_ERROR,
- "@buf=%p @fill=%p @*fill=%p", buf, fill, *fill);
+ "@buf=%p @fill=%p @*fill=%p",
+ buf, fill, (fill) ? (*fill) : NULL);
return NULL;
}
diff --git a/libglusterfs/src/event.c b/libglusterfs/src/event.c
index 819357d437a..7ac891fa122 100644
--- a/libglusterfs/src/event.c
+++ b/libglusterfs/src/event.c
@@ -867,7 +867,7 @@ event_dispatch_epoll (struct event_pool *event_pool)
size = ret;
for (i = 0; i < size; i++) {
- if (!events[i].events)
+ if (!events || !events[i].events)
continue;
ret = event_dispatch_epoll_handler (event_pool,
diff --git a/libglusterfs/src/graph.l b/libglusterfs/src/graph.l
index 8d9d2dc3611..f7a02e48107 100644
--- a/libglusterfs/src/graph.l
+++ b/libglusterfs/src/graph.l
@@ -45,12 +45,14 @@ void append_string(const char *str, int size)
} else {
text = GF_REALLOC (text, new_size);
}
- if (!text)
+ if (!text) {
gf_log ("parser", GF_LOG_ERROR,
"out of memory");
+ return;
+ }
text_asize = new_size;
}
- memcpy(text + text_size, str, size);
+ memcpy(text + text_size, str, size);
text_size += size;
text[text_size] = 0;
}
diff --git a/libglusterfs/src/graph.y b/libglusterfs/src/graph.y
index 4ac07660f95..14afaae6475 100644
--- a/libglusterfs/src/graph.y
+++ b/libglusterfs/src/graph.y
@@ -382,7 +382,7 @@ yyerror (const char *str)
extern char *yytext;
extern int yylineno;
- if (curr && curr->name) {
+ if (curr && curr->name && yytext) {
if (!strcmp (yytext, "volume")) {
gf_log ("parser", GF_LOG_ERROR,
"'end-volume' not defined for volume '%s'",
diff --git a/libglusterfs/src/stack.h b/libglusterfs/src/stack.h
index ac69e389f22..1ce46ccdc89 100644
--- a/libglusterfs/src/stack.h
+++ b/libglusterfs/src/stack.h
@@ -253,7 +253,10 @@ STACK_DESTROY (call_stack_t *stack)
ret_fn_t fn = NULL; \
call_frame_t *_parent = NULL; \
xlator_t *old_THIS = NULL; \
- \
+ if (!frame) { \
+ gf_log ("stack", GF_LOG_CRITICAL, "!frame"); \
+ break; \
+ } \
fn = frame->ret; \
_parent = frame->parent; \
_parent->ref_count--; \
@@ -277,6 +280,10 @@ STACK_DESTROY (call_stack_t *stack)
call_frame_t *_parent = NULL; \
xlator_t *old_THIS = NULL; \
\
+ if (!frame) { \
+ gf_log ("stack", GF_LOG_CRITICAL, "!frame"); \
+ break; \
+ } \
fn = (fop_##op##_cbk_t )frame->ret; \
_parent = frame->parent; \
_parent->ref_count--; \
diff --git a/rpc/rpc-lib/src/rpcsvc-auth.c b/rpc/rpc-lib/src/rpcsvc-auth.c
index fa039c38677..75305e68e2a 100644
--- a/rpc/rpc-lib/src/rpcsvc-auth.c
+++ b/rpc/rpc-lib/src/rpcsvc-auth.c
@@ -200,8 +200,10 @@ __rpcsvc_auth_get_handler (rpcsvc_request_t *req)
return NULL;
svc = rpcsvc_request_service (req);
- if (!svc)
- gf_log ("", 1, "something wrong, !svc");
+ if (!svc) {
+ gf_log (GF_RPCSVC, GF_LOG_ERROR, "!svc");
+ goto err;
+ }
if (list_empty (&svc->authschemes)) {
gf_log (GF_RPCSVC, GF_LOG_WARNING, "No authentication!");
diff --git a/xlators/cluster/afr/src/afr-inode-read.c b/xlators/cluster/afr/src/afr-inode-read.c
index b1bbac10bc2..ef72fb19779 100644
--- a/xlators/cluster/afr/src/afr-inode-read.c
+++ b/xlators/cluster/afr/src/afr-inode-read.c
@@ -802,7 +802,7 @@ afr_readv_cbk (call_frame_t *frame, void *cookie,
out:
if (unwind) {
- if (buf)
+ if (buf && local)
buf->ia_ino = local->cont.readv.ino;
AFR_STACK_UNWIND (readv, frame, op_ret, op_errno,
diff --git a/xlators/cluster/afr/src/afr.c b/xlators/cluster/afr/src/afr.c
index 718384717e4..4ae128bbb55 100644
--- a/xlators/cluster/afr/src/afr.c
+++ b/xlators/cluster/afr/src/afr.c
@@ -2744,7 +2744,7 @@ init (xlator_t *this)
int32_t background_count = 0;
int32_t lock_server_count = 1;
- int32_t window_size;
+ int32_t window_size = 0;
int fav_ret = -1;
int read_ret = -1;
@@ -2780,8 +2780,8 @@ init (xlator_t *this)
&background_count);
if (dict_ret == 0) {
gf_log (this->name, GF_LOG_DEBUG,
- "Setting background self-heal count to %d.",
- window_size);
+ "Setting background self-heal count to %d",
+ background_count);
priv->background_self_heal_count = background_count;
}
@@ -2819,7 +2819,7 @@ init (xlator_t *this)
&window_size);
if (dict_ret == 0) {
gf_log (this->name, GF_LOG_DEBUG,
- "Setting data self-heal window size to %d.",
+ "Setting data self-heal window size to %d",
window_size);
priv->data_self_heal_window_size = window_size;
diff --git a/xlators/cluster/afr/src/afr.h b/xlators/cluster/afr/src/afr.h
index b223a9de3c0..4580bcda278 100644
--- a/xlators/cluster/afr/src/afr.h
+++ b/xlators/cluster/afr/src/afr.h
@@ -558,15 +558,15 @@ typedef struct {
/* try alloc and if it fails, goto label */
-#define ALLOC_OR_GOTO(var, type, label) do { \
- var = GF_CALLOC (sizeof (type), 1, \
- gf_afr_mt_##type); \
- if (!var) { \
- gf_log (this->name, GF_LOG_ERROR, \
- "out of memory :("); \
- op_errno = ENOMEM; \
- goto label; \
- } \
+#define ALLOC_OR_GOTO(var, type, label) do { \
+ var = GF_CALLOC (sizeof (type), 1, \
+ gf_afr_mt_##type); \
+ if (!var) { \
+ gf_log (this->name, GF_LOG_ERROR, \
+ "out of memory :("); \
+ op_errno = ENOMEM; \
+ goto label; \
+ } \
} while (0);
@@ -639,13 +639,15 @@ afr_cleanup_fd_ctx (xlator_t *this, fd_t *fd);
do { \
afr_local_t *__local = NULL; \
xlator_t *__this = NULL; \
- __local = frame->local; \
- __this = frame->this; \
- frame->local = NULL; \
+ if (frame) { \
+ __local = frame->local; \
+ __this = frame->this; \
+ frame->local = NULL; \
+ } \
STACK_UNWIND_STRICT (fop, frame, params); \
- afr_local_cleanup (__local, __this); \
+ afr_local_cleanup (__local, __this); \
GF_FREE (__local); \
-} while (0);
+ } while (0);
#define AFR_STACK_DESTROY(frame) \
do { \
@@ -657,7 +659,7 @@ afr_cleanup_fd_ctx (xlator_t *this, fd_t *fd);
STACK_DESTROY (frame->root); \
afr_local_cleanup (__local, __this); \
GF_FREE (__local); \
-} while (0);
+ } while (0);
/* allocate and return a string that is the basename of argument */
static inline char *
diff --git a/xlators/cluster/dht/src/dht-common.h b/xlators/cluster/dht/src/dht-common.h
index b51f308ec9c..b361f14426e 100644
--- a/xlators/cluster/dht/src/dht-common.h
+++ b/xlators/cluster/dht/src/dht-common.h
@@ -183,9 +183,11 @@ typedef struct dht_disk_layout dht_disk_layout_t;
#define DHT_STACK_UNWIND(fop, frame, params ...) do { \
dht_local_t *__local = NULL; \
xlator_t *__xl = NULL; \
- __xl = frame->this; \
- __local = frame->local; \
- frame->local = NULL; \
+ if (frame) { \
+ __xl = frame->this; \
+ __local = frame->local; \
+ frame->local = NULL; \
+ } \
STACK_UNWIND_STRICT (fop, frame, params); \
dht_local_wipe (__xl, __local); \
} while (0)
diff --git a/xlators/cluster/dht/src/dht-rename.c b/xlators/cluster/dht/src/dht-rename.c
index d96c4b8a349..d88fc74450a 100644
--- a/xlators/cluster/dht/src/dht-rename.c
+++ b/xlators/cluster/dht/src/dht-rename.c
@@ -260,6 +260,12 @@ dht_rename_unlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
local = frame->local;
prev = cookie;
+ if (!local) {
+ gf_log (this->name, GF_LOG_ERROR,
+ "!local, should not happen");
+ goto out;
+ }
+
this_call_cnt = dht_frame_return (frame);
if (op_ret == -1) {
@@ -273,12 +279,14 @@ dht_rename_unlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
WIPE (&local->preparent);
WIPE (&local->postparent);
- if (is_last_call (this_call_cnt))
+ if (is_last_call (this_call_cnt)) {
DHT_STACK_UNWIND (rename, frame, local->op_ret, local->op_errno,
&local->stbuf, &local->preoldparent,
&local->postoldparent, &local->preparent,
&local->postparent);
+ }
+out:
return 0;
}
diff --git a/xlators/cluster/dht/src/dht-selfheal.c b/xlators/cluster/dht/src/dht-selfheal.c
index 8cfb1f41f28..9270952e113 100644
--- a/xlators/cluster/dht/src/dht-selfheal.c
+++ b/xlators/cluster/dht/src/dht-selfheal.c
@@ -336,7 +336,7 @@ dht_selfheal_layout_new_directory (call_frame_t *frame, loc_t *loc,
}
}
- chunk = ((unsigned long) 0xffffffff) / cnt;
+ chunk = ((unsigned long) 0xffffffff) / ((cnt) ? cnt : 1);
start_subvol = dht_selfheal_layout_alloc_start (this, loc, layout);
diff --git a/xlators/cluster/stripe/src/stripe.c b/xlators/cluster/stripe/src/stripe.c
index 99346fac23f..4826d80a8f2 100644
--- a/xlators/cluster/stripe/src/stripe.c
+++ b/xlators/cluster/stripe/src/stripe.c
@@ -3284,7 +3284,6 @@ stripe_readv (call_frame_t *frame, xlator_t *this, fd_t *fd,
call_frame_t *rframe = NULL;
stripe_local_t *rlocal = NULL;
xlator_list_t *trav = NULL;
- stripe_private_t *priv = NULL;
stripe_fd_ctx_t *fctx = NULL;
VALIDATE_OR_GOTO (frame, err);
@@ -3293,7 +3292,6 @@ stripe_readv (call_frame_t *frame, xlator_t *this, fd_t *fd,
VALIDATE_OR_GOTO (fd->inode, err);
trav = this->children;
- priv = this->private;
fd_ctx_get (fd, this, &tmp_fctx);
if (!tmp_fctx) {
@@ -3303,6 +3301,11 @@ stripe_readv (call_frame_t *frame, xlator_t *this, fd_t *fd,
fctx = (stripe_fd_ctx_t *)(long)tmp_fctx;
stripe_size = fctx->stripe_size;
+ if (!stripe_size) {
+ gf_log (this->name, GF_LOG_DEBUG,
+ "Wrong stripe size for the file");
+ goto err;
+ }
/* The file is stripe across the child nodes. Send the read request
* to the child nodes appropriately after checking which region of
* the file is in which child node. Always '0-<stripe_size>' part of
@@ -3310,7 +3313,7 @@ stripe_readv (call_frame_t *frame, xlator_t *this, fd_t *fd,
*/
rounded_start = floor (offset, stripe_size);
rounded_end = roof (offset+size, stripe_size);
- num_stripe = rounded_end/stripe_size - rounded_start/stripe_size;
+ num_stripe = (rounded_end- rounded_start)/stripe_size;
local = GF_CALLOC (1, sizeof (stripe_local_t),
gf_stripe_mt_stripe_local_t);
@@ -3361,7 +3364,7 @@ stripe_readv (call_frame_t *frame, xlator_t *this, fd_t *fd,
return 0;
err:
- if (local->fd)
+ if (local && local->fd)
fd_unref (local->fd);
STACK_UNWIND_STRICT (readv, frame, -1, op_errno, NULL, 0, NULL, NULL);
diff --git a/xlators/features/trash/src/trash.c b/xlators/features/trash/src/trash.c
index c51d55a02fe..d60bf4b8310 100644
--- a/xlators/features/trash/src/trash.c
+++ b/xlators/features/trash/src/trash.c
@@ -96,7 +96,8 @@ trash_unlink_mkdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
local = frame->local;
tmp_str = gf_strdup (local->newpath);
if (!tmp_str) {
- gf_log (this->name, GF_LOG_DEBUG, "out of memory");
+ gf_log (this->name, GF_LOG_ERROR, "out of memory");
+ goto out;
}
loop_count = local->loop_count;
@@ -113,7 +114,8 @@ trash_unlink_mkdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
}
tmp_path = memdup (local->newpath, count);
if (!tmp_path) {
- gf_log (this->name, GF_LOG_DEBUG, "out of memory");
+ gf_log (this->name, GF_LOG_ERROR, "out of memory");
+ goto out;
}
tmp_loc.path = tmp_path;
@@ -156,7 +158,8 @@ trash_unlink_mkdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
}
tmp_path = memdup (local->newpath, count);
if (!tmp_path) {
- gf_log (this->name, GF_LOG_DEBUG, "out of memory");
+ gf_log (this->name, GF_LOG_ERROR, "out of memory");
+ goto out;
}
tmp_loc.path = tmp_path;
@@ -167,7 +170,8 @@ trash_unlink_mkdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
out:
GF_FREE (cookie);
- GF_FREE (tmp_str);
+ if (tmp_str)
+ GF_FREE (tmp_str);
return 0;
}
@@ -399,6 +403,7 @@ trash_rename_mkdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
tmp_str = gf_strdup (local->newpath);
if (!tmp_str) {
gf_log (this->name, GF_LOG_DEBUG, "out of memory");
+ goto out;
}
if ((op_ret == -1) && (op_errno == ENOENT)) {
@@ -439,7 +444,8 @@ trash_rename_mkdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
out:
GF_FREE (cookie); /* strdup (dir_name) was sent here :) */
- GF_FREE (tmp_str);
+ if (tmp_str)
+ GF_FREE (tmp_str);
return 0;
}
@@ -848,13 +854,14 @@ trash_truncate_mkdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
local = frame->local;
if (!local)
- return 0;
+ goto out;
loop_count = local->loop_count;
tmp_str = gf_strdup (local->newpath);
if (!tmp_str) {
gf_log (this->name, GF_LOG_DEBUG, "out of memory");
+ goto out;
}
if ((op_ret == -1) && (op_errno == ENOENT)) {
@@ -902,6 +909,7 @@ trash_truncate_mkdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
loop_count = ++local->loop_count;
}
UNLOCK (&frame->lock);
+
tmp_dirname = strchr (tmp_str, '/');
while (tmp_dirname) {
count = tmp_dirname - tmp_str;
@@ -926,7 +934,8 @@ trash_truncate_mkdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
out:
GF_FREE (cookie); /* strdup (dir_name) was sent here :) */
- GF_FREE (tmp_str);
+ if (tmp_str)
+ GF_FREE (tmp_str);
return 0;
}
@@ -1213,13 +1222,14 @@ trash_ftruncate_mkdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
local = frame->local;
if (!local)
- return 0;
+ goto out;
loop_count = local->loop_count;
tmp_str = gf_strdup (local->newpath);
if (!tmp_str) {
gf_log (this->name, GF_LOG_DEBUG, "out of memory");
+ goto out;
}
if ((op_ret == -1) && (op_errno == ENOENT)) {
@@ -1292,7 +1302,8 @@ trash_ftruncate_mkdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
out:
GF_FREE (cookie); /* strdup (dir_name) was sent here :) */
- GF_FREE (tmp_str);
+ if (tmp_str)
+ GF_FREE (tmp_str);
return 0;
}
@@ -1484,6 +1495,7 @@ init (xlator_t *this)
gf_trash_mt_trash_elim_pattern_t);
if (!trav) {
gf_log (this->name, GF_LOG_DEBUG, "out of memory");
+ break;
}
trav->pattern = component;
trav->next = _priv->eliminate;
diff --git a/xlators/mount/fuse/src/fuse-bridge.c b/xlators/mount/fuse/src/fuse-bridge.c
index 483c6c9fec5..096ca93df58 100644
--- a/xlators/mount/fuse/src/fuse-bridge.c
+++ b/xlators/mount/fuse/src/fuse-bridge.c
@@ -1364,9 +1364,8 @@ fuse_readlink (xlator_t *this, fuse_in_header_t *finh, void *msg)
if ((state->loc.inode == NULL) ||
(ret < 0)) {
gf_log ("glusterfs-fuse", GF_LOG_WARNING,
- "%"PRIu64" READLINK %s/%"PRId64" (fuse_loc_fill() returned NULL inode)",
- finh->unique, state->loc.path,
- state->loc.inode->ino);
+ "%"PRIu64" READLINK %s (fuse_loc_fill() returned NULL inode)",
+ finh->unique, state->loc.path);
send_fuse_err (this, finh, ENOENT);
free_state (state);
return;
@@ -3719,9 +3718,9 @@ cleanup_exit:
if (priv) {
GF_FREE (priv->mount_point);
close (priv->fd);
+ close (priv->fuse_dump_fd);
+ GF_FREE (priv);
}
- GF_FREE (priv);
- close (priv->fuse_dump_fd);
return -1;
}
diff --git a/xlators/nfs/server/src/nfs3-helpers.c b/xlators/nfs/server/src/nfs3-helpers.c
index 95e8601627d..615c2166019 100644
--- a/xlators/nfs/server/src/nfs3-helpers.c
+++ b/xlators/nfs/server/src/nfs3-helpers.c
@@ -394,12 +394,12 @@ nfs3_fill_lookup3res_success (lookup3res *res, nfsstat3 stat,
obj.attributes_follow = FALSE;
dir.attributes_follow = FALSE;
- if (buf) {
+ if (buf && fh) {
nfs3_map_xlid_to_statdev (buf, fh->xlatorid);
obj = nfs3_stat_to_post_op_attr (buf);
}
- if (postparent) {
+ if (postparent && fh) {
nfs3_map_xlid_to_statdev (postparent, fh->xlatorid);
dir = nfs3_stat_to_post_op_attr (postparent);
}
diff --git a/xlators/performance/stat-prefetch/src/stat-prefetch.c b/xlators/performance/stat-prefetch/src/stat-prefetch.c
index b34aba58c1e..fb338491e0c 100644
--- a/xlators/performance/stat-prefetch/src/stat-prefetch.c
+++ b/xlators/performance/stat-prefetch/src/stat-prefetch.c
@@ -573,6 +573,7 @@ sp_fd_ctx_new (xlator_t *this, inode_t *parent, char *name, sp_cache_t *cache)
if (fd_ctx->name == NULL) {
sp_fd_ctx_free (fd_ctx);
fd_ctx = NULL;
+ goto out;
}
}
@@ -1099,8 +1100,8 @@ wind:
}
unwind:
- SP_STACK_UNWIND (lookup, frame, op_ret, op_errno, loc->inode, &buf,
- NULL, &postparent);
+ SP_STACK_UNWIND (lookup, frame, op_ret, op_errno, (loc)?loc->inode:NULL,
+ &buf, NULL, &postparent);
return 0;
}
diff --git a/xlators/performance/write-behind/src/write-behind.c b/xlators/performance/write-behind/src/write-behind.c
index a71d3a37855..4095527d828 100644
--- a/xlators/performance/write-behind/src/write-behind.c
+++ b/xlators/performance/write-behind/src/write-behind.c
@@ -252,11 +252,11 @@ wb_enqueue (wb_file_t *file, call_stub_t *stub)
vector = stub->args.writev.vector;
count = stub->args.writev.count;
- frame = stub->frame;
- local = frame->local;
request->write_size = iov_length (vector, count);
- local->op_ret = request->write_size;
- local->op_errno = 0;
+ if (local) {
+ local->op_ret = request->write_size;
+ local->op_errno = 0;
+ }
request->flags.write_request.virgin = 1;
}
diff --git a/xlators/protocol/client/src/client-handshake.c b/xlators/protocol/client/src/client-handshake.c
index 58d23779cc1..1c239d0cb0f 100644
--- a/xlators/protocol/client/src/client-handshake.c
+++ b/xlators/protocol/client/src/client-handshake.c
@@ -520,7 +520,7 @@ client_setvolume (xlator_t *this, struct rpc_clnt *rpc)
options = this->options;
conf = this->private;
- if (conf->fops || !dict_get (options, "fops-version")) {
+ if (conf->fops) {
ret = dict_set_int32 (options, "fops-version",
conf->fops->prognum);
if (ret < 0) {
diff --git a/xlators/protocol/client/src/client3_1-fops.c b/xlators/protocol/client/src/client3_1-fops.c
index f91eebaddc6..5204ef032da 100644
--- a/xlators/protocol/client/src/client3_1-fops.c
+++ b/xlators/protocol/client/src/client3_1-fops.c
@@ -280,7 +280,6 @@ client3_1_mkdir_cbk (struct rpc_req *req, struct iovec *iov, int count,
}
out:
- frame->local = NULL;
STACK_UNWIND_STRICT (mkdir, frame, rsp.op_ret,
gf_error_to_errno (rsp.op_errno), inode,
&stbuf, &preparent, &postparent);
@@ -2115,9 +2114,11 @@ client_fdctx_destroy (xlator_t *this, clnt_fd_ctx_t *fdctx)
}
out:
- fdctx->remote_fd = -1;
- inode_unref (fdctx->inode);
- GF_FREE (fdctx);
+ if (fdctx) {
+ fdctx->remote_fd = -1;
+ inode_unref (fdctx->inode);
+ GF_FREE (fdctx);
+ }
return ret;
}
@@ -2237,8 +2238,10 @@ out:
if (fdctx)
client_fdctx_destroy (frame->this, fdctx);
- frame->local = NULL;
- STACK_DESTROY (frame->root);
+ if (frame) {
+ frame->local = NULL;
+ STACK_DESTROY (frame->root);
+ }
client_local_wipe (local);
@@ -2555,15 +2558,16 @@ client3_1_lookup (call_frame_t *frame, xlator_t *this,
return 0;
unwind:
- frame->local = NULL;
+ if (frame)
+ frame->local = NULL;
+
STACK_UNWIND_STRICT (lookup, frame, -1, op_errno, NULL, NULL, NULL, NULL);
if (local)
client_local_wipe (local);
- if (req.dict.dict_val) {
+ if (req.dict.dict_val)
GF_FREE (req.dict.dict_val);
- }
return 0;
}
@@ -2900,8 +2904,11 @@ client3_1_symlink (call_frame_t *frame, xlator_t *this,
return 0;
unwind:
- frame->local = NULL;
+ if (frame)
+ frame->local = NULL;
+
STACK_UNWIND_STRICT (symlink, frame, -1, op_errno, NULL, NULL, NULL, NULL);
+
if (local)
client_local_wipe (local);
return 0;
@@ -3074,8 +3081,11 @@ client3_1_mknod (call_frame_t *frame, xlator_t *this,
return 0;
unwind:
- frame->local = NULL;
+ if (frame)
+ frame->local = NULL;
+
STACK_UNWIND_STRICT (mknod, frame, -1, op_errno, NULL, NULL, NULL, NULL);
+
if (local)
client_local_wipe (local);
return 0;
@@ -3130,8 +3140,11 @@ client3_1_mkdir (call_frame_t *frame, xlator_t *this,
return 0;
unwind:
- frame->local = NULL;
+ if (frame)
+ frame->local = NULL;
+
STACK_UNWIND_STRICT (mkdir, frame, -1, op_errno, NULL, NULL, NULL, NULL);
+
if (local)
client_local_wipe (local);
return 0;
@@ -3187,7 +3200,9 @@ client3_1_create (call_frame_t *frame, xlator_t *this,
return 0;
unwind:
- frame->local = NULL;
+ if (frame)
+ frame->local = NULL;
+
STACK_UNWIND_STRICT (create, frame, -1, op_errno, NULL, NULL, NULL, NULL, NULL);
if (local)
client_local_wipe (local);
@@ -3243,8 +3258,11 @@ client3_1_open (call_frame_t *frame, xlator_t *this,
return 0;
unwind:
- frame->local = NULL;
+ if (frame)
+ frame->local = NULL;
+
STACK_UNWIND_STRICT (open, frame, -1, op_errno, NULL);
+
if (local)
client_local_wipe (local);
return 0;
@@ -3555,7 +3573,8 @@ client3_1_opendir (call_frame_t *frame, xlator_t *this,
return 0;
unwind:
- frame->local = NULL;
+ if (frame)
+ frame->local = NULL;
STACK_UNWIND_STRICT (opendir, frame, -1, op_errno, NULL);
if (local)
client_local_wipe (local);
diff --git a/xlators/protocol/legacy/client/src/client-protocol.c b/xlators/protocol/legacy/client/src/client-protocol.c
index dae31dcb356..0dc5bee5d56 100644
--- a/xlators/protocol/legacy/client/src/client-protocol.c
+++ b/xlators/protocol/legacy/client/src/client-protocol.c
@@ -302,6 +302,8 @@ call_bail (void *data)
gf_ops = gf_cbks;
gf_op_list = gf_cbk_list;
break;
+ default:
+ goto out;
}
localtime_r (&trav->saved_at.tv_sec, &frame_sent_tm);
@@ -3255,6 +3257,9 @@ client_lookup (call_frame_t *frame, xlator_t *this, loc_t *loc,
client_local_t *local = NULL;
char *buf = NULL;
+ GF_VALIDATE_OR_GOTO (this->name, loc, unwind);
+ GF_VALIDATE_OR_GOTO (this->name, loc->path, unwind);
+
local = GF_CALLOC (1, sizeof (*local), gf_client_mt_client_local_t);
GF_VALIDATE_OR_GOTO (this->name, local, unwind);
@@ -3262,9 +3267,6 @@ client_lookup (call_frame_t *frame, xlator_t *this, loc_t *loc,
frame->local = local;
- GF_VALIDATE_OR_GOTO (this->name, loc, unwind);
- GF_VALIDATE_OR_GOTO (this->name, loc->path, unwind);
-
if (loc->ino != 1 && loc->parent) {
ret = inode_ctx_get2 (loc->parent, this, &par, &gen);
if (loc->parent->ino && ret < 0) {
@@ -3319,7 +3321,7 @@ client_lookup (call_frame_t *frame, xlator_t *this, loc_t *loc,
return ret;
unwind:
- STACK_UNWIND (frame, op_ret, op_errno, loc->inode, NULL, NULL);
+ STACK_UNWIND (frame, op_ret, op_errno, (loc)?loc->inode:NULL, NULL, NULL);
return ret;
}
diff --git a/xlators/protocol/legacy/server/src/server-helpers.c b/xlators/protocol/legacy/server/src/server-helpers.c
index 7ab2ce88531..595916a3656 100644
--- a/xlators/protocol/legacy/server/src/server-helpers.c
+++ b/xlators/protocol/legacy/server/src/server-helpers.c
@@ -427,15 +427,17 @@ server_connection_destroy (xlator_t *this, server_connection_t *conn)
INIT_LIST_HEAD (&file_lockers);
INIT_LIST_HEAD (&dir_lockers);
- LOCK (&ltable->lock);
- {
- list_splice_init (&ltable->file_lockers,
- &file_lockers);
+ if (ltable) {
+ LOCK (&ltable->lock);
+ {
+ list_splice_init (&ltable->file_lockers,
+ &file_lockers);
- list_splice_init (&ltable->dir_lockers, &dir_lockers);
+ list_splice_init (&ltable->dir_lockers, &dir_lockers);
+ }
+ UNLOCK (&ltable->lock);
+ GF_FREE (ltable);
}
- UNLOCK (&ltable->lock);
- GF_FREE (ltable);
flock.l_type = F_UNLCK;
flock.l_start = 0;
diff --git a/xlators/protocol/legacy/server/src/server-protocol.c b/xlators/protocol/legacy/server/src/server-protocol.c
index 6a48dff390a..da0303019a3 100644
--- a/xlators/protocol/legacy/server/src/server-protocol.c
+++ b/xlators/protocol/legacy/server/src/server-protocol.c
@@ -147,7 +147,7 @@ server_print_params (char *str, int size, server_state_t *state)
"wbflags=%d,", state->wbflags);
if (state->size)
filled += snprintf (str + filled, size - filled,
- "size=%Zu,", state->size);
+ "size=%zu,", state->size);
if (state->offset)
filled += snprintf (str + filled, size - filled,
"offset=%"PRId64",", state->offset);
@@ -667,8 +667,8 @@ server_fentrylk_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
gf_errno = gf_errno_to_error (op_errno);
hdr->rsp.op_errno = hton32 (gf_errno);
+ state = CALL_STATE(frame);
if (op_ret >= 0) {
- state = CALL_STATE(frame);
if (state->cmd == ENTRYLK_UNLOCK)
gf_del_locker (conn->ltable, state->volume,
NULL, state->fd, frame->root->pid);
@@ -5656,7 +5656,7 @@ mop_setvolume (call_frame_t *frame, xlator_t *bound_xl,
fail:
dict_len = dict_serialized_length (reply);
if (dict_len < 0) {
- gf_log (xl->name, GF_LOG_DEBUG,
+ gf_log ("server", GF_LOG_DEBUG,
"failed to get serialized length of reply dict");
op_ret = -1;
op_errno = EINVAL;
@@ -5670,7 +5670,7 @@ fail:
if (dict_len) {
ret = dict_serialize (reply, rsp->buf);
if (ret < 0) {
- gf_log (xl->name, GF_LOG_DEBUG,
+ gf_log ("server", GF_LOG_DEBUG,
"failed to serialize reply dict");
op_ret = -1;
op_errno = -ret;
@@ -6524,15 +6524,19 @@ int
notify (xlator_t *this, int32_t event, void *data, ...)
{
int ret = 0;
- transport_t *trans = data;
+ transport_t *trans = NULL;
peer_info_t *peerinfo = NULL;
peer_info_t *myinfo = NULL;
- if (trans != NULL) {
- peerinfo = &(trans->peerinfo);
- myinfo = &(trans->myinfo);
+ trans = data;
+ if (!trans) {
+ gf_log (this->name, GF_LOG_ERROR, "!trans");
+ goto out;
}
+ peerinfo = &(trans->peerinfo);
+ myinfo = &(trans->myinfo);
+
switch (event) {
case GF_EVENT_POLLIN:
ret = protocol_server_pollin (this, trans);
@@ -6576,7 +6580,7 @@ notify (xlator_t *this, int32_t event, void *data, ...)
default_notify (this, event, data);
break;
}
-
+out:
return ret;
}
diff --git a/xlators/protocol/legacy/transport/ib-verbs/src/ib-verbs.c b/xlators/protocol/legacy/transport/ib-verbs/src/ib-verbs.c
index 6714d32e7d8..85228bf4e58 100644
--- a/xlators/protocol/legacy/transport/ib-verbs/src/ib-verbs.c
+++ b/xlators/protocol/legacy/transport/ib-verbs/src/ib-verbs.c
@@ -1718,8 +1718,8 @@ ib_verbs_init (transport_t *this)
if (!priv->device) {
gf_log ("transport/ib-verbs", GF_LOG_ERROR,
- "could not create ib_verbs device for %s",
- priv->device->device_name);
+ "could not create ib_verbs device for %s",
+ options->device_name);
ret = -1;
goto cleanup;
}
diff --git a/xlators/protocol/server/src/server-handshake.c b/xlators/protocol/server/src/server-handshake.c
index bc4d4afa253..94586d20c53 100644
--- a/xlators/protocol/server/src/server-handshake.c
+++ b/xlators/protocol/server/src/server-handshake.c
@@ -614,7 +614,7 @@ server_setvolume (rpcsvc_request_t *req)
fail:
rsp.dict.dict_len = dict_serialized_length (reply);
if (rsp.dict.dict_len < 0) {
- gf_log (this->name, GF_LOG_DEBUG,
+ gf_log ("server-handshake", GF_LOG_DEBUG,
"failed to get serialized length of reply dict");
op_ret = -1;
op_errno = EINVAL;
@@ -627,7 +627,7 @@ fail:
if (rsp.dict.dict_val) {
ret = dict_serialize (reply, rsp.dict.dict_val);
if (ret < 0) {
- gf_log (this->name, GF_LOG_DEBUG,
+ gf_log ("server-handshake", GF_LOG_DEBUG,
"failed to serialize reply dict");
op_ret = -1;
op_errno = -ret;
diff --git a/xlators/protocol/server/src/server-helpers.c b/xlators/protocol/server/src/server-helpers.c
index 11c489e8867..216204a8ba0 100644
--- a/xlators/protocol/server/src/server-helpers.c
+++ b/xlators/protocol/server/src/server-helpers.c
@@ -541,15 +541,17 @@ server_connection_destroy (xlator_t *this, server_connection_t *conn)
INIT_LIST_HEAD (&file_lockers);
INIT_LIST_HEAD (&dir_lockers);
- LOCK (&ltable->lock);
- {
- list_splice_init (&ltable->file_lockers,
- &file_lockers);
+ if (ltable) {
+ LOCK (&ltable->lock);
+ {
+ list_splice_init (&ltable->file_lockers,
+ &file_lockers);
- list_splice_init (&ltable->dir_lockers, &dir_lockers);
+ list_splice_init (&ltable->dir_lockers, &dir_lockers);
+ }
+ UNLOCK (&ltable->lock);
+ GF_FREE (ltable);
}
- UNLOCK (&ltable->lock);
- GF_FREE (ltable);
flock.l_type = F_UNLCK;
flock.l_start = 0;
@@ -1030,7 +1032,7 @@ server_print_params (char *str, int size, server_state_t *state)
"wbflags=%d,", state->wbflags);
if (state->size)
filled += snprintf (str + filled, size - filled,
- "size=%Zu,", state->size);
+ "size=%zu,", state->size);
if (state->offset)
filled += snprintf (str + filled, size - filled,
"offset=%"PRId64",", state->offset);
diff --git a/xlators/protocol/server/src/server.c b/xlators/protocol/server/src/server.c
index 104274edd02..a7501babbcc 100644
--- a/xlators/protocol/server/src/server.c
+++ b/xlators/protocol/server/src/server.c
@@ -593,10 +593,9 @@ init (xlator_t *this)
ret = 0;
out:
- if (ret)
+ if (ret && this)
this->fini (this);
-
return ret;
}
diff --git a/xlators/protocol/server/src/server3_1-fops.c b/xlators/protocol/server/src/server3_1-fops.c
index 686c0350d0b..c04861ddf10 100644
--- a/xlators/protocol/server/src/server3_1-fops.c
+++ b/xlators/protocol/server/src/server3_1-fops.c
@@ -4737,7 +4737,7 @@ server_lookup (rpcsvc_request_t *req)
if (buf == NULL) {
gf_log (conn->bound_xl->name, GF_LOG_ERROR,
"out of memory");
- goto err;
+ goto out;
}
ret = dict_unserialize (buf, args.dict.dict_len,
@@ -4748,7 +4748,7 @@ server_lookup (rpcsvc_request_t *req)
"unserialize req-buffer to dictionary",
frame->root->unique, state->resolve.path,
state->resolve.ino);
- goto err;
+ goto out;
}
state->dict = xattr_req;
@@ -4761,7 +4761,7 @@ server_lookup (rpcsvc_request_t *req)
resolve_and_resume (frame, server_lookup_resume);
return 0;
-err:
+out:
if (xattr_req)
dict_unref (xattr_req);
@@ -4771,7 +4771,7 @@ err:
server_lookup_cbk (frame, NULL, frame->this, -1, EINVAL, NULL, NULL,
NULL, NULL);
-
+err:
return 0;
}
diff --git a/xlators/storage/posix/src/posix.c b/xlators/storage/posix/src/posix.c
index e9a8fc88692..2aba365e62b 100644
--- a/xlators/storage/posix/src/posix.c
+++ b/xlators/storage/posix/src/posix.c
@@ -530,7 +530,7 @@ out:
dict_ref (xattr);
STACK_UNWIND_STRICT (lookup, frame, op_ret, op_errno,
- loc->inode, &buf, xattr, &postparent);
+ (loc)?loc->inode:NULL, &buf, xattr, &postparent);
if (xattr)
dict_unref (xattr);
@@ -1175,7 +1175,7 @@ posix_mknod (call_frame_t *frame, xlator_t *this,
SET_TO_OLD_FS_ID ();
STACK_UNWIND_STRICT (mknod, frame, op_ret, op_errno,
- loc->inode, &stbuf, &preparent, &postparent);
+ (loc)?loc->inode:NULL, &stbuf, &preparent, &postparent);
if ((op_ret == -1) && (!was_present)) {
unlink (real_path);
@@ -1430,7 +1430,7 @@ posix_mkdir (call_frame_t *frame, xlator_t *this,
SET_TO_OLD_FS_ID ();
STACK_UNWIND_STRICT (mkdir, frame, op_ret, op_errno,
- loc->inode, &stbuf, &preparent, &postparent);
+ (loc)?loc->inode:NULL, &stbuf, &preparent, &postparent);
if ((op_ret == -1) && (!was_present)) {
unlink (real_path);
@@ -1702,7 +1702,7 @@ posix_symlink (call_frame_t *frame, xlator_t *this,
SET_TO_OLD_FS_ID ();
STACK_UNWIND_STRICT (symlink, frame, op_ret, op_errno,
- loc->inode, &stbuf, &preparent, &postparent);
+ (loc)?loc->inode:NULL, &stbuf, &preparent, &postparent);
if ((op_ret == -1) && (!was_present)) {
unlink (real_path);
@@ -1925,7 +1925,8 @@ posix_link (call_frame_t *frame, xlator_t *this,
SET_TO_OLD_FS_ID ();
STACK_UNWIND_STRICT (link, frame, op_ret, op_errno,
- oldloc->inode, &stbuf, &preparent, &postparent);
+ (oldloc)?oldloc->inode:NULL, &stbuf, &preparent,
+ &postparent);
if ((op_ret == -1) && (!was_present)) {
unlink (real_newpath);
@@ -2145,7 +2146,8 @@ posix_create (call_frame_t *frame, xlator_t *this,
}
STACK_UNWIND_STRICT (create, frame, op_ret, op_errno,
- fd, loc->inode, &stbuf, &preparent, &postparent);
+ fd, (loc)?loc->inode:NULL, &stbuf, &preparent,
+ &postparent);
return 0;
}
@@ -3543,11 +3545,11 @@ do_xattrop (call_frame_t *frame, xlator_t *this,
if (loc) {
path = gf_strdup (loc->path);
inode = loc->inode;
- } else {
+ } else if (fd) {
inode = fd->inode;
}
- while (trav) {
+ while (trav && inode) {
count = trav->value->len / sizeof (int32_t);
array = GF_CALLOC (count, sizeof (int32_t),
gf_posix_mt_int32_t);