ceph: protect access to d_parent
d_parent is protected by d_lock: use it when looking up a dentry's parent directory inode. Also take a reference and drop it in the caller to avoid a use-after-free. Reported-by: Al Viro <viro@ZenIV.linux.org.uk> Reviewed-by: Yehuda Sadeh <yehuda@hq.newdream.net> Signed-off-by: Sage Weil <sage@newdream.net>
This commit is contained in:
@@ -71,6 +71,21 @@ out_unlock:
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct inode *ceph_get_dentry_parent_inode(struct dentry *dentry)
|
||||
{
|
||||
struct inode *inode = NULL;
|
||||
|
||||
if (!dentry)
|
||||
return NULL;
|
||||
|
||||
spin_lock(&dentry->d_lock);
|
||||
if (dentry->d_parent) {
|
||||
inode = dentry->d_parent->d_inode;
|
||||
ihold(inode);
|
||||
}
|
||||
spin_unlock(&dentry->d_lock);
|
||||
return inode;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
|
Reference in New Issue
Block a user