diff options
author | Pranith Kumar K <pkarampu@redhat.com> | 2020-05-03 09:59:41 +0530 |
---|---|---|
committer | Pranith Kumar K <pkarampu@redhat.com> | 2020-05-03 10:16:19 +0530 |
commit | 29d6b944b91df982f10581b0c17004089358e88c (patch) | |
tree | 8a3ce106ee4a8efc937c731f5838fbb534f85f71 | |
parent | c8d733c3ed39f297d0f56052c6dc4d02aecdbc4d (diff) |
cluster/dht: Don't access local after STACK_DESTROY
There is a possibility that 'frame' could have been
destroyed in dht_selfheal_dir_setattr() which can
lead to local->mds_heal_fresh_lookup showing junk
non-zero number. That will lead to double
STACK_DESTROY. Remembered the value of the variable
before the call to fix the access.
Fixes: #1214
Change-Id: I37d1657798bfb549bb3887e260484d58fff42c91
Signed-off-by: Pranith Kumar K <pkarampu@redhat.com>
-rw-r--r-- | xlators/cluster/dht/src/dht-common.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/xlators/cluster/dht/src/dht-common.c b/xlators/cluster/dht/src/dht-common.c index dbdeb1b8433..d51faf96ba5 100644 --- a/xlators/cluster/dht/src/dht-common.c +++ b/xlators/cluster/dht/src/dht-common.c @@ -696,6 +696,7 @@ dht_common_mark_mdsxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int ret = -1; dht_conf_t *conf = 0; dht_layout_t *layout = NULL; + int32_t mds_heal_fresh_lookup = 0; GF_VALIDATE_OR_GOTO(this->name, frame, out); GF_VALIDATE_OR_GOTO(this->name, frame->local, out); @@ -703,6 +704,7 @@ dht_common_mark_mdsxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this, local = frame->local; conf = this->private; layout = local->selfheal.layout; + mds_heal_fresh_lookup = local->mds_heal_fresh_lookup; if (op_ret) { gf_msg_debug(this->name, op_ret, @@ -723,7 +725,7 @@ dht_common_mark_mdsxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this, layout); } out: - if (local && local->mds_heal_fresh_lookup) + if (mds_heal_fresh_lookup) DHT_STACK_DESTROY(frame); return 0; } |