summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeff Darcy <jdarcy@redhat.com>2017-03-09 12:49:27 -0500
committerShyamsundar Ranganathan <srangana@redhat.com>2017-03-10 14:51:13 -0500
commit41eba3545c46c4cd0b9fcf6fc87284adc64ebcf5 (patch)
tree27d3b3a34aa13e89c15aefefc50d4ccde6cd81b8
parente6c10359ab90178f89aa23ae9328174c2602e88d (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. Backport of: > 90b2b9b29f552fe9ab53de5c4123003522399e6d > BUG: 1430860 > Reviewed-on: https://review.gluster.org/16883 Change-Id: Icb3bc52ce749258a3f03cbbbdf4c2320c5c541a0 BUG: 1422769 Signed-off-by: Jeff Darcy <jdarcy@redhat.com> Reviewed-on: https://review.gluster.org/16888 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: Shyamsundar Ranganathan <srangana@redhat.com>
-rw-r--r--glusterfsd/src/glusterfsd-mgmt.c27
-rw-r--r--libglusterfs/src/graph.c4
2 files changed, 22 insertions, 9 deletions
diff --git a/glusterfsd/src/glusterfsd-mgmt.c b/glusterfsd/src/glusterfsd-mgmt.c
index 89eaa29db25..ee61b963dcb 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,