fix race in d_splice_alias()
rehashing the negative placeholder opens a race with d_lookup(); we unhash it almost immediately (by d_move()), but the race window is there. Since d_move() doesn't rely on target being hashed, we don't need that d_rehash() at all. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
@@ -1222,7 +1222,6 @@ struct dentry *d_splice_alias(struct inode *inode, struct dentry *dentry)
|
|||||||
BUG_ON(!(new->d_flags & DCACHE_DISCONNECTED));
|
BUG_ON(!(new->d_flags & DCACHE_DISCONNECTED));
|
||||||
spin_unlock(&dcache_lock);
|
spin_unlock(&dcache_lock);
|
||||||
security_d_instantiate(new, inode);
|
security_d_instantiate(new, inode);
|
||||||
d_rehash(dentry);
|
|
||||||
d_move(new, dentry);
|
d_move(new, dentry);
|
||||||
iput(inode);
|
iput(inode);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
Reference in New Issue
Block a user