From: Danny Al-Gaaf Date: Wed, 6 May 2015 15:09:08 +0000 (+0200) Subject: mds/CInode.cc: fix FORWARD_NULL issue X-Git-Tag: v9.0.2~68^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=05b050f0b60ad313e97c42473d774fd163aab3ec;p=ceph.git mds/CInode.cc: fix FORWARD_NULL issue Don't check for the conditions used inside get_projected_parent_dn(), simply check if the returned value is valid. Fix for: CID 716915: Dereference after null check (FORWARD_NULL) var_deref_model: Passing null pointer this->get_projected_parent_dn() to pre_dirty, which dereferences it. Signed-off-by: Danny Al-Gaaf --- diff --git a/src/mds/CInode.cc b/src/mds/CInode.cc index 0a4cfc627bbd..d534fa488eb2 100644 --- a/src/mds/CInode.cc +++ b/src/mds/CInode.cc @@ -858,9 +858,10 @@ void CInode::name_stray_dentry(string& dname) version_t CInode::pre_dirty() { - version_t pv; - if (parent || !projected_parent.empty()) { - pv = get_projected_parent_dn()->pre_dirty(get_projected_version()); + version_t pv; + CDentry* _cdentry = get_projected_parent_dn(); + if (_cdentry) { + pv = _cdentry->pre_dirty(get_projected_version()); dout(10) << "pre_dirty " << pv << " (current v " << inode.version << ")" << dendl; } else { assert(is_base());