d1681e
From 6869ad72b95983975675a4b920df8fea1edcfca4 Mon Sep 17 00:00:00 2001
d1681e
From: Hari Gowtham <hgowtham@redhat.com>
d1681e
Date: Thu, 12 Jul 2018 14:02:03 +0530
d1681e
Subject: [PATCH 325/325] core: dereference check on the variables in
d1681e
 glusterfs_handle_brick_status
d1681e
d1681e
	back-port of:https://review.gluster.org/#/c/20498/
d1681e
d1681e
problem: In a race condition, the active->first which is supposed to be filled
d1681e
is NULL and trying to dereference it crashs.
d1681e
d1681e
back trace:
d1681e
Core was generated by `/usr/sbin/glusterfsd -s bxts470192.eu.rabonet.com --volfile-id prod_xvavol.bxts'.
d1681e
Program terminated with signal 11, Segmentation fault.
d1681e
1029            any = active->first;
d1681e
(gdb) bt
d1681e
d1681e
>Change-Id: Ia6291865319a9456b8b01a5251be2679c4985b7c
d1681e
>fixes: bz#1600451
d1681e
>Signed-off-by: Hari Gowtham <hgowtham@redhat.com>
d1681e
d1681e
Change-Id: Ia6291865319a9456b8b01a5251be2679c4985b7c
d1681e
BUG: 1600057
d1681e
Signed-off-by: Hari Gowtham <hgowtham@redhat.com>
d1681e
Reviewed-on: https://code.engineering.redhat.com/gerrit/144258
d1681e
Tested-by: RHGS Build Bot <nigelb@redhat.com>
d1681e
Reviewed-by: Sunil Kumar Heggodu Gopala Acharya <sheggodu@redhat.com>
d1681e
---
d1681e
 glusterfsd/src/glusterfsd-mgmt.c | 17 ++++++++++++++++-
d1681e
 1 file changed, 16 insertions(+), 1 deletion(-)
d1681e
d1681e
diff --git a/glusterfsd/src/glusterfsd-mgmt.c b/glusterfsd/src/glusterfsd-mgmt.c
d1681e
index 2167241..30a717f 100644
d1681e
--- a/glusterfsd/src/glusterfsd-mgmt.c
d1681e
+++ b/glusterfsd/src/glusterfsd-mgmt.c
d1681e
@@ -1150,8 +1150,23 @@ glusterfs_handle_brick_status (rpcsvc_request_t *req)
d1681e
         }
d1681e
 
d1681e
         ctx = glusterfsd_ctx;
d1681e
-        GF_ASSERT (ctx);
d1681e
+        if (ctx == NULL) {
d1681e
+                gf_log (this->name, GF_LOG_ERROR, "ctx returned NULL");
d1681e
+                ret = -1;
d1681e
+                goto out;
d1681e
+        }
d1681e
+        if (ctx->active == NULL) {
d1681e
+                gf_log (this->name, GF_LOG_ERROR, "ctx->active returned NULL");
d1681e
+                ret = -1;
d1681e
+                goto out;
d1681e
+        }
d1681e
         active = ctx->active;
d1681e
+        if (ctx->active->first == NULL) {
d1681e
+                gf_log (this->name, GF_LOG_ERROR, "ctx->active->first "
d1681e
+                        "returned NULL");
d1681e
+                ret = -1;
d1681e
+                goto out;
d1681e
+        }
d1681e
         server_xl = active->first;
d1681e
 
d1681e
         brick_xl = get_xlator_by_name (server_xl, brickname);
d1681e
-- 
d1681e
1.8.3.1
d1681e