From: Yan, Zheng Date: Wed, 18 Jan 2017 04:54:49 +0000 (+0800) Subject: mds: fix use-after-free in MDCache::disambiguate_imports X-Git-Tag: v12.0.0~43^2~4 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=6c42d7e61212809596e949fe5b7a6900c0496975;p=ceph.git mds: fix use-after-free in MDCache::disambiguate_imports MDCache::try_trim_non_auth_subtree() frees the CDir Signed-off-by: Yan, Zheng --- diff --git a/src/mds/MDCache.cc b/src/mds/MDCache.cc index c0e54385b3d5..3beae2ea7a12 100644 --- a/src/mds/MDCache.cc +++ b/src/mds/MDCache.cc @@ -3513,6 +3513,8 @@ void MDCache::disambiguate_imports() dout(10) << "ambiguous import auth known, must not be me " << *dir << dendl; cancel_ambiguous_import(dir); + mds->mdlog->start_submit_entry(new EImportFinish(dir, false)); + // subtree may have been swallowed by another node claiming dir // as their own. CDir *root = get_subtree_root(dir); @@ -3520,8 +3522,6 @@ void MDCache::disambiguate_imports() dout(10) << " subtree root is " << *root << dendl; assert(root->dir_auth.first != mds->get_nodeid()); // no us! try_trim_non_auth_subtree(root); - - mds->mdlog->start_submit_entry(new EImportFinish(dir, false)); } else { dout(10) << "ambiguous import auth unclaimed, must be me " << *dir << dendl; finish_ambiguous_import(q->first);