From 19e646f0b6a781334cf1e29c23dd400d790b3be2 Mon Sep 17 00:00:00 2001 From: Hari Gowtham Date: Thu, 12 Jul 2018 14:02:03 +0530 Subject: core: dereference check on the variables in glusterfs_handle_brick_status problem: In a race condition, the active->first which is supposed to be filled is NULL and trying to dereference it crashs. back trace: Core was generated by `/usr/sbin/glusterfsd -s bxts470192.eu.rabonet.com --volfile-id prod_xvavol.bxts'. Program terminated with signal 11, Segmentation fault. 1029 any = active->first; (gdb) bt Change-Id: Ia6291865319a9456b8b01a5251be2679c4985b7c fixes: bz#1600451 Signed-off-by: Hari Gowtham --- glusterfsd/src/glusterfsd-mgmt.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'glusterfsd') diff --git a/glusterfsd/src/glusterfsd-mgmt.c b/glusterfsd/src/glusterfsd-mgmt.c index 7122fc0d127..f1b2f9e7123 100644 --- a/glusterfsd/src/glusterfsd-mgmt.c +++ b/glusterfsd/src/glusterfsd-mgmt.c @@ -1127,8 +1127,23 @@ glusterfs_handle_brick_status (rpcsvc_request_t *req) } ctx = glusterfsd_ctx; - GF_ASSERT (ctx); + if (ctx == NULL) { + gf_log (this->name, GF_LOG_ERROR, "ctx returned NULL"); + ret = -1; + goto out; + } + if (ctx->active == NULL) { + gf_log (this->name, GF_LOG_ERROR, "ctx->active returned NULL"); + ret = -1; + goto out; + } active = ctx->active; + if (ctx->active->first == NULL) { + gf_log (this->name, GF_LOG_ERROR, "ctx->active->first " + "returned NULL"); + ret = -1; + goto out; + } server_xl = active->first; brick_xl = get_xlator_by_name (server_xl, brickname); -- cgit