diff options
author | Mohammed Rafi KC <rkavunga@redhat.com> | 2019-06-27 19:17:29 +0530 |
---|---|---|
committer | Mohammed Rafi KC <rkavunga@redhat.com> | 2019-06-27 19:59:54 +0530 |
commit | efa8477013d98a26283302ecb42d4ba606ce405e (patch) | |
tree | acc8fe6f69dac4ab3de25ee5d177a8e5425a9aff /xlators | |
parent | 5d66eafec581fb3209af74595784be8854ca40a4 (diff) |
graph/shd: Use top down approach while cleaning xlator
We were cleaning xlator from botton to top, which might
lead to problems when upper xlators trying to access
the xlator object loaded below.
One such scenario is when fd_unref happens as part of the
fini call which might lead to calling the releasedir to
lower xlator. This will lead to invalid mem access
Change-Id: I8a6cb619256fab0b0c01a2d564fc88287c4415a0
Updates: bz#1716695
Signed-off-by: Mohammed Rafi KC <rkavunga@redhat.com>
Diffstat (limited to 'xlators')
-rw-r--r-- | xlators/features/bit-rot/src/stub/bit-rot-stub.c | 1 | ||||
-rw-r--r-- | xlators/features/changelog/src/changelog.c | 1 | ||||
-rw-r--r-- | xlators/features/cloudsync/src/cloudsync.c | 4 | ||||
-rw-r--r-- | xlators/features/index/src/index.c | 1 | ||||
-rw-r--r-- | xlators/features/quiesce/src/quiesce.c | 1 | ||||
-rw-r--r-- | xlators/features/read-only/src/worm.c | 1 | ||||
-rw-r--r-- | xlators/features/sdfs/src/sdfs.c | 1 | ||||
-rw-r--r-- | xlators/features/selinux/src/selinux.c | 2 | ||||
-rw-r--r-- | xlators/features/trash/src/trash.c | 1 |
9 files changed, 12 insertions, 1 deletions
diff --git a/xlators/features/bit-rot/src/stub/bit-rot-stub.c b/xlators/features/bit-rot/src/stub/bit-rot-stub.c index e6d64de..de2184d 100644 --- a/xlators/features/bit-rot/src/stub/bit-rot-stub.c +++ b/xlators/features/bit-rot/src/stub/bit-rot-stub.c @@ -196,6 +196,7 @@ cleanup_lock: pthread_mutex_destroy(&priv->lock); free_mempool: mem_pool_destroy(priv->local_pool); + priv->local_pool = NULL; free_priv: GF_FREE(priv); this->private = NULL; diff --git a/xlators/features/changelog/src/changelog.c b/xlators/features/changelog/src/changelog.c index d9025f3..2862d1e 100644 --- a/xlators/features/changelog/src/changelog.c +++ b/xlators/features/changelog/src/changelog.c @@ -2790,6 +2790,7 @@ cleanup_options: changelog_freeup_options(this, priv); cleanup_mempool: mem_pool_destroy(this->local_pool); + this->local_pool = NULL; cleanup_priv: GF_FREE(priv); error_return: diff --git a/xlators/features/cloudsync/src/cloudsync.c b/xlators/features/cloudsync/src/cloudsync.c index 26e512c..0ad987e 100644 --- a/xlators/features/cloudsync/src/cloudsync.c +++ b/xlators/features/cloudsync/src/cloudsync.c @@ -200,8 +200,10 @@ cs_init(xlator_t *this) out: if (ret == -1) { - if (this->local_pool) + if (this->local_pool) { mem_pool_destroy(this->local_pool); + this->local_pool = NULL; + } cs_cleanup_private(priv); diff --git a/xlators/features/index/src/index.c b/xlators/features/index/src/index.c index 2f2a6d0..4ece7ff 100644 --- a/xlators/features/index/src/index.c +++ b/xlators/features/index/src/index.c @@ -2478,6 +2478,7 @@ out: GF_FREE(priv); this->private = NULL; mem_pool_destroy(this->local_pool); + this->local_pool = NULL; } if (attr_inited) diff --git a/xlators/features/quiesce/src/quiesce.c b/xlators/features/quiesce/src/quiesce.c index 218db9c..4b709f1 100644 --- a/xlators/features/quiesce/src/quiesce.c +++ b/xlators/features/quiesce/src/quiesce.c @@ -2527,6 +2527,7 @@ fini(xlator_t *this) this->private = NULL; mem_pool_destroy(priv->local_pool); + priv->local_pool = NULL; LOCK_DESTROY(&priv->lock); GF_FREE(priv); out: diff --git a/xlators/features/read-only/src/worm.c b/xlators/features/read-only/src/worm.c index f596638..48d62e0 100644 --- a/xlators/features/read-only/src/worm.c +++ b/xlators/features/read-only/src/worm.c @@ -576,6 +576,7 @@ fini(xlator_t *this) mem_put(priv); this->private = NULL; mem_pool_destroy(this->local_pool); + this->local_pool = NULL; out: return; } diff --git a/xlators/features/sdfs/src/sdfs.c b/xlators/features/sdfs/src/sdfs.c index 3460b47..aaf13f0 100644 --- a/xlators/features/sdfs/src/sdfs.c +++ b/xlators/features/sdfs/src/sdfs.c @@ -1436,6 +1436,7 @@ void fini(xlator_t *this) { mem_pool_destroy(this->local_pool); + this->local_pool = NULL; return; } diff --git a/xlators/features/selinux/src/selinux.c b/xlators/features/selinux/src/selinux.c index e8e16cd..9b1b4b5 100644 --- a/xlators/features/selinux/src/selinux.c +++ b/xlators/features/selinux/src/selinux.c @@ -252,6 +252,7 @@ out: if (ret) { GF_FREE(priv); mem_pool_destroy(this->local_pool); + this->local_pool = NULL; } return ret; } @@ -280,6 +281,7 @@ fini(xlator_t *this) GF_FREE(priv); mem_pool_destroy(this->local_pool); + this->local_pool = NULL; return; } diff --git a/xlators/features/trash/src/trash.c b/xlators/features/trash/src/trash.c index f96ed73..f44b11c 100644 --- a/xlators/features/trash/src/trash.c +++ b/xlators/features/trash/src/trash.c @@ -2523,6 +2523,7 @@ out: GF_FREE(priv); } mem_pool_destroy(this->local_pool); + this->local_pool = NULL; } return ret; } |