summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAmar Tumballi <amar@gluster.com>2010-09-30 02:31:47 +0000
committerVijay Bellur <vijay@dev.gluster.com>2010-09-30 01:52:09 -0700
commit65c704747809e126edde164cd0ce9f98ea7f6dc8 (patch)
tree95f38b70f704016148b0f88b49d6bd37f72e8aaf
parent76b0e35e7809c38e62f33b5068c61623a6914d5f (diff)
protocol/client: handle more NULL dereference
Signed-off-by: Amar Tumballi <amar@gluster.com> Signed-off-by: Vijay Bellur <vijay@dev.gluster.com> BUG: 1745 () URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=1745
-rw-r--r--xlators/protocol/client/src/client.c93
1 files changed, 50 insertions, 43 deletions
diff --git a/xlators/protocol/client/src/client.c b/xlators/protocol/client/src/client.c
index 2a3502f3cf9..726a9dad792 100644
--- a/xlators/protocol/client/src/client.c
+++ b/xlators/protocol/client/src/client.c
@@ -145,7 +145,7 @@ client_releasedir (xlator_t *this, fd_t *fd)
call_frame_t *frame = NULL;
conf = this->private;
- if (!conf->fops)
+ if (!conf || !conf->fops)
goto out;
args.fd = fd;
@@ -175,7 +175,7 @@ client_release (xlator_t *this, fd_t *fd)
call_frame_t *frame = NULL;
conf = this->private;
- if (!conf->fops)
+ if (!conf || !conf->fops)
goto out;
args.fd = fd;
@@ -205,7 +205,7 @@ client_lookup (call_frame_t *frame, xlator_t *this, loc_t *loc,
clnt_args_t args = {0,};
conf = this->private;
- if (!conf->fops)
+ if (!conf || !conf->fops)
goto out;
args.loc = loc;
@@ -233,7 +233,7 @@ client_stat (call_frame_t *frame, xlator_t *this, loc_t *loc)
clnt_args_t args = {0,};
conf = this->private;
- if (!conf->fops)
+ if (!conf || !conf->fops)
goto out;
args.loc = loc;
@@ -259,7 +259,7 @@ client_truncate (call_frame_t *frame, xlator_t *this, loc_t *loc, off_t offset)
clnt_args_t args = {0,};
conf = this->private;
- if (!conf->fops)
+ if (!conf || !conf->fops)
goto out;
args.loc = loc;
@@ -286,7 +286,7 @@ client_ftruncate (call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset)
clnt_args_t args = {0,};
conf = this->private;
- if (!conf->fops)
+ if (!conf || !conf->fops)
goto out;
args.fd = fd;
@@ -313,7 +313,7 @@ client_access (call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t mask)
clnt_args_t args = {0,};
conf = this->private;
- if (!conf->fops)
+ if (!conf || !conf->fops)
goto out;
args.loc = loc;
@@ -341,7 +341,7 @@ client_readlink (call_frame_t *frame, xlator_t *this, loc_t *loc, size_t size)
clnt_args_t args = {0,};
conf = this->private;
- if (!conf->fops)
+ if (!conf || !conf->fops)
goto out;
args.loc = loc;
@@ -368,7 +368,7 @@ client_mknod (call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,
clnt_args_t args = {0,};
conf = this->private;
- if (!conf->fops)
+ if (!conf || !conf->fops)
goto out;
args.loc = loc;
@@ -398,7 +398,7 @@ client_mkdir (call_frame_t *frame, xlator_t *this, loc_t *loc,
clnt_args_t args = {0,};
conf = this->private;
- if (!conf->fops)
+ if (!conf || !conf->fops)
goto out;
args.loc = loc;
@@ -427,7 +427,7 @@ client_unlink (call_frame_t *frame, xlator_t *this, loc_t *loc)
clnt_args_t args = {0,};
conf = this->private;
- if (!conf->fops)
+ if (!conf || !conf->fops)
goto out;
args.loc = loc;
@@ -452,7 +452,7 @@ client_rmdir (call_frame_t *frame, xlator_t *this, loc_t *loc)
clnt_args_t args = {0,};
conf = this->private;
- if (!conf->fops)
+ if (!conf || !conf->fops)
goto out;
args.loc = loc;
@@ -480,7 +480,7 @@ client_symlink (call_frame_t *frame, xlator_t *this, const char *linkpath,
clnt_args_t args = {0,};
conf = this->private;
- if (!conf->fops)
+ if (!conf || !conf->fops)
goto out;
args.linkname = linkpath;
@@ -510,7 +510,7 @@ client_rename (call_frame_t *frame, xlator_t *this, loc_t *oldloc,
clnt_args_t args = {0,};
conf = this->private;
- if (!conf->fops)
+ if (!conf || !conf->fops)
goto out;
args.oldloc = oldloc;
@@ -538,7 +538,7 @@ client_link (call_frame_t *frame, xlator_t *this, loc_t *oldloc,
clnt_args_t args = {0,};
conf = this->private;
- if (!conf->fops)
+ if (!conf || !conf->fops)
goto out;
args.oldloc = oldloc;
@@ -567,7 +567,7 @@ client_create (call_frame_t *frame, xlator_t *this, loc_t *loc,
clnt_args_t args = {0,};
conf = this->private;
- if (!conf->fops)
+ if (!conf || !conf->fops)
goto out;
args.loc = loc;
@@ -599,7 +599,7 @@ client_open (call_frame_t *frame, xlator_t *this, loc_t *loc,
clnt_args_t args = {0,};
conf = this->private;
- if (!conf->fops)
+ if (!conf || !conf->fops)
goto out;
args.loc = loc;
@@ -630,7 +630,7 @@ client_readv (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,
clnt_args_t args = {0,};
conf = this->private;
- if (!conf->fops)
+ if (!conf || !conf->fops)
goto out;
args.fd = fd;
@@ -663,7 +663,7 @@ client_writev (call_frame_t *frame, xlator_t *this, fd_t *fd,
clnt_args_t args = {0,};
conf = this->private;
- if (!conf->fops)
+ if (!conf || !conf->fops)
goto out;
args.fd = fd;
@@ -693,7 +693,7 @@ client_flush (call_frame_t *frame, xlator_t *this, fd_t *fd)
clnt_args_t args = {0,};
conf = this->private;
- if (!conf->fops)
+ if (!conf || !conf->fops)
goto out;
args.fd = fd;
@@ -720,7 +720,7 @@ client_fsync (call_frame_t *frame, xlator_t *this, fd_t *fd,
clnt_args_t args = {0,};
conf = this->private;
- if (!conf->fops)
+ if (!conf || !conf->fops)
goto out;
args.fd = fd;
@@ -747,7 +747,7 @@ client_fstat (call_frame_t *frame, xlator_t *this, fd_t *fd)
clnt_args_t args = {0,};
conf = this->private;
- if (!conf->fops)
+ if (!conf || !conf->fops)
goto out;
args.fd = fd;
@@ -773,7 +773,7 @@ client_opendir (call_frame_t *frame, xlator_t *this, loc_t *loc, fd_t *fd)
clnt_args_t args = {0,};
conf = this->private;
- if (!conf->fops)
+ if (!conf || !conf->fops)
goto out;
args.loc = loc;
@@ -800,7 +800,7 @@ client_fsyncdir (call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t flags)
clnt_args_t args = {0,};
conf = this->private;
- if (!conf->fops)
+ if (!conf || !conf->fops)
goto out;
args.fd = fd;
@@ -827,7 +827,7 @@ client_statfs (call_frame_t *frame, xlator_t *this, loc_t *loc)
clnt_args_t args = {0,};
conf = this->private;
- if (!conf->fops)
+ if (!conf || !conf->fops)
goto out;
args.loc = loc;
@@ -983,7 +983,7 @@ client_setxattr (call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *dict,
}
conf = this->private;
- if (!conf->fops) {
+ if (!conf || !conf->fops) {
op_errno = ENOTCONN;
need_unwind = 1;
goto out;
@@ -1021,7 +1021,7 @@ client_fsetxattr (call_frame_t *frame, xlator_t *this, fd_t *fd,
clnt_args_t args = {0,};
conf = this->private;
- if (!conf->fops)
+ if (!conf || !conf->fops)
goto out;
args.fd = fd;
@@ -1051,7 +1051,7 @@ client_fgetxattr (call_frame_t *frame, xlator_t *this, fd_t *fd,
clnt_args_t args = {0,};
conf = this->private;
- if (!conf->fops)
+ if (!conf || !conf->fops)
goto out;
args.fd = fd;
@@ -1079,7 +1079,7 @@ client_getxattr (call_frame_t *frame, xlator_t *this, loc_t *loc,
clnt_args_t args = {0,};
conf = this->private;
- if (!conf->fops)
+ if (!conf || !conf->fops)
goto out;
args.name = name;
@@ -1107,7 +1107,7 @@ client_xattrop (call_frame_t *frame, xlator_t *this, loc_t *loc,
clnt_args_t args = {0,};
conf = this->private;
- if (!conf->fops)
+ if (!conf || !conf->fops)
goto out;
args.loc = loc;
@@ -1136,7 +1136,7 @@ client_fxattrop (call_frame_t *frame, xlator_t *this, fd_t *fd,
clnt_args_t args = {0,};
conf = this->private;
- if (!conf->fops)
+ if (!conf || !conf->fops)
goto out;
args.fd = fd;
@@ -1165,7 +1165,7 @@ client_removexattr (call_frame_t *frame, xlator_t *this, loc_t *loc,
clnt_args_t args = {0,};
conf = this->private;
- if (!conf->fops)
+ if (!conf || !conf->fops)
goto out;
args.name = name;
@@ -1192,7 +1192,7 @@ client_lk (call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t cmd,
clnt_args_t args = {0,};
conf = this->private;
- if (!conf->fops)
+ if (!conf || !conf->fops)
goto out;
args.fd = fd;
@@ -1220,7 +1220,7 @@ client_inodelk (call_frame_t *frame, xlator_t *this, const char *volume,
clnt_args_t args = {0,};
conf = this->private;
- if (!conf->fops)
+ if (!conf || !conf->fops)
goto out;
args.loc = loc;
@@ -1250,7 +1250,7 @@ client_finodelk (call_frame_t *frame, xlator_t *this, const char *volume,
clnt_args_t args = {0,};
conf = this->private;
- if (!conf->fops)
+ if (!conf || !conf->fops)
goto out;
args.fd = fd;
@@ -1280,7 +1280,7 @@ client_entrylk (call_frame_t *frame, xlator_t *this, const char *volume,
clnt_args_t args = {0,};
conf = this->private;
- if (!conf->fops)
+ if (!conf || !conf->fops)
goto out;
args.loc = loc;
@@ -1312,7 +1312,7 @@ client_fentrylk (call_frame_t *frame, xlator_t *this, const char *volume,
clnt_args_t args = {0,};
conf = this->private;
- if (!conf->fops)
+ if (!conf || !conf->fops)
goto out;
args.fd = fd;
@@ -1342,7 +1342,7 @@ client_rchecksum (call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,
clnt_args_t args = {0,};
conf = this->private;
- if (!conf->fops)
+ if (!conf || !conf->fops)
goto out;
args.fd = fd;
@@ -1369,7 +1369,7 @@ client_readdir (call_frame_t *frame, xlator_t *this, fd_t *fd,
clnt_args_t args = {0,};
conf = this->private;
- if (!conf->fops)
+ if (!conf || !conf->fops)
goto out;
args.fd = fd;
@@ -1397,7 +1397,7 @@ client_readdirp (call_frame_t *frame, xlator_t *this, fd_t *fd,
clnt_args_t args = {0,};
conf = this->private;
- if (!conf->fops)
+ if (!conf || !conf->fops)
goto out;
args.fd = fd;
@@ -1425,7 +1425,7 @@ client_setattr (call_frame_t *frame, xlator_t *this, loc_t *loc,
clnt_args_t args = {0,};
conf = this->private;
- if (!conf->fops)
+ if (!conf || !conf->fops)
goto out;
args.loc = loc;
@@ -1452,7 +1452,7 @@ client_fsetattr (call_frame_t *frame, xlator_t *this, fd_t *fd,
clnt_args_t args = {0,};
conf = this->private;
- if (!conf->fops)
+ if (!conf || !conf->fops)
goto out;
args.fd = fd;
@@ -1480,7 +1480,7 @@ client_getspec (call_frame_t *frame, xlator_t *this, const char *key,
clnt_args_t args = {0,};
conf = this->private;
- if (!conf->fops || !conf->handshake)
+ if (!conf || !conf->fops || !conf->handshake)
goto out;
args.name = key;
@@ -1591,6 +1591,8 @@ notify (xlator_t *this, int32_t event, void *data, ...)
void *trans = NULL;
conf = this->private;
+ if (!conf)
+ return 0;
switch (event) {
case GF_EVENT_PARENT_UP:
@@ -1628,6 +1630,9 @@ build_client_config (xlator_t *this, clnt_conf_t *conf)
{
int ret = 0;
+ if (!conf)
+ return -1;
+
ret = dict_get_int32 (this->options, "frame-timeout",
&conf->rpc_conf.rpc_timeout);
if (ret >= 0) {
@@ -1703,6 +1708,8 @@ client_destroy_rpc (xlator_t *this)
clnt_conf_t *conf = NULL;
conf = this->private;
+ if (!conf)
+ goto out;
if (conf->rpc) {
conf->rpc = rpc_clnt_unref (conf->rpc);