diff options
| author | Jeff Darcy <jdarcy@redhat.com> | 2017-03-09 12:49:27 -0500 | 
|---|---|---|
| committer | Vijay Bellur <vbellur@redhat.com> | 2017-03-09 21:14:33 -0500 | 
| commit | 90b2b9b29f552fe9ab53de5c4123003522399e6d (patch) | |
| tree | 9e7e036828e567f374d0b8b7f6a6576cb1421f7b | |
| parent | 53e2c875cf97df8337f7ddb5124df2fc6dd37bca (diff) | |
glusterfsd+libglusterfs: add null checks during attach
It's possible (though unlikely) that we could get a brick-attach
request while we're not ready to process it (ctx->active not set yet).
Add code to guard against this possibility, and return appropriate
error indicators.
Change-Id: Icb3bc52ce749258a3f03cbbbdf4c2320c5c541a0
BUG: 1430860
Signed-off-by: Jeff Darcy <jdarcy@redhat.com>
Reviewed-on: https://review.gluster.org/16883
Smoke: Gluster Build System <jenkins@build.gluster.org>
NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
Reviewed-by: Vijay Bellur <vbellur@redhat.com>
| -rw-r--r-- | glusterfsd/src/glusterfsd-mgmt.c | 27 | ||||
| -rw-r--r-- | libglusterfs/src/graph.c | 4 | 
2 files changed, 22 insertions, 9 deletions
diff --git a/glusterfsd/src/glusterfsd-mgmt.c b/glusterfsd/src/glusterfsd-mgmt.c index c3b9a6d8cc2..479b49f461a 100644 --- a/glusterfsd/src/glusterfsd-mgmt.c +++ b/glusterfsd/src/glusterfsd-mgmt.c @@ -824,9 +824,9 @@ out:  int  glusterfs_handle_attach (rpcsvc_request_t *req)  { -        int32_t                  ret          = -1; -        gd1_mgmt_brick_op_req    xlator_req   = {0,}; -        xlator_t                 *this        = NULL; +        int32_t                 ret             = -1; +        gd1_mgmt_brick_op_req   xlator_req      = {0,}; +        xlator_t                *this           = NULL;          GF_ASSERT (req);          this = THIS; @@ -838,15 +838,24 @@ glusterfs_handle_attach (rpcsvc_request_t *req)          if (ret < 0) {                  /*failed to decode msg;*/                  req->rpc_err = GARBAGE_ARGS; -                goto out; +                return -1;          } -        gf_log (this->name, GF_LOG_INFO, "got attach for %s", xlator_req.name); -        glusterfs_graph_attach (this->ctx->active, xlator_req.name); -        glusterfs_autoscale_threads (this->ctx, 1); +        if (this->ctx->active) { +                gf_log (this->name, GF_LOG_INFO, +                        "got attach for %s", xlator_req.name); +                ret = glusterfs_graph_attach (this->ctx->active, +                                              xlator_req.name); +                if (ret == 0) { +                        glusterfs_autoscale_threads (this->ctx, 1); +                } +        } else { +                gf_log (this->name, GF_LOG_WARNING, +                        "got attach for %s but no active graph", +                        xlator_req.name); +        } -out: -        glusterfs_translator_info_response_send (req, 0, NULL, NULL); +        glusterfs_translator_info_response_send (req, ret, NULL, NULL);          free (xlator_req.input.input_val);          free (xlator_req.name); diff --git a/libglusterfs/src/graph.c b/libglusterfs/src/graph.c index 0c7d6cf6101..916942c3a2d 100644 --- a/libglusterfs/src/graph.c +++ b/libglusterfs/src/graph.c @@ -1040,6 +1040,10 @@ glusterfs_graph_attach (glusterfs_graph_t *orig_graph, char *path)          xlator_t                *xl;          char                    *volfile_id; +        if (!orig_graph) { +                return -EINVAL; +        } +          fp = fopen (path, "r");          if (!fp) {                  gf_log (THIS->name, GF_LOG_WARNING,  | 
