mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-16 01:04:08 +08:00
Fix ->d_lock locking order in unlazy_walk()
Make sure that child is still a child of parent before nested locking of child->d_lock in unlazy_walk(); otherwise we are risking a violation of locking order and deadlocks. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
258e43fdb0
commit
94c0d4ecbe
@ -433,6 +433,8 @@ static int unlazy_walk(struct nameidata *nd, struct dentry *dentry)
|
||||
goto err_parent;
|
||||
BUG_ON(nd->inode != parent->d_inode);
|
||||
} else {
|
||||
if (dentry->d_parent != parent)
|
||||
goto err_parent;
|
||||
spin_lock_nested(&dentry->d_lock, DENTRY_D_LOCK_NESTED);
|
||||
if (!__d_rcu_to_refcount(dentry, nd->seq))
|
||||
goto err_child;
|
||||
|
Loading…
Reference in New Issue
Block a user